10

有没有区别

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

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

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

4

2 回答 2

20

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

statement_item := 
        {procedural_timing_control} statement;

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

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

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

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

于 2013-11-08T00:49:50.460 回答
12

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

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

@(posedge Clk) a<= 1'b1;
于 2012-01-18T12:53:01.337 回答