Logisim设计多周期CPU
项目介绍
该项目是我在大二的计算机架构课程中完成的。作为计算机体系结构领域的初学者,我们用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)寄存器自动递增,将指令一个个加载到微程序控制器的地址转移逻辑中,分析下一个微程序地址。然后由微程序控制三态门的开关,驱动程序执行。
这是微程序控制器的地址转移逻辑。

示例
1. 向RAM加载指令
打开这两个按钮。第一个按钮用于允许下一个数据写入RAM,第二个按钮用于打开微程序控制器。如果你没有打开第二个按钮,你将需要自己控制数据总线上的每个开关。

单击时钟按钮4次,启动系统。

调整SW总线输入,使其变为1001 xx 00(1001表示加载指令,xx表示该位中的数字不会影响结果,最后2位00表示寄存器00),点击时钟按钮4次。 因为逻辑不是一个真正的电路,会有一些传输延迟,所以必须做一些技巧来解决这个问题。因此,需要点击4次才能将第一个指令代码加载到RAM中。
然后,将SW总线调整为0000 1110(一个数字),并点击时钟按钮两次。
然后调整SW总线输入,使其变为如下状态,每次点击时钟按钮2次:
- 1001 xx 11(将下一个数字加载到寄存器11)
- 0111 00 00(数字0111 0000)
- 1000 11 00(将寄存器11和计算器00的数字相加,并将结果写回计算器00)
- 1011 xx 00(将寄存器00的内容展示到数据总线中)
- 1111 xx xx(停机)
因为总共有7条指令,因此,你会在RAM的地址选择寄存器中看到数字7

2. 编码执行
关闭用来允许下一个数据写入RAM的按钮,并启动时钟,你将得到如下的结果

0111 0000 与 0000 1110 成功相加,结果0111 1110会被现实到数据总线中
这是最后的执行过程

查看该项目的详情,请点击这里.