U E D R , A S I H C RSS

스터디/Nand 2 Tetris (rev. 1.21)

스터디/Nand 2 Tetris



1. Nand2Tetris

  • 스터디 소개 :
    • 컴퓨터의 최하위 레벨 계층인 논리회로(하드웨어)단부터 OS와 high level language까지 두루두루 섭렵하고 실습하여 최종에는 테트리스를 만드는것이 목표인 스터디입니다.

  • 스터디에 사용하는 사이트 -> http://www.nand2tetris.org/

1.1. 9/26(목요일)


  • 참여자 : 김윤환, 안혁준, 권영기.

  • 스터티에 대한 방향 :
    • 누가 : 3명 + a(?)가
      • 인원수 문제 : max 5명까지 받는다.
  • 언제 : 시작은? 이번주부터 // 매주 일요일 1시
  • 어디서 : zp실에서
  • 무엇을 : nand2Teris를
  • 어떻게 : 집에서 ppt를 읽어온뒤 만나서 실습하는 방향으로.
  • 왜 :
    • 혁준 ->재미있을것같아서.
    • 윤환 ->컴퓨터 자체를 아는 좋은 기회라고 생각해서 + 흥미가 있는 분야? 여서.
    • 영기 ->전체를 꿰뚫기위해.

  • 다음시간까지 할일 : chapter 0,1 읽어오기.

1.2. 9/29(일요일)


1.2.1. 공부한 내용


  • Chapter1
  • 기본적인 논리 게이트를 공부함.
  • Nand gate를 primitive gate로 놓고, 나머지 논리 게이트 Not, And, Or, Xor, Mux, Demux 등을 Nand만으로 구현.
  • Mux나 Demux같은 경우, 입력이나 출력이 너무 많을 경우, 작은 규모의 Mux를 여러 개 이용해서 큰 규모의 Mux를 구현해도 된다. 예를 들면, 4way Mux는 2Way Mux 3개를 이용해서 구현할 수 있다.
  • HDL Code

  • Not Gate


CHIP Not2 {

    IN  a;
    OUT out;

	PARTS:
	Nand(a = a, b = a, out = out);
}


  • And Gate


CHIP And {

    IN  a, b;
    OUT out;
	PARTS:

	Nand(a = a, b = b, out = x);
	Nand(a = x, b = x, out = out);
}


  • Or Gate


CHIP Or {

    IN  a, b;
    OUT out;

	PARTS:
	Nand(a = a, b = a, out = x1);
	Nand(a = b, b = b, out = x2);
	Nand(a = x1, b = x2, out = out);
}


  • Xor Gate


CHIP Xor {

    IN  a, b;
    OUT out;

	PARTS:
	Nand(a = a, b = a, out = nota);
	Nand(a = b, b = b, out = notb);
	Nand(a = nota, b = b, out = x1);
	Nand(a = a, b = notb, out = x2);
	Nand(a = x1, b = x2, out = out);
}


  • Mux


CHIP Mux {

    IN  a, b, s;
    OUT out;

	PARTS:
	Nand(a = s, b = s, out = nots);
	Nand(a = a, b = s, out = x1);
	Nand(a = b, b = nots, out = x2);
	Nand(a = x1, b = x2, out = out);
}


  • Mux 4way


CHIP Mux4way {

    IN  a[4], s[2];
    OUT out;

	PARTS:
	Nand(a = s[0], b = s[0], out = nots0);
	Nand(a = s[1], b = s[1], out = nots1);
	
	Nand(a = a[0], b = s[1], out = x0);
	Nand(a = a[1], b = nots1, out = x1);
	
	Nand(a = a[2], b = s[1], out = x2);
	Nand(a = a[3], b = nots1, out = x3);
	
	Nand(a = x0, b = x1, out = xx0);
	Nand(a = x2, b = x3, out = xx1);
	
	Nand(a = xx0, b = s[0], out = xxx0);
	Nand(a = xx1, b = nots0, out = xxx1);
	
	Nand(a = xxx0, b = xxx1, out = out);
}


  • Demux
    Demux는 다 구현하고서 Mux 4way를 Demux 파일에 써버리는 바람에 날려버림 ㅡㅡ;

1.2.2. 다음 시간까지 해야할 일


  • Chapter2 읽어오기.

1.2.3. 후기


  • 쇠뿔도 단김에 빼라는 말이 있듯이, 순식간에 스터디 진행합니다. 학기 끝날 때까지 매주 진행해보려고 하는데, 끝까지 다 할 수 있었으면 좋겠습니다. 뭐 윤환이나 혁준이형 있으니까 잘 진행되겠죠. 이번 시간에 했던 것은 기초 중에 기초인데, 사실 작년 논리회로 시간에 Nand 게이트로 다른 gate 구현하기 따위는 해본적이 없어서 좀 당황도 했습니다. 그리고 그림 그리는 것도 참 간만이고, 다음 시간까지 논리회로 ppt 좀 보고서 와야겠네요. 간단한 4way MUX도 저리 긴데, 사칙연산은 어떻게 해야할지.. 머리가 아픕니다. - 권영기
  • 간만에 논리회로를 다루면서 내가 까먹고 있던 부분이 많다고 느낌니다. 물론 추상화라는 좋은 녀석이 있어서 우리가 모든것을 기억할 필요는 없지만, 그래도 원리를 안다고 해서 안좋을 것 없을듯하네요. nand로 시작해서 nand로 끝나는 시간이었습니다. - 안혁준
  • 지금은 처음부분이라 무난하게 진행했지만... 가면갈수록 어떤식으로 진행될지 난이도에 따라서 왠지 바뀔수도 있으려나...하는 생각이 들었습니다. 그나저나 논리회로 뒷부분은 거의 기억이 없는데... 전공책한번 훝어보고 와야할것같습니다. - 김윤환

