DataMuxer — копия.v 2.9 KB

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