一步一步学做一个CPU——11,用FPGA完成Proj3之遗留问题的说明

前面我们以尽量快的速度完成了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实现方式。

clip_image002

clip_image004

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

clip_image006

一个时钟周期内电路分别进行下面几个工作步骤:

时钟到达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的基础上将有更大的提高……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值