verilog - 从按钮中记住一个值
问题描述
我试图在 Verilog 中执行此操作:当按下按钮(进入状态 1)时,我需要将变量设置为 1,并保持不变,直到我更改它。
我的代码是:
always@(button)
begin
if(button==1) begin
var1=1;
end
end
但我似乎得到的是 var 在整个程序中设置为 1 。我如何以不同的方式实现我的目标???
解决方案
您总是得到 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
注意:要使此代码起作用,您必须按下按钮比时钟周期更长的时间,这实际上是这种情况。
如果设计是异步的,只需将按钮包含在您的敏感度列表中,然后将代码写入同一个始终块中。
推荐阅读
- java - Maven-assembly-plugin 包 jar 无法更新 /src/main/resources/log4j2.xml
- reporting-services - 选定 ID 的 SSRS 列可见性
- python - XArray - 为 char 数据创建维度 string1
- python - 来自 HTML 的电子邮件不显示图像
- django - 如果变量丢失或未定义,`default` 和 `default_if_none` 如何表现?
- python - 按组评估自定义损失?(凯拉斯)
- javascript - GraphQL 订阅配置错误
- flutter - 为什么animatedBuilder中只有顶部和底部元素在clic上什么都不做
- android - 使用 Compose Navigation 导航时 TopAppBar 闪烁
- performance - 浏览器中的 http 请求之间的间隙 - 加载媒体资源