以下代码集做同样的事情,它们之间有什么区别吗?如果没有,为什么通常不使用wait (clk)
?
always @(posedge clk)
begin
end
always wait(clk)
begin
end
最佳答案
@(posedge clk)
是边沿敏感的,因此它被用来对同步电路建模。而wait(clk)
是电平敏感的,因为大多数电路被设计为同步的@(posedge clk)
主要用于
wait (expression)
计算“表达式”,如果为假,则暂停执行,直到表达式变为真为止。如果到达该语句时该表达式为true,则等待无效,执行将继续执行受控语句。
@(posedge clk) - is an edge event.
posedge:0,x,z->1 negedge:1,x,z->0
边缘事件对于建模时钟逻辑元素(如触发器)很有用。它们对于在基于公共时钟的模型中同步活动也很有用。例如,在下面的Always块中,它在时钟的下降沿进入
always
块。always @(negedge clock)
x = f(y);