大佬教程收集整理的这篇文章主要介绍了当计数器达到两个特定值时如何获得输出/脉冲?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个最多可计数 30 的计数器。我有一个输出信号 out
。在两个特定计数时,即当计数器达到 10 (first
) 和计数器达到 15 (second
) 时,我希望输出变低。不知何故,我在这里遗漏了一个基本逻辑,因为只有在一个特定的计数(10 或 15)时,我才能使输出为零。@H_801_9@
这是代码@H_801_9@
@H_192_3@module user_def_pulse( output Integer counter,output reg out,input clk,reset ); parameter no_of_counts = 30; parameter first = 10; parameter second = 15; initial begin counter = 0; out = 1'b0; end always @(posedge clk) begin if (reset) begin counter <= 1'b0; end else if (counter == no_of_counts) begin counter <= 1'b0; out <= 1'b0; end else begin if ((counter == first) || (counter == second)) out <= 1'b0; else begin counter <= counter + 1; out <= 1'b1; $display($time," The value of counter is %d",counter); end end end endmodule @H_874_15@这是测试台@H_801_9@
@H_192_3@module user_def_pulse_tb( ); parameter time_period = 10; wire [31:0] COUNTER; wire OUT; reg CLK,reset; user_def_pulse udp1 (.counter(COUNTER),.out(OUT),.clk(CLK),.reset(reset)); initial begin CLK = 1'b0; reset = 1'b1; #20 reset = 1'b0; end always #time_period CLK = ~CLK; endmodule @H_874_15@这是输出波形。@H_801_9@
解决方法
您的代码的问题在于,一旦达到
first
值,计数器就会停止递增。您需要不断增加计数器。我将增量移到if ((counter == first) || ...
子句之外。@H_801_9@always @(posedge clk) begin if (reset) begin counter <= 1'b0; end else if (counter == no_of_counts) begin counter <= 1'b0; out <= 1'b0; end else begin counter <= counter + 1; $display($time," The value of counter is %d",counter); if ((counter == first) || (counter == second)) begin out <= 1'b0; end else begin out <= 1'b1; end end end
@H_874_15@大佬总结
以上是大佬教程为你收集整理的当计数器达到两个特定值时如何获得输出/脉冲?全部内容,希望文章能够帮你解决当计数器达到两个特定值时如何获得输出/脉冲?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。