본문 바로가기

[Chapter 1] HDL (Hardware Description Language)

(밑바닥부터 만드는 컴퓨팅 시스템 2판,  인사이트(insight), 2023)을 학습하고 개인 학습용으로 정리한 내용입니다.

 

 

 

 

 

이제 게이트가 실제로 어떻게 만들어지는지에 대해 논의할 시점이다.

실제로 만든다면, 게이트와 구리선으로 각각의 칩들을 연결하고 납땜해야 한다. 하지만 이렇게 칩을 직접 생산하는 방식은 현실적인 어려움이 많다. (설계 변경, 디버깅 등)

오늘날 하드웨어 설계자들은 더 이상 맨손으로 뭔가를 만들지 않는다. 대신 하드웨어 기술 언어(Hardware Description Language)라 불리는 도구들을 사용해서 칩을 설계하고 테스트 한다. 

 

nand2tetris에서 사용하는 HDL은 공식 사이트(Home | nand2tetris)에서 받을 수 있다.

공식 사이트에는 HDL 뿐만 아니라 이 책에서 사용하는 다양한 프로그램을 다 받을 수 있다.

 

nand2tetris.zip 압축 해제하면, 하위 폴더 두 개(projects, tools)를 볼 수 있다.

projects : 우리가 실습해야할 과제들

tools : 실습에 사용할 tools

 

HDL은 tools 아래, HardwareSimulator.bat(windows) 혹은 HardwareSimulator.sh(linux) 를 실행하면 된다.

Hardware Simulator 실행 화면

 

projects/01에 가면 실습에 필요한 파일들이 있다.

*.hdl : Hardware Simulator로 실행할 HDL 프로그램

*.tst : HDL 프로그램 테스트 스크립트

*.out : HDL 프로그램 실행 결과

*.cmp : *.out 파일과 비교할 해답(?) 파일

 

실습은 다음과 같은 순으로 진행된다.

  1. 사용자가 project/01에 있는 *.hdl 파일을 완성한다.
  2. *.tst 파일을 이용해서, *.hdl 파일을 테스트 한다.
  3. 생성된 결과(*.out) 파일을 *.cmp 파일과 대조하여 정답인지 확인한다. (Hardware Simulator가 자동으로 수행)

※ 알아둬야할 사항

1. Nand 게이트는 기본으로 제공된다고 가정한다. 즉, 별도 구현없이 hdl에서 바로 사용할 수 있다. 

예를들면 Not 게이트(Not.hdl)를 구현하기 위해 Nand를 바로 호출 할 수 있다.

// 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;
    OUT out;

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

 

2. projects/01/*.hdl 파일을 열었을 때, *.hdl 파일에서 사용하고 있는 게이트를 projects/01 에서 찾는다.

예를들어 And 게이트 구현을 위해, 그 안에서 Not 게이트를 사용하면, projects/01/Not.hdl을 찾아서 실행한다.

// 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/And.hdl
/**
  * And gate:
  * out = (((a == 1) && (b == 1))), 1, 0)
  */
CHIP And {
    IN a, b;
    OUT out;

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

 

3. 내장형 칩(Builtin Chip)을 제공한다. 즉, 사용자가 *.hdl 파일을 구현하지 못했다면, 이미 완성되어 있는 내장형 칩을 사용할 수 있다. 사용방법은 projects/01 에서 사용자 프로그램(*.hdl) 파일명을 변경하면 된다.

예를들어 내장형 Not 게이트를 호출하고 싶다면, projects/01/Not.hdl 파일명을 다른 이름으로 변경하면 된다.