`timescale 1ns / 1ps module Register_file_sim(R_Addr,W_Addr,Write_Reg,W_Data,clk,reset,R_Data); input [1:0]R_Addr, W_Addr; input Write_Reg, clk, reset; input [7:0]W_Data; output [7:0]R_Data; reg [7:0]REG_Files[0:3]; reg [2:0]i; assign R_Data=REG_Files[R_Addr]; always@(posedge clk or posedge reset) begin if(reset) for(i=0;i<=3;i=i+1) REG_Files[i]=0; else if(Write_Reg&&W_Addr!=0) REG_Files[W_Addr]=W_Data; end endmodule在这段代码的基础上改成8*32位寄存器堆
时间: 2024-02-09 10:11:06 浏览: 73
可以将上述代码改为实现一个 8 个 32 位寄存器的寄存器堆,修改后的代码如下:
```
`timescale 1ns / 1ps
module Register_file_sim(
input [2:0] R_Addr, W_Addr,
input Write_Reg, clk, reset,
input [31:0] W_Data,
output [31:0] R_Data
);
reg [31:0] REG_Files [0:7];
reg [2:0] i;
assign R_Data = REG_Files[R_Addr];
always@(posedge clk or posedge reset) begin
if(reset) begin
for(i = 0; i <= 7; i = i + 1) begin
REG_Files[i] = 0;
end
end
else if(Write_Reg && W_Addr != 0) begin
REG_Files[W_Addr] = W_Data;
end
end
endmodule
```
相比之前的代码,主要做了以下几处修改:
1. 修改了输入输出端口和寄存器数组的位宽,使其变为 32 位。
2. 将寄存器数组的长度改为 8,以实现 8 个 32 位寄存器的堆。
3. 修改了 for 循环的终止条件和 assign 语句中的数组索引,以适应修改后的寄存器数组长度。
阅读全文