32位MIPS流水线CPU设计
一、 实验信息
略
二、 实验内容
(一) 设计原理及实验方案
1.总体设计思路:
通过将单周期处理器分解长成5个流水线阶段来构成流水线处理器。在每阶段流水线中同时执行5条指令。这五个流水线阶段分别为:取指令、译码、执行、存储器和写回。译码阶段,处理器从寄存器文件中读取源操作数并对指令译码以便产生控制信号。执行阶段,处理器使用ALU执行计算。在存储器阶段,处理器读或写数据存储器。写回阶段,如果需要,处理器将结果写回到寄存器文件。
流水线处理器提升了执行指令的效率,但是需要解决一个核心问题——冲突。
冲突指结构冒险、数据冒险等,前者指两个指令需要共用一个逻辑部件,后者指后一条指令需要使用的数据在需要使用时还没有被前面的指令计算出来或者存储。
结构冒险可以通过规范流水线指令格式和增多逻辑元件等方法解决。本实验中主要考虑数据冒险,设计中可以运用重定向、阻塞、刷新等方法化解冲突。这使数据路径中alu的srca,srcb的来源增多(转发、重定向),一个指令的执行阶段,数据可以来自于本次读取的数据,可以来自上一指令的alu计算结果或者上上条指令的结果。
同时需要使用寄存器存储alu的计算结果、从存储器中读数的结果和一些控制信号。如解决写后读的冲突,让寄存器写口保持在前半周期,寄存器读口保持在后半周期,即clk下降沿时写数据。另外需要考虑的一个冲突是beq指令的控制冲突(分支指令冲突),在取下一条指令时分支是否发生尚未确定(alu计算结果和判断是否为0的工作还没做),所以流水线处理器不知道取哪条指令。本次设计中增加了一个模块计算equalD表示两个操作数是否相等,如值为1表示符合beq的跳转条件。该比较器模块放到译码阶段,这样从寄存器文件中读操作数并比较,可以在译码阶段结束时确定下一个PC。