微程序控制器的流水模型计算机设计Word文档下载推荐.docx
《微程序控制器的流水模型计算机设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微程序控制器的流水模型计算机设计Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
Ri
不用
D
功能:
Ri←M(D)
(2)STRRi,D
0001
M(D)←(Ri)
(3)ADDRi,Rj
0010
Rj
Ri←(Ri)+(Rj)
(4)SUBRi,Rj
0011
Ri←(Ri)-(Rj)
(5)ANDRi,Rj
0100
Ri←(Ri)∧(Rj)
(6)ORRi,Rj
0101
Ri←(Ri)∨(Rj)
(7)MULRi,Rj
0110
Ri←(Ri)×
(Rj)
(8)转移指令
0111
条件
条件码00无条件转移PC←D
01有进位转移PC←D
10结果为0转移PC←D
11结果为负转移PC←D
⑼INRi,Mj
1001
Mj
其中Mj为设备地址,可以指定四种外围设备,当Mj=01时,选中实验箱的二进制代码开关。
⑽OUTRi,Mj
1010
当Mj=10时,选中实验箱的显示灯。
三、设计要求
设计流水方案时,牢记设计的目的是提高系统性能。
没有性能改善、为流水而流水的方案是毫无意义的。
实验系统的时序发生器将一个微指令周期分为T1至T4四段,原则上,本次实验只利用四段划分,即仍使用T1-T4作为时序脉冲。
设计时,应充分考虑控制信号的综合和化简,出厂时的模型机提供了这方面的某些化简实例,但还可以进一步化简。
四、总体设计
指令级标量流水,是指机器指令的解析过程分解为取指、译码、访存、执行、写回等子过程,各子过程以流水方式运行。
考虑到复杂度,在实际设计中,可以分解得不那么细。
例如可只分为取指、执行、写回三个子过程。
要实现流水,至少需要具备两个条件:
(1)数据通路(包括其上的执行部件)要支持流水。
设计这种支持流水的数据通路时,需要解决几个主要问题:
流水线各段争用总线的问题;
各段之间互通信息、相互等待的问题;
各段工作时序协调一致的问题;
中断、程序转移的处理问题;
本实验仪采用了不少具有并行操作功能的器件,如存储器、寄存器组等,对支持流水有一定的帮助,但还需要使它们组成流水线。
从广义上理解并行,则流水是并行的一个特例,只有具备先后、因果关系的并行,才能称为流水。
例如,图12中,DR1和DR2可以并行操作,但它们的关系不是流水。
实际上,图12的数据通路已经基本布置好了流水线,它可以划分为如下功能部件:
取指段:
包括RAM的右端口、AR2、MUX3、PC和IR;
执行段:
包括ALU、DR1、MUX1、DR2、MUX2、RF、ER、RAM的左端口、AR1、IR、R4、MUX4、ALU2和PC;
写回段:
包括ER、RF;
注意:
在数据通路中可能需要对写回寄存器选择信息进行缓冲,为此要增加如图14所示的缓冲寄存器(否则,WR1、WR0的信息会在写回操作之前改变)。
设计的方案不同,可能需要的缓冲寄存器也会有所不同。
图14操作数缓冲寄存器
也可采用别的划分,上述划分方法仅供参考。
(2)控制器要有能力驱动流水线。
在模型机中,使用的是常规的微程序控制器,虽然数据通路相同,但没有利用其中的流水功能,因此得到的整体系统仍是常规模型计算机。
本实验中,可能要对原有的微程序控制器进行必要的改进,使之称为流水微程序控制器。
五、流水微程序控制器
由于数据通路基本仍然沿用第二节图4,无须重新设计,因此本次实验的重点就集中在控制器的设计上。
这里使用指令系统的子集,只有9条指令。
由于流水控制中,对中断断点的处理会增加流水的复杂度,增大理解的难度,因此不包括中断部分。
相信善于思考的同学是可以设计出支持中断的方案的。
(1)微指令格式
在本实验中仍采用水平型微指令格式,这是由于采用垂直型微指令来控制并行度较高的流水线将会困难重重。
微命令编码仍然可以用直接表示法,后继地址用断定方式。
严格的说,没有中断控制,相应的控制信号可以省略,因此微指令字长可以缩短。
为了兼容模型机方案,仍需保留这些控制信号,以减少接线的难度。
(2)微程序控制器
支持流水并未对控制器的硬件结构提出更高的要求。
微程序控制器的逻辑结构与模型机的差异只是顺序控制部分,即微程序转移逻辑电路,原因是微程序需要重新设计,重新分配微地址。
新设计的微程序转移逻辑电路,可以用仪器上的ispLSI1032实现,也可用中小规模的标准数字器件实现。
(3)时空图
如果要从头设计一套流水系统,时空图应在设计数据通路之前确定,因为具体的流水线是跟时空图紧密相联的。
本实验是在已有的数据通路的基础上(已知该数据通路支持流水),通过改进控制来提升系统性能,因此将时空图放在控制器部分进行设计。
下面是3个时空图。
周期
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
取指
执行
写回
图15参考时空图1
功能段1
功能段2
图16参考时空图2
功能段3
功能段4
图17参考时空图3
选用的时空图只要设计可以实现即可,不同的时空图直接影响系统的性能。
(4)微程序设计
控制器的强大与否,机器性能能发挥出多少,就取决于如何设计控制流程,并转化为微程序。
微程序设计包括了横向设计和纵向设计。
要实现流水控制,纵向设计仍然重要,而横行设计也同样需要仔细考虑。
因为流水线中要求尽量多的并行操作,以便充分利用硬件资源,减少闲置,横行设计中就应把不冲突的、可以同时实现的控制放在同一微指令中。
纵向设计中,考虑控制顺序要连同并发控制一起考虑,尤其是出现冲突时,需要前后错开。
此外就是注意在机器指令发生转移(无条件、有条件或中断)的地方,要丢弃已取的指令,重新做一次取指操作。
设计流水控制的微程序与设计常规的微程序相比,难度要大一些,主要是因为常规流程是单线索的,每一微指令周期要做什么,思路很清晰,而流水控制的流出则同时保护多重线索,每个微指令周期都可能含有两个以上不相干的操作,比较复杂,需要用并发的思维去考虑。
由于可能出现的情况大大增多,设计时容易出错,因此一定要细心,规划周全。
如果先设计出常规的微程序控制流程图,然后进行微指令合并,出错的可能性会比直接设计流水控制的微程序要小一些。
合并的方法是:
观察每个微指令周期和上一周期的操作是否冲突,不冲突则将本周期的操作叠加至上一周期。
流水控制的微程序流出必须涵盖所有可能的情况,为此可以用地址不同、操作类似的微指令来实现不同的分支。
前面所叙述的课程设计说明,是对学习“计算机系统结构”课程的计算机系所有学生的基本教学要求:
按给定的指令系统和指令格式,完成一台微程序控制的模型流水计算机的设计和调试。
六、组装与调试
对微程序控制器流水方案设计好了以后,形成初步的设计文件,然后按照设计文件进行组装与调试。
在调试过程中,往往会发现设计中的问题,需要修改设计,再根据修改后的设计进行调试,直到完全成功为止。
调试成功后,整理出最后的设计文件。
ALU计算模块:
设计思想:
预算模块要求5种运算,并且运算数据要求补码表示范围在-1≤X≤1―2―7
先将AND运算和OR运算的电路图做出来,这个比较简单:
AND运算:
OR运算:
加减法器:
符号浮点数的加减法与符号幅值的加减法相似,但两个有重要区别,首先由于有几个需要特别表示,因此浮点数加法算必须明确地检测出操作数的是否为0,正负无穷,或NaN(notanumber),移位,对齐,相加减的方法能处理大部分浮点数的加减法。
但它只能对规格化的浮点数进行处理,当操作数为0,正负无穷,或NaN时,浮点数算法必须作特殊处理。
所以,我们可以从符号加减法器开始,然后对结果进行修改,使之成为符号浮点加减法器。
但是后来发现maxplusII中有加减器的运算模块,设置好初值后可以直接拿来使用,原件及具体设置如下:
原件:
数据通路模块:
数据通路模块的作用是将数据正确的在各模块之间传输,要避免各种可能的冲突,例如外部数据和R4~R1之间数据的冲突,R4~R1之间的数据冲突,地址数据的和信息数据的冲突等。
同时要保证个数据在能够正确地载入和释放,要求在争取的时间,正确的顺序载入争取的数据寄存器或临时寄存器。
这点要求和时序电路的真确配合,还有寄存器选择电路的配合。
最终的控制ROM:
subdesignCTRL
(
S,IR4,IR5,IR6,IR7:
INPUT;
SW_BUS,PC_BUS,R_LOAD,R_BUS:
OUTPUT;
ALU_BUS,A_S,S1,S0,S_EN,CB,CL,LDDR1,LDDR2:
RD,WE,ARLD,PCLOAD,PCINC,STOP,IRLD,P,P1:
AD4,AD3,AD2,AD1,AD0:
)
VARIABLEOUT[26..0]:
NODE;
IN[4..0]:
BEGIN
IN[]=(S,IR7,IR6,IR5,IR4);
TABLE
IN[]=>
OUT[];
B"
00000"
=>
B"
010010000000000010000000001"
;
--SW->
PC1%
00001"
100010000000000111000000010"
--PC->
ARPC+12%
00010"
110010000000010010011010000"
--RAM->
IR%%CHUSHI3%
10000"
010010000000000010000000110"
%CLCT<
-RiRj4%
00110"
100010000000000111000010011"
%AR<
-PCPC+1%
10011"
110010000000010110000010110"
-M5%
10110"
111010000010010010000000001"
%M<
-Ri%%LDA6%
11000"
-RiRj7%
01000"
100010000000000111000011111"
11111"
110010000000010110000011011"
-M8%
11011"
110110000100001010000000001"
%Ri<
-M%%STA9%
10100"
010010000000000010000000111"
%ALU_S<
-SiSj10%
00111"
110111111101000010000000011"
%DR1<
-Ri%
00011"
110111110100100010000010111"
%DR2<
-Rj11%
10111"
111001110010000010000000001"
-ALU%%ADD12%
11100"
110110111101000010000000011"
-Ri%%SUB13%
10010"
110110011101000010000000011"
-Ri%%AND14%
11010"
110110101101000010000000011"
-Ri%%OR15%
11110"
110110001101000001000000011"
-Ri%%MUL16%
10001"
100010000000000111000100101"
-PCPC+117%
00100"
110010000000010000000000001"
%PC<
-M18%
00101"
110010000000000011000000001"
%PC+1%%JUMP19%
11001"
010010000000000010000001010"
-RiRj20%
01010"
011010000000000010000000001"
-Mi%%IN20%
10101"
010110000000000010000010001"
-RiRj21%
01001"
010110000000000010000000001"
%Mi<
-Ri%%OUT21%
11101"
110010000000000010100000001"
%STOP&
%%HALT22%
ENDTABLE;
(SW_BUS,PC_BUS,R_LOAD,R_BUS,ALU_BUS,A_S,S1,S0)=OUT[26..19];
(S_EN,CB,CL,LDDR1,LDDR2,RD,WE,ARLD,PCLOAD,PCINC,STOP,IRLD,P,P1,AD4,AD3,AD2,AD1,AD0)=OUT[18..0];
END;
跳转条件电路:
跳转条件电路要求在符合跳转条件时,更改下址,改变为操作,完成跳转。
设计思路:
跳转与不调转的下址只有一位不同,只要条件满足,只需更改那一位下址代码即可。
首先跳转条件有四种,跟据条件转为信号可以用2—4译码器实现。
然后通过逻辑电路实现选择确定跳转。
设计电路:
控制模块总图:
最终cpu总图:
七、实验总结
这次CPU设计实验是一台模型机的设计.此模型机是个八位定点二进制计算机,具有四个通用寄存器:
R0~R3,能执行11条指令,主存容量为256B。
数据格式是定点补码表示法,字长为八位,其中最高位为符号位,小数点位置定在符号位后面。
模型机可划分为如下四个相对独立的功能模块:
运算器、存储器和系统总线;
时序产生器;
微程序控制器;
显示模块,然后一一设计完成。
指令码用了25位,要实现11条指令.这是比较关键的,也比较复杂,需要耐心细致地写好VHDL语言.调试的过程再慢慢修改出错的地方.
从本次实践我还领悟到只有将所学知识真正应用到实际操作中,才能更好地掌握,才能不断发现自已存在的问题,从而不断进步.