DataOutMux.v 5.1 KB

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