跳转至

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中时候,可以实现通过键盘对电脑的交互。


现代计算机:程序在底层被执行时需要经历许多步骤,包括加载到内存->分配内存空间->处理器执行程序代码、程序访问系统资源以及操作系统管理程序的执行等。

  1. 现代计算机的指令通常是存储在内存中的,而不是ROM中。在早期的计算机中,程序代码常常存储在ROM中,但现代计算机通常使用更快、更灵活、更易扩展的内存来存储指令和数据。
  2. 现代计算机仍然使用ROM。ROM通常被用来存储计算机系统的启动程序(bootstrap loader),这是计算机启动时运行的程序,用于初始化计算机硬件并加载操作系统。
  3. ROM还可以用于存储固化的程序或数据,例如游戏机上的游戏程序、BIOS程序等。ROM的数据是固化在芯片中的,不能被修改,这种特性使得ROM在需要存储固化的程序或数据时非常有用。

对ROM32K的一些补充

为了方便理解,可以简单的认为ROM32K的每一个存储单元内,是一条汇编语言。

根据PC计数器的增加,一条一条执行下去。

汇编器将汇编语言翻译成机器码,让人们免于直接通过机器码控制计算机

文件格式:.asm -> .hack 的转换


其实每个存储单元中,放的是机器语言,也就是16位二进制数(16个1/0)