DataMuxer.v 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. module SmcDataMux
  2. #(
  3. parameter CmdRegWidth = 32,
  4. parameter AddrRegWidth= 12,
  5. parameter FifoNum = 7,
  6. parameter Fifo0WriteAddrL = 12'h0+12'h24,
  7. parameter Fifo0WriteAddrS = 12'h0+12'h26,
  8. parameter Fifo1WriteAddrL = 12'h50+12'h24,
  9. parameter Fifo1WriteAddrS = 12'h50+12'h26,
  10. parameter Fifo2WriteAddrL = 12'hF0+12'h24,
  11. parameter Fifo2WriteAddrS = 12'hF0+12'h26,
  12. parameter Fifo3WriteAddrL = 12'h140+12'h24,
  13. parameter Fifo3WriteAddrS = 12'h140+12'h26,
  14. parameter Fifo4WriteAddrL = 12'h190+12'h24,
  15. parameter Fifo4WriteAddrS = 12'h190+12'h26,
  16. parameter Fifo5WriteAddrL = 12'h1e0+12'h24,
  17. parameter Fifo5WriteAddrS = 12'h1e0+12'h26,
  18. parameter Fifo6WriteAddrL = 12'h230+12'h24,
  19. parameter Fifo6WriteAddrS = 12'h230+12'h26
  20. )
  21. (
  22. input Clk_i,
  23. input Rst_i,
  24. input SmcVal_i,
  25. input [CmdRegWidth/2-1:0] SmcData_i,
  26. input [AddrRegWidth-1:0] SmcAddr_i,
  27. output reg ToRegMapVal_o,
  28. output reg [CmdRegWidth-1:0] ToRegMapData_o,
  29. output reg [AddrRegWidth-1:0] ToRegMapAddr_o,
  30. output reg [FifoNum-1:0] ToFifoVal_o,
  31. output reg [CmdRegWidth*FifoNum-1:0] ToFifoData_o
  32. );
  33. //================================================================================
  34. // REG/WIRE
  35. //================================================================================
  36. //================================================================================
  37. // ASSIGNMENTS
  38. //================================================================================
  39. //================================================================================
  40. // LOCALPARAMS
  41. //================================================================================
  42. //================================================================================
  43. // CODING
  44. //================================================================================
  45. always @(posedge Clk_i or posedge Rst_i) begin
  46. if (Rst_i) begin
  47. ToRegMapVal_o <= 1'b0;
  48. ToRegMapData_o <= 32'h0;
  49. ToRegMapAddr_o <= 12'h0;
  50. ToFifoVal_o <= 7'h0;
  51. ToFifoData_o <= 32'h0;
  52. end else begin
  53. if (SmcAddr_i == Fifo0WriteAddrL||SmcAddr_i==Fifo1WriteAddrL||SmcAddr_i==Fifo2WriteAddrL||SmcAddr_i==Fifo3WriteAddrL||SmcAddr_i==Fifo4WriteAddrL||SmcAddr_i==Fifo5WriteAddrL||SmcAddr_i==Fifo6WriteAddrL||SmcAddr_i == Fifo0WriteAddrS||SmcAddr_i==Fifo1WriteAddrS||SmcAddr_i==Fifo2WriteAddrS||SmcAddr_i==Fifo3WriteAddrS||SmcAddr_i==Fifo4WriteAddrS||SmcAddr_i==Fifo5WriteAddrS||SmcAddr_i==Fifo6WriteAddrS) begin
  54. case(SmcAddr_i)
  55. Fifo0WriteAddrL: begin
  56. ToFifoVal_o[0] <= SmcVal_i;
  57. ToFifoData_o[32*0+:32] <= SmcData_i;
  58. end
  59. Fifo1WriteAddrL: begin
  60. ToFifoVal_o[1] <= SmcVal_i;
  61. ToFifoData_o[32*1-1+:32] <= SmcData_i;
  62. end
  63. Fifo2WriteAddrL: begin
  64. ToFifoVal_o[2] <= SmcVal_i;
  65. ToFifoData_o[32*2-1+:32] <= SmcData_i;
  66. end
  67. Fifo3WriteAddrL: begin
  68. ToFifoVal_o[3] <= SmcVal_i;
  69. ToFifoData_o[32*3-1+:32] <= SmcData_i;
  70. end
  71. Fifo4WriteAddrL: begin
  72. ToFifoVal_o[4] <= SmcVal_i;
  73. ToFifoData_o[32*4-1+:32] <= SmcData_i;
  74. end
  75. Fifo5WriteAddrL: begin
  76. ToFifoVal_o[5] <= SmcVal_i;
  77. ToFifoData_o[32*5-1+:32] <= SmcData_i;
  78. end
  79. Fifo6WriteAddrL: begin
  80. ToFifoVal_o[6] <= SmcVal_i;
  81. ToFifoData_o[32*6-1+:32] <= SmcData_i;
  82. end
  83. endcase
  84. end else begin
  85. ToRegMapVal_o <= SmcVal_i;
  86. ToRegMapData_o <= SmcData_i;
  87. ToRegMapAddr_o <= SmcAddr_i;
  88. end
  89. end
  90. end
  91. endmodule