计算机体系架构rtl 第五章第六章

来源:互联网 发布:flash mac版下载 编辑:程序博客网 时间:2024/06/05 11:10

第五章:单周期的cpu

1。在cpu中需要实现一个寄存器堆,这个寄存器堆中包括了:常数,汇编器专用(什么意思),表达式计算或者函数调用的返回结果,a函数调用参数,t临时变量(函数调用时不需要保存和恢复的),s函数调用时需要保存和恢复的寄存器变量,t临时变量(函数调用时不需要保存和恢复的),操作系统专用,全局变量指针,堆栈指针,帧指针,返回地址

2。pc端的mux有几种?

a) pc+立即数(条件转移类型)

b) 跳转指令,从指令中直接decode出来的(跳转和子程序调用)

第六章 异常与中断处理及其电路实现

注意,在程序跳转时,不是软件将返回地址写入地址保存寄存器,而是硬件写。

第八章 流水线

另外,流水线中,对每一个阶段的控制信号都进行了打拍,即,比如id阶段的wreg,在exe阶段,就有ewreg,在mem阶段,就有mwreg,在wb阶段就有wwreg。

为什么?因为多条指令流水执行,每条指令在各个阶段的控制信号并不相同。

流水线中的问题:

(1)结构相关

在数据和指令mem没有分开,是一个mem的情况下,如果这个周期的数据mem想要访问,而下一个周期的mem也要访问,那么就会造成结构冲突。


通过增加资源解决。

(2)数据相关

数据相关,比如上一个周期要写r3,下一个周期要读r3,但是上一个周期的r3还没写出来,那么这个周期读出来的也不对,因此就是数据冲突。


通过bypass,内部旁路解决。

如果是add这种,在exe阶段就会生成结果数据,只不过是在第五个周期将数据存入寄存器堆,如果下一条指令需要使用这个数据,那么其实可以直接传递给下一个指令的exe进行操作。


注意,像lw这种,持续5个周期的,将会在最后一个周期更新寄存器,如果下一条指令就用这个寄存器,那么怎么解决?通过暂停流水线解决。

这时,如果不采取其他措施,停一级流水线将会导致IR中的指令执行两次。因此我们要废弃一次指令的执行。如何废弃?非常简单,只需进制它修改CPU的状态(封存写信号)

(3)控制相关

控制相关就是上一条是跳转,那么下一条怎么执行。


通过增加延迟槽解决。





原创粉丝点击