一、 课程设计的任务。
利用已有计算机组成原理知识,vhdl语言知识、以及对计算机系统结构的初步学习,设计一个包括指令系统、寻址方式、数据表示、寄存器组、存储系统、流水线结构等的cpu。
二、 设计思想。
利用电原理图和vhdl语言相结合的设计思想。层次结构的设计方法。
三、 具体步骤。
四、 示例。
指令流水的基本思路是把每条指令划分为几个执行步骤,这些步骤在执行过程中使用不同的资源从而在时间上能重叠起来,提高了整体工作负载的吞吐率。
我们将每条指令划分为“取指”、“译码”、“执行”、“访存”、“写回”这五个执行步骤。
图20 五级流水概念图。
五级流水的时序设计相对两级流水要复杂。在两级流水中,由于我们对时序的精巧设计,避免了相关问题的出现,但五级流水单凭时序安排是无法解决所有相关问题的,必须综合考虑各种情况。
结构相关的处理。
由于我们的设计中不包含缓存,因此会有取指和访存的冲突,即结构相关(见下图)。
图21 五级流水结构相关示意图。
当冲突发生时,必须先“访存”,将“取指”延后一个时钟周期,这样才能保证指令的正确执行。处理结构相关需要做两项工作:1)冲突检测 2)取指延后。
1) 冲突检测。
只有执行访存指令(load/store)时,才会出现冲突。因此,我们在译码时产生一个标志是否访存的信号wrmem。含义如下:
表16 wmem控制信号。
通过检查“访存阶段”的m_wrmem就可确定是否冲突。
2)取指延后。
在每次取指时,若有冲突,则往ir中写入空指令(nop),并保持pc不变,使取指延后一个节拍。
数据相关的处理。
数据相关是指在执行本条指令的过程中,如果用到的操作数是前面指令的执行结果,则必须等待前面的指令执行完成,并把结果写回寄存器或主存之后,本条指令才能继续执行[3]。我们采用设置专用数据通路(即傍路技术)来解决数据相关问题。但旁路技术并非一劳永逸。
若前一指令为load,而后一指令和它数据相关,如下图所示,当下一指令的执行阶段需要数据时,上一指令尚未给出,这种情况是无法用旁路技术来解决的。
图22 五级流水load数据相关示意图。
针对上述情况的一般处理方法是通过插入bubble使load之后的两条指令拖后一个节拍执行[4]。但我们感觉这种处理过于繁琐。我们发现,如果在load译码时,后面自动加一条空指令,即增加冗余,就可以避免上述情况的出现。
在这种简化处理后,我们将数据相关划分为以下三种情况。
1. 相邻指令数据相关。
举例: inc r0
inc r0
在此情形下,将上一指令的alu输出经缓存后直接送回,作为alu多路选择器的入口。
之一,如下图所示。
图23 五级流水相邻指令数据相关示意图。
2. 中间隔1条指令的两指令数据相关。
举例: inc r0
inc r1
inc r0
在此情形下,将第1条指令的回写数据送回作为alu多路选择器的入口之一供第3条指令使用,如下图所示。
图24 五级流水相隔1条指令的两指令数据相关示意图。
3. 中间隔2条指令的两指令数据相关。
举例: inc r0
inc r1
inc r2
inc r0
第1和第4条指令数据相关,有两种处理方法。
方法1:在第4条指令的译码阶段作旁路处理,将第1条指令的回写数据作为运算器的输入送入下一级,如下图所示。
方法2:考虑到读写寄存器的时间较短,因此将写寄存器的时机改在时钟下降沿。这样指令就没有数据相关了。
图25 五级流水相隔2条指令的两指令数据相关示意图。
由于方法2处理较简洁,因此我们在实现时使用了后者。
以上均是在已知数据相关的前提下,讨论旁路数据通道。接下来,讨论如何检测数据相关。我们知道,只有在后面的指令开始执行时,才能察觉它是否与前面的若干条指令是否相关。
为此,需要在数据相关可能发生的最大时域内保留一定的信息。这就是我们将寄存器a,b口选择信号保留至“回写阶段”的原因。我们还是按照上述情况进行论述,所有数据相关的检测都置于“执行阶段”。
信号wregen是寄存器写使能,sa,sb是寄存器组a,b口选择信号。信号前缀表示信号所处的阶段。如e_sa表示处于执行阶段的sa。
1.相邻指令数据相关的检测。
若m_wregen=’1’,则表示前一指令要回写寄存器。此时,若e_sa或e_sb等于m_sa,则必然数据相关,这是因为我们规定,若回写寄存器,则寄存器a口选择信号所指定的即为目的寄存器。否则无关。
2. 中间隔1条指令的两指令数据相关的检测。
若w_wregen=’1’,则表示第一条指令要回写寄存器。此时,若e_sa或e_sb等于w_sa,则必然数据相关。否则无关。
当然,上述两种情况可能会一同出现。这时,我们就按情况1处理。因为情况2可以理解为。
接连出现情况1。
控制相关的处理。
控制相关是指因为程序的执行方向可能改变而引起的相关。当执行跳转指令时,就会发生这种情况。除jr外,jrz等条件跳转需要根据当前状态位来决定是否跳转,而当前状态位是由前面最近的会影响状态位的指令(如算术指令)决定。
常规的也是比较简单的做法是在碰到jrx之类的跳转指令时,延迟后边流水线的进入。但我们通过分析,认为可以一点都不必延迟,通过旁路处理把控制相关转为数据相关来处理。这样处理,不必延迟,可以提高流水线的性能。
按我们的方式解决控制相关需要做两项工作:
1) 通过旁路,提供状态寄存器的值和临时状态位的值,为判断是否跳转作准备;
2) 选择pc更新的时机。
1.旁路处理。
在每条指令译码时,会产生一个信号setflag,它决定了在执行阶段是否根据alu计算结果改变状态位。从下面的时序图中可以发现,只要我们在jrx指令译码时提供以下3个信号就可作出是否跳转的决定:
表17 处理控制相关信号。
若e_setflag要写状态寄存器,则说明前一条指令会影响状态位,这时根据tflag决定是否跳转;若e_setflag要保持状态寄存器,则说明前一条指令不会影响状态位,这时根据flag决定是否跳转。
图26 五级流水处理控制相关示意图。
2.pc更新的时机。
在最初设计时,我们考虑将pc放在时钟上升沿更新。若如此,不论jrx转移与否,都会顺序取下一指令。因此,在发生跳转时要清除已读取的指令。
处理方法是,在译码时判断上一条指令是否要跳转,若是则产生donothing信号。这样就清除了已读取的指令。如果把pc更新放在下降沿(若上图所示),则不存在上述问题。
但我们担心这种处理在时间上可能会比较紧张。不过,实践表明这种处理是可行的。
pc控制的总结:
按照我们的设计,pc是在取指之后的第一个时钟下降沿更新。但当访存和取指冲突时需要特殊处理,分两种情况讨论。
1.访存指令不接连出现。
访存时更新pc,执行空指令时保持pc不变,见下图。
图27 五级流水访存指令不接连出现时的pc更新示意图。
2.访存指令接连出现。
除第一个访存阶段外,其余访存阶段pc都保持不变。
图28 五级流水访存指令接连出现时的pc更新示意图。
在解决了结构相关、控制相关、数据相关后,五级流水时序图最终设计如下:
图29 五级流水时序图。
注]五级流水cpu设计过程中参考了文献[4]。
图30 五级流水整体结构图。
整个cpu由以下几个模块组成:
取指模块(if):给出内存地址,读取指令并送入指令寄存器,为下一级准备数据。
由于pc控制模块处于取指模块中,因此控制相关的检测也置于取指模块。
译码模块(id):读取寄存器值和指令译码。我们采取一次译码,逐级传递的方式,译出后几级流水所需的控制信号和数据(如立即数等),在每次时钟上升沿到来时送入下一级。
实际上,结构相关、控制相关、数据相关的检测都可归入译码部分。考虑到“相关检测”涉及到的信号分属不同阶段以及整体结构的清晰性,我们将“相关检测”独立出来。
访存模块(ma):选择地址线的数据**和数据线的流向。访存和取指在功能上是独立的,但cpu对外只有一条地址线和数据线的事实决定了访存和取指是相互联系的。
当执行load/store指令时,地址线由alu送入“访存段”的值提供;取指时,则由pc提供。当写内存时,cpu内部数据送数据线;当需要读内存时,cpu往数据线送高阻。
回写模块(wb):选择回写数据源和根据写使能信号wregen将数据回写到寄存器堆;
砌体结构课程设计指导
1 办公楼建筑设计要点。2 建筑扩初图绘制要点。建筑设计说明及门窗表 装修表。建筑平面图。建筑立面图。建筑剖面图。3 结构计算注意点。楼盖 楼层 楼面 结构平面布置示意图。楼板的内力及配筋计算。主 次梁的内力及配筋计算。楼梯计算。3.5 砌体结构墙体计算。3.6 砌体结构墙下基础设计计算。4 结构施...
调速系统课程设计》课程设计教学指导方案
调速系统课程设计。教学指导方案。双闭环直流电机调速系统设计。设计题目 电气信息学院 2016年8月。第一部分设计指导方案。一 设计题目。题目 双闭环直流电机调速系统设计 二 课题要求。1 设计的目的与要求 设计的目的 调速系统课程设计的目的是培养学生的实践技能,使学生进一步熟悉和掌握单 双闭环直流调...
课程设计指导6 风管系统
确定风管系统的形式 风管的走向和空间位置 确定风口布置 选择风管的断面形状和尺寸 计算风管系统的阻力 选择风机或空调机。常用风管形状分为圆形和矩形。金属风管以外径或外边长为标注尺寸,非金属风管以内径或内边长为标注尺寸。矩形风管规格 宽高比不超过4,最大不超过10。根据系统压力和管道断面尺寸,空调用钢...