add rvv_vrf_reg module
Change-Id: Ice93289e867e31fe0b08c34b2573eef87435d9f4
diff --git a/hdl/verilog/rvv/design/rvv_vrf_reg.sv b/hdl/verilog/rvv/design/rvv_vrf_reg.sv
new file mode 100644
index 0000000..afb8b68
--- /dev/null
+++ b/hdl/verilog/rvv/design/rvv_vrf_reg.sv
@@ -0,0 +1,40 @@
+// rvv_vrf_reg - 32 vector regsiter for V standard extention
+
+module rvv_vrf_reg (
+ vreg,
+ we,
+ wdata,
+ clk,
+ rst_n
+ );
+
+ output logic [31:0][`VLEN-1:0] vreg;
+
+ input logic [31:0][`VLENB-1:0] we; // byte enable
+ input logic [31:0][`VLEN-1:0] wdata;
+ input logic clk;
+ input logic rst_n;
+
+// -- 32 vector registers --------------------------------------------
+
+genvar i,j;
+generate
+ for (i=0; i<32; i=i+1) begin: vrf_regsiter
+ for (j=0; j<VLENB; j=j+1) begin: byte_regsiter
+ edff #(.WIDTH(8)) vrf_byte (
+ .q (vreg[i][8*j+:8]),
+ .en (we[i][j]),
+ .d (wdata[i][8*j+:8]),
+ .clk (clk),
+ .rst_n (rst_n)
+ );
+
+`ifdef ASSERT_ON
+ assert property (@(posedge clk) disable iff (!rst_n) not (we[i][j] && $isunknown(wdata[i][8*j+:8])))
+ else $error("VRF_REG: VRF unknown data %h updating vreg[%d][%d]", $sample(wdata[i][8*j+:8]), i, j);
+`endif
+ end
+ end
+endgenerate
+
+endmodule