各位大神请赐教:
最近在弄个程序,现在遇到的情况如下:
在一个always模块A中建一个reg型的变量num按键加一,然后是加到9之后,也就是按键按下了九次,但是我希望在另外的一个always模块B中根据某一条件判断成立后将其清零,重新开始检测按键计数,希望各位大神给出一点建议!!!!!!不胜感激啊!!!已经纠结了好几天的,中间试过了重新定义一个寄存器变量和wire型变量,也将这两个模块合在一起,但是还是无法再num记到9的时候,清零重新计按键的按下的个数。
我试着在always模块A中给num在满足条件下清零,但是出现错误,查阅资料后发现同一个reg型变量是不可以在不同的always模块中进行赋值驱动的。
部分程序如下:
(1 )always模块B的程序如下:
always @( posedge clk or negedge rstn )
begin
if (!rstn )
begin
d0<= 1'b0 ;
fenge_num <= 4'b0000 ;
end
else if (key5[0]) //如果确实是检测到了高脉冲,也就是按键发生变化。
begin //控制分的个位数调整
d0 <= ~d0 ;//寄存器发生翻转。
if( fenge_num < 9 )
begin
fenge_num <= fenge_num + 4'b0001 ;
end
else if ( (fen_ge + fenge_num) == 4'b1001 )
begin
fenge_num <= 4'b0000 ;
end
else
fenge_num <= 4'b0000 ;
end
end
(2)always模块A的程序如下:
always @( posedge clk_div1 or negedge rstn )
begin
if (!rstn) //实行复位操作,然后就是执行显示0.
begin
miao_ge <= 4'b0000 ;
miao_shi <= 3'b000 ;
fen_ge <= 4'b0000 ;
fen_shi <= 3'b000 ;
shi_ge <= 4'b0000 ;
shi_shi <= 2'b00 ;
end
else if (miao_ge == 4'b1001)
begin
miao_ge <= 4'b0000 ;
if (miao_shi == 3'b101)
begin
miao_shi <= 3'b000 ;
if( (fen_ge +reg_num == 4'b1001))
begin
fenge_num <= 4'b0000 ;
fen_ge <= 4'b0000 ;
if (fen_shi == 3'b101)
begin
(3)主要是现在程序模块always中实现fenge_num重新清零,但是出现问题了!!!!
望大家赐教啊!!!程序主要是想实现按键控制时钟分的个数调整。现在的板子上的情况是:
不按按键的话,时钟计时各方面都是准确的,但是在实现按键调整分的个位(fenge)时,可以调整,但是假如调到8的时候,当秒的十位计满后分的个位加一,但是fen的个位加到9之后又跳回到8,即分个位
调整应该是没有清零,而是直接在原来的基础上再进行秒的十位计满后分的个位数自加一!!!!所以问题就来了!!!!!
(4)谢谢啊!!!刚学没有多久,问题有点没描述清楚,请大家见谅啊!!
/*程序主要是实现六个数码管显示时分秒,然后可以实现复位功能,按键可调整时分秒 ,在这里板子上只有三个按键可以使用,另外的一个按键是复位按键; (1)显然我们需要六个寄存器来存储时分秒的个位十位,然后就是一部分是动态扫描,而动态扫描的 时间时1ms,进行六个数码管扫描;数码管是1s显示,也就是需要实现两次分频操作来得到1ms和1s (2)按键操作: (3)存在一个问题就是当时钟时的十位数在处于处于0的时候,十位数可以很好的表现计时, 当十位数处于1的时候,也可以很好的计时,但是当时的十位数处于2时,个位数需要的显示的是0~3??? 这个目前会在程序中出现。????? */