FifoController.v 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 14:12:30 06/03/2020
  7. // Design Name:
  8. // Module Name: WinParameters
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies: kek
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //
  21. //////////////////////////////////////////////////////////////////////////////////
  22. module FifoController
  23. #(
  24. parameter TxInPack = 200,
  25. parameter WorkTimeCycles = 404000
  26. // parameter WorkTimeCycles = 20000
  27. )
  28. (
  29. input Clk_i,
  30. input Rst_i,
  31. input PpiBusy_i,
  32. input DspReadyForRx_i,
  33. input MeasDataVal_i,
  34. input [32-1:0] MeasNum_i,
  35. input FullFlag_i,
  36. input EmptyFlag_i,
  37. output MeasDataVal_o,
  38. output reg WrEn_o,
  39. output RdEn_o
  40. );
  41. //================================================================================
  42. // REG/WIRE
  43. //================================================================================
  44. reg rdEn;
  45. reg [13:0] wrCnt;
  46. //================================================================================
  47. // ASSIGNMENTS
  48. //================================================================================
  49. assign MeasDataVal_o = rdEn&(!PpiBusy_i);
  50. assign RdEn_o = rdEn&(!PpiBusy_i);
  51. //================================================================================
  52. // CODING
  53. //================================================================================
  54. always @(posedge Clk_i) begin
  55. if (!Rst_i) begin
  56. if (WrEn_o) begin
  57. wrCnt <= wrCnt+14'd1;
  58. end
  59. end else begin
  60. wrCnt <= 14'd0;
  61. end
  62. end
  63. always @(posedge Clk_i) begin
  64. if (!Rst_i) begin
  65. if (!FullFlag_i) begin
  66. if (MeasDataVal_i) begin
  67. if (wrCnt!=MeasNum_i) begin
  68. WrEn_o <= 1'b1;
  69. end else begin
  70. WrEn_o <= 1'b0;
  71. end
  72. end else begin
  73. WrEn_o <= 1'b0;
  74. end
  75. end else begin
  76. WrEn_o <= 1'b0;
  77. end
  78. end else begin
  79. WrEn_o <= 1'b0;
  80. end
  81. end
  82. always @(posedge Clk_i) begin
  83. if (!Rst_i) begin
  84. if (!DspReadyForRx_i) begin
  85. if (!PpiBusy_i) begin
  86. if (!EmptyFlag_i) begin
  87. rdEn <= 1'b1;
  88. end else begin
  89. rdEn <= 1'b0;
  90. end
  91. end else begin
  92. rdEn <= 1'b0;
  93. end
  94. end else begin
  95. rdEn <= 1'b0;
  96. end
  97. end else begin
  98. rdEn <= 1'b0;
  99. end
  100. end
  101. endmodule