Verilog中的流水线MIPS处理器(第3部分)

此项目是Verilog中的流水线MIPS处理器(第3部分)。该项目将展示32位流水线MIPS处理器的Verilog代码。 在第2部分中,我介绍了单周期MIPS数据路径的所有Verilog代码。在这一部分中,添加了流水线寄存器以完成流水线MIPS处理器。 将提供完整的32位流水线MIPS处理器的Verilog代码。在将流水线寄存器,转发单元,停顿控制单元和刷新控制单元添加到单周期数据路径后,转发,停转控制和冲洗控制单元旨在解决流水线MIPS处理器中的数据并控制危害。

应用介绍

此项目是Verilog中的流水线MIPS处理器(第3部分)。

该项目将展示32位流水线MIPS处理器的Verilog代码。 在第2部分中,我介绍了单周期MIPS数据路径的所有Verilog代码。在这一部分中,添加了流水线寄存器以完成流水线MIPS处理器。 将提供完整的32位流水线MIPS处理器的Verilog代码。在将流水线寄存器,转发单元,停顿控制单元和刷新控制单元添加到单周期数据路径后。 转发,停转控制和冲洗控制单元旨在解决流水线MIPS处理器中的数据并控制危害。

转发单元:

转发单元旨在解决流水线式MIPS处理器中的数据危险。 当检测到数据危险时,ALU输出上的正确数据将转发到ALU输入。 当前指令的源寄存器与上一条指令的目标寄存器相同时,将检测到数据危害。添加转发单元以解决数据危险后,ALU输入处的2x32至32多路复用器将变为3x32至32多路复用器。

失速控制单元:

当前读取存储指令的目标寄存器与ID阶段中下一指令的源寄存器相同时,会发生需要暂停1个周期的数据危险,但XORI和LW指令的ID_rt除外(其中 Rt是目标寄存器,而不是XORI和LW的源寄存器)。

冲洗控制单元:

冲洗控制单元旨在解决控制危险,当执行跳转指令时,它将丢弃IF和ID阶段的指令。

附件文件中包括:转发单元的Verilog代码、多路复用器的Verilog代码、失速控制单元的Verilog代码、冲洗控制单元的Verilog代码、WB_Forward单位的Verilog代码、32位流水线MIPS处理器的顶级Verilog代码、用于32位流水线MIPS处理器的Verilog Testbench代码。

本人在下方展示了转发单元的Verilog代码;如想了解的更多请下载附件。

`timescale 1 ps / 100 fs
// fpga4student.com: FPGA projects, Verilog Projects, VHDL projects
// Verilog project: 32-bit 5-stage Pipelined MIPS Processor in Verilog 
// Forwarding Unit
module ForwardingUnit(ForwardA,ForwardB,MEM_RegWrite,WB_RegWrite,MEM_WriteRegister,WB_WriteRegister,EX_rs,EX_rt);
output [1:0] ForwardA,ForwardB;
wire [1:0] ForwardA,ForwardB;
input MEM_RegWrite,WB_RegWrite;
input [4:0] MEM_WriteRegister,WB_WriteRegister,EX_rs,EX_rt;
// a= 1 if ( MEM_WriteRegister != 0 )
or #(50) orMEM_WriteReg(a,MEM_WriteRegister[4],MEM_WriteRegister[3],MEM_WriteRegister[2],MEM_WriteRegister[1],MEM_WriteRegister[0]);
CompareAddress CompMEM_WriteReg_EXrs(b,MEM_WriteRegister,EX_rs);
and #(50) andx(x,MEM_RegWrite,a,b);
// x=1 if ((MEM_RegWrite==1)&&(MEM_WriteRegister != 0)&&(MEM_WriteRegister==EX_rs))
// c= 1 if ( WB_WriteRegister != 0 )
or #(50) orWB_WriteReg(c,WB_WriteRegister[4],WB_WriteRegister[3],WB_WriteRegister[2],WB_WriteRegister[1],WB_WriteRegister[0]);
CompareAddress CompWB_WriteReg_EXrs(d,WB_WriteRegister,EX_rs);
and #(50) andy(y,WB_RegWrite,c,d);
// y=1 if ((WB_RegWrite==1)&&(WB_WriteRegister != 0)&&(WB_WriteRegister==EX_rs))
// ForwardA[1] = x; va ForwardA[0] = (NOT x). y ;
assign ForwardA[1] = x;
not #(50) notxgate(notx,x);
and #(50) NOTxANDy(ForwardA[0],notx,y);
// ForwardB 
CompareAddress CompMEM_WriteReg_EXrt(b1,MEM_WriteRegister,EX_rt);
CompareAddress CompWB_WriteReg_EXrt(d1,WB_WriteRegister,EX_rt);
and #(50) andx1(x1,MEM_RegWrite,a,b1);
and #(50) andy1(y1,WB_RegWrite,c,d1);
assign ForwardB[1] = x1;
not #(50) notx1gate(notx1,x1);
and #(50) NOTx1ANDy1(ForwardB[0],notx1,y1);
endmodule

文件列表(部分)

名称 大小 修改日期
Verilog中的流水线MIPS处理器(第3部分)附件.txt4.31 KB2020-04-01

立即下载

相关下载

[Verilog中的流水线MIPS处理器(第3部分)] 此项目是Verilog中的流水线MIPS处理器(第3部分)。该项目将展示32位流水线MIPS处理器的Verilog代码。 在第2部分中,我介绍了单周期MIPS数据路径的所有Verilog代码。在这一部分中,添加了流水线寄存器以完成流水线MIPS处理器。 将提供完整的32位流水线MIPS处理器的Verilog代码。在将流水线寄存器,转发单元,停顿控制单元和刷新控制单元添加到单周期数据路径后,转发,停转控制和冲洗控制单元旨在解决流水线MIPS处理器中的数据并控制危害。
[Verilog中的流水线MIPS处理器(第1部分)] 此项目是Verilog中的流水线MIPS处理器(第1部分)。上次,发布了一个用于16位单周期MIPS处理器的Verilog代码,并且多次要求提供一个32位5级流水线MIPS处理器的Verilog代码。 单周期MIPS的第一个问题是浪费每个时钟周期仅使用每个功能单元一次的区域。 另一个严重的缺点是时钟周期由处理器中可能的最长路径确定。 因此,流水线式MIPS通过在一个时钟周期内利用大多数功能单元并通过增加指令吞吐量来提高性能来解决这些问题。
[用于16位单周期MIPS处理器的Verilog代码] 此项目是用于16位单周期MIPS处理器的Verilog代码。在此项目中,Verilog HDL中实现了16位单周期MIPS处理器。 MIPS是一种RISC处理器,在许多大学中,与计算机组织和体系结构相关的学术课程广泛使用了MIPS。在完成MIPS处理器的设计之后,可以很容易地为MIPS处理器编写Verilog代码。想了解更多请下载附件。

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部