FFT 发表于 2010-6-27 23:18:04

求助:关于 @ 的问题

比如下列的
always @ ( a or b )begin
c = a;
@( posedge d ) begin
语句 1;      /**********/
语句 n;
end
e = b;
end

当执行到
@( posedge d ) begin
语句 1;      /**********/
语句 n; end
时,是一直处于等待有上升沿,直到有了才往下顺序执行
还是一边等待上升沿(有了才执行( begin 和 end之间的语句),一边执行完 end 后面那句
e = b;

小弟才自学verilog 不久,有很多不明白的,望各位哥哥姐姐好心帮忙解答,谢谢

longtime 发表于 2010-6-28 00:54:18

没有看懂,<br>
什么叫&ldquo;一边等待上升沿(有了才执行( begin 和 end之间的语句),一边执行完 end 后面那句&nbsp; &nbsp;<br>
&nbsp; &nbsp;e = b;&rdquo;

CHAN 发表于 2010-6-28 01:03:12

应该是一直等待上升沿之后再往下执行

ngtim 发表于 2010-6-28 02:48:38

哦,是我表诉不清楚<br>
always @ ( a or b )&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;c = a;&nbsp; &nbsp;&nbsp;&nbsp;//(1)<br>
&nbsp; &nbsp;@&nbsp;&nbsp;( posedge d ) begin&nbsp; &nbsp; //(2)<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 1;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 n;&nbsp; &nbsp;end&nbsp;&nbsp;<br>
&nbsp; &nbsp;e = b;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; //(3)<br>
end&nbsp; &nbsp; <br>
当执行到(2)时,是一直等待 &ldquo;posedge d&rdquo;&nbsp;&nbsp;才执行<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 1;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 n;&nbsp; &nbsp;end&nbsp;&nbsp;<br>
然后再才会执行&nbsp;&nbsp;(3);<br>
还是一边等待上升沿(有了才执行( begin 和 end之间的语句),<br>
与此同时执行(3);<br>
也就是说(3)语句是一定要到有 &ldquo;posedge d&rdquo;条件发生后执行完<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 1;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 n;&nbsp; &nbsp;end&nbsp;&nbsp;<br>
才执行,还是到(2)时,只检查下有没有 &ldquo;posedge d&rdquo;条件,没有的话,也去执行(3),而有的话只是让<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 1;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;语句 n;&nbsp; &nbsp;end&nbsp;&nbsp;<br>
执行?

ICE 发表于 2010-6-28 02:55:08

可参考<br>
计算波形占空比得不同输出(verilog) <br>
里面有另外一种写法<br>
<br>
欢迎对程序提出修改意见

CHAN 发表于 2010-6-28 03:47:50

--------------------------------------------------------------------------------<br>
应该是一直等待上升沿之后再往下执行

interig 发表于 2010-6-28 04:24:55

这段代码有什么实际用途吗?<br>
可以综合否?

CHA 发表于 2010-6-28 05:32:01

应该是这样的吧!<br>
always @ ()<br>
&nbsp; &nbsp; begin<br>
&nbsp; &nbsp; .......<br>
&nbsp; &nbsp; end<br>
&nbsp;&nbsp;<br>
在整个module 内所有的always是并行的,但被begin--end封装的块内是顺序执行的,你的程序中<br>
@(posedge d) 被begin-end 所封装,所以应该是等待后执行<br>
<br>
注:我是新人

VVIC 发表于 2010-6-28 07:08:55

@后面就是触发条件<br>
<br>
等到@的事件发生了就执行下面的代码....
页: [1]
查看完整版本: 求助:关于 @ 的问题