OscDataFormer.v 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. `timescale 1ns / 1ps
  2. (* keep_hierarchy = "yes" *)
  3. module OscDataFormer
  4. #(
  5. parameter AdcDataWidth = 16,
  6. parameter ExtAdcDataWidth = AdcDataWidth+2,
  7. parameter ChNum = 1,
  8. parameter DataValCycles = 16,
  9. parameter OutDataWidth = (16*ChNum)*DataValCycles
  10. )
  11. (
  12. input Clk_i,
  13. input Rst_i,
  14. input OscWind_i,
  15. input [31:0] MeasNum_i,
  16. input AdcDataVal_i,
  17. input [AdcDataWidth-1:0] AdcData_i,
  18. output [OutDataWidth-1:0] OscDataBus_o,
  19. output OscDataBusVal_o
  20. );
  21. //================================================================================
  22. // REG/WIRE
  23. //================================================================================
  24. wire signed [15:0] adcDataExt = {{2{AdcData_i[AdcDataWidth-1]}},AdcData_i};
  25. reg [OutDataWidth-1:0] oscDataBusReg;
  26. reg [OutDataWidth-1:0] oscDataBusRegReg;
  27. reg oscDataBusValReg;
  28. reg oscDataBusValRegReg;
  29. reg [4-1:0] cycleCnt;
  30. reg [31:0] wrDataCnt;
  31. wire wrDone = OscWind_i? (wrDataCnt == MeasNum_i):1'b0;
  32. //================================================================================
  33. // ASSIGNMENTS
  34. //================================================================================
  35. assign OscDataBus_o = oscDataBusRegReg;
  36. assign OscDataBusVal_o = oscDataBusValRegReg;
  37. //================================================================================
  38. // CODING
  39. //================================================================================
  40. always @(posedge Clk_i) begin
  41. if (!Rst_i) begin
  42. if (OscWind_i) begin
  43. if (!wrDone) begin
  44. oscDataBusValRegReg <= oscDataBusValReg;
  45. end else begin
  46. oscDataBusValRegReg <= 0;
  47. end
  48. end else begin
  49. oscDataBusValRegReg <= 0;
  50. end
  51. end else begin
  52. oscDataBusValRegReg <= 0;
  53. end
  54. end
  55. always @(posedge Clk_i) begin
  56. if (!Rst_i) begin
  57. if (OscWind_i) begin
  58. if (oscDataBusValReg) begin
  59. oscDataBusRegReg <= {oscDataBusReg[127:0], oscDataBusReg[OutDataWidth-1:128]};
  60. // oscDataBusRegReg <= {16'h7,16'h6,16'h5,16'h4,16'h3,16'h2,16'h1,16'h0,16'hF,16'hE,16'hD,16'hC,16'hB,16'hA,16'h9,16'h8};
  61. end
  62. end else begin
  63. oscDataBusRegReg <= 0;
  64. end
  65. end else begin
  66. oscDataBusRegReg <= 0;
  67. end
  68. end
  69. always @(posedge Clk_i) begin
  70. if (!Rst_i) begin
  71. if (OscWind_i) begin
  72. if (AdcDataVal_i) begin
  73. cycleCnt <= cycleCnt+4'd1;
  74. end
  75. end else begin
  76. cycleCnt <= 0;
  77. end
  78. end else begin
  79. cycleCnt <= 4'd0;
  80. end
  81. end
  82. always @(posedge Clk_i) begin
  83. if (!Rst_i) begin
  84. if (OscWind_i) begin
  85. if (oscDataBusValRegReg) begin
  86. if (wrDataCnt != MeasNum_i) begin
  87. wrDataCnt <= wrDataCnt+1;
  88. end
  89. end
  90. end else begin
  91. wrDataCnt <= 0;
  92. end
  93. end else begin
  94. wrDataCnt <= 0;
  95. end
  96. end
  97. always @(posedge Clk_i) begin
  98. if (!Rst_i) begin
  99. if (OscWind_i) begin
  100. if (AdcDataVal_i) begin
  101. // oscDataBusReg <= {adcDataExt,oscDataBusReg[OutDataWidth-1:AdcDataWidth+2]}; //first points
  102. oscDataBusReg <= {AdcData_i,oscDataBusReg[OutDataWidth-1:AdcDataWidth]}; //first points
  103. end
  104. end else begin
  105. oscDataBusReg <= 0;
  106. end
  107. end else begin
  108. oscDataBusReg <= 0;
  109. end
  110. end
  111. always @(posedge Clk_i) begin
  112. if (!Rst_i) begin
  113. if (cycleCnt == DataValCycles-1 & AdcDataVal_i) begin
  114. oscDataBusValReg <= 1'b1;
  115. end else begin
  116. oscDataBusValReg <= 1'b0;
  117. end
  118. end else begin
  119. oscDataBusValReg <= 1'b0;
  120. end
  121. end
  122. endmodule