该项目是我在大二的计算机架构课程中完成的。作为计算机体系结构领域的初学者,我们用Logisim软件模拟了逻辑电路,而在我的空闲时间,我用Logisim设计了一个多周期的CPU。该CPU使用微程序控制,而不是硬布线控制。
这是我的CPU的数据总线
在使用时,你可以通过使用SW总线将机器指令保存在RAM中并执行,基本指令共有5种类型:
指令明 | 机器码 | 解释 |
---|---|---|
Load | 1001 xx __ | 将下一个8位数字从RAM加载到寄存器中,最后2位表示寄存器名 |
Add | 1000 __ __ | 两个寄存器的数字相加,写回最后两位所指定的寄存器 |
Minus | 1010 __ __ | 两个寄存器的数字相减,写回最后两位所指定的寄存器 |
Show | 1011 xx __ | 显示寄存器存储的数字到数据总线 |
Halt | 1111 xx xx | 停止微程序控制器 |
将一些指令写入RAM后,点击“用于自动控制写入RAM”按钮,然后操作时钟,查看数据总线的变化。程序计数器(PC)寄存器自动递增,将指令一个个加载到微程序控制器的地址转移逻辑中,分析下一个微程序地址。然后由微程序控制三态门的开关,驱动程序执行。
这是微程序控制器的地址转移逻辑。
打开这两个按钮。第一个按钮用于允许下一个数据写入RAM,第二个按钮用于打开微程序控制器。如果你没有打开第二个按钮,你将需要自己控制数据总线上的每个开关。
单击时钟按钮4次,启动系统。
调整SW总线输入,使其变为1001 xx 00(1001表示加载指令,xx表示该位中的数字不会影响结果,最后2位00表示寄存器00),点击时钟按钮4次。 因为逻辑不是一个真正的电路,会有一些传输延迟,所以必须做一些技巧来解决这个问题。因此,需要点击4次才能将第一个指令代码加载到RAM中。
然后,将SW总线调整为0000 1110(一个数字),并点击时钟按钮两次。
然后调整SW总线输入,使其变为如下状态,每次点击时钟按钮2次:
因为总共有7条指令,因此,你会在RAM的地址选择寄存器中看到数字7
关闭用来允许下一个数据写入RAM的按钮,并启动时钟,你将得到如下的结果
0111 0000 与 0000 1110 成功相加,结果0111 1110会被现实到数据总线中
这是最后的执行过程
查看该项目的详情,请点击这里.