我有一个带有代表重置按钮的数字输入的 CPLD。当按下复位按钮时,信号变为高电平。我需要做的是有一个寄存器,它的值告诉按钮是否被按下。基本上是一个闩锁。当按钮变为高电平时,锁存寄存器变为高电平并永远保持高电平。
我认为这很简单,但是当我尝试对其进行编码时,我收到了一堆警告。一点谷歌搜索显示“不要在 HDL 中制作闩锁!不好的做法!”,但我在这里并没有真正看到替代方案。
这是我的尝试。clk_10m 是一个快速自由运行的时钟,pwr_off_req 是按钮输入。
reg pwr_off_req_latched = 0;
always @ (clk_10m or pwr_off_req) begin
if (pwr_off_req == 1'b1)
pwr_off_req_latched <= 1'b1;
else
pwr_off_req_latched <= pwr_off_req_latched;
// I tried this to make sure it's always set to something
end