目录

Logisim设计多周期CPU

   2019年05月15日

项目介绍

该项目是我在大二的计算机架构课程中完成的。作为计算机体系结构领域的初学者,我们用Logisim软件模拟了逻辑电路,而在我的空闲时间,我用Logisim设计了一个多周期的CPU。该CPU使用微程序控制,而不是硬布线控制。

这是我的CPU的数据总线

数据总线

在使用时,你可以通过使用SW总线将机器指令保存在RAM中并执行,基本指令共有5种类型:

指令明机器码解释
Load1001 xx __将下一个8位数字从RAM加载到寄存器中,最后2位表示寄存器名
Add1000 __ __两个寄存器的数字相加,写回最后两位所指定的寄存器
Minus1010 __ __两个寄存器的数字相减,写回最后两位所指定的寄存器
Show1011 xx __显示寄存器存储的数字到数据总线
Halt1111 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会被现实到数据总线中

这是最后的执行过程

执行过程

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