首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:如何正确使用2个按钮实现增减计数?

求助:如何正确使用2个按钮实现增减计数?

小弟乃Verilog的初学者,由于缺少经验,在这个问题上碰到了麻烦。


望大家指点一下,最好能给我一小段Verilog的代码。

if(reset)
my_counter<=0;
else if(add)
my_counter<=my_counter+1;
else if(minus)
my_counter<=my_counte-1;
else
my_counter<=my_counter;
美梦成真-->噩梦降临!
谢谢。
不过这个还是不能达到期望的效果。
如果以时钟沿触发,按一下按钮会连续增或减,而不是按一下增一下,而使一按下去就经过了好几个时钟周期。
若用add或minus沿触发,则无法实现此功能,而且还有警告信息。
if(reset)
my_counter<=0;
flag<=0;
else if(add and !flag)
my_counter<=my_counter+1;
flag<='1';
else if(minus and !flag)
my_counter<=my_counte-1;
flag<='1';
else if (!minus or !add)
flag<='0';
else
my_counter<=my_counter;
大概这个意思吧!因为一直用vhdl,这样写verilog如果语法不对再改改
这个问题的处理是另外一个问题了,就是按键处理,你可以通过加入消抖电路和微分电路来解决这个问题;
消抖电路可以得到一个确定的按键信号,微分电路可以把这个按键信号处理成一个时钟周期宽度的信号;
美梦成真-->噩梦降临!
先谢谢两位版主。
我把waterlily 的那段改了下,结果仿真效果还不错,改成:

reg [2:0] led;
reg flag_add;
reg flag_minus;

always @(posedge osc or posedge rst)
begin
if (rst)
begin
led <= 0;
flag_add <= 0;
flag_minus <= 0;
end
else
begin
flag_add <= add;
flag_minus <= minus;

if (add && !flag_add)
begin
led <= led + 3'b1;
end
else if (minus && !flag_minus)
begin
led <= led - 3'b1;
end
else
led <= led;
end
end

不过 stone133 说的我还是不会弄,我刚学没多久,消抖电路和微分电路还不会,能不能给段代码参考参考?[upload=image/pjpeg]uploadImages/test.JPG[/upload]
返回列表