Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. module miriscv_register_file
  2. #(
  3. parameter DATA_WIDTH = 32
  4. )
  5. (
  6. // Clock and Reset
  7. input clk_i,
  8. input rst_n_i,
  9.  
  10. //Read port R1
  11. input [4:0] raddr_a_i,
  12. output [DATA_WIDTH-1:0] rdata_a_o,
  13.  
  14. //Read port R2
  15. input [4:0] raddr_b_i,
  16. output [DATA_WIDTH-1:0] rdata_b_o,
  17.  
  18.  
  19. // Write port W1
  20. input [4:0] waddr_a_i,
  21. input [DATA_WIDTH-1:0] wdata_a_i,
  22. input we_a_i
  23.  
  24. );
  25.  
  26. reg [DATA_WIDTH-1:0] Registers[30:0];
  27.  
  28. assign rdata_a_o = raddr_a_i != 0 ? Registers[raddr_a_i - 1]:0;
  29. assign rdata_b_o = raddr_b_i != 0 ? Registers[raddr_b_i - 1]:0;
  30.  
  31. integer i = 0;
  32.  
  33.  
  34. always@(posedge clk_i)
  35. begin
  36. if(!rst_n_i)
  37. begin
  38. for (i = 0; i < 31; i = i + 1)
  39. Registers[i] <=0;
  40. end
  41. if(we_a_i)
  42. begin
  43. if(waddr_a_i != 0)
  44. Registers[waddr_a_i - 1] <= wdata_a_i;
  45. end
  46. end
  47.  
  48. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement