如何使用logisim(7)

2019-02-20 20:28

4,写程序测试

在你完成了CPU设计后,需要编写程序在CPU上运行以测试CPU能否工作。 试着将以下汇编指令翻译成机器码: add $2,$1,$0 add $1,$1,$0 add $1,$2,$0

然后将机器码存入指令内存中。

如果你成功地完成了此最简单的CPU,则时钟每跳一次,将执行一条指令。为了你看到一些有意义的结果,你可能需要手动设置一下各个寄存器的初值,这在仿真中可以较容易的实现,如将寄存器1的值设为1,寄存器2的值设为2,寄存器3的值设为3。但是硬件实现时候就要想一些别的方法了,前面推荐大家优先实现lui和ori指令就是这个道理。 首先让你的CPU能运行lui和ori指令是非常重要的,因为在程序中通过他们使CPU中的寄存器载入数据,让其他测试的数据初始化成为可能。在前面最后组合各功能模块,实现每条命令的控制逻辑时强烈推荐优先完成这两条指令,待这两条指令工作正常后,就可以用来测试其他指令了。

为了更好的观察输出结果一个数码管显示是必要的,应用这种选择器似的解码电路就能实现,选择端输入的要显示的16进制数据,各数据通路上的常量为0——f的数码管字段编码,这是一个典型的译码电路实现,当然使用ROM查表的方法也可以实现,不过要多一个刷新时钟,前面我们实现过数码管的译码电路了,使用它就可以了。

写几个程序测试你的CPU,把一条条指令都调试好,至此,你的Proj3中的CPU设计作业就完成了。

前面我们以尽量快的速度完成了Proj3的任务,但是还有一些问题遗留下来,这里我们就来讨论下这些问题。

1, Logisim与QuartusII的比较

前面已经提到,使用QuartusII进行数字电路设计,更多情况下使用的是硬件描述语言,硬件描述语言功能更加强大,标准更加规范,应用十分广泛。这里选择使用原理图的设计描述方式是为了让我们容易的从Logisim过渡过来。

从前面的内容来看,我们实验课上使用到的Logisim软件实现Proj3中CPU的设计所涉及到的操作,在QuartusII中对应的实现方式都一一对应的演示了,当然QuartusII软件的库中包含的电路模块可能会与Logisim中的有所差别。

Logisim是一款可视化的仿真软件,我们也是在学习罗老板的计算机组成原理课上第一次了解到的,基本算是实验用的,实验演示很方便。QuartusII是Altera公司用于自家器件设备的数字电路设计的软件,我们做实验用的DE2板子上的FPGA芯片就是Altera公司的,QuartusII软件可以完成硬件电路设计的整个流程。

Logisim的仿真表现效果比较直观,直接通过点击就能完成输入输出设定,模块间连线上的电平在电路实时运行中通过连线颜色表示出来。寄存器,RAM中的数据都能进行设定,包括在电路实时运行时。

QuartusII中仿真的方式也很多,比如自带波形仿真功能,另外可以使用第三方的仿真软件如ModelSim等。但是如果想直观的观察电路实时运行状态则不太容易,无论是设定电路初始状态,修改寄存器与RAM中的存储内容等,都不是很容易,所以要先实现一些简单模块,并设法将电路运行状态通过外部设备表现出来,设定一些调试开关,帮助设定电路状态。 2, 为什么是时序逻辑的ROM

这个问题可以这样解释,组合电路的ROM相当于使用电路搭建的,向ROM中写入一个程序,就相当于做一个电路。我们使用计算机,写一个程序进CPU,应该是能够在系统的把程序下载到ROM中,而不是把这个CPU拆了,重新设计一个,这样来说,用过单片机的同学可能更容易理解。

时序电路的ROM更接近于我们实际使用的ROM器件。 3, 为什么我们的ROM工作在另一个时钟下

这是Logisim中的RAM与ROM模块,他们的区别就在于下面的那个小三角,也就是时钟信号输入端,也就是说Logisim里面的ROM是不带时钟信号的。在QuartusII里面我们给出了两种实现方式,上面我们也指出来时序逻辑的ROM是更接近于实际设计中的ROM,所以我们使用时序逻辑的ROM实现方式。

这里重点是这一张课件,在伯克利2010CS61C课程的

2010SpCS61C-L26-ddg-1cyclecpuII-6up里面,从中我们可以清楚的看到一个完整CPU工作周期里,从寄存器输出到计算的结果写入寄存器,各部分信号的更新过程。

一个时钟周期内电路分别进行下面几个工作步骤: 时钟到达Instruction Memory的时候。 读出当前周期执行指令

指令通过译码模块即一个Mux电路选出控制逻辑部分的控制信号 从指令中取立即数部分,或者rs,rt,rw等

控制信号与立即数数据到达各模块部分 根据rs,rt,寄存器文件输出相应数据 ALU计算得出相应结果

时钟到达Data Memory的时候。

如果是sw指令,将数据写入Data Memory。 时钟到达寄存器文件的时候。

如果是lw指令或其他写寄存器的指令,将数据写入rw寄存器。

每一步至最后电路保持到稳定状态,需经历了一段时间,经过这个延时后,时钟信号到达下一步相应模块的位置,这样整个电路才能有足够时间进入稳定状态,否则在进入稳定状态前写入寄存器,写入内存的数据将是错误的,甚至是结果不可预测的紊乱数据。

对于上面几个步骤,即准备电路组合逻辑——>写入内存——>写入寄存器。由于唯一内存写入指令sw的同时并不做写寄存器的操作,那么Data Memory和寄存器文件的时钟一致。 这里整个过程没有时钟到达ROM更新ROM输出信号的步骤,对于没有时钟信号ROM,输出信号随地址改变而改变这没有问题,与前面的实现结果相一致,因为即使ROM输出信号改变由于组合逻辑的延迟,但这个传输延迟在一个CPU时钟周期内信号到达稳定状态的过程中的,不会影响最终的结果。

那么增加了一个时钟其实是相当于在ROM前级增加一个地址锁存,那么就把整个电路有由一个时序电路分出了又一个时钟状态,即PC寄存器前一个时钟状态,PC寄存器至ROM的地址锁存寄存器前一个时钟状态,ROM地址锁存寄存器后面一个时钟状态,这样PC指针要在两个时钟周期后才能更新到ROM输出端。

使ROM工作在另一个时钟下(使远高于CPU工作时钟),就相当于高速刷新ROM的输出,模拟出了组合逻辑实现中ROM输出随输入改变即改变,而无需等待工作时钟的效果。 4, 再起一段

在学习罗老板的计算机组成原理的课程时,笔者了解了mips体系结构的CPU,在做课程实验Proj3中用Logisim体验了一把设计CPU的瘾。罗老板的课程是翻译的伯克利大学的CS61C,国外大学在讲组成原理这门课时的确与国内有很大不同的,感觉最明显的就是让

你在实践中学习理论,让你上组成原理这种枯燥的理论课程时也不再瞌睡,^_^。于是我不禁产生了用FPGA实现下课程实验Proj3的想法,并决定将自己的实验记录下来。 停更两天,查下资料,接下来该思考完善这个CPU了,在Proj3的基础上将有更大的提高……


如何使用logisim(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:燃气工程施工组织设计最终版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: