我有一个总是涉及开关和钥匙的块。当我在敏感度列表中只有键时,它的行为很好(只执行一次代码然后退出块)。当我将开关添加到灵敏度列表时,它变得疯狂并且似乎在我按住键时无限循环,即使我只是在按键按下时触发它。
我正在尝试实现一个仅在每次按键时递增一次的计数器。
这是工作代码,只有敏感列表中的键(sw[1] 是指示它是向上还是向下计数):
always @ (negedge key[2]) begin
if (~key[2])
begin
if (sw[1] == 0) begin
if (p3ctr == 15) p3ctr = 0;
else p3ctr = p3ctr + 1;
end
else if (sw[1] == 1) begin
if (p3ctr == 0) p3ctr = 15;
else p3ctr = p3ctr - 1;
end
end
end
这是损坏的代码(我正在使用 sw[7] 来重置计数器,当它被打开时。这个代码无限循环,而 key[2] 被按住)
always @ (negedge key[2] or posedge sw[7]) begin
if (~key[2])
begin
if (sw[1] == 0) begin
if (p3ctr == 15) p3ctr = 0;
else p3ctr = p3ctr + 1;
end
else if (sw[1] == 1) begin
if (p3ctr == 0) p3ctr = 15;
else p3ctr = p3ctr - 1;
end
end
else begin
p3ctr = 0;
end
end
我认为当敏感度列表中的信号发生变化时,always 块中的代码只会执行一次,但显然情况并非如此。
知道如何让这段代码在每次按键时只执行一次,以便计数器正常运行吗?
谢谢!