@(posedge Clk)之间的区别; a< = 1'b1;和@(posedge Clk)a< = 1'b1;

时间:2012-01-18 12:12:28

标签: verilog system-verilog

之间有什么区别吗?
@(posedge Clk);
   a<= 1'b1;

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

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

2 个答案:

答案 0 :(得分:14)

任何程序语句的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。

答案 1 :(得分:11)

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

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

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