DataMuxer.v 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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 RequestToFifo_o,
  50. output reg ToRegMapVal_o,
  51. output reg [CmdRegWidth-1:0] ToRegMapData_o,
  52. output reg [AddrRegWidth-1:0] ToRegMapAddr_o,
  53. output reg [FifoNum-1:0] ToFifoVal_o,
  54. output reg [CmdRegWidth*2*FifoNum-1:0] ToFifoData_o
  55. );
  56. //================================================================================
  57. // REG/WIRE
  58. //================================================================================
  59. wire requestToFifo0 =((SmcAddr_i==Fifo0WriteLsbAddr||SmcAddr_i==Fifo0WriteMsbAddr)|| (SmcAddr_i==Fifo0ReadLsbAddr||SmcAddr_i==Fifo0ReadMsbAddr));
  60. wire requestToFifo1 =((SmcAddr_i==Fifo1WriteLsbAddr||SmcAddr_i==Fifo1WriteMsbAddr)|| (SmcAddr_i==Fifo1ReadLsbAddr||SmcAddr_i==Fifo1ReadMsbAddr));
  61. wire requestToFifo2 =((SmcAddr_i==Fifo2WriteLsbAddr||SmcAddr_i==Fifo2WriteMsbAddr)|| (SmcAddr_i==Fifo2ReadLsbAddr||SmcAddr_i==Fifo2ReadMsbAddr));
  62. wire requestToFifo3 =((SmcAddr_i==Fifo3WriteLsbAddr||SmcAddr_i==Fifo3WriteMsbAddr)|| (SmcAddr_i==Fifo3ReadLsbAddr||SmcAddr_i==Fifo3ReadMsbAddr));
  63. wire requestToFifo4 =((SmcAddr_i==Fifo4WriteLsbAddr||SmcAddr_i==Fifo4WriteMsbAddr)|| (SmcAddr_i==Fifo4ReadLsbAddr||SmcAddr_i==Fifo4ReadMsbAddr));
  64. wire requestToFifo5 =((SmcAddr_i==Fifo5WriteLsbAddr||SmcAddr_i==Fifo5WriteMsbAddr)|| (SmcAddr_i==Fifo5ReadLsbAddr||SmcAddr_i==Fifo5ReadMsbAddr));
  65. wire requestToFifo6 =((SmcAddr_i==Fifo6WriteLsbAddr||SmcAddr_i==Fifo6WriteMsbAddr)|| (SmcAddr_i==Fifo6ReadLsbAddr||SmcAddr_i==Fifo6ReadMsbAddr));
  66. wire requestToFifo = (requestToFifo0|requestToFifo1|requestToFifo2|requestToFifo3|requestToFifo4|requestToFifo5|requestToFifo6);
  67. //================================================================================
  68. // ASSIGNMENTS
  69. //================================================================================
  70. assign RequestToFifo_o = requestToFifo;
  71. //================================================================================
  72. // LOCALPARAMS
  73. //================================================================================
  74. //================================================================================
  75. // CODING
  76. //================================================================================
  77. always @(posedge Clk_i or posedge Rst_i) begin
  78. if (Rst_i) begin
  79. ToRegMapVal_o <= 1'b0;
  80. ToRegMapData_o <= 16'h0;
  81. ToRegMapAddr_o <= 12'h0;
  82. ToFifoVal_o <= 7'h0;
  83. ToFifoData_o <= 0;
  84. end else begin
  85. if (requestToFifo) begin
  86. case(SmcAddr_i)
  87. Fifo0WriteLsbAddr: begin
  88. ToFifoVal_o[0] <= 1'b0;
  89. ToFifoData_o[CmdRegWidth*0+:CmdRegWidth] <= SmcData_i;
  90. end
  91. Fifo0WriteMsbAddr: begin
  92. ToFifoVal_o[0] <= SmcVal_i;
  93. ToFifoData_o[CmdRegWidth*1+:CmdRegWidth] <= SmcData_i;
  94. end
  95. Fifo1WriteLsbAddr: begin
  96. ToFifoVal_o[1] <= 1'b0;
  97. ToFifoData_o[CmdRegWidth*2+:CmdRegWidth] <= SmcData_i;
  98. end
  99. Fifo1WriteMsbAddr: begin
  100. ToFifoVal_o[1] <= SmcVal_i;
  101. ToFifoData_o[CmdRegWidth*3+:CmdRegWidth] <= SmcData_i;
  102. end
  103. Fifo2WriteLsbAddr: begin
  104. ToFifoVal_o[2] <= 1'b0;
  105. ToFifoData_o[CmdRegWidth*4+:CmdRegWidth] <= SmcData_i;
  106. end
  107. Fifo2WriteMsbAddr: begin
  108. ToFifoVal_o[2] <= SmcVal_i;
  109. ToFifoData_o[CmdRegWidth*5+:CmdRegWidth] <= SmcData_i;
  110. end
  111. Fifo3WriteLsbAddr: begin
  112. ToFifoVal_o[3] <= 1'b0;
  113. ToFifoData_o[CmdRegWidth*6+:CmdRegWidth] <= SmcData_i;
  114. end
  115. Fifo3WriteMsbAddr: begin
  116. ToFifoVal_o[3] <= SmcVal_i;
  117. ToFifoData_o[CmdRegWidth*7+:CmdRegWidth] <= SmcData_i;
  118. end
  119. Fifo4WriteLsbAddr: begin
  120. ToFifoVal_o[4] <= 1'b0;
  121. ToFifoData_o[CmdRegWidth*8+:CmdRegWidth] <= SmcData_i;
  122. end
  123. Fifo4WriteMsbAddr: begin
  124. ToFifoVal_o[4] <= SmcVal_i;
  125. ToFifoData_o[CmdRegWidth*9+:CmdRegWidth] <= SmcData_i;
  126. end
  127. Fifo5WriteLsbAddr: begin
  128. ToFifoVal_o[5] <= 1'b0;
  129. ToFifoData_o[CmdRegWidth*10+:CmdRegWidth] <= SmcData_i;
  130. end
  131. Fifo5WriteMsbAddr: begin
  132. ToFifoVal_o[5] <= SmcVal_i;
  133. ToFifoData_o[CmdRegWidth*11+:CmdRegWidth] <= SmcData_i;
  134. end
  135. Fifo6WriteLsbAddr: begin
  136. ToFifoVal_o[6] <= 1'b0;
  137. ToFifoData_o[CmdRegWidth*12+:CmdRegWidth] <= SmcData_i;
  138. end
  139. Fifo6WriteMsbAddr: begin
  140. ToFifoVal_o[6] <= SmcVal_i;
  141. ToFifoData_o[CmdRegWidth*13+:CmdRegWidth] <= SmcData_i;
  142. end
  143. endcase
  144. ToRegMapAddr_o <= 0;
  145. end else begin
  146. ToRegMapVal_o <= SmcVal_i;
  147. ToFifoVal_o <= 7'h0;
  148. ToRegMapData_o <= SmcData_i;
  149. ToRegMapAddr_o <= SmcAddr_i;
  150. ToFifoData_o <= 0;
  151. end
  152. end
  153. end
  154. endmodule