Win_calc_tb.v 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. module WinCalcTb();
  2. reg Clk_i;
  3. reg WindClk;
  4. reg Rst_i;
  5. reg [31:0] WinValue_i;
  6. reg WinType_i;
  7. reg CalcWind_i;
  8. reg Val;
  9. always #10 Clk_i = ~Clk_i;
  10. always #2.5 WindClk = ~WindClk;
  11. parameter WV = 32;
  12. initial begin
  13. Rst_i = 1;
  14. Clk_i = 1;
  15. WindClk = 1;
  16. WinValue_i = 0;
  17. WinType_i = 0;
  18. CalcWind_i = 0;
  19. #200
  20. Rst_i = 0;
  21. end
  22. // localparam [31:0] win_start_value = 32'h02AAAAAB;
  23. // localparam [31:0] win_step_value = 32'h05555555;
  24. localparam [31:0] win_start_value = 32'h0;
  25. localparam [31:0] win_step_value = 32'h4325c53;
  26. localparam [31:0] winPointsNum = 32'h3D;
  27. reg [31:0] pointsCnt;
  28. reg [31:0] tb_cnt;
  29. always @(posedge Clk_i) begin
  30. if (!Rst_i) begin
  31. if (CalcWind_i) begin
  32. if (pointsCnt != winPointsNum-1) begin
  33. pointsCnt <= pointsCnt+1;
  34. end else begin
  35. pointsCnt <= 0;
  36. end
  37. end else begin
  38. pointsCnt <= 0;
  39. end
  40. end else begin
  41. pointsCnt <= 0;
  42. end
  43. end
  44. always @(posedge Clk_i) begin
  45. if (!Rst_i) begin
  46. tb_cnt <= tb_cnt+1;
  47. end else begin
  48. tb_cnt <= 0;
  49. end
  50. end
  51. always @(posedge Clk_i) begin
  52. if (!Rst_i) begin
  53. if (tb_cnt == 50) begin
  54. CalcWind_i <= 1;
  55. end else if (pointsCnt == winPointsNum-1) begin
  56. CalcWind_i <= 0;
  57. end
  58. end
  59. end
  60. reg [WV-1:0] windArg;
  61. // reg [WV-1:0] win_value_reg;
  62. // wire [WV-1:0] win_value;
  63. // wire [WV :0] win_next_value;
  64. // assign win_next_value = win_value_reg + win_step_value;
  65. // assign win_value = (CalcWind_i) ? win_next_value : win_start_value;
  66. // always @(posedge Clk_i) begin
  67. // if (!Rst_i) begin
  68. // win_value_reg <= win_value;
  69. // end else begin
  70. // win_value_reg <= 48'b0;
  71. // end
  72. // end
  73. always @(posedge Clk_i) begin
  74. if (!Rst_i) begin
  75. if (CalcWind_i) begin
  76. windArg <= windArg+win_step_value;
  77. end else begin
  78. windArg <= win_start_value;
  79. end
  80. end else begin
  81. windArg <= 0;
  82. end
  83. end
  84. Win_calc WinCalcInst
  85. (
  86. .clk_i (Clk_i),
  87. .wind_clk (WindClk),
  88. .reset_i (Rst_i),
  89. .win_value_i (windArg),
  90. .win_type_i (WinType_i),
  91. .calc_wind_i (CalcWind_i),
  92. .win_o ()
  93. );
  94. endmodule