为以下代码写注释timescale 1ns 1ps Company Engineer Create Date 20210507 133915 Design Name Module Name EXMEMReg Project Name Target Devices Tool Versions Description Dependencies Revision Revision
`timescale 1ns / 1ps //设置时钟周期和时间精度
////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2021/05/07 13:39:15 // Design Name: // Module Name: EXMEMReg // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //////////////////////////////////////////////////////////////////////////////////
//模块声明 module EXMEMReg( input clk, //时钟信号 input reset_n, //复位信号 input en, //使能信号 input [31:0] PCAdd4_FromEX, //来自EX阶段的PC+4值 output reg[31:0] PCAdd4_ToMEM, //传递给MEM阶段的PC+4值
input [31:0] ALUResult_FromEX, //来自EX阶段的运算结果
output reg[31:0] ALUResult_ToMEM, //传递给MEM阶段的运算结果
input [31:0] RegReadData2_FromEX,//来自EX阶段的读取的寄存器值
output reg[31:0] RegReadData2_ToMEM, //传递给MEM阶段的读取的寄存器值
input [4:0] WriteReg_FromEX, //来自EX阶段的写寄存器编号
output reg[4:0] WriteReg_ToMEM, //传递给MEM阶段的写寄存器编号
input MemRead_FromEX, //来自EX阶段的读取内存信号
input MemtoReg_FromEX, //来自EX阶段的内存读取回写寄存器的信号
input MemWrite_FromEX, //来自EX阶段的写内存信号
input RegWrite_FromEX, //来自EX阶段的写寄存器信号
input J_FromEX, //来自EX阶段的跳转信号
output reg MemRead_ToMEM, //传递给MEM阶段的读取内存信号
output reg MemtoReg_ToMEM, //传递给MEM阶段的内存读取回写寄存器的信号
output reg MemWrite_ToMEM, //传递给MEM阶段的写内存信号
output reg RegWrite_ToMEM, //传递给MEM阶段的写寄存器信号
output reg J_ToMEM //传递给MEM阶段的跳转信号
);
////////////////////////////////////////////////////////// //PC+4寄存器 ////////////////////////////////////////////////////////// //always块表示PC+4寄存器的行为 always @ (posedge clk) begin if(!reset_n) PCAdd4_ToMEM<=32'h00000000; //如果复位信号为0,将PC+4寄存器的值设为0 else if(en==1) PCAdd4_ToMEM<=PCAdd4_FromEX; //如果使能信号为1,将从EX阶段传来的PC+4值传递给MEM阶段 else PCAdd4_ToMEM<=PCAdd4_ToMEM; //否则,将PC+4寄存器的值保持不变 end
////////////////////////////////////////////////////////// //ALUResult寄存器 ////////////////////////////////////////////////////////// //always块表示ALUResult寄存器的行为 always @ (posedge clk) begin if(!reset_n) ALUResult_ToMEM<=32'h00000000; //如果复位信号为0,将ALUResult寄存器的值设为0 else if(en==1) ALUResult_ToMEM<=ALUResult_FromEX;//如果使能信号为1,将从EX阶段传来的运算结果传递给MEM阶段 else ALUResult_ToMEM<=ALUResult_ToMEM; //否则,将ALUResult寄存器的值保持不变 end
////////////////////////////////////////////////////////// //读取的第二个数据寄存器 ////////////////////////////////////////////////////////// //always块表示读取的第二个数据寄存器的行为 always @ (posedge clk) begin if(!reset_n) RegReadData2_ToMEM<=32'h00000000; //如果复位信号为0,将读取的第二个数据寄存器的值设为0 else if(en==1) RegReadData2_ToMEM<=RegReadData2_FromEX;//如果使能信号为1,将从EX阶段传来的读取的第二个数据寄存器的值传递给MEM阶段 else RegReadData2_ToMEM<=RegReadData2_ToMEM; //否则,将读取的第二个数据寄存器的值保持不变 end
//////////////////////////////////////////////////////////
//寄存器堆 输入输出寄存
//////////////////////////////////////////////////////////
//always块表示寄存器堆的行为
always @ (posedge clk) begin
if(!reset_n)
begin
WriteReg_ToMEM <=32'h00000000; //如果复位信号为0,将写寄存器编号设为0
end
else if(en==1)
begin
WriteReg_ToMEM <=WriteReg_FromEX; //如果使能信号为1,将从EX阶段传来的写寄存器编号传递给MEM阶段
end
else
begin
WriteReg_ToMEM <=WriteReg_ToMEM ; //否则,将写寄存器编号保持不变
end
end
//////////////////////////////////////////////////////////
//控制信号寄存器
//////////////////////////////////////////////////////////
//always块表示控制信号寄存器的行为
always @ (posedge clk) begin
if(!reset_n)
begin
MemRead_ToMEM <=32'h00000000; //如果复位信号为0,将读取内存信号设为0
MemtoReg_ToMEM <=32'h00000000; //将内存读取回写寄存器的信号设为0
MemWrite_ToMEM <=32'h00000000; //将写内存信号设为0
RegWrite_ToMEM <=32'h00000000; //将写寄存器信号设为0
J_ToMEM <=32'h00000000; //将跳转信号设为0
end
else if(en==1)
begin
MemRead_ToMEM <=MemRead_FromEX ; //如果使能信号为1,将从EX阶段传来的读取内存信号传递给MEM阶段
MemtoReg_ToMEM <=MemtoReg_FromEX ; //将从EX阶段传来的内存读取回写寄存器的信号传递给MEM阶段
MemWrite_ToMEM <=MemWrite_FromEX ; //将从EX阶段传来的写内存信号传递给MEM阶段
RegWrite_ToMEM <=RegWrite_FromEX ; //将从EX阶段传来的写寄存器信号传递给MEM阶段
J_ToMEM <=J_FromEX ; //将从EX阶段传来的跳转信号传递给MEM阶段
end
else
begin
MemRead_ToMEM <=MemRead_ToMEM ; //否则,将读取内存信号保持不变
MemtoReg_ToMEM <=MemtoReg_ToMEM; //将内存读取回写寄存器的信号保持不变
MemWrite_ToMEM <=MemWrite_ToMEM; //将写内存信号保持不变
RegWrite_ToMEM <=RegWrite_ToMEM; //将写寄存器信号保持不变
J_ToMEM <=J_ToMEM ; //将跳转信号保持不变
end
end
endmodule //模块结
原文地址: http://www.cveoy.top/t/topic/fjyC 著作权归作者所有。请勿转载和采集!