使Verilog模块对开关关闭敏感

时间:2011-04-16 19:42:21

标签: syntax parameters verilog

这会使Verilog模块对时钟敏感并且复位开关打开:

always @(posedge clk, posedge rst)

如何将其更改为对正在关闭的开关敏感?

2 个答案:

答案 0 :(得分:1)

如果您希望您的块对关闭的开关敏感,您需要在开关输入名称前面加上一个边界,例如“switch_line”:

always @(posedge clock, posedge reset, negedge swtich_line)

如果您只是想让触发器在时钟周期的每个上升沿检查一个开关的状态,

always @(posedge clock, posedge reset)
  if (!switch_line)
     // ...
  else 
     // ...

您是否正在尝试为触发器,锁存器或某些新型硬件建模?通常,只有触发器和锁存器对时钟信号感兴趣。具有异步复位的触发器被建模为

 always @(posedge clock, posedge reset)

对于同步复位,从灵敏度列表中删除复位信号。

根据用户的评论,另一种选择是插入复位信号的go信号。当您连接此模块时,您可以执行以下操作:

mymodule UUT(
  .clock(clock),
  .reset(~go),
  //...
);

如果你否定go,你将获得与重置相同的行为,只是反转(例如,信号从1> 0开始)。

答案 1 :(得分:0)

除非您以非常低的时钟频率运行,否则按钮状态的变化将比时钟周期慢得多。因此,将按钮输入视为异步信号并不是一个好主意。相反,你可能想要对输入进行采样,也可能会删除毛刺。

作为最小值,通过寄存器对输入进行采样,然后让控制FSM查看该寄存器,并在检测到预期的变化时移动到适当的状态。这意味着设计需要1-2个周期才能对按钮更改做出“反应”。但是,再说一次,除非时钟频率非常低,否则这段时间足够短,没有人会注意到几个周期的延迟。

如果您将信号连接到复位,您(1)通过按下按钮(坏)松开所有状态信息,并突然有两个复位信号。热插拔设计可能会起作用,但设计方法不好,会使您的设计对噪音等敏感。