* 집에서 작성하다가 임시 저장을 하지 않고 꺼버려 첫 부분을 날려버렸습니다.. 날라간 부분은 대충 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가지 연산 가능
- 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/
'컴퓨터과학 > 컴퓨터, 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 |