1、一. 实验目的(1) 认识和掌握多周期数据通路原理及其设计方法;(2) 掌握多周期CPU的实现方法,代码实现方法;(3) 编写一个编译器,将MIPS汇编程序编译为二进制机器码;(4) 掌握多周期CPU的测试方法。二. 实验内容 设计一个多周期CPU,该CPU至少能实现以下指令功能操作。需设计的指令与格式如下:(说明:操作码按照以下规定使用,都给每类指令预留扩展空间,后续实验相同。)=算术运算指令(1)add rd, rs, rtrs(5位)rt(5位)rd(5位)reserved功能:rdrs + rt (2)sub rd, rs, rt完成功能:rs rt(3)addi rt, rs, im
2、mediateimmediate(16位)rtrs + (sign-extend)immediate逻辑运算指令(4)or rd, rs, rtrs | rt(5)and rd, rs, rtrs & rt(6)ori rt, rs, immediate immediaters | (zero-extend)immediate移位指令(7)sll rd, rt,sa 未用sart(zero-extend)sa,左移sa位 ,(zero-extend)sa比较指令(8) slt rd, rs, rt 带符号数if (rsrt) rd =1 else rd=0, 具体请看表2 ALU运算功能表,带
3、符号(9) sltu rd, rs, rt 不带符号数rt) rd =1 else rd=0, 具体请看表2 ALU运算功能表,不带符号存储器读写指令(10)sw rt, immediate(rs)memoryrs+ (sign-extend)immediatert。即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。(11)lw rt, immediate(rs)rt memoryrs + (sign-extend)immediate。即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。分支指令 (12)beq
4、rs,rt, immediate (说明:immediate从pc+4开始和转移到的指令之间间隔条数) if(rs=rt) pc pc + 4 + (sign-extend)immediate 2 else pc pc + 4 (13)bne rs,rt, immediate (说明:if(rs!=rt) pc 跳转指令(14)j addr addr27.2pc (pc+4)31.28,addr27.2,0,0,跳转。说明:由于MIPS32的指令代码长度占4个字节,所以指令地址二进制数最低2位均为0,将指令地址放进指令代码中时,可省掉!这样,除了最高6位操作码外,还有26位可用于存放地址,事实
5、上,可存放28位地址,剩下最高4位由pc+4最高4位拼接上。(15)jr rs rs,跳转。调用子程序指令(16)jal addr 调用子程序,pc (pc+4)31.28,addr27.2,0,0;$31pc+4,返回地址设置;子程序返回,需用指令 jr $31。跳转地址的形成同 j addr 指令。停机指令(17)halt (停机指令)0000(26位)不改变pc的值,pc保持不变。三. 实验原理 多周期CPU指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。CPU在处理指令时,一般
6、需要经过以下几个阶段: (1) 取指令(IF):根据程序计数器pc中的指令地址,从存储器中取出一条指令,同时,pc根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入pc,当然得到的“地址”需要做些变换才送入pc。 (2) 指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。 (3) 指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。 (4) 存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中
7、执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。 (5) 结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。 实验中就按照这五个阶段进行设计,这样一条指令的执行最长需要五个(小)时钟周期才能完成,但具体情况怎样?要根据该条指令的情况而定,有些指令不需要五个时钟周期的,这就是多周期的CPU。取指令IF指令译码ID指令执行EXE存储器访问MEM结果写回WB图1 多周期CPU指令处理过程MIPS指令的三种格式:其中,op:为操作码;rs:为第1个源操作数寄存器,寄存器地址(编号)是000001111
8、1,001F;rt:为第2个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);rd:为目的操作数寄存器,寄存器地址(同上);sa:为位移量(shift amt),移位指令用于指定移多少位;funct:为功能码,在寄存器类型指令中(R类型)用来指定指令的功能;immediate:为16位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数据加载(Laod)/数据保存(Store)指令的数据地址字节偏移量和分支指令中相对程序计数器(PC)的有符号偏移量; address:为地址。图2 多周期CPU状态转移图状态的转移有的是无条件的,例如从IF状态转移到ID就是无条件的;有些是有条件的,例如
9、ID 或 EXE状态之后不止一个状态,到底转向哪个状态由该指令功能,即指令操作码决定。每个状态代表一个时钟周期。图3 多周期CPU控制部件的原理结构图图3是多周期CPU控制部件的电路结构,三个D触发器用于保存当前状态,是时序逻辑电路,RST用于初始化状态“000“,另外两个部分都是组合逻辑电路,一个用于产生下一个阶段的状态,另一个用于产生每个阶段的控制信号。从图上可看出,下个状态取决于指令操作码和当前状态;而每个阶段的控制信号取决于指令操作码、当前状态和反映运算结果的状态zero标志等。图4 多周期CPU数据通路和控制线路图图4是一个简单的基本上能够在多周期CPU上完成所要求设计的指令功能的数
10、据通路和必要的控制线路图。其中指令和数据各存储在不同存储器中,即有指令存储器和数据存储器。访问存储器时,先给出地址,然后由读或写信号控制操作。对于寄存器组,读操作时,给出寄存器地址(编号),输出端就直接输出相应数据;而在写操作时,在 WE使能信号为1时,在时钟边沿触发写入。图中控制信号功能如表1所示,表2是ALU运算功能表。特别提示,图上增加IR指令寄存器,目的是使指令代码保持稳定,pc写使能控制信号PCWre,是确保pc适时修改,原因都是和多周期工作的CPU有关。ADR、BDR、ALUoutDR、DBDR四个寄存器不需要写使能信号,其作用是切分数据通路,将大组合逻辑切分为若干个小组合逻辑,大
11、延迟变为多个分段小延迟。表1 控制信号作用控制信号名状态“0”状态“1”RST对于PC,初始化PC为程序首地址对于PC,PC接收下一条指令地址PCWrePC不更改,相关指令:halt,另外,除000状态之外,其余状态慎改PC的值。PC更改,相关指令:除指令halt外,另外,在000状态时,修改PC的值合适。ALUSrcA来自寄存器堆data1输出,相关指令:add、sub、addi、or、and、ori、beq、bne、slt、sltu、sw、lw来自移位数sa,同时,进行(zero-extend)sa,即 27(0),sa,相关指令:sllALUSrcB来自寄存器堆data2输出,相关指令:
12、add、sub、addi、or、and、ori、beq、bne、slt、sltu、sll来自sign或zero扩展的立即数,相关指令:addi、ori、lw、swDBDataSrc来自ALU运算结果的输出,相关指令:add、sub、addi、or、and、ori、slt、sltu、sll、move来自数据存储器(Data MEM)的输出,相关指令:lwRegWre无写寄存器组寄存器,相关指令:beq、bne、j、sw、jr、halt寄存器组寄存器写使能,相关指令:add、sub、addi、or、and、ori、slt、sltu、sll、lw、jalWrRegData写入寄存器组寄存器的数据来自pc+4(pc4),相关指令:jal,写$31写入寄存器组寄存器的数据来自存储器、寄存器组寄存器和ALU运算结果,相关指令:add、addi、sub、or、and、ori、slt、sltu、sll、lwInsMemRW写指令存储器读指令存储器(Ins. Data)/RD读数据存储器,相关指令:输出高阻态/WR写数据存储器,相关指令:sw
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1