1.3. 10/6(일요일)


1.3.1. 공부 내용


  • half-adder, full-adder, 16bit-adder, incremental adder, ALU에 대해서 공부하고 구현하였습니다.

  • Half-Adder


CHIP HalfAdder {
    IN a, b;    // 1-bit inputs
    OUT sum,    // Right bit of a + b 
        carry;  // Left bit of a + b

    PARTS:
	And(a = a, b = b, out = carry);
	Xor(a = a, b = b, out = sum);	
    
}

  • Full-Adder


CHIP FullAdder{
    IN a, b, c;  // 1-bit inputs
    OUT sum,     // Right bit of a + b + c
        carry;   // Left bit of a + b + c
    PARTS:
    // Put you code here:
	Xor(a=a, b=b, out=s1);
	And(a=a, b=b, out=c1);
	Xor(a=s1, b=c, out=sum);
	And(a=s1, b=c, out=c2);
	Or(a=c1, b=c2, out=carry);
}


  • 16bit Adder


CHIP Add16 {
    IN a[16], b[16];
    OUT out[16];
	
	PARTS:
	FullAdder(a = a[0], b = b[0], c = false, sum = out[0], carry = c1);
	FullAdder(a = a[1], b = b[1], c = c1, sum = out[1], carry = c2);
	FullAdder(a = a[2], b = b[2], c = c2, sum = out[2], carry = c3);
	FullAdder(a = a[3], b = b[3], c = c3, sum = out[3], carry = c4);
	FullAdder(a = a[4], b = b[4], c = c4, sum = out[4], carry = c5);
	FullAdder(a = a[5], b = b[5], c = c5, sum = out[5], carry = c6);
	FullAdder(a = a[6], b = b[6], c = c6, sum = out[6], carry = c7);
	FullAdder(a = a[7], b = b[7], c = c7, sum = out[7], carry = c8);
	FullAdder(a = a[8], b = b[8], c = c8, sum = out[8], carry = c9);
	FullAdder(a = a[9], b = b[9], c = c9, sum = out[9], carry = c10);
	FullAdder(a = a[10], b = b[10], c = c10, sum = out[10], carry = c11);
	FullAdder(a = a[11], b = b[11], c = c11, sum = out[11], carry = c12);
	FullAdder(a = a[12], b = b[12], c = c12, sum = out[12], carry = c13);
	FullAdder(a = a[13], b = b[13], c = c13, sum = out[13], carry = c14);
	FullAdder(a = a[14], b = b[14], c = c14, sum = out[14], carry = c15);
	FullAdder(a = a[15], b = b[15], c = c15, sum = out[15], carry = c16);


}


  • Incremental




CHIP Inc16 {
    IN a[16];
    OUT out[16];

    PARTS:
	
	FullAdder(a = a[0], b = false, c = true, sum = out[0], carry = c1);
	FullAdder(a = a[1], b = false, c = c1, sum = out[1], carry = c2);
	FullAdder(a = a[2], b = false, c = c2, sum = out[2], carry = c3);
	FullAdder(a = a[3], b = false, c = c3, sum = out[3], carry = c4);
	FullAdder(a = a[4], b = false, c = c4, sum = out[4], carry = c5);
	FullAdder(a = a[5], b = false, c = c5, sum = out[5], carry = c6);
	FullAdder(a = a[6], b = false, c = c6, sum = out[6], carry = c7);
	FullAdder(a = a[7], b = false, c = c7, sum = out[7], carry = c8);
	FullAdder(a = a[8], b = false, c = c8, sum = out[8], carry = c9);
	FullAdder(a = a[9], b = false, c = c9, sum = out[9], carry = c10);
	FullAdder(a = a[10], b = false, c = c10, sum = out[10], carry = c11);
	FullAdder(a = a[11], b = false, c = c11, sum = out[11], carry = c12);
	FullAdder(a = a[12], b = false, c = c12, sum = out[12], carry = c13);
	FullAdder(a = a[13], b = false, c = c13, sum = out[13], carry = c14);
	FullAdder(a = a[14], b = false, c = c14, sum = out[14], carry = c15);
	FullAdder(a = a[15], b = false, c = c15, sum = out[15], carry = c16);
}


  • ALU




1.3.2. 다음 시간까지 공부해올 것

  • chapter 3 공부해오기.

1.3.3. 후기

  • 이제 곧 CPU가 만들어지는건가여.. ㅋㅋ -김태진
  • ALU는 최곱니다. 이 말밖에 (이번 스터디를) 대체할 말이 없군요. - 김윤환


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:16
Processing time 0.0267 sec