代码之家  ›  专栏  ›  技术社区  ›  foobarfuzzbizz

Verilog是否支持短路评估?

  •  3
  • foobarfuzzbizz  · 技术社区  · 14 年前

    如果我有一个If语句,比如:

    if(risingEdge && cnt == 3'b111)
    begin
      ...
    end
    

    这在高密度脂蛋白里面有关系吗?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Paul R    14 年前

    对于模拟,是否计算短路表达式还没有定义。在上面的例子中没有区别,但是如果你在右边有一个函数调用,那么你可能会遇到带有未定义的副作用的问题。

    看到了吗 在斯图尔特·萨瑟兰和唐·米尔斯的《Verilog和SystemVerilog-Gotchas:101常见编码错误及避免方法》中。

        2
  •  2
  •   JeffW    14 年前

    if(risingEdge && cnt++ == 3'b111)
    begin
      ...
    end
    

    在Verilog(不是SV)中,post increment可以用Verilog函数代替,Verilog函数对模块变量有其他赋值,以显示相同的内容。是的,这是一个相关的问题。

    保罗R通常是正确的,萨瑟兰的参考文献是一个伟大的参考文献(很多好的东西,像那些哥达所描述的)。不过,作为参考,至少就规范而言,SystemVerilog改变了这一点。虽然Verilog指定了短路操作可能执行或可能不执行,但SV通过指示实现不应评估短路操作数(类似于C++、java等)来消除这种情况。如果您感兴趣,请参阅IEEE-1800-2009第11.3.5节。虽然这很好,但是遵守SV规范的记录并不是所有工具供应商都很出色,所以在SV中依赖它时要小心。