之间有什么区别吗?
@(posedge Clk);
a<= 1'b1;
和
@(posedge Clk)
a<= 1'b1;
请注意Clk之后的分号。当我浏览测试平台时,我遇到了类似的代码行。我做了一些简单的实验,在模拟过程中找不到任何差异。由于分号的存在/不存在,这些行后面的代码的执行顺序是否会以任何方式发生变化?
答案 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;