~ruther/verilog-riscv-semestral-project

24eccbe0e5c0dabfc068a993b5167510756a4e22 — Rutherther 1 year, 7 months ago f8bf441
refactor: parametrize register file
1 files changed, 13 insertions(+), 10 deletions(-)

M src/register_file.sv
M src/register_file.sv => src/register_file.sv +13 -10
@@ 1,36 1,39 @@
module register_file(clk, a1, a2, a3, we3, wd3, rd1, rd2);
  parameter WIDTH = 32;
  parameter ADDRESS_LENGTH = 5;
  parameter SIZE = 1 << ADDRESS_LENGTH;

  input clk;
  input [4:0] a1;
  input [4:0] a2;
  input [4:0] a3;
  input [ADDRESS_LENGTH - 1:0] a1;
  input [ADDRESS_LENGTH - 1:0] a2;
  input [ADDRESS_LENGTH - 1:0] a3;

  input       we3; // write enable
  input [31:0] wd3; // write data
  input [WIDTH - 1:0] wd3; // write data

  output reg [31:0] rd1;
  output reg [31:0] rd2;
  output reg [WIDTH - 1:0] rd1;
  output reg [WIDTH - 1:0] rd2;

  reg [31:0]    gprs [32];
  reg [WIDTH - 1:0]    gprs [SIZE];

  wire          clk;

  always_comb begin
    if (a1 == 5'b0)
    if (a1 == {ADDRESS_LENGTH{1'b0}})
      rd1 = gprs[a1];
    else
      rd1 = 32'b0;
  end

  always_comb begin
    if (a2 == 5'b0)
    if (a2 == {ADDRESS_LENGTH{1'b0}})
      rd2 = gprs[a2];
    else
      rd2 = 32'b0;
  end

  always_ff @(posedge clk) begin
    if (we3 && a3 != 5'b0)
    if (we3 && a3 != {ADDRESS_LENGTH{1'b0}})
      gprs[a3] <= wd3;
  end


Do not follow this link