728x90

* 집에서 작성하다가 임시 저장을 하지 않고 꺼버려 첫 부분을 날려버렸습니다.. 날라간 부분은 대충 pass

 

2진수

 

32비트 컴퓨터

- 한번에 32비트씩 처리

 

2진수 덧셈

 

부호 있는 2진수

- MSB가 1인 경우 음수

반 가산기(Half adder)

- 입력 : a, b

- 출력 : s(합), c(캐리)

- 이전 연산으로부터 자리올림 입력받지 못함

 

 

전 가산기 (Full adder)

- 반가산기 2개와 or게이트로 구현

- 이전 연산으로부터 자리올림 c를 전달음

- 입력 : a, b, c(캐리)

- 출력 : s(합), c(캐리)

 

 

16비트 가산기

- 전가산기 16개를 이음 -> 16비트 수를 덧셈

inc16

- 16비트 이진수에 +1 연산

 

ALU

- 산술 논리 연산 장치

 

Hack ALU

- 입력 : 16비트 입력 2개, 제어 비트(6비트)

- 출력 : 16비트 출력

* 제어비트가 6비트 인 경우 최대 64가지의 연산 가능. Hack ALU는 16가지 연산 가능

https://georgefabish.com/the-alu/

 

- zx가 0이면 x/ 1이면 0 -> nx가 0이면 그대로/ 1이면 부정(y 동일)

- x와 y or/and 연산 후 f에 따라 or/and 선택

- f 결과와 f 결과 부정을 입력으로 받는 먹스 f에 따라 선택 -> out

- 16비트 전체가 0이면(or16way) zr = 0 아니면 1

- out의 최상위 비트가 1이면(음수) ng = 1/ 아니면 0

 * IsNeg 회로 사용 : out[15] & true = neg -> 먹스로 neg가 1이면 true, 0이면 false

 

- 후기

고향에 다녀오면서 잠깐 정리도 못하고 많이 해맸습니다.

확실히 챕터 1과는 다르게 어려웠던 점은

챕터 1의 회로는 그래도 진리표 대로 정리해가면서 구현해 갈순 있었는데

ALU를 구현할때

if zx 인 1 경우를 어떻게하라.. 처럼

조건문을 어떻게 회로상으로 구현해야할지 정말 막막했지만

다행이 다른 분들이 올리신 글보고 많은 참고가 되었습니다.

 

- hdl을 구현할때 게이트만 입력으로 가능한줄 알았는데 true, false도 가능한 점

- 16비트 x와 false 먹스16 연산시 false가 1비트가 아니라 16비트 false로 되서 출력이 되는 점

- 영 여부 확인할때 N way Or 게이트를 사용하면 된다.

- 음수 여부 확인 시 최상위 비트 체크하면 된다

 

이 외에도

Hardware simulator를 사용하면서 자잘한 에러들이 많았습니다.

 

아직 챕터 2장까지 밖에 못했는데 마무리 할수있을지 걱정됩니다 ㅠㅜ

 

참고 사이트

https://github.com/havivha/Nand2Tetris

https://github.com/sake92/nand2tetris

https://georgefabish.com/the-alu/

 

300x250

'컴퓨터과학 > 컴퓨터, OS' 카테고리의 다른 글

어셈블리어 ~ 심벌 테이블  (0) 2020.05.01
주소 지정방식  (0) 2020.04.29
NAND2Tetris 1 - 불 논리  (0) 2020.04.25
NAND2Tetris 0 - 소개  (0) 2020.04.25
기계어~OPCODE  (0) 2020.04.25

+ Recent posts