DataFifoWrapper.v 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. module DataFifoWrapper
  2. #(
  3. parameter CmdRegWidth = 32,
  4. parameter AddrRegWidth= 12,
  5. parameter STAGES = 3,
  6. parameter FifoNum = 7
  7. )
  8. (
  9. input WrClk_i,
  10. input RdClk_i,
  11. input FifoRxRst_i,
  12. input FifoTxRst_i,
  13. input FifoTxRstWrPtr_i,
  14. input FifoRxRstRdPtr_i,
  15. input SmcAre_i,
  16. input SmcAwe_i,
  17. input [AddrRegWidth-1:0] SmcAddr_i,
  18. // input [7:0] TxFifoWrdCnt_i,
  19. // input [7:0] RxFifoWrdCnt_i,
  20. input ToFifoVal_i,
  21. input [CmdRegWidth-1:0] ToFifoData_i,
  22. input [CmdRegWidth-1:0] ToFifoRxData_i,
  23. input ToFifoRxWriteVal_i,
  24. input ToFifoTxReadVal_i,
  25. output ToSpiVal_o,
  26. output EmptyFlagTx_o,
  27. output [CmdRegWidth-1:0] TxFifoCtrlReg_o,
  28. output [CmdRegWidth-1:0] RxFifoCtrlReg_o,
  29. output [CmdRegWidth-1:0] ToSpiData_o,
  30. output [CmdRegWidth-1:0] DataFromRxFifo_o
  31. );
  32. //================================================================================
  33. // REG/WIRE
  34. //================================================================================
  35. wire [CmdRegWidth-1:0] dataFromRxFifo;
  36. wire fullFlagRx;
  37. wire emptyFlagRx;
  38. wire fullFlagTx;
  39. wire emptyFlagTx;
  40. wire txFifoWrEn;
  41. wire txFifoRdEn;
  42. wire rxFifoWrEn;
  43. wire rxFifoRdEn;
  44. wire [7:0] rxFifoUpDnCnt;
  45. wire [7:0] txFifoUpDnCnt;
  46. (* dont_touch = "true" *) wire emptyFlagTxForDsp;
  47. // (* dont_touch = "true" *)wire [6:0] wrDataCnt;
  48. // (* dont_touch = "true" *)wire [6:0] rdDataCnt;
  49. //================================================================================
  50. // ASSIGNMENTS
  51. //================================================================================
  52. assign ToSpiVal_o = 1'b1;
  53. assign DataFromRxFifo_o = dataFromRxFifo;
  54. assign EmptyFlagTx_o = emptyFlagTx;
  55. assign TxFifoCtrlReg_o = {16'h0, txFifoUpDnCnt,5'h0,emptyFlagTxForDsp,fullFlagTx, FifoTxRst_i};
  56. assign RxFifoCtrlReg_o = {16'h0, rxFifoUpDnCnt,5'h0,emptyFlagRx,fullFlagRx, FifoRxRst_i};
  57. //================================================================================
  58. // LOCALPARAMS
  59. //================================================================================
  60. //================================================================================
  61. // CODING
  62. //================================================================================
  63. FifoCtrl FifoCtrl_inst (
  64. .ToFifoTxWriteVal_i (ToFifoVal_i),
  65. .ToFifoTxReadVal_i (ToFifoTxReadVal_i),
  66. .ToFifoRxWriteVal_i (ToFifoRxWriteVal_i),
  67. .ToFifoRxReadVal_i (!SmcAre_i),
  68. .SmcAddr_i (SmcAddr_i),
  69. .FifoTxFull_i (fullFlagTx),
  70. .FifoTxRst_i (FifoTxRst_i),
  71. .FifoRxRst_i (FifoRxRst_i),
  72. .FifoTxRstWrPtr_i (FifoTxRstWrPtr_i),
  73. .FifoRxRstRdPtr_i (FifoRxRstRdPtr_i),
  74. .FifoTxEmpty_i (emptyFlagTx),
  75. .FifoRxFull_i (fullFlagRx),
  76. .EmptyFlagTxForDsp_o(emptyFlagTxForDsp),
  77. .FifoRxEmpty_i (emptyFlagRx),
  78. .FifoTxWrClock_i (WrClk_i),
  79. .FifoTxRdClock_i (RdClk_i),
  80. .FifoRxWrClock_i (RdClk_i),
  81. .FifoRxRdClock_i (WrClk_i),
  82. .RxFifoUpDnCnt_o (rxFifoUpDnCnt),
  83. .TxFifoUpDnCnt_o (txFifoUpDnCnt),
  84. .FifoTxWriteEn_o (txFifoWrEn),
  85. .FifoTxReadEn_o (txFifoRdEn),
  86. .FifoRxWriteEn_o (rxFifoWrEn),
  87. .FifoRxReadEn_o (rxFifoRdEn)
  88. );
  89. DataFifoTx DataFifoTx
  90. (
  91. .wr_clk (WrClk_i),
  92. .rd_clk (RdClk_i),
  93. .rst (FifoTxRst_i),
  94. .din (ToFifoData_i),
  95. .wr_en (txFifoWrEn),
  96. .rd_en (txFifoRdEn),
  97. .dout (ToSpiData_o),
  98. .full (fullFlagTx),
  99. .empty (emptyFlagTx)
  100. );
  101. DataFifoRx DataFifoRx
  102. (
  103. .wr_clk (RdClk_i),
  104. .rd_clk (WrClk_i),
  105. .rst (FifoRxRst_i),
  106. .din (ToFifoRxData_i),
  107. .wr_en (rxFifoWrEn),
  108. .rd_en (rxFifoRdEn),
  109. .dout (dataFromRxFifo),
  110. .full (fullFlagRx),
  111. .empty (emptyFlagRx)
  112. );
  113. endmodule