MeasDataFifoWrapper.v 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. `timescale 1ns / 1ns
  2. module MeasDataFifoWrapper
  3. #(
  4. parameter DataWidth = 32,
  5. parameter ChNum = 4
  6. )
  7. (
  8. input Clk_i,
  9. input Rst_i,
  10. input PpiBusy_i,
  11. input StartMeasDsp_i,
  12. input DspReadyForRx_i,
  13. input [DataWidth-1:0] MeasNum_i,
  14. input [DataWidth*(ChNum*2)-1:0] MeasDataBus_i,
  15. input MeasDataVal_i,
  16. output [DataWidth*(ChNum*2)-1:0] MeasDataBus_o,
  17. output MeasDataVal_o
  18. );
  19. //================================================================================
  20. // REG/WIRE
  21. //================================================================================
  22. wire fullFlagExt;
  23. wire emptyFlagExt;
  24. wire fullFlag;
  25. wire emptyFlag;
  26. wire wrEn;
  27. wire rdEn;
  28. reg startMeasDspReg;
  29. wire startMeasDspNeg;
  30. wire startMeasDspPos;
  31. reg ppiBusyReg;
  32. reg rstFromDsp;
  33. wire trueRstFromDsp;
  34. integer i;
  35. reg [0:0] rstFromDspPipe [49:0];
  36. reg [13:0] rdCnt;
  37. wire rstOr;
  38. wire [DataWidth*(ChNum*2)-1:0] measDataBus;
  39. wire writeEn = !(emptyFlagExt|fullFlag);
  40. //================================================================================
  41. // ASSIGNMENTS
  42. //================================================================================
  43. assign rstOr = Rst_i|startMeasDspPos;
  44. assign MeasDataVal_o = rdEn;
  45. assign startMeasDspPos = (StartMeasDsp_i&(!startMeasDspReg));
  46. //================================================================================
  47. // CODING
  48. //================================================================================
  49. always @(posedge Clk_i) begin
  50. if (!rstOr) begin
  51. if (rdEn) begin
  52. rdCnt <= rdCnt+14'd1;
  53. end
  54. end else begin
  55. rdCnt <= 14'd0;
  56. end
  57. end
  58. always @(posedge Clk_i) begin
  59. if (!Rst_i) begin
  60. startMeasDspReg <= StartMeasDsp_i;
  61. end else begin
  62. startMeasDspReg <= 1'b0;
  63. end
  64. end
  65. MeasDataFifoExtender MeasDataFifoExtender
  66. (
  67. .clk (Clk_i),
  68. .srst (Rst_i|startMeasDspPos),
  69. .din (MeasDataBus_i),
  70. .wr_en (wrEn),
  71. .rd_en (writeEn),
  72. .dout (measDataBus),
  73. .full (fullFlagExt),
  74. .empty (emptyFlagExt)
  75. );
  76. MeasDataFifo MeasDataFifo
  77. (
  78. .clk (Clk_i),
  79. .srst (Rst_i|startMeasDspPos),
  80. .din (measDataBus),
  81. .wr_en (writeEn),
  82. .rd_en (rdEn),
  83. .dout (MeasDataBus_o),
  84. .full (fullFlag),
  85. .empty (emptyFlag)
  86. );
  87. FifoController FifoController
  88. (
  89. .Clk_i (Clk_i),
  90. .Rst_i (Rst_i|startMeasDspPos),
  91. .DspReadyForRx_i (DspReadyForRx_i),
  92. .PpiBusy_i (PpiBusy_i),
  93. .MeasNum_i (MeasNum_i),
  94. .MeasDataVal_i (MeasDataVal_i),
  95. .FullFlag_i (fullFlagExt),
  96. .EmptyFlag_i (emptyFlag),
  97. .MeasDataVal_o (),
  98. .WrEn_o (wrEn),
  99. .RdEn_o (rdEn)
  100. );
  101. endmodule