首页 > 解决方案 > 从按钮中记住一个值

问题描述

我试图在 Verilog 中执行此操作:当按下按钮(进入状态 1)时,我需要将变量设置为 1,并保持不变,直到我更改它。

我的代码是:

always@(button)
begin
if(button==1) begin
var1=1;
end
end

但我似乎得到的是 var 在整个程序中设置为 1 。我如何以不同的方式实现我的目标???

标签: verilog

解决方案


您总是得到 1 的原因之一可能是,如果按钮在板上,并且您将其分配为输入,那么它们通常在未按下时输出高电平,在按下时输出低电平。如果是这种情况if(button == 0),请用作条件。

正如您在命令中提到的那样,您正在使用另一个 always 块来更改变量的值,但是您不应该能够从两个不同的 always 块中更改同一个变量。希望我们能找到可以解决您问题的解决方案。

如果您的设计是同步和时钟的(通常在实际硬件设计中就是这种情况),您可以有这样的东西(如果您的时钟频率大于 10Hz,这很实用):

module memorize_pb(

input clk,
// you can have some other inputs here for the remaining part of your code
input button

);

reg stored_variable;
// other registers if used
always@(posedge clk)
begin
if(button == 1) begin //if the first reason is not the case
stored_variable <= 1'b1;
end
// other parts of your code and conditions which resets your variable
end //end of always block
endmodule

注意:要使此代码起作用,您必须按下按钮比时钟周期更长的时间,这实际上是这种情况。

如果设计是异步的,只需将按钮包含在您的敏感度列表中,然后将代码写入同一个始终块中。


推荐阅读