DataFifoWrapper.v 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Company: TAIR
  3. // Engineer:
  4. //
  5. // Create Date: 10/30/2023 11:24:31 AM
  6. // Design Name:
  7. // Module Name: SpiSubSystem
  8. // Project Name: S5443_V3_FPGA3
  9. // Target Devices: BOARD: BY5443v3. FPGA: xc7s25csga225-2
  10. // Tool Versions:
  11. // Description: This is a wrapper module that contains FIFO controller and
  12. // FIFO modules
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 1.0 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module DataFifoWrapper
  22. #(
  23. parameter AXI_DATA_WIDTH = 64,
  24. parameter CMD_REG_WIDTH = 32,
  25. parameter ADDR_REG_WIDTH = 12,
  26. parameter STAGES = 3,
  27. parameter FIFO_NUM = 1,
  28. parameter [AXI_DATA_WIDTH-1:0] TX_FIFO_ADDR = 64'h28,
  29. parameter [AXI_DATA_WIDTH-1:0] RX_FIFO_ADDR = 64'h30
  30. )
  31. (
  32. input WrClk_i,
  33. input RdClk_i,
  34. input FifoRxRst_i,
  35. input FifoTxRst_i,
  36. input FifoTxRstWrPtr_i,
  37. input FifoRxRstRdPtr_i,
  38. input [AXI_DATA_WIDTH-1:0] WrData_i,
  39. input [AXI_DATA_WIDTH-1:0] WrAddr_i,
  40. input [AXI_DATA_WIDTH-1:0] RdAddr_i,
  41. input Val_i,
  42. input [CMD_REG_WIDTH-1:0] ToFifoRxData_i,
  43. input ToFifoRxWriteVal_i,
  44. input ToFifoTxReadVal_i,
  45. output [CMD_REG_WIDTH-1:0] TxFifoCtrlReg_o,
  46. output [CMD_REG_WIDTH-1:0] RxFifoCtrlReg_o,
  47. output EmptyFlagTx_o,
  48. output [CMD_REG_WIDTH-1:0] DataFromRxFifo_o,
  49. output [CMD_REG_WIDTH-1:0] ToSpiData_o
  50. );
  51. //================================================================================
  52. // REG/WIRE
  53. //================================================================================
  54. wire [CMD_REG_WIDTH-1:0] dataFromRxFifo;
  55. wire fullFlagRx;
  56. wire emptyFlagRx;
  57. wire fullFlagTx;
  58. wire emptyFlagTx;
  59. wire txFifoWrEn;
  60. wire txFifoRdEn;
  61. wire rxFifoWrEn;
  62. wire rxFifoRdEn;
  63. wire [7:0] rxFifoUpDnCnt;
  64. wire [7:0] txFifoUpDnCnt;
  65. wire emptyFlagTxForDsp;
  66. wire valR = (Val_i&(WrAddr_i==TX_FIFO_ADDR));
  67. //================================================================================
  68. // ASSIGNMENTS
  69. //================================================================================
  70. assign DataFromRxFifo_o = dataFromRxFifo;
  71. assign EmptyFlagTx_o = emptyFlagTx;
  72. assign TxFifoCtrlReg_o = {16'h0, txFifoUpDnCnt, 5'h0, emptyFlagTxForDsp, fullFlagTx, FifoTxRst_i};
  73. assign RxFifoCtrlReg_o = {16'h0, rxFifoUpDnCnt, 5'h0, emptyFlagRx, fullFlagRx, FifoRxRst_i};
  74. //================================================================================
  75. // LOCALPARAMS
  76. //================================================================================
  77. //================================================================================
  78. // CODING
  79. //================================================================================
  80. FifoCtrl FifoCtrl
  81. (
  82. .ToFifoTxWriteVal_i (valR),
  83. .ToFifoTxReadVal_i (ToFifoTxReadVal_i),
  84. .ToFifoRxWriteVal_i (ToFifoRxWriteVal_i),
  85. .ToFifoRxReadVal_i (),
  86. .FifoTxFull_i (fullFlagTx),
  87. .FifoTxRst_i (FifoTxRst_i),
  88. .FifoRxRst_i (FifoRxRst_i),
  89. .FifoTxRstWrPtr_i (FifoTxRstWrPtr_i),
  90. .FifoRxRstRdPtr_i (FifoRxRstRdPtr_i),
  91. .FifoTxEmpty_i (emptyFlagTx),
  92. .FifoRxFull_i (fullFlagRx),
  93. .EmptyFlagTxForDsp_o (emptyFlagTxForDsp),
  94. .FifoRxEmpty_i (emptyFlagRx),
  95. .FifoTxWrClock_i (WrClk_i),
  96. .FifoTxRdClock_i (RdClk_i),
  97. .FifoRxWrClock_i (RdClk_i),
  98. .FifoRxRdClock_i (WrClk_i),
  99. .RxFifoUpDnCnt_o (rxFifoUpDnCnt),
  100. .TxFifoUpDnCnt_o (txFifoUpDnCnt),
  101. .FifoTxWriteEn_o (txFifoWrEn),
  102. .FifoTxReadEn_o (txFifoRdEn),
  103. .FifoRxWriteEn_o (rxFifoWrEn),
  104. .FifoRxReadEn_o (rxFifoRdEn)
  105. );
  106. FifoTx DataFifoTx
  107. (
  108. .wr_clk (WrClk_i),
  109. .rd_clk (RdClk_i),
  110. .rst (FifoTxRst_i),
  111. .din (WrData_i),
  112. .wr_en (txFifoWrEn),
  113. .rd_en (txFifoRdEn),
  114. .dout (ToSpiData_o),
  115. .full (fullFlagTx),
  116. .empty (emptyFlagTx)
  117. );
  118. FifoRx DataFifoRx
  119. (
  120. .wr_clk (RdClk_i),
  121. .rd_clk (WrClk_i),
  122. .rst (FifoRxRst_i),
  123. .din (ToFifoRxData_i),
  124. .wr_en (rxFifoWrEn),
  125. .rd_en (rxFifoRdEn),
  126. .dout (dataFromRxFifo),
  127. .full (fullFlagRx),
  128. .empty (emptyFlagRx)
  129. );
  130. endmodule