DataOutMux.v 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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 Rst_i,
  27. input FifoRxRst_i,
  28. input Clk_i,
  29. input SmcAre_i,
  30. input [ADDR_REG_WIDTH-1:0] Addr_i,
  31. input [ADDR_REG_WIDTH-1:0] ToRegMapAddr_i,
  32. input RequestToFifo_i,
  33. input ToFifoVal_i,
  34. input [CMD_REG_WIDTH/2-1:0] DataFromRegMap_i,
  35. input [CMD_REG_WIDTH-1:0] DataFromRxFifo1_i,
  36. input [CMD_REG_WIDTH-1:0] DataFromRxFifo2_i,
  37. input [CMD_REG_WIDTH-1:0] DataFromRxFifo3_i,
  38. input [CMD_REG_WIDTH-1:0] DataFromRxFifo4_i,
  39. input [CMD_REG_WIDTH-1:0] DataFromRxFifo5_i,
  40. input [CMD_REG_WIDTH-1:0] DataFromRxFifo6_i,
  41. input [CMD_REG_WIDTH-1:0] DataFromRxFifo7_i,
  42. output [CMD_REG_WIDTH/2-1:0] AnsData_o
  43. );
  44. //================================================================================
  45. // REG/WIRE
  46. //================================================================================
  47. wire [0:31] dataFromRxFifo [6:0];
  48. wire [15:0] dataFromRegMap;
  49. reg [15:0] dataFromRxFifoR;
  50. reg [1:0] readEnCnt;
  51. (* dont_touch = "true" *)reg [CMD_REG_WIDTH/2-1:0] dataFromRxFifoR1;
  52. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR2;
  53. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR3;
  54. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR4;
  55. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR5;
  56. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR6;
  57. reg [CMD_REG_WIDTH-1:0] dataFromRxFifoR7;
  58. //================================================================================
  59. // ASSIGNMENTS
  60. //================================================================================
  61. assign dataFromRxFifo[0] = DataFromRxFifo1_i;
  62. assign dataFromRxFifo[1] = DataFromRxFifo2_i;
  63. assign dataFromRxFifo[2] = DataFromRxFifo3_i;
  64. assign dataFromRxFifo[3] = DataFromRxFifo4_i;
  65. assign dataFromRxFifo[4] = DataFromRxFifo5_i;
  66. assign dataFromRxFifo[5] = DataFromRxFifo6_i;
  67. assign dataFromRxFifo[6] = DataFromRxFifo7_i;
  68. assign dataFromRegMap = DataFromRegMap_i;
  69. assign AnsData_o = (!RequestToFifo_i) ? dataFromRegMap : dataFromRxFifoR;
  70. //================================================================================
  71. // LOCALPARAMS
  72. //================================================================================
  73. //================================================================================
  74. // CODING
  75. //================================================================================
  76. always @(posedge Clk_i) begin
  77. if (FifoRxRst_i) begin
  78. readEnCnt <= 1'b0;
  79. end
  80. else begin
  81. if (!SmcAre_i) begin
  82. readEnCnt <= readEnCnt + 1'b1;
  83. end
  84. else begin
  85. readEnCnt <= 1'b0;
  86. end
  87. end
  88. end
  89. always @(*) begin
  90. if (Rst_i) begin
  91. dataFromRxFifoR1 = 0;
  92. dataFromRxFifoR2 = 0;
  93. dataFromRxFifoR3 = 0;
  94. dataFromRxFifoR4 = 0;
  95. dataFromRxFifoR5 = 0;
  96. dataFromRxFifoR6 = 0;
  97. dataFromRxFifoR7 = 0;
  98. end
  99. else begin
  100. if (!SmcAre_i && readEnCnt < 1) begin
  101. case(Addr_i)
  102. 12'h1c: begin
  103. dataFromRxFifoR1 = DataFromRxFifo1_i[31:16];
  104. end
  105. 12'h6c: begin
  106. dataFromRxFifoR2 = DataFromRxFifo2_i;
  107. end
  108. 12'h10c: begin
  109. dataFromRxFifoR3 = DataFromRxFifo3_i;
  110. end
  111. 12'h15c: begin
  112. dataFromRxFifoR4 = DataFromRxFifo4_i;
  113. end
  114. 12'h1ac: begin
  115. dataFromRxFifoR5 = DataFromRxFifo5_i;
  116. end
  117. 12'h1fc: begin
  118. dataFromRxFifoR6 = DataFromRxFifo6_i;
  119. end
  120. 12'h24c: begin
  121. dataFromRxFifoR7 = DataFromRxFifo7_i;
  122. end
  123. endcase
  124. end
  125. end
  126. end
  127. always @(*) begin
  128. case (Addr_i)
  129. 12'h1c: begin
  130. dataFromRxFifoR = DataFromRxFifo1_i[15:0];
  131. end
  132. 12'h1e: begin
  133. dataFromRxFifoR = dataFromRxFifoR1;
  134. end
  135. 12'h6c: begin
  136. dataFromRxFifoR = DataFromRxFifo2_i[15:0];
  137. end
  138. 12'h6e: begin
  139. dataFromRxFifoR = dataFromRxFifoR2[31:16];
  140. end
  141. 12'h10c: begin
  142. dataFromRxFifoR = DataFromRxFifo3_i[15:0];
  143. end
  144. 12'h10e: begin
  145. dataFromRxFifoR = dataFromRxFifoR3[31:16];
  146. end
  147. 12'h15c: begin
  148. dataFromRxFifoR = DataFromRxFifo4_i[15:0];
  149. end
  150. 12'h15e: begin
  151. dataFromRxFifoR = dataFromRxFifoR4[31:16];
  152. end
  153. 12'h1ac: begin
  154. dataFromRxFifoR = DataFromRxFifo5_i[15:0];
  155. end
  156. 12'h1ae: begin
  157. dataFromRxFifoR = dataFromRxFifoR5[31:16];
  158. end
  159. 12'h1fc: begin
  160. dataFromRxFifoR = DataFromRxFifo6_i[15:0];
  161. end
  162. 12'h1fe: begin
  163. dataFromRxFifoR = dataFromRxFifoR6[31:16];
  164. end
  165. 12'h24c: begin
  166. dataFromRxFifoR = DataFromRxFifo7_i[15:0];
  167. end
  168. 12'h24e: begin
  169. dataFromRxFifoR = dataFromRxFifoR7[31:16];
  170. end
  171. default: begin
  172. dataFromRxFifoR = 16'h0;
  173. end
  174. endcase
  175. end
  176. endmodule