SmcAnsMux.v 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Company: TAIR
  3. // Engineer:
  4. //
  5. // Create Date: 10/30/2023 11:24:31 AM
  6. // Design Name:
  7. // Module Name: SmcAnsMux
  8. // Project Name: S5443_V3_FPGA3
  9. // Target Devices: BOARD: BY5443v3. FPGA: xc7s25csga225-2
  10. // Tool Versions:
  11. // Description:
  12. //
  13. // Dependencies:
  14. //
  15. // Revision:
  16. // Revision 1.0 - File Created
  17. // Additional Comments:
  18. //
  19. //////////////////////////////////////////////////////////////////////////////////
  20. module SmcAnsMux
  21. #(
  22. parameter CMD_REG_WIDTH = 32,
  23. parameter ADDR_REG_WIDTH = 12
  24. )
  25. (
  26. input Clk_i,
  27. input [ADDR_REG_WIDTH-1:0] Addr_i,
  28. input [ADDR_REG_WIDTH-1:0] ToRegMapAddr_i,
  29. input RequestToFifo_i,
  30. input FifoRxRst_i,
  31. input SmcAre_i,
  32. input [CMD_REG_WIDTH/2-1:0] DataFromRegMap_i,
  33. input [CMD_REG_WIDTH-1:0] DataFromRxFifo1_i,
  34. input [CMD_REG_WIDTH-1:0] DataFromRxFifo2_i,
  35. input [CMD_REG_WIDTH-1:0] DataFromRxFifo3_i,
  36. input [CMD_REG_WIDTH-1:0] DataFromRxFifo4_i,
  37. input [CMD_REG_WIDTH-1:0] DataFromRxFifo5_i,
  38. input [CMD_REG_WIDTH-1:0] DataFromRxFifo6_i,
  39. input [CMD_REG_WIDTH-1:0] DataFromRxFifo7_i,
  40. output [CMD_REG_WIDTH/2-1:0] AnsData_o
  41. );
  42. //================================================================================
  43. // REG/WIRE
  44. //================================================================================
  45. wire [0:31] dataFromRxFifo [6:0];
  46. wire [15:0] dataFromRegMap;
  47. reg [15:0] dataFromRxFifoR;
  48. reg [1:0] readEnCnt;
  49. (* dont_touch = "true" *)reg [CMD_REG_WIDTH/2-1:0] dataFromRxFifoR1;
  50. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR2;
  51. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR3;
  52. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR4;
  53. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR5;
  54. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR6;
  55. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR7;
  56. //================================================================================
  57. // ASSIGNMENTS
  58. //================================================================================
  59. assign dataFromRxFifo[0] = DataFromRxFifo1_i;
  60. assign dataFromRxFifo[1] = DataFromRxFifo2_i;
  61. assign dataFromRxFifo[2] = DataFromRxFifo3_i;
  62. assign dataFromRxFifo[3] = DataFromRxFifo4_i;
  63. assign dataFromRxFifo[4] = DataFromRxFifo5_i;
  64. assign dataFromRxFifo[5] = DataFromRxFifo6_i;
  65. assign dataFromRxFifo[6] = DataFromRxFifo7_i;
  66. assign dataFromRegMap = DataFromRegMap_i;
  67. assign AnsData_o = (!RequestToFifo_i) ? dataFromRegMap : dataFromRxFifoR;
  68. //================================================================================
  69. // LOCALPARAMS
  70. //================================================================================
  71. //================================================================================
  72. // CODING
  73. //================================================================================
  74. always @(posedge Clk_i) begin
  75. if (FifoRxRst_i) begin
  76. readEnCnt <= 1'b0;
  77. end
  78. else begin
  79. if (!SmcAre_i) begin
  80. readEnCnt <= readEnCnt + 1'b1;
  81. end
  82. else begin
  83. readEnCnt <= 1'b0;
  84. end
  85. end
  86. end
  87. always @(*) begin
  88. if (!SmcAre_i && readEnCnt < 1) begin
  89. case(Addr_i)
  90. 12'h1c: begin
  91. dataFromRxFifoR1 = DataFromRxFifo1_i[31:16];
  92. end
  93. 12'h6c: begin
  94. dataFromRxFifoR2 = DataFromRxFifo2_i;
  95. end
  96. 12'h10c: begin
  97. dataFromRxFifoR3 = DataFromRxFifo3_i;
  98. end
  99. 12'h15c: begin
  100. dataFromRxFifoR4 = DataFromRxFifo4_i;
  101. end
  102. 12'h1ac: begin
  103. dataFromRxFifoR5 = DataFromRxFifo5_i;
  104. end
  105. 12'h1fc: begin
  106. dataFromRxFifoR6 = DataFromRxFifo6_i;
  107. end
  108. 12'h24c: begin
  109. dataFromRxFifoR7 = DataFromRxFifo7_i;
  110. end
  111. endcase
  112. end
  113. end
  114. always @(*) begin
  115. case (Addr_i)
  116. 12'h1c: begin
  117. dataFromRxFifoR = DataFromRxFifo1_i[15:0];
  118. end
  119. 12'h1e: begin
  120. dataFromRxFifoR = dataFromRxFifoR1;
  121. end
  122. 12'h6c: begin
  123. dataFromRxFifoR = DataFromRxFifo2_i[15:0];
  124. end
  125. 12'h6e: begin
  126. dataFromRxFifoR = dataFromRxFifoR2[31:16];
  127. end
  128. 12'h10c: begin
  129. dataFromRxFifoR = DataFromRxFifo3_i[15:0];
  130. end
  131. 12'h10e: begin
  132. dataFromRxFifoR = dataFromRxFifoR3[31:16];
  133. end
  134. 12'h15c: begin
  135. dataFromRxFifoR = DataFromRxFifo4_i[15:0];
  136. end
  137. 12'h15e: begin
  138. dataFromRxFifoR = dataFromRxFifoR4[31:16];
  139. end
  140. 12'h1ac: begin
  141. dataFromRxFifoR = DataFromRxFifo5_i[15:0];
  142. end
  143. 12'h1ae: begin
  144. dataFromRxFifoR = dataFromRxFifoR5[31:16];
  145. end
  146. 12'h1fc: begin
  147. dataFromRxFifoR = DataFromRxFifo6_i[15:0];
  148. end
  149. 12'h1fe: begin
  150. dataFromRxFifoR = dataFromRxFifoR6[31:16];
  151. end
  152. 12'h24c: begin
  153. dataFromRxFifoR = DataFromRxFifo7_i[15:0];
  154. end
  155. 12'h24e: begin
  156. dataFromRxFifoR = dataFromRxFifoR7[31:16];
  157. end
  158. default: begin
  159. dataFromRxFifoR = 16'h0;
  160. end
  161. endcase
  162. end
  163. endmodule