【问题标题】:1second down counter with initial value verilog code带有初始值的 1 秒递减计数器 Verilog 代码
【发布时间】:2015-11-11 17:13:10
【问题描述】:

我想编写 1 秒递减计数器的代码,从外部获取初始值并将其递减到 0。但是有一个问题。我怎样才能得到初始值。我尝试了一些方法,但是.... 这是代码:

module second_counter (        input clk,
                        input top_num,
                        output reg [3:0] sec_num
                        );

parameter clk_frequency = 25;
reg [31:0]cnt;
wire [3:0]sec;

/// how can get the top_num and count it down.

assign sec=top_num;


always @(posedge clk)
begin
if (cnt==clk_frequency)
    begin
        sec <= sec -1;
        cnt<=0;
    end
else
cnt <=cnt+1;
end

【问题讨论】:

    标签: verilog counter


    【解决方案1】:

    您基本上需要的是一个重置信号。和时钟一样,在灵敏度列表中需要添加reset。

    模块实例化后,您必须应用复位信号来初始化所有内部变量和设计寄存器。

    以下代码通过重置应用程序为您提供cnt 的初始值。这是一个低电平有效重置。

    module second_counter ( input clk, input reset, input top_num, output reg [3:0] sec_num ); 
    parameter clk_frequency = 25;
    reg [31:0]cnt; 
    // wire [3:0]sec; 
    reg [3:0] sec;
    /// 
    // assign sec=top_num; 
    always @(posedge clk, negedge reset) 
    begin 
    if(!reset)
    begin
        cnt<=0;  // initialize all internal variables and registers
        sec<=0;
    end 
    else
    begin
        if(sec == 0) // latch input when previous count is completed
            sec<=top_num;
        if (cnt==clk_frequency) 
        begin 
            sec <= sec -1; 
            cnt<=0; 
        end 
        else 
            cnt <=cnt+1; 
    end
    end
    

    请注意,这是一个异步复位,意味着它不依赖于时钟信号。 同步复位是只影响时钟脉冲的寄存器。

    编辑

    关于sec,我已经修改了代码。现在,设计将输入锁存一个时钟周期并倒计时至零。一旦计数器达到零,它就会再次锁存输入以重新计数为零。

    请注意,您不能像在每个时钟上锁存 top_num 并从零开始计数(因为 top_num 可以在每个脉冲上改变)。为了在每个时钟脉冲处进行锁存,您需要更复杂的逻辑实现。

    【讨论】:

    • 谢谢我想用这个代码进行实时更改。我不想在复杂的代码中应用它,我不想重置。但在这种情况下,cnt 对我来说并不重要。我的问题是,我如何将 top_num 连接到 sec 以便倒计时,例如我的代码操作是这样的;得到 top_num=5 和输出显示我 5--4--3--2--1--0 。
    • 我已经相应地编辑了我的答案。如果 top_num=5,计数器现在将倒数到 0。然后再次锁存 top_num 的值(比如说 7)并倒数到 0。
    • 还有,top_num 必须是 4 位宽的输入。
    • 非常感谢,我不想重置,但我学到了编码的新技术。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多