2014-11-03 86 views
1

下面这组代码可以做同样的事情。它们之间是否有区别?如果不是,为什么wait (clk)通常不被使用?'wait'和'@'语句之间的区别

always @(posedge clk) 
begin 

end 


always wait(clk) 
begin 

end 
+3

请注意,如果块内没有其他延迟,则'clk'变为1时,第二个'always'块将挂起模拟器。它将陷入无限循环。 – 2014-11-03 15:20:42

回答

3

@(posedge clk)是边缘敏感的,因此它被用来同步circuits.While建模,wait(clk)被水平sensitive.Since最电路被设计成同步@(posedge clk)主要使用

wait (expression) 

“表达“被评估,如果为false,则执行被暂停直到表达式变为真。如果在达到语句时表达式为真,则等待不起作用,并且执行继续到受控语句。

@(posedge clk) - is an edge event. 
posedge:0,x,z->1 negedge:1,x,z->0 

边缘事件对建模时钟逻辑单元(如触发器)很有用。它们对基于普通时钟的模型中的活动同步也很有用。例如,在以下总是阻止的情况下,它会在时钟的下降沿输入always块。

always @(negedge clock) 
    x = f(y);  
+1

从IEEE Std 1800-2012开始,第9.4节“事件控制”:在从0到x,z或1,从x或z到1'的转换中检测到posedge。 negedge类似。 – toolic 2014-11-03 13:24:02

+1

谢谢。我有Verilog 95手册 – chitranna 2014-11-04 06:26:33

相关问题