带有初始值verilog代码的1秒下降计数器
我想写一个1秒倒计时计数器的代码,从外部获取初始值并倒计时到0。但有一个问题。如何获得初始值。我试过一些方法,但是。。。。 代码如下:带有初始值verilog代码的1秒下降计数器,verilog,counter,Verilog,Counter,我想写一个1秒倒计时计数器的代码,从外部获取初始值并倒计时到0。但有一个问题。如何获得初始值。我试过一些方法,但是。。。。 代码如下: module second_counter ( input clk, input top_num, output reg [3:0] sec_num ); parameter clk_frequency
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
模块第二个计数器(输入时钟,
输入top_num,
输出寄存器[3:0]秒数
);
参数clk_频率=25;
reg[31:0]cnt;
导线[3:0]秒;
///怎样才能得到最上面的数字并倒计时。
分配秒=顶数;
始终@(posedge clk)
开始
中频(cnt==时钟频率)
开始
sec您基本上需要的是一个复位信号。与时钟一样,在灵敏度列表中添加重置
模块实例化后,必须应用重置信号来初始化所有内部变量和设计寄存器
以下代码通过重置应用程序为您提供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
module second_计数器(输入时钟、输入复位、输入顶端数、输出寄存器[3:0]秒数);
参数clk_频率=25;
reg[31:0]cnt;
//导线[3:0]秒;
注册[3:0]秒;
///
//分配秒=顶数;
始终@(posedge时钟、negedge重置)
开始
如果(!重置)
开始
谢谢,我想使用此代码进行实时更改。我不想在复杂的代码中应用这个,我不想重置。但在这种情况下,cnt对我来说并不重要。我的问题是如何将top_num连接到sec以进行倒计时,例如,我的代码操作如下;获取top_num=5,输出结果显示5--4--3--2--1--0。我已经相应地编辑了我的答案。如果top_num=5,计数器现在将倒计时到0。然后再次锁存top_num的值(假设为7)并倒计时到0。是的,top_num必须是一个4位宽的输入。非常感谢,我不想重置,但我学会了编码的新技术。