2012-01-18 159 views
9

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

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

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

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

回答

10

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

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

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

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

相关问题