我实际上尝试了3天才能让我的代码正常运行。我有一个带有多路7-seg显示器的开发板 - 它正在工作。问题是,当我试图增加变量时。我在下面写了代码:
delete window.document.referrer;
window.document.__defineGetter__('referrer', function () {
return "yoururl.com";
});
它没有用。当我按下R按钮时,变量增加1,但是当我按下L时没有任何反应。更改两个assign buttons = debouncedL | debouncedR;
always @(posedge buttons or negedge RES) begin
if(~RES) number <= 0;
else if(debouncedL) number <= (number + 10);
else if(debouncedR) number <= (number + 1);
end
的位置后,L按钮仍然不起作用,按下R按钮后显示的数字在0000和0001之间切换。这可能是新手问题,但我无法在书本和互联网上找到解决方案。你能帮助我吗?提前谢谢。
答案 0 :(得分:0)
您的设计是异步的,您有metastability on buttons信号。
在同步设计中(并且所有FPGA设计应该是同步的)只有时钟可以用于总是@posedge()过程。在您的设计中,您使用按钮信号作为时钟。
要检测按钮的上升沿,您必须保存按钮信号的旧状态并将其与当前状态进行比较,如下所示:
always @(posedge clock or posedge rst) begin
// detect rising edge
if (button_old != button && button == 1'b1)
button_raise <= 1'b1
button_old <= button;
// increment number
if(button_raise == 1b'1)
begin
if(~RES) number <= 0;
else if(debouncedL) number <= (number + 10);
else if(debouncedR) number <= (number + 1);
end
end