You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
864 B

2 years ago
  1. module zutils_register #(
  2. parameter REG_START_ADD = 0,
  3. parameter ADD_NUM = 10
  4. ) (
  5. input clk, //clock input
  6. input rst_n, //asynchronous reset input, low active
  7. //regbus interface
  8. output reg [31:0] addr,
  9. input [31:0] wr_data,
  10. input wr_en,
  11. inout wire [31:0] rd_data //received serial data
  12. );
  13. parameter REG_END_ADD = REG_START_ADD + ADD_NUM - 1; //寄存器结束地址
  14. reg [31:0] data[REG_START_ADD:REG_END_ADD];
  15. integer i;
  16. always @(posedge clk or negedge rst_n) begin
  17. if (!rst_n) begin
  18. for (i = 0; i < ADD_NUM; i = i + 1) begin
  19. data[i] <= 0;
  20. end
  21. end else begin
  22. if (wr_en && addr >= REG_START_ADD && addr <= REG_END_ADD) data[addr] <= wr_data;
  23. end
  24. end
  25. assign rd_data = (addr >= REG_START_ADD && addr <= REG_END_ADD) ? data[addr] : 31'bz;
  26. endmodule