DataFifoWrapper.v 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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:
  12. //
  13. // Dependencies:
  14. //
  15. // Revision:
  16. // Revision 1.0 - File Created
  17. // Additional Comments:
  18. //
  19. //////////////////////////////////////////////////////////////////////////////////
  20. module DataFifoWrapper
  21. #(
  22. parameter CMD_REG_WIDTH = 32,
  23. parameter ADDR_REG_WIDTH = 12,
  24. parameter STAGES = 3,
  25. parameter FIFO_NUM = 7
  26. )
  27. (
  28. input WrClk_i,
  29. input RdClk_i,
  30. input FifoRxRst_i,
  31. input FifoTxRst_i,
  32. input FifoTxRstWrPtr_i,
  33. input FifoRxRstRdPtr_i,
  34. input SmcAre_i,
  35. input SmcAwe_i,
  36. input [ADDR_REG_WIDTH-1:0] SmcAddr_i,
  37. input ToFifoVal_i,
  38. input [CMD_REG_WIDTH-1:0] ToFifoData_i,
  39. input [CMD_REG_WIDTH-1:0] ToFifoRxData_i,
  40. input ToFifoRxWriteVal_i,
  41. input ToFifoTxReadVal_i,
  42. output ToSpiVal_o,
  43. output EmptyFlagTx_o,
  44. output [CMD_REG_WIDTH-1:0] TxFifoCtrlReg_o,
  45. output [CMD_REG_WIDTH-1:0] RxFifoCtrlReg_o,
  46. output [CMD_REG_WIDTH-1:0] ToSpiData_o,
  47. output [CMD_REG_WIDTH-1:0] DataFromRxFifo_o
  48. );
  49. //================================================================================
  50. // REG/WIRE
  51. //================================================================================
  52. wire [CMD_REG_WIDTH-1:0] dataFromRxFifo;
  53. wire fullFlagRx;
  54. wire emptyFlagRx;
  55. wire fullFlagTx;
  56. wire emptyFlagTx;
  57. wire txFifoWrEn;
  58. wire txFifoRdEn;
  59. wire rxFifoWrEn;
  60. wire rxFifoRdEn;
  61. wire [7:0] rxFifoUpDnCnt;
  62. wire [7:0] txFifoUpDnCnt;
  63. (* dont_touch = "true" *) wire emptyFlagTxForDsp;
  64. //================================================================================
  65. // ASSIGNMENTS
  66. //================================================================================
  67. assign ToSpiVal_o = 1'b1;
  68. assign DataFromRxFifo_o = dataFromRxFifo;
  69. assign EmptyFlagTx_o = emptyFlagTx;
  70. assign TxFifoCtrlReg_o = {16'h0, txFifoUpDnCnt, 5'h0, emptyFlagTxForDsp, fullFlagTx, FifoTxRst_i};
  71. assign RxFifoCtrlReg_o = {16'h0, rxFifoUpDnCnt, 5'h0, emptyFlagRx, fullFlagRx, FifoRxRst_i};
  72. //================================================================================
  73. // LOCALPARAMS
  74. //================================================================================
  75. //================================================================================
  76. // CODING
  77. //================================================================================
  78. FifoCtrl FifoCtrl_inst
  79. (
  80. .ToFifoTxWriteVal_i (ToFifoVal_i),
  81. .ToFifoTxReadVal_i (ToFifoTxReadVal_i),
  82. .ToFifoRxWriteVal_i (ToFifoRxWriteVal_i),
  83. .ToFifoRxReadVal_i (!SmcAre_i),
  84. .SmcAddr_i (SmcAddr_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. .RxFifoUpDnCnt_o (rxFifoUpDnCnt),
  99. .TxFifoUpDnCnt_o (txFifoUpDnCnt),
  100. .FifoTxWriteEn_o (txFifoWrEn),
  101. .FifoTxReadEn_o (txFifoRdEn),
  102. .FifoRxWriteEn_o (rxFifoWrEn),
  103. .FifoRxReadEn_o (rxFifoRdEn)
  104. );
  105. DataFifoTx DataFifoTx
  106. (
  107. .wr_clk (WrClk_i),
  108. .rd_clk (RdClk_i),
  109. .rst (FifoTxRst_i),
  110. .din (ToFifoData_i),
  111. .wr_en (txFifoWrEn),
  112. .rd_en (txFifoRdEn),
  113. .dout (ToSpiData_o),
  114. .full (fullFlagTx),
  115. .empty (emptyFlagTx)
  116. );
  117. DataFifoRx DataFifoRx
  118. (
  119. .wr_clk (RdClk_i),
  120. .rd_clk (WrClk_i),
  121. .rst (FifoRxRst_i),
  122. .din (ToFifoRxData_i),
  123. .wr_en (rxFifoWrEn),
  124. .rd_en (rxFifoRdEn),
  125. .dout (dataFromRxFifo),
  126. .full (fullFlagRx),
  127. .empty (emptyFlagRx)
  128. );
  129. endmodule