blob: d2a04ca133d7d40aea5cc62eb269f4b93d1349aa [file] [log] [blame]
`include "rv32_opcodes.vh"
module vscale_regfile(
input clk,
input [`REG_ADDR_WIDTH-1:0] ra1,
output [`XPR_LEN-1:0] rd1,
input [`REG_ADDR_WIDTH-1:0] ra2,
output [`XPR_LEN-1:0] rd2,
input wen,
input [`REG_ADDR_WIDTH-1:0] wa,
input [`XPR_LEN-1:0] wd
);
reg [`XPR_LEN-1:0] data [31:0];
wire wen_internal;
// fpga-style zero register
assign wen_internal = wen && |wa;
assign rd1 = |ra1 ? data[ra1] : 0;
assign rd2 = |ra2 ? data[ra2] : 0;
always @(posedge clk) begin
if (wen_internal) begin
data[wa] <= wd;
end
end
`ifndef SYNTHESIS
integer i;
initial begin
for (i = 0; i < 32; i = i + 1) begin
data[i] = $random;
end
end
`endif
endmodule // vscale_regfile