본문 바로가기

[Chapter 1] HDL 문법

(밑바닥부터 만드는 컴퓨팅 시스템 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 값 둘