【问题标题】:Difference between @(posedge Clk); a<= 1'b1; and @(posedge Clk) a<= 1'b1;@(posedge Clk); 之间的区别; a<= 1'b1;和@(posedge Clk) a<= 1'b1;
【发布时间】:2012-01-18 12:12:27
【问题描述】:

有什么区别

@(posedge Clk);
   a<= 1'b1;

@(posedge Clk)
   a<= 1'b1;

注意 Clk 后面的分号。当我浏览测试平台时,我遇到了类似的代码行。我做了一些简单的实验,在模拟过程中我找不到任何差异。由于分号的存在/不存在,这些行之后的代码的执行顺序是否会发生任何变化?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    任何程序语句的 BNF 语法本质上都是

    statement_item := 
            {procedural_timing_control} statement;
    

    这意味着您可以在任何语句前面有 0 个或多个时序控件。在您的示例中,@(posedge Clk) 是时序控制,a&lt;= 1'b1; 是语句。

    如果您的示例在 fork/join 中,则会存在行为差异,因为前者是两个语句;后者是一个声明。

    fork
      @(posedge Clk); a<=1'b1;
    join
    

    在这种情况下,两条语句并行启动 - a 不会等待分配的 posedge。

    【讨论】:

      【解决方案2】:

      你是对的 - 没有行为差异。

      分号版本是:等待。做这个。 非分号版本是:等待然后执行此操作。您有时会在单行中看到这种形式:

      @(posedge Clk) a<= 1'b1;
      

      【讨论】:

      • 这个答案不正确。因上下文而异。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多