当按下一个按钮时,该代码应该递增计数器(输出到LED),而当按下另一个按钮时递减计数器。它可以在递减时正常工作,但在递增时它会将LED更改为随机配置。
module LED_COUNTER( CLK_50M, LED, Positive, Negative );
input wire CLK_50M;
input wire Positive;
input wire Negative;
output reg[7:0] LED;
always@( posedge Positive or posedge Negative )
begin
if(Positive == 1)
LED <= LED + 1;
else
LED <= LED - 1;
end
endmodule
我正在使用此主板:http://www.ebay.com/itm/111621868286。引脚分配是:
交换按钮的引脚分配后,行为保持不变。
答案 0 :(得分:1)
你没有去抖电路或逻辑。机械开关会物理反弹很多,所以你的50MHz时钟会在输入信号上看到很多很多转换,导致不稳定的行为。
我忘了提到你甚至没有在同步设计中使用那个50MHz时钟。而是你异步地寻找过渡。
你需要一个低通滤波器。可以使用输入信号上的模拟组件实现,也可以作为硬件中的计数器实现。