程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了当计数器达到两个特定值时如何获得输出/脉冲?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决当计数器达到两个特定值时如何获得输出/脉冲??

开发过程中遇到当计数器达到两个特定值时如何获得输出/脉冲?的问题如何解决?下面主要结合日常开发的经验,给出你关于当计数器达到两个特定值时如何获得输出/脉冲?的解决方法建议,希望对你解决当计数器达到两个特定值时如何获得输出/脉冲?有所启发或帮助;

我创建了一个最多可计数 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@

当计数器达到两个特定值时如何获得输出/脉冲?@H_801_9@@H_801_9@@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,请注明来意。