微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 行业新闻动态 > 64位MIPS指令处理器的流水线设计

64位MIPS指令处理器的流水线设计

时间:06-28 来源:合肥工业大学 李明刚 点击:

在流水线上的操作,所以未发生的互锁将被清除。互锁处于较高优先级时,异常信号保持,直到流水线上无较高优先级的互锁信号时流水线响应异常。

4.4流水线冲刷

在流水线运行的过程中,由于程序执行的不确定性,会出现异常或者是跳转、子程序或异常处理程序返回的情况,导致顺序执行的指令发生变化。但是,由于采取了流水线设计,在指令顺序发生变化时需要舍弃已经进入流水线的部分指令,从其他指令地址重新装载指令。

流水线为了冲刷相应的指令,对指令缓存,Dec,Exec和Mem级的控制信号加入了多路选择器,通过流水线冲刷单元发出的选择信号来选通控制信号,正常情况下选通控制信号来完成对各级操作的控制,如果要冲刷某一级流水线上的指令(如Exec级),则相应的flushExe c信号选择"0"来执行空操作,被冲刷的流水级可以看作执行了一条NOP指令。

4.5数据旁路

通过对流水线结构的分析发现,对于一条执行结果要写回寄存器的指令,在Exec级计算出的数据要在WB级才写回寄存器堆,后面的指令如果需要该结果,就需要等待直到数据写回才继续流水线执行。如图2中的第一条sub指令将$1和$3相减的结果保存到$2寄存器,结果在C3周期得到,C5周期写回寄存器,而后续的and和or指令分别在C4、C5使用$2的值就会产生错误的结果。而add和sw在C6和C7使用$2寄存器的值就会得到希望的结果。为了保证指令在流水线上正确高效地执行,我们在流水线控制中增加了数据旁路,在数据写回寄存器堆前将得出的结果从流水级间的暂存寄存器中调到Exec级使用。判断是否从旁路中选择的条件为:

图5是增加了数据旁路结构的流水线通道示意图。表示了图2中指令流在C4周期流水线的状态。

4.6数据冒险监测

数据旁路避免了流水线通过Stall来解决数据冒险的问题,提高了指令的执行效率。但是当load指令后面的一条指令试图读取寄存器与load指令要写的寄存器相同时,load的数据在Me m级从存储器读入,而Exec的指令必须要Stall一个周期才能通过数据旁路从Mem/WB寄存器得到数据。如:

当load指令进入Exec级,and指令进入Dec级,此时判断到load指令装载的目的寄存器与and指令的源寄存器相同,就会出现数据冒险,此时HDUStall信号使and指令等待一周期,loa d指令在Mem级得到数据后通过数据旁路机制解决数据冒险。

数据冒险监测单元也对于CP0寄存器的冒险进行了检测并控制流水线采取相应的避免机制。

5指令调试

作为对整个流水线的控制,必须在流水通道内运行各种指令流,分析流水线的控制信号能否对这些指令流在流水线上的执行进行精确控制。对整个处理器进行了虚拟仿真和FPGA验证,在仿真平台和FPGA验证板上运行了各种可能的指令流,分析了流水线控制信号的变化,确保了这个处理器的中心控制模块对指令流水线的正确控制,并达到了较高的运行效率。图6是采用虚拟仿真平台对发生itlb_miss exception的仿真波形。

五级流水线控制单元大大提高了处理器的执行效率,达到了64位处理器的高性能设计,处理器的速度达到了120 MHz,有较强的DSP数据处理能力,并且可以运行WinCE,Linux等嵌入式操作系统。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top