从零构造一台计算机——硬件模拟器
这里介绍一下Nand2Tetris课程里面用到的硬件模拟器的用法,可以在这里找到下载方式。
HDL语法
假如我们要构建一个非门,这时候我们需要创建一个文件,文件名为: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/Not.hdl
/**
* Not gate:
* out = not in
*/
CHIP Not {
IN in;
OUT out;
PARTS:
Nand(a=in, b=in, out=out);
}
以为//
开头,或者在/** **/
之间的是注释,这个和主流的编程语言一致。上面/** **/
之间的是Not
的描述。
CHIP
关键字定义了组件的名称,IN
定义了组件的输入端,OUT
定义了组价的输出,PARTS
下面是具体的实现。
我们来具体看实现:
Nand(a=in, b=in, out=out);
的意思是Nand
(与非门,默认提供)的输入端a
, b
作为Not
的输入in
,Nand
的输出out
作为Not
的输出out
。
当我们构建完Not
的时候,我们就可以把他作为组件在后续的代码中使用了。
关于课程中project1的其他组件以及对应的功能描述,可以去参考网站的资料,我已经写完并且上传到github,可以供大家参考。
硬件模拟器
这里的硬件模拟器是java写的,所以我们首先需要安装并配置jre,这里不再赘述。配置完java之后,运行平台的脚本文件即可。例如mac运行HardwareSimulator.sh
,windows运行HardwareSimulator.bat
即可。
打开后界面如下所示:
这时候我们点击File -> Load Chip
或者下面的第一个图标来加载一个组件。这时候我们可以改变Input pins
中输入的值,然后点击Run -> Single Step
或者下面对应的图标去单步执行,执行完之后我们可以在Output pins
中看到输出。
为了验证我们写的程序是否正确,我们可以使用压缩包中提供的测试文件来测试我们的程序:测试文件以.tst
结尾,例如Not.hdl
对应的测试文件就是Not.tst
。然后我们可以点击File -> LoadScript
或者对应的图标来加载测试测试脚本文件。
加载完成之后,可以在右侧看到脚本文件的具体内容,同样的,我们也可以点击Run -> Single Step
来单步执行测试脚本中的测试代码,或者Run -> Run
来执行全部的测试代码。
如果执行成功,我们可以在最下方看到运行成功的提示,否则会给出对应的报错。如下所示:
总结
到这里为止,我们了解了一些基础的逻辑电路,并且用HDL
描述了出来。使用硬件模拟器的好处是方便我们调试,验证逻辑是否正确,也不用手动去焊接电路。
课程中用到的硬件模拟器是以学习为目的的,是为了帮助我们了解计算机底层的电路结构。我这里也没有介绍的面面俱到,仅仅是介绍了最基本的用法。关于更详细的使用方式我们可以去查阅网站中的资料。