DataFifoWrapper.v 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 CMD_REG_WIDTH = 32,
  24. parameter ADDR_REG_WIDTH = 12,
  25. parameter STAGES = 3,
  26. parameter FIFO_NUM = 7
  27. )
  28. (
  29. input WrClk_i,
  30. input RdClk_i,
  31. input FifoRxRst_i,
  32. input FifoTxRst_i,
  33. input FifoTxRstWrPtr_i,
  34. input FifoRxRstRdPtr_i,
  35. input SmcAre_i,
  36. input SmcAwe_i,
  37. input [ADDR_REG_WIDTH-1:0] Addr_i,
  38. input ToFifoVal_i,
  39. input [CMD_REG_WIDTH-1:0] ToFifoData_i,
  40. input [CMD_REG_WIDTH-1:0] ToFifoRxData_i,
  41. input ToFifoRxWriteVal_i,
  42. input ToFifoTxReadVal_i,
  43. output ToSpiVal_o,
  44. output EmptyFlagTx_o,
  45. output [CMD_REG_WIDTH-1:0] TxFifoCtrlReg_o,
  46. output [CMD_REG_WIDTH-1:0] RxFifoCtrlReg_o,
  47. output [CMD_REG_WIDTH-1:0] ToSpiData_o,
  48. output [CMD_REG_WIDTH-1:0] DataFromRxFifo_o
  49. );
  50. //================================================================================
  51. // REG/WIRE
  52. //================================================================================
  53. wire [CMD_REG_WIDTH-1:0] dataFromRxFifo;
  54. wire fullFlagRx;
  55. wire emptyFlagRx;
  56. wire fullFlagTx;
  57. wire emptyFlagTx;
  58. wire txFifoWrEn;
  59. wire txFifoRdEn;
  60. wire rxFifoWrEn;
  61. wire rxFifoRdEn;
  62. wire [7:0] rxFifoUpDnCnt;
  63. wire [7:0] txFifoUpDnCnt;
  64. wire emptyFlagTxForDsp;
  65. //================================================================================
  66. // ASSIGNMENTS
  67. //================================================================================
  68. assign ToSpiVal_o = 1'b1;
  69. assign DataFromRxFifo_o = dataFromRxFifo;
  70. assign EmptyFlagTx_o = emptyFlagTx;
  71. assign TxFifoCtrlReg_o = {16'h0, txFifoUpDnCnt, 5'h0, emptyFlagTxForDsp, fullFlagTx, FifoTxRst_i};
  72. assign RxFifoCtrlReg_o = {16'h0, rxFifoUpDnCnt, 5'h0, emptyFlagRx, fullFlagRx, FifoRxRst_i};
  73. //================================================================================
  74. // LOCALPARAMS
  75. //================================================================================
  76. //================================================================================
  77. // CODING
  78. //================================================================================
  79. FifoCtrl FifoCtrl_inst
  80. (
  81. .ToFifoTxWriteVal_i (ToFifoVal_i),
  82. .ToFifoTxReadVal_i (ToFifoTxReadVal_i),
  83. .ToFifoRxWriteVal_i (ToFifoRxWriteVal_i),
  84. .ToFifoRxReadVal_i (SmcAre_i),
  85. .FifoTxFull_i (fullFlagTx),
  86. .FifoTxRst_i (FifoTxRst_i),
  87. .FifoRxRst_i (FifoRxRst_i),
  88. .FifoTxRstWrPtr_i (FifoTxRstWrPtr_i),
  89. .FifoRxRstRdPtr_i (FifoRxRstRdPtr_i),
  90. .FifoTxEmpty_i (emptyFlagTx),
  91. .FifoRxFull_i (fullFlagRx),
  92. .EmptyFlagTxForDsp_o (emptyFlagTxForDsp),
  93. .FifoRxEmpty_i (emptyFlagRx),
  94. .FifoTxWrClock_i (WrClk_i),
  95. .FifoTxRdClock_i (RdClk_i),
  96. .FifoRxWrClock_i (RdClk_i),
  97. .FifoRxRdClock_i (WrClk_i),
  98. .Addr_i (Addr_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 (ToFifoData_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