一个关于VERILOG写counter的问题
时间:10-02
整理:3721RD
点击:
一个关于VERILOG写counter的问题
我希望能够透过FPGA的几个按钮来控制counter的计数
在不按钮的情况下counter是每次加一
按了钮则可以每按一次counter加三或每按一次counter减三
code部分如下:
always@(posedge reset_wait_for_it or negedge reset or negedge reset2 or negedge reset3 or negedge reset4)
begin
if(~reset) debug_counter <= 12'd0;
else if (~reset2) debug_counter <= debug_counter-12'd3;
else if (~reset3) debug_counter <= debug_counter+12'd3
else if (~reset4) debug_counter <= 12'd10;
else debug_counter <= debug_counter+12'd1;
end
其中reset, reset2, reset3, reset4对应了fpga的四个按钮
按了reset则counter归0,按了reset4则counter跳到10
这两个功能都烧到fpga测试了没问题
都不按钮的话时间到了counter也会自动加一
但是reset2和reset3的功能一直无法实现,按下去以后counter就会变成随机数
初学者求帮助,谢过
我希望能够透过FPGA的几个按钮来控制counter的计数
在不按钮的情况下counter是每次加一
按了钮则可以每按一次counter加三或每按一次counter减三
code部分如下:
always@(posedge reset_wait_for_it or negedge reset or negedge reset2 or negedge reset3 or negedge reset4)
begin
if(~reset) debug_counter <= 12'd0;
else if (~reset2) debug_counter <= debug_counter-12'd3;
else if (~reset3) debug_counter <= debug_counter+12'd3
else if (~reset4) debug_counter <= 12'd10;
else debug_counter <= debug_counter+12'd1;
end
其中reset, reset2, reset3, reset4对应了fpga的四个按钮
按了reset则counter归0,按了reset4则counter跳到10
这两个功能都烧到fpga测试了没问题
都不按钮的话时间到了counter也会自动加一
但是reset2和reset3的功能一直无法实现,按下去以后counter就会变成随机数
初学者求帮助,谢过
為什麼沒有 clock ?
我的方法是:
always@(negedge reset or posedge clock)
begin
if(~reset) debug_counter <= 12'd0;
else if (~reset2) debug_counter <= debug_counter-12'd3;
else if (~reset3) debug_counter <= debug_counter+12'd3
else if (~reset4) debug_counter <= 12'd10;
else debug_counter <= debug_counter+12'd1;
end
reset2, reset3, reset4 是要 debounced 過的
这个你组合逻辑环了,按楼上的加clk把
估计小编是把reset_wait_for_it当成时钟在用了,当按reset1 and reset4 的时候碰巧reset_wait_for_it,在变化,所有功能正确。但是在按reset2 或reset3 的时候,reset_wait_for_it木有变化,所以逻辑出错。
可以简单仿真下看看
不要考虑verilog, 先考虑如何用硬件实现.
上次没看清楚。你按住reset2和reset3的时候,reset_wait_for_it来了好几个上升沿。所以加减3的次数是上升沿的个数+1,所以是随即的