blob: 604fa98b6f75abcc7145c63b2a2e6f543093bde4 [file] [log] [blame]
// rvv_vrf_reg - 32 vector regsiter for V standard extention
`ifndef HDL_VERILOG_RVV_DESIGN_RVV_SVH
`include "rvv_backend.svh"
`endif
`ifndef RVV_ASSERT__SVH
`include "rvv_backend_sva.svh"
`endif
module rvv_backend_vrf_reg (/*AUTOARG*/
// Outputs
vreg,
// Inputs
wen, wdata, clk, rst_n
);
output logic [`NUM_VRF-1:0][`VLEN-1:0] vreg;
input logic [`NUM_VRF-1:0][`VLENB-1:0] wen; // byte enable
input logic [`NUM_VRF-1:0][`VLEN-1:0] wdata;
input logic clk;
input logic rst_n;
// -- 32 vector registers --------------------------------------------
genvar i,j;
generate
for (i=0; i<`NUM_VRF; i=i+1) begin
for (j=0; j<`VLENB; j=j+1) begin
edff #(
.T (logic [`BYTE_WIDTH-1:0])
)
vrf_unit1_reg (
.q (vreg[i][j*`BYTE_WIDTH +: `BYTE_WIDTH]),
.e (wen[i][j]),
.d (wdata[i][j*`BYTE_WIDTH +: `BYTE_WIDTH]),
.clk (clk),
.rst_n (rst_n)
);
`ifdef ASSERT_ON
`rvv_forbid($isunknown(vreg[i][j*`BYTE_WIDTH +: `BYTE_WIDTH]))
else $error("VREG: data is unknow at vreg[%0d][%0d:%0d]",i,8*j+7,8*j);
`endif //ASSERT_ON
end //end for loop j
end //end for loop i
endgenerate
endmodule