【问题标题】:Verilog using @ with conditional ifVerilog 使用 @ 和条件 if
【发布时间】:2017-12-14 14:08:13
【问题描述】:

您好,我有一个关于 Verilog 语法的问题。

我知道 @ 通常与 always 一起使用。

但我想在变量更改其值时执行一些操作。

例如,我想知道 switch 是否在变化。

所以,我尝试了 if (@posedge switch 或 negedge switch)

但这犯了一个错误。

还有其他方法可以做到这一点吗?

提前致谢

【问题讨论】:

  • 请告诉我们您的错误,如果这是用于合成代码
  • @close-voters 与大多数其他 Verilog 问题相比,这个问题与编程的关系如何?如果你认为 HDL 与编程无关,我怎么会发现自己在教工厂模式、订阅者模式、单例模式?
  • @MatthewTaylor ,至少有两票是因为信息不足;因此我对 dave_59 的评论投了赞成票。 MCVE 会很有用。
  • 使用另一个 always 不是我想要的,因为一个变量只能在一个 always 语句中更改。谢谢。

标签: verilog fpga hdl


【解决方案1】:

如果您想编写一个同步设计(并且您想这样做;),您必须在一个时钟沿(通常为上升沿)更改所有信号的状态。

然后要检测开关边缘,您必须保存开关值的状态并将其与时钟上升沿的实际值进行比较。

always @(posedge clock)
   begin

       if (switch_old != switch)
             switch_edge <= 1'b1;
       else
             switch_edge <= 1'b0;

       switch_old  <= switch;
   end

你不能在同步设计中做你所要求的,那么它就不能被合理地合成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多