(밑바닥부터 만드는 컴퓨팅 시스템 2판, 인사이트(insight), 2023)을 학습하고 개인 학습용으로 정리한 내용입니다.
1. 구조
HDL 프로그램은 인터페이스와 구현으로 구성된다.
모든 명령문은 세미콜론(;)으로 끝나며, 중괄호({}) 안에 기술된다.
/** API 문서: 칩이 하는 일 **/ | 인터페이스 인터페이스는 칩의 API 문서, 칩 이름, 입력 핀, 출력 핀으로 구성된다. |
Chip ChipName { | |
In inputPin1, inputPin2, ...; | |
out outputPin1, outputPin2 ...; | |
PARTS: | 구현 사용자가 채워야할 부분이다. |
// 여기가 구현 부분이다. | |
} |
2. 주석
한줄 주석 : //
여러줄 주석 : /* */
3. 핀 연결
HDL에서 '=' 기호는 수학적으로 같다라는 뜻이 아니다.
두개의 핀(A = B, A와 B 연결)을 연결한다는 뜻이다.
'=' 기호의 왼쪽 변수는 호출하고 있는 게이트의 입력or출력 핀이 되며, 오른쪽 변수는 '입력 핀으로 값을 넣는다' 혹은 '출력 핀의 값을 저장(?)한다'는 뜻이 된다.
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Not.hdl
/**
* Not gate: out = not in
*/
CHIP Not {
IN in; //Not gate 입력
OUT out; //Not gate 출력
PARTS:
/* Nand gate 'input pin A'에 in 연결
* Nand gate 'input pin B'에 in 연결
* Nand gate 'output pin out'에 Not gate 출력핀 out 연결 */
Nand(a=in,b=in,out=out);
}
4. 멀티 비트 입력
같은 비트 변수는 바로 대입 가능하다 (e.g. a[16], b[16], a=b)
특정 비트에 특정한 값을 넣을 수도 있다. (e.g. a[0] = v)
부분 비트에 특정한 값을 넣을 수도 있다. (e.g. a[0..7] = v)
5. true/false 상수
true(1)과 false(0)을 사용할 수 있다. (e.g. a[0..7] = true)
6. 다중 출력
API 명세에는 out 값이 하나이더라도, out= 값을 여러개 만들 수도 있다.
CHIP Foo {
IN in[16];
OUT out[16];
PARTS:
Not16 (in=in, out=out, out[0..7]=low8, out[8..15]=high8); // 온전한 out값 하나, 8비트씩 분할한 out 값 둘
'밑바닥부터 만드는 컴퓨팅 시스템 (Nand to Tetris)' 카테고리의 다른 글
[Chapter 2] 불 연산 (Boolean Arithmetic) (0) | 2024.02.09 |
---|---|
[Chapter 1] projects 01 : 논리 게이트 구현 (0) | 2024.02.09 |
[Chapter 1] HDL (Hardware Description Language) (0) | 2024.02.04 |
[Chapter 1] 논리 게이트 (0) | 2024.02.04 |
[Chapter 1] Nand의 표현력 (0) | 2024.02.04 |