always块在工程文件中应用大多与@(*)相结合
always @(*)begin
...
...
end
但此两者并非一体化,即always并非只能与@(*)结合使用,初学者在看代码使很容易习惯性认为二者是紧密相连的。在上面的代码中always一直监测的是@(*),如果满足条件执行begin之后的内容,执行完毕,再次等待满足执行条件。如果不满足,则一直等待直到满足为止。
在测试文件中,为了生成时钟数据,引入代码
always #p clock = ~clock
这行代码表示 在always块中 延时p个单位时长后,将clock翻转一次,循环往复产生时钟。此时的always并没有@(*),此时的always无需任何等待,循环往复执行块中的内容。
例题:
事件A分别在10,20,30发生,而B一直保持X状态,问在50时Count的值是多少。
reg [7:0] Count;
initial Count = 0;
always begin
@(A) Count = Count +1;
@(B) Count = Count + 1;
end