Verilog中的流水线MIPS处理器(第1部分)
应用介绍
此项目是Verilog中的流水线MIPS处理器(第1部分)。
上次,发布了一个用于16位单周期MIPS处理器的Verilog代码,并且多次要求提供一个32位5级流水线MIPS处理器的Verilog代码。 单周期MIPS的第一个问题是浪费每个时钟周期仅使用每个功能单元一次的区域。 另一个严重的缺点是时钟周期由处理器中可能的最长路径确定。 因此,流水线式MIPS通过在一个时钟周期内利用大多数功能单元并通过增加指令吞吐量来提高性能来解决这些问题。 但是,流水线式MIPS还面临控制和数据危害等挑战。现将在Verilog中设计和实现32位5级流水线MIPS处理器。还提供用于解决危险的特殊模块(例如转发单元,冲洗控制单元和失速控制单元)的Verilog代码。 32位流水线式MIPS处理器的Verilog代码主要通过使用结构建模来完成。
这个项目很长,因此将其分为3部分(第1部分,第2部分和第3部分)。
附件文件包括:MIPS处理器的指令集、指令存储器的Verilog代码、32位加法器的Verilog代码、注册文件的Verilog代码。
本人在下方展示了指令存储器的Verilog代码;如想了解的更多请下载附件。
/* Instruction memory module. Change the $readmemb line to have the name of the program you want to load */
// fpga4student.com: FPGA projects, Verilog Projects, VHDL projects
// Verilog project: 32-bit 5-stage Pipelined MIPS Processor in Verilog
// Instruction memory module
`timescale 1 ps / 100 fs
module InstructionMem(instruction, address);
input [31:0] address;
output [31:0] instruction;
reg [31:0]instrmem[1023:0];
reg [31:0] temp;
buf #1000 buf0(instruction[0],temp[0]),
buf1(instruction[1],temp[1]),
buf2(instruction[2],temp[2]),
buf3(instruction[3],temp[3]),
buf4(instruction[4],temp[4]),
buf5(instruction[5],temp[5]),
buf6(instruction[6],temp[6]),
buf7(instruction[7],temp[7]),
buf8(instruction[8],temp[8]),
buf9(instruction[9],temp[9]),
buf10(instruction[10],temp[10]),
buf11(instruction[11],temp[11]),
buf12(instruction[12],temp[12]),
buf13(instruction[13],temp[13]),
buf14(instruction[14],temp[14]),
buf15(instruction[15],temp[15]),
buf16(instruction[16],temp[16]),
buf17(instruction[17],temp[17]),
buf18(instruction[18],temp[18]),
buf19(instruction[19],temp[19]),
buf20(instruction[20],temp[20]),
buf21(instruction[21],temp[21]),
buf22(instruction[22],temp[22]),
buf23(instruction[23],temp[23]),
buf24(instruction[24],temp[24]),
buf25(instruction[25],temp[25]),
buf26(instruction[26],temp[26]),
buf27(instruction[27],temp[27]),
buf28(instruction[28],temp[28]),
buf29(instruction[29],temp[29]),
buf30(instruction[30],temp[30]),
buf31(instruction[31],temp[31]);
always @(address)
begin
temp=instrmem[address/4];
end
initial
begin
$readmemb("instr.txt", instrmem);
end
endmodule
module instrmemstimulous();
reg [31:0] addr;
wire [31:0] instr;
InstructionMem instructionmemory(instr, addr);
initial
begin
$monitor("Mem Address=%h instruction=%b",addr,instr);
addr=32'd0;
#10000 addr=32'd4;
#10000 addr=32'd8;
#10000 addr=32'd12;
#10000 addr=32'd16;
#10000 addr=32'd20;
#10000 addr=32'd24;
#10000 addr=32'd28;
#10000;
$finish;
end
endmodule
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » Verilog中的流水线MIPS处理器(第1部分)
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
Verilog中的流水线MIPS处理器(第1部分)附件.txt | 4.08 KB | 2020-04-01 |
发表评论 取消回复