HDL下理解一台Hack计算机¶
Hack计算机的组成¶
一台Hack计算机由以下三部分组成
- CPU
- Memory(RAM、Screen、Keyboard)
- ROM32K
上图可能对RAM可能不太准确,准确应该是Memory(RAM、Screen、Keyboard)
ROM32K
代表这种芯片具有 32K(即32 x 1024)个存储单元,每个存储单元可以存储一个 16 位的二进制数。因此,ROM32K
可以存储 32K 个 16 位的二进制数,总共可存储 64KB 的数据。详细可见 ROM32K的单位换算
具体流程的实现¶
三大功能:计算、读取、写入数据
- 当reset=0时候,程序开始执行;
- 当reset=1时候,程序重头执行;
开始执行:
-
当Hack计算机开始运行时,它首先将程序计数器PC设置为0,然后开始执行从ROM中加载到指令存储器中的第一条指令。计算机从指令存储器中读取指令,并根据指令的类型执行不同的操作。
-
例如,如果指令是一条算术指令,那么计算机将使用ALU执行该指令,并将结果存储在CPU自带的寄存器中。如果指令是一条存储指令,那么计算机将从寄存器中读取数据,并将其存储在内存Memory中的指定地址处。如果指令是一条跳转指令,那么计算机将根据指令中给出的条件修改程序计数器,从而跳转到另一个地址。
-
在执行指令的过程中,计算机还会从内存中读取数据,并将其存储在寄存器中,或将数据从寄存器中写入内存中的指定地址处。计算机还可以从输入设备读取数据,并将数据写入输出设备,以便与外部世界进行交互。
-
当计算机完成一条指令的执行时,它会将程序计数器PC递增,以便读取下一条指令。计算机将不断地执行指令,直到程序结束或收到复位信号。
Hack计算机和现代计算机的差别¶
这台Hack计算机,只能运行它自己预先写好的指令(这些都被存放在ROM中),一条一条执行(此时程序计数器PC++,读取下一条指令)。
当这些指令写到了内存的Screen或者Keyboard中时候,可以实现通过键盘对电脑的交互。
现代计算机:程序在底层被执行时需要经历许多步骤,包括加载到内存->分配内存空间->处理器执行程序代码、程序访问系统资源以及操作系统管理程序的执行等。
- 现代计算机的指令通常是存储在内存中的,而不是ROM中。在早期的计算机中,程序代码常常存储在ROM中,但现代计算机通常使用更快、更灵活、更易扩展的内存来存储指令和数据。
- 现代计算机仍然使用ROM。ROM通常被用来存储计算机系统的启动程序(bootstrap loader),这是计算机启动时运行的程序,用于初始化计算机硬件并加载操作系统。
- ROM还可以用于存储固化的程序或数据,例如游戏机上的游戏程序、BIOS程序等。ROM的数据是固化在芯片中的,不能被修改,这种特性使得ROM在需要存储固化的程序或数据时非常有用。
对ROM32K的一些补充¶
为了方便理解,可以简单的认为ROM32K的每一个存储单元内,是一条汇编语言。
根据PC计数器的增加,一条一条执行下去。
汇编器将汇编语言翻译成机器码,让人们免于直接通过机器码控制计算机
文件格式:.asm -> .hack 的转换
其实每个存储单元中,放的是机器语言,也就是16位二进制数(16个1/0)