![](https://csdnimg.cn/release/download_crawler_static/4076621/bg3.jpg)
更详细图片细节可访问http://www.le.ac.uk/eg/embedded/PH%20files/PH%20Core.htm
(仅支持IE浏览器)
那么五级流水线如何用代码实现呢?首先要实现图中的IF/ID、ID/EX、EX/MEM、MEM/WB寄
存器;级与级之间不是直接连接,而是用reg来保存每一级的输出,再传递到下一级。见如下示
例代码:
//IF/ID
reg[31:0] IF_ID_INST;
...
//ID/EX
reg[4:0] ID_EX_RS;
reg[4:0] ID_EX_RT;
reg[5:0] ID_EX_FUNCT;
...
//EX/MEM
reg[31:0] EX_MEM_ALURES;
reg[31:0] EX_MEM_WRITEDATA;
...
//MEM/WB
reg[31:0] MEM_WB_ALURES;
reg[31:0] MEM_WB_READDATA;
...
如何让流水线工作呢?可以在每个时钟上升沿将各级的结果传递给寄存器,如以下示例代码:
always@(posedge clk)
begin
//IF/ID
if(IF_ID_Write==1)
IF_ID_INST<=INST[31:0];
...
//ID/EX
ID_EX_RS=IF_ID_INST[25:21];
ID_EX_RT=IF_ID_INST[20:16];
ID_EX_FUNCT<=IF_ID_INST[5:0];
...
//EX/MEM
EX_MEM_ALURES<=ALUout;
EX_MEM_WRITEDATA<=mux7out;
...
//MEM/WB
MEM_WB_ALURES<=EX_MEM_ALURES;
MEM_WB_READDATA<=Mem_read;
...
end
以上就是实验6的Top.v的组织思路;不要忘记初始化时将所有的寄存器设为零。
下面来考虑流水线中的三种冒险(Hazard):
1. 数据冒险与转发(Data Hazards and Forwarding)
考虑下面的一组指令:
课程:计算机系统结构实验报告!! 年级:大二(下)
页面 3 / 10!!
- 1
- 2
前往页