五级流水CPU运算器结构图傍路模块e_RAoutforwardAMUXMUXw_RBdatam_ALUOute_RBoutforwardBALUaIn 010xFFFFIMMALUbInALUSrcMUXExtTo17bitsExtTo17bitsOperation MuxALUOpr-与门或门异或SHLSHRSARCXSetFlag
HazardDetectUnit模块
该模块通过检查“访存阶段”的m_wrMem来确定是否发生结构相关。具体请参阅上文中处理结构相关的部分。 结构图:
d_IRm_wrMemw_wrMem
图32 五级HazardDetectUnit模块结构图 信号说明
端口 输入 输出 信号 m_wrMem d_IR PCStall 含义 wrMem处于访存阶段的值 指令寄存器 ‘1’ : 保持PC不变 ‘0’: PC更新 信号 w_wrMem IFFlush 含义 wrMem处于回写阶段的值 ‘1’: NOP写入IR ‘0’: 内存输出写入IR 18
回写模块(WB)
回写是一条指令执行过程中的最后一步。它的工作是选择回写数据源和根据写使能信号wRegEn将
6
+tFlagCXC,Z,V,SFLAGClkALUOut 图31 五级执行模块结构图
HazardDetectUnitPCStallIFFlushHazardDetectUnit信号说明
数据回写到寄存器堆。需要选择的数据源共有两项:运算器输出和内存输出。在执行算术逻辑、移位等指令时选择运算器输出;执行LOAD指令时选择内存输出。 结构图:
w_ALUOutw_memToRegw_MemOut0 MUX 1w_WBdata写使能目的寄存器号Write datawRegEndestRegCLKRegArray
图33 五级回写模块结构图 信号说明: 信号 含义 w_memToReg ‘1’: 内存数据到寄存器 ‘0’: ALU输出到寄存器 wRegEn ‘1’: 允许写寄存器 ‘0’: 禁止写寄存器 表19 五级回写模块信号说明
2.2.4 ForwaringUnit模块
在“时序设计”部分,我们已对“如何检测数据相关”作了详细叙述。具体实现由 ForwardingUnit模块完成。 结构图
e_SAe_SBm_SAw_SAm_wRegEnw_wRegEnForwarding UnitforwardAforwardB
图34 五级Forwarding模块结构图 信号说明 端口 输入 信号 e_SA m_SA m_wRegEn 输出
forwradA 含义 寄存器A口选择信号处于执行阶段的值 寄存器A口选择信号处于访存阶段的值 寄存器写使能处于访存阶段的值 选择ALU的A口数据 信号 e_SB w_SA w_wRegEn 含义 寄存器B口选择信号处于执行阶段的值 寄存器A口选择信号处于回写阶段的值 寄存器写使能处于回写阶段的值 选择ALU的B口数据 forwradB 表20 五级Fowarding模块信号说明 7
3 解决各种相关用到的主要信号的分析
按照分工的三类相关分别撰写,具体哪类相关谁负责的要标出姓名。
五级流水CPU结构图IRFlushHazadrDetectUnitPCFlushtFlag Flag OperatorPCnextMUX1+IF_IDRegID_EXRege_ALUSrc, e_ALUOpr, e_SetFlagEX_MEMRegm_wrMemMEM_WBRegw_wrMem+offsetIMMNOPPCOuterDB1MUX0指令寄存器IRRegArrayAoutSASBBoutw_wRegEnw_SBWrite dataRegSelRegOutREGISTERSMUXALUaIntFlagALUMUXALUbInflagALUOutREGISTERSm_ALUOutOuterDBREGISTERSw_MemToRegw_ALUOutw_MemOut0MUX1m_RBdataforwardAm_wRegEnm_SAw_wRegEnforwardBForwarding Unite_SAe_SBw_SAPCm_ALUOutw_wrMem“zzzz”MemOuterDBRead dataWrite datawrMem_addr MUX wrMAUnit1 MUX 0
1)资源相关(结构冲突)(刘兆坤):指多条指令进入流水线后在同一机器时钟周期内争用同一个功能部件所发生的冲突
8
上图为、经典的5段流水线,但为降低复杂度,不采用Cache(IM和DM都为内存) 执行访存 取指译码 取指译码
上图为结构冲突的示意图,由于没有采用cache,第一条指令执行访存和第二条指令执行取指的时候都会访问到内存,因此会有访问存储器的结构冲突
解决办法1:插入暂停周期
由于访问同一个存储器而引起的结构冲突
9
1 load M 指令i+1
指令i+2
暂 停 时间(时钟周期) 2 Reg 3 4 M 5 Reg 6 7 8 M Reg 指令i+3
气泡
为消除结构冲突而插入的流水线 结合实验代码的信号分析vhd:
ALU M Reg ALU M Reg 气泡 ALU M M Reg 气泡 气泡 气泡 ALU Reg M
代码段:
当发生访存以及取指冲突时,主要是LOAD以及STORE操作,PCStall=1
当不发生访存以及取指冲突时,如果是空操作,则PCStall=1,并且IFFlush=0. 其它情况则不关注。
解决办法2:设置相互独立的指令存储器和数据存储器或设置相互独立的指令Cache和数据Cache。
10