DataMuxer.v 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. module DataMuxer
  2. #(
  3. parameter CmdRegWidth = 16,
  4. parameter AddrRegWidth= 12,
  5. parameter FifoNum = 7,
  6. // parameter Fifo0WriteLsbAddr = 12'h0+12'h24,
  7. // parameter Fifo0WriteMsbAddr = 12'h0+12'h26,
  8. // parameter Fifo1WriteLsbAddr = 12'h50+12'h24,
  9. // parameter Fifo2WriteMsbAddr = 12'hF0+12'h26,
  10. // parameter Fifo3WriteLsbAddr = 12'h140+12'h24,
  11. // parameter Fifo4WriteMsbAddr = 12'h190+12'h26,
  12. // parameter Fifo5WriteLsbAddr = 12'h1e0+12'h24,
  13. // parameter Fifo6WriteMsbAddr = 12'h230+12'h26
  14. parameter Fifo0WriteLsbAddr = 12'h0+12'd24,
  15. parameter Fifo0WriteMsbAddr = 12'h0+12'd26,
  16. parameter Fifo1WriteLsbAddr = 12'h50+12'd24,
  17. parameter Fifo1WriteMsbAddr = 12'h50+12'd26,
  18. parameter Fifo2WriteLsbAddr = 12'hf0+12'd24,
  19. parameter Fifo2WriteMsbAddr = 12'hf0+12'd26,
  20. parameter Fifo3WriteLsbAddr = 12'h140+12'd24,
  21. parameter Fifo3WriteMsbAddr = 12'h140+12'd26,
  22. parameter Fifo4WriteLsbAddr = 12'h190+12'd24,
  23. parameter Fifo4WriteMsbAddr = 12'h190+12'd26,
  24. parameter Fifo5WriteLsbAddr = 12'h1e0+12'd24,
  25. parameter Fifo5WriteMsbAddr = 12'h1e0+12'd26,
  26. parameter Fifo6WriteLsbAddr = 12'h230+12'd24,
  27. parameter Fifo6WriteMsbAddr = 12'h230+12'd26,
  28. parameter Fifo0ReadLsbAddr = 12'h0+12'd28,
  29. parameter Fifo0ReadMsbAddr = 12'h0+12'd30,
  30. parameter Fifo1ReadLsbAddr = 12'h50+12'd28,
  31. parameter Fifo1ReadMsbAddr = 12'h50+12'd30,
  32. parameter Fifo2ReadLsbAddr = 12'hf0+12'd28,
  33. parameter Fifo2ReadMsbAddr = 12'hf0+12'd30,
  34. parameter Fifo3ReadLsbAddr = 12'h140+12'd28,
  35. parameter Fifo3ReadMsbAddr = 12'h140+12'd30,
  36. parameter Fifo4ReadLsbAddr = 12'h190+12'd28,
  37. parameter Fifo4ReadMsbAddr = 12'h190+12'd30,
  38. parameter Fifo5ReadLsbAddr = 12'h1e0+12'd28,
  39. parameter Fifo5ReadMsbAddr = 12'h1e0+12'd30,
  40. parameter Fifo6ReadLsbAddr = 12'h230+12'd28,
  41. parameter Fifo6ReadMsbAddr = 12'h230+12'd30
  42. )
  43. (
  44. input Clk_i,
  45. input Rst_i,
  46. input SmcVal_i,
  47. input [CmdRegWidth-1:0] SmcData_i,
  48. input [AddrRegWidth-1:0] SmcAddr_i,
  49. output reg ToRegMapVal_o,
  50. output reg [CmdRegWidth-1:0] ToRegMapData_o,
  51. output reg [AddrRegWidth-1:0] ToRegMapAddr_o,
  52. output reg [FifoNum-1:0] ToFifoVal_o,
  53. output reg [CmdRegWidth*2*FifoNum-1:0] ToFifoData_o
  54. );
  55. //================================================================================
  56. // REG/WIRE
  57. //================================================================================
  58. wire requestToFifo0 = ((SmcAddr_i==Fifo0WriteLsbAddr||SmcAddr_i==Fifo0WriteMsbAddr)|| (SmcAddr_i==Fifo0ReadLsbAddr||SmcAddr_i==Fifo0ReadMsbAddr));
  59. wire requestToFifo1 = ((SmcAddr_i==Fifo1WriteLsbAddr||SmcAddr_i==Fifo1WriteMsbAddr)|| (SmcAddr_i==Fifo1ReadLsbAddr||SmcAddr_i==Fifo1ReadMsbAddr));
  60. wire requestToFifo2 = ((SmcAddr_i==Fifo2WriteLsbAddr||SmcAddr_i==Fifo2WriteMsbAddr)|| (SmcAddr_i==Fifo2ReadLsbAddr||SmcAddr_i==Fifo2ReadMsbAddr));
  61. wire requestToFifo3 = ((SmcAddr_i==Fifo3WriteLsbAddr||SmcAddr_i==Fifo3WriteMsbAddr)|| (SmcAddr_i==Fifo3ReadLsbAddr||SmcAddr_i==Fifo3ReadMsbAddr));
  62. wire requestToFifo4 = ((SmcAddr_i==Fifo4WriteLsbAddr||SmcAddr_i==Fifo4WriteMsbAddr)|| (SmcAddr_i==Fifo4ReadLsbAddr||SmcAddr_i==Fifo4ReadMsbAddr));
  63. wire requestToFifo5 = ((SmcAddr_i==Fifo5WriteLsbAddr||SmcAddr_i==Fifo5WriteMsbAddr)|| (SmcAddr_i==Fifo5ReadLsbAddr||SmcAddr_i==Fifo5ReadMsbAddr));
  64. wire requestToFifo6 = ((SmcAddr_i==Fifo6WriteLsbAddr||SmcAddr_i==Fifo6WriteMsbAddr)|| (SmcAddr_i==Fifo6ReadLsbAddr||SmcAddr_i==Fifo6ReadMsbAddr));
  65. wire requestToFifo = (requestToFifo0|requestToFifo1|requestToFifo2|requestToFifo3|requestToFifo4|requestToFifo5|requestToFifo6);
  66. //================================================================================
  67. // ASSIGNMENTS
  68. //================================================================================
  69. //================================================================================
  70. // LOCALPARAMS
  71. //================================================================================
  72. //================================================================================
  73. // CODING
  74. //================================================================================
  75. always @(posedge Clk_i or posedge Rst_i) begin
  76. if (Rst_i) begin
  77. ToRegMapVal_o <= 1'b0;
  78. ToRegMapData_o <= 16'h0;
  79. ToRegMapAddr_o <= 12'h0;
  80. ToFifoVal_o <= 7'h0;
  81. ToFifoData_o <= 0;
  82. end else begin
  83. if (requestToFifo) begin
  84. case(SmcAddr_i)
  85. Fifo0WriteLsbAddr: begin
  86. ToFifoVal_o[0] <= 1'b0;
  87. ToFifoData_o[CmdRegWidth*0+:CmdRegWidth] <= SmcData_i;
  88. end
  89. Fifo0WriteMsbAddr: begin
  90. ToFifoVal_o[0] <= SmcVal_i;
  91. ToFifoData_o[CmdRegWidth*1+:CmdRegWidth] <= SmcData_i;
  92. end
  93. Fifo1WriteLsbAddr: begin
  94. ToFifoVal_o[1] <= 1'b0;
  95. ToFifoData_o[CmdRegWidth*2+:CmdRegWidth] <= SmcData_i;
  96. end
  97. Fifo1WriteMsbAddr: begin
  98. ToFifoVal_o[1] <= SmcVal_i;
  99. ToFifoData_o[CmdRegWidth*3+:CmdRegWidth] <= SmcData_i;
  100. end
  101. Fifo2WriteLsbAddr: begin
  102. ToFifoVal_o[2] <= 1'b0;
  103. ToFifoData_o[CmdRegWidth*4+:CmdRegWidth] <= SmcData_i;
  104. end
  105. Fifo2WriteMsbAddr: begin
  106. ToFifoVal_o[2] <= SmcVal_i;
  107. ToFifoData_o[CmdRegWidth*5+:CmdRegWidth] <= SmcData_i;
  108. end
  109. Fifo3WriteLsbAddr: begin
  110. ToFifoVal_o[3] <= 1'b0;
  111. ToFifoData_o[CmdRegWidth*6+:CmdRegWidth] <= SmcData_i;
  112. end
  113. Fifo3WriteMsbAddr: begin
  114. ToFifoVal_o[3] <= SmcVal_i;
  115. ToFifoData_o[CmdRegWidth*7+:CmdRegWidth] <= SmcData_i;
  116. end
  117. Fifo4WriteLsbAddr: begin
  118. ToFifoVal_o[4] <= 1'b0;
  119. ToFifoData_o[CmdRegWidth*8+:CmdRegWidth] <= SmcData_i;
  120. end
  121. Fifo4WriteMsbAddr: begin
  122. ToFifoVal_o[4] <= SmcVal_i;
  123. ToFifoData_o[CmdRegWidth*9+:CmdRegWidth] <= SmcData_i;
  124. end
  125. Fifo5WriteLsbAddr: begin
  126. ToFifoVal_o[5] <= 1'b0;
  127. ToFifoData_o[CmdRegWidth*10+:CmdRegWidth] <= SmcData_i;
  128. end
  129. Fifo5WriteMsbAddr: begin
  130. ToFifoVal_o[5] <= SmcVal_i;
  131. ToFifoData_o[CmdRegWidth*11+:CmdRegWidth] <= SmcData_i;
  132. end
  133. Fifo6WriteLsbAddr: begin
  134. ToFifoVal_o[6] <= 1'b0;
  135. ToFifoData_o[CmdRegWidth*12+:CmdRegWidth] <= SmcData_i;
  136. end
  137. Fifo6WriteMsbAddr: begin
  138. ToFifoVal_o[6] <= SmcVal_i;
  139. ToFifoData_o[CmdRegWidth*13+:CmdRegWidth] <= SmcData_i;
  140. end
  141. endcase
  142. ToRegMapAddr_o <= 0;
  143. end else begin
  144. ToRegMapVal_o <= SmcVal_i;
  145. ToFifoVal_o <= 7'h0;
  146. ToRegMapData_o <= SmcData_i;
  147. ToRegMapAddr_o <= SmcAddr_i;
  148. ToFifoData_o <= 0;
  149. end
  150. end
  151. end
  152. endmodule