InputMuxOld.sv 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. module InputMux #(
  2. parameter AXI_DATA_WIDTH = 64,
  3. parameter SPI_NUM = 7,
  4. parameter FIFO_TX1_ADDR = 64'h0000000000001028,
  5. parameter FIFO_TX2_ADDR = 64'h0000000000002028,
  6. parameter FIFO_TX3_ADDR = 64'h0000000000003028,
  7. parameter FIFO_TX4_ADDR = 64'h0000000000004028,
  8. parameter FIFO_TX5_ADDR = 64'h0000000000005028,
  9. parameter FIFO_TX6_ADDR = 64'h0000000000006028,
  10. parameter FIFO_TX7_ADDR = 64'h0000000000007028
  11. )(
  12. input Clk_i,
  13. input RstN_i,
  14. input Val_i,
  15. input [AXI_DATA_WIDTH-1:0] Data_i,
  16. input [AXI_DATA_WIDTH-1:0] Addr_i,
  17. output reg ToRegMapVal_o,
  18. output reg [AXI_DATA_WIDTH-1:0] ToRegMapData_o,
  19. output reg [AXI_DATA_WIDTH-1:0] ToRegMapAddr_o,
  20. output reg [SPI_NUM-1:0] ToFifoVal_o,
  21. output reg [AXI_DATA_WIDTH-1:0] ToFifoData_o
  22. );
  23. //================================================================================
  24. // LOCALPARAMS
  25. //================================================================================
  26. //================================================================================
  27. // REG/WIRE
  28. //================================================================================
  29. reg [AXI_DATA_WIDTH-1 : 0] toFifoDataReg;
  30. //================================================================================
  31. // CODING
  32. //================================================================================
  33. always @(posedge Clk_i) begin
  34. if (!RstN_i) begin
  35. ToRegMapVal_o <= 1'b0;
  36. ToRegMapData_o <= {AXI_DATA_WIDTH{1'b0}};
  37. ToRegMapAddr_o <= {AXI_DATA_WIDTH{1'b0}};
  38. ToFifoVal_o <= {SPI_NUM{1'b0}};
  39. toFifoDataReg <= {AXI_DATA_WIDTH{1'b0}};
  40. end
  41. else begin
  42. if (Val_i) begin
  43. ToRegMapVal_o <= 1'b1;
  44. ToRegMapData_o <= Data_i;
  45. ToRegMapAddr_o <= Addr_i;
  46. ToFifoVal_o <= {SPI_NUM{1'b0}};
  47. toFifoDataReg <= {AXI_DATA_WIDTH{1'b0}};
  48. for (int i = 0; i < SPI_NUM; i = i + 1) begin
  49. if (Addr_i == FIFO_TX1_ADDR + i*1000) begin
  50. ToFifoVal_o[i] <= 1'b1;
  51. toFifoDataReg <= Data_i;
  52. end
  53. end
  54. end
  55. else begin
  56. ToRegMapVal_o <= 1'b0;
  57. ToRegMapData_o <= {AXI_DATA_WIDTH{1'b0}};
  58. ToRegMapAddr_o <= {AXI_DATA_WIDTH{1'b0}};
  59. ToFifoVal_o <= {SPI_NUM{1'b0}};
  60. toFifoDataReg <= {AXI_DATA_WIDTH{1'b0}};
  61. end
  62. end
  63. end
  64. always @(posedge Clk_i) begin
  65. ToFifoData_o <= toFifoDataReg;
  66. end
  67. endmodule