- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2016-第3章-2-增加内容流水线处理机及其设计概要1
8.第八个时钟周期 本周期中,第四条指令进入WB级,第五条指令进入MEM级,第六条指令进入EXE级。这三条指令的操作在各自的级同时进行: MEMW (1)第四条指令add r7,r5,r6处在WB级。这时,d输出7。WREG=1;SLD=0,选择C的输出,即把加法结果写入寄存器堆的r7寄存器。至此,第四条指令也完成了它的执行,将退出流水线。 (2)处在MEM级的第五条store r8,200(r9)把S的输出写入由R指定的存储器单元,MEMW信号有效。 MEMW * (3)处在EXE级的第六条指令subi r10,r10,1由ALU做减法。多路器的选择信号SIMM=1,选择立即数。ALU的两个源操作数分别来自流水线寄存器A和I。WZ=1,改变流水线寄存器Z。 第八个时钟周期结束后,即刚进入第九个周期时,只有R输出减法结果,其它的均没有用。 MEMW 9.第九个时钟周期 本周期中,第五条指令进入WB级,第六条指令进入MEM级。这两条指令的操作在各自的级同时进行: (1)第五条指令store处在WB级。这时它什么也不做。实际上store指令在前一个周期已完成执行。 (2)处在MEM级的第六条指令 subi r10,r10,1 ,把R的输出传递到C。 第九个时钟周期结束,即刚进入第十个周期时,只用C中的减法结果。 10.第十个时钟周期 第六条指令subi r10,r10,1处在WB级。这时,d输出10。WREG=1。SLD=0,选择C的输出,即把减法结果写入寄存器堆的r10寄存器。至此,第六条指令也完成了它的执行,退出流水线。第十个时钟周期结束,所有的6条指令的执行均已完成。 SLD * 程序例子的执行时序图 subi r10, r10, 1 以上通过一个程序例子说明了运算类和访存类指令在流水线各级的操作和所需的控制信号。 后面介绍转移类指令在流水线的操作和所需的控制信号。 思考题:不同级的流水线寄存器d的内容是否相同?各级d的内容是什么? * 1.第一个时钟周期 程序例子执行时的第一个时钟周期 例中的6条指令地址(这里用的是字地址,相当于字节偏移量的4)分别为0,1,2,3,4,5。 0 第一个时钟周期是第一条指令的IF级: * PC输出0,从存储器取出第一条指令addi r1,r1,4。 * 地址加法器前多路器选择1,与当前PC值相加,得到字地址1,即下一条指令的地址。在该周期结束时,时钟的上升沿把取出的指令无条件地写人指令寄存器IR。同时也把1写入PC。 程序例子执行时的第一个时钟周期 0 1 多路器的选择信号为转移发生BTAKEN(branchtaken): 转移发生,它为1时,多路器选择经符号扩展的偏移量,与当前PC值相加,加法器输出转移地址。 本例中没有转移指令,因此转移总也不发生,即BTAKEN=0。 第一个时钟周期结束,即刚进入第二个周期时: PC输出1; IR输出第一条指令 addi r1, r1, 4。 2.第二个时钟周期 这时第一条指令进入ID级,第二条指令进入IF级。两条指令的操作在各自的级同时进行: 程序例子执行时的第二个时钟周期 SST (1)处在ID级的第一条指令addi r1,r1,4完成译码操作,并根据指令格式中各字段的值: 对立即数部分做符号扩展,从寄存器堆中读出两个寄存器r1和r4的内容。 在本周期结束时,把4、 r1和r4 内容分别写入流水线寄存器I,A和B中。 SST * 实际上,寄存器r4的内容不被使用。这个4来自于立即数中的4,它们在指令格式中处在相同的位置。也就是说,把寄存器r4的内容打入B中做的是无用功。但这没关系,因为下一个周期不使用它。这样做的原因是为了简化控制电路,即流水线寄存器不要求配置写使能端了(以后,如果数据不被使用,不再描述它)。 寄存器地址A2输入端前面的多路器选择指令格式中的rs2字段或者rd字段。选择端的名字定义为SST(selectstore)。 当是store指令,SST=1,选择rd; 否则SST=0,选择rs2。 本例中 SST=0,选择rs2 ;实际不使用第二个寄存器操作数,因此SST是什么都没关系。 31 26 25 21 20 16 15 5 4 0 指令 意义 00 0100 rd rs1 rs2 add rd,rs1,rs2 寄存器加寄存器 00 0101 rd rs1 imme addi rd,rs1,imme 寄存器加立即数 r1目的寄存器编号 1也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器,向其中写入操作结果。 SST (2)同时,* 从存储器取出第二条指令load
文档评论(0)