【发布时间】:2012-01-18 12:12:27
【问题描述】:
有什么区别
@(posedge Clk);
a<= 1'b1;
和
@(posedge Clk)
a<= 1'b1;
注意 Clk 后面的分号。当我浏览测试平台时,我遇到了类似的代码行。我做了一些简单的实验,在模拟过程中我找不到任何差异。由于分号的存在/不存在,这些行之后的代码的执行顺序是否会发生任何变化?
【问题讨论】:
有什么区别
@(posedge Clk);
a<= 1'b1;
和
@(posedge Clk)
a<= 1'b1;
注意 Clk 后面的分号。当我浏览测试平台时,我遇到了类似的代码行。我做了一些简单的实验,在模拟过程中我找不到任何差异。由于分号的存在/不存在,这些行之后的代码的执行顺序是否会发生任何变化?
【问题讨论】:
任何程序语句的 BNF 语法本质上都是
statement_item :=
{procedural_timing_control} statement;
这意味着您可以在任何语句前面有 0 个或多个时序控件。在您的示例中,@(posedge Clk) 是时序控制,a<= 1'b1; 是语句。
如果您的示例在 fork/join 中,则会存在行为差异,因为前者是两个语句;后者是一个声明。
fork
@(posedge Clk); a<=1'b1;
join
在这种情况下,两条语句并行启动 - a 不会等待分配的 posedge。
【讨论】:
你是对的 - 没有行为差异。
分号版本是:等待。做这个。 非分号版本是:等待然后执行此操作。您有时会在单行中看到这种形式:
@(posedge Clk) a<= 1'b1;
【讨论】: