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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

114 lines
2.9 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. module zutils_register16 #(
  2. parameter REG_START_ADD = 0,
  3. parameter REG0_INIT = 0,
  4. parameter REG1_INIT = 0,
  5. parameter REG2_INIT = 0,
  6. parameter REG3_INIT = 0,
  7. parameter REG4_INIT = 0,
  8. parameter REG5_INIT = 0,
  9. parameter REG6_INIT = 0,
  10. parameter REG7_INIT = 0,
  11. parameter REG8_INIT = 0,
  12. parameter REG9_INIT = 0,
  13. parameter REGA_INIT = 0,
  14. parameter REGB_INIT = 0,
  15. parameter REGC_INIT = 0,
  16. parameter REGD_INIT = 0,
  17. parameter REGE_INIT = 0,
  18. parameter REGF_INIT = 0
  19. ) (
  20. input clk, //clock input
  21. input rst_n, //asynchronous reset input, low active
  22. //regbus interface
  23. input [31:0] addr,
  24. input [31:0] wr_data,
  25. input wr_en,
  26. output [31:0] rd_data, //received serial data
  27. output [31:0] reg0,
  28. output [31:0] reg1,
  29. output [31:0] reg2,
  30. output [31:0] reg3,
  31. output [31:0] reg4,
  32. output [31:0] reg5,
  33. output [31:0] reg6,
  34. output [31:0] reg7,
  35. output [31:0] reg8,
  36. output [31:0] reg9,
  37. output [31:0] regA,
  38. output [31:0] regB,
  39. output [31:0] regC,
  40. output [31:0] regD,
  41. output [31:0] regE,
  42. output [31:0] regF
  43. );
  44. parameter REG_END_ADD = REG_START_ADD + 16 - 1; //寄存器结束地址
  45. reg [31:0] data[0:15];
  46. assign reg0 = data[0];
  47. assign reg1 = data[1];
  48. assign reg2 = data[2];
  49. assign reg3 = data[3];
  50. assign reg4 = data[4];
  51. assign reg5 = data[5];
  52. assign reg6 = data[6];
  53. assign reg7 = data[7];
  54. assign reg8 = data[8];
  55. assign reg9 = data[9];
  56. assign regA = data[10];
  57. assign regB = data[11];
  58. assign regC = data[12];
  59. assign regD = data[13];
  60. assign regE = data[14];
  61. assign regF = data[15];
  62. // initial begin
  63. // data[0] <= REG0_INIT;
  64. // data[1] <= REG1_INIT;
  65. // data[2] <= REG2_INIT;
  66. // data[3] <= REG3_INIT;
  67. // data[4] <= REG4_INIT;
  68. // data[5] <= REG5_INIT;
  69. // data[6] <= REG6_INIT;
  70. // data[7] <= REG7_INIT;
  71. // data[8] <= REG8_INIT;
  72. // data[9] <= REG9_INIT;
  73. // data[10] <= REGA_INIT;
  74. // data[11] <= REGB_INIT;
  75. // data[12] <= REGC_INIT;
  76. // data[13] <= REGD_INIT;
  77. // data[14] <= REGE_INIT;
  78. // data[15] <= REGF_INIT;
  79. // end
  80. always @(posedge clk or negedge rst_n) begin
  81. if (!rst_n) begin
  82. data[0] <= REG0_INIT;
  83. data[1] <= REG1_INIT;
  84. data[2] <= REG2_INIT;
  85. data[3] <= REG3_INIT;
  86. data[4] <= REG4_INIT;
  87. data[5] <= REG5_INIT;
  88. data[6] <= REG6_INIT;
  89. data[7] <= REG7_INIT;
  90. data[8] <= REG8_INIT;
  91. data[9] <= REG9_INIT;
  92. data[10] <= REGA_INIT;
  93. data[11] <= REGB_INIT;
  94. data[12] <= REGC_INIT;
  95. data[13] <= REGD_INIT;
  96. data[14] <= REGE_INIT;
  97. data[15] <= REGF_INIT;
  98. end else begin
  99. if (wr_en && addr >= REG_START_ADD && addr <= REG_END_ADD)
  100. data[addr-REG_START_ADD] <= wr_data;
  101. end
  102. end
  103. assign rd_data = (addr >= REG_START_ADD && addr <= REG_END_ADD) ? data[addr-REG_START_ADD] : 31'b0;
  104. endmodule