DataOutMux.v 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. module DataOutMux#(
  2. parameter CmdRegWidth = 32,
  3. parameter AddrRegWidth= 12
  4. ) (
  5. input Rst_i,
  6. input FifoRxRst_i,
  7. input Clk_i,
  8. input SmcAre_i,
  9. input [AddrRegWidth-1:0] Addr_i,
  10. input [AddrRegWidth-1:0] ToRegMapAddr_i,
  11. input ToFifoVal_i,
  12. input [CmdRegWidth/2-1:0] DataFromRegMap_i,
  13. input [CmdRegWidth-1:0] DataFromRxFifo1_i,
  14. input [CmdRegWidth-1:0] DataFromRxFifo2_i,
  15. input [CmdRegWidth-1:0] DataFromRxFifo3_i,
  16. input [CmdRegWidth-1:0] DataFromRxFifo4_i,
  17. input [CmdRegWidth-1:0] DataFromRxFifo5_i,
  18. input [CmdRegWidth-1:0] DataFromRxFifo6_i,
  19. input [CmdRegWidth-1:0] DataFromRxFifo7_i,
  20. output [CmdRegWidth/2-1:0] AnsData_o
  21. );
  22. wire [0:31] dataFromRxFifo [6:0];
  23. wire [15:0] dataFromRegMap;
  24. reg [15:0] dataFromRxFifoR;
  25. reg [1:0] readEnCnt;
  26. (* dont_touch = "true" *)reg [CmdRegWidth/2-1:0] dataFromRxFifoR1;
  27. reg [CmdRegWidth-1:0] dataFromRxFifoR2;
  28. reg [CmdRegWidth-1:0] dataFromRxFifoR3;
  29. reg [CmdRegWidth-1:0] dataFromRxFifoR4;
  30. reg [CmdRegWidth-1:0] dataFromRxFifoR5;
  31. reg [CmdRegWidth-1:0] dataFromRxFifoR6;
  32. reg [CmdRegWidth-1:0] dataFromRxFifoR7;
  33. assign dataFromRxFifo[0] = DataFromRxFifo1_i;
  34. assign dataFromRxFifo[1] = DataFromRxFifo2_i;
  35. assign dataFromRxFifo[2] = DataFromRxFifo3_i;
  36. assign dataFromRxFifo[3] = DataFromRxFifo4_i;
  37. assign dataFromRxFifo[4] = DataFromRxFifo5_i;
  38. assign dataFromRxFifo[5] = DataFromRxFifo6_i;
  39. assign dataFromRxFifo[6] = DataFromRxFifo7_i;
  40. assign dataFromRegMap = DataFromRegMap_i;
  41. assign AnsData_o = (ToRegMapAddr_i)?dataFromRegMap:dataFromRxFifoR;
  42. always @(posedge Clk_i) begin
  43. if (FifoRxRst_i) begin
  44. readEnCnt <= 1'b0;
  45. end
  46. else begin
  47. if (!SmcAre_i) begin
  48. readEnCnt <= readEnCnt + 1'b1;
  49. end
  50. else begin
  51. readEnCnt <= 1'b0;
  52. end
  53. end
  54. end
  55. always @(*) begin
  56. if (Rst_i) begin
  57. dataFromRxFifoR1 = 0;
  58. dataFromRxFifoR2 = 0;
  59. dataFromRxFifoR3 = 0;
  60. dataFromRxFifoR4 = 0;
  61. dataFromRxFifoR5 = 0;
  62. dataFromRxFifoR6 = 0;
  63. dataFromRxFifoR7 = 0;
  64. end
  65. else begin
  66. if (!SmcAre_i && readEnCnt < 1 ) begin
  67. case(Addr_i)
  68. 12'h1c : begin
  69. dataFromRxFifoR1 = DataFromRxFifo1_i[31:16];
  70. end
  71. 12'h6c : begin
  72. dataFromRxFifoR2 = DataFromRxFifo2_i;
  73. end
  74. 12'h10c : begin
  75. dataFromRxFifoR3 = DataFromRxFifo3_i;
  76. end
  77. 12'h15c : begin
  78. dataFromRxFifoR4 = DataFromRxFifo4_i;
  79. end
  80. 12'h1ac : begin
  81. dataFromRxFifoR5 = DataFromRxFifo5_i;
  82. end
  83. 12'h1fc : begin
  84. dataFromRxFifoR6 = DataFromRxFifo6_i;
  85. end
  86. 12'h24c : begin
  87. dataFromRxFifoR7 = DataFromRxFifo7_i;
  88. end
  89. endcase
  90. end
  91. end
  92. end
  93. always @(*) begin
  94. case (Addr_i)
  95. 12'h1c: begin
  96. dataFromRxFifoR = DataFromRxFifo1_i[15:0];
  97. end
  98. 12'h1e: begin
  99. dataFromRxFifoR = dataFromRxFifoR1;
  100. end
  101. 12'h6c: begin
  102. dataFromRxFifoR = DataFromRxFifo2_i[15:0];
  103. end
  104. 12'h6e: begin
  105. dataFromRxFifoR = dataFromRxFifoR2[31:16];
  106. end
  107. 12'h10c: begin
  108. dataFromRxFifoR = DataFromRxFifo3_i[15:0];
  109. end
  110. 12'h10e: begin
  111. dataFromRxFifoR = dataFromRxFifoR3[31:16];
  112. end
  113. 12'h15c: begin
  114. dataFromRxFifoR = DataFromRxFifo4_i[15:0];
  115. end
  116. 12'h15e: begin
  117. dataFromRxFifoR = dataFromRxFifoR4[31:16];
  118. end
  119. 12'h1ac: begin
  120. dataFromRxFifoR = DataFromRxFifo5_i[15:0];
  121. end
  122. 12'h1ae: begin
  123. dataFromRxFifoR = dataFromRxFifoR5[31:16];
  124. end
  125. 12'h1fc: begin
  126. dataFromRxFifoR = DataFromRxFifo6_i[15:0];
  127. end
  128. 12'h1fe: begin
  129. dataFromRxFifoR = dataFromRxFifoR6[31:16];
  130. end
  131. 12'h24c: begin
  132. dataFromRxFifoR = DataFromRxFifo7_i[15:0];
  133. end
  134. 12'h24e: begin
  135. dataFromRxFifoR = dataFromRxFifoR7[31:16];
  136. end
  137. default: begin
  138. dataFromRxFifoR = 16'h0;
  139. end
  140. endcase
  141. end
  142. endmodule