首页 旅游资讯 线路攻略 景点大全 国内游 境外游 美食特产

...语句begin……end中的语句是怎么执行的?是不是一条语句执行完...

发布网友 发布时间:2024-10-24 09:44

我来回答

2个回答

热心网友 时间:1天前

begin 。。。end之间是顺序执行的  但是你这里又是非阻塞赋值   又是for语句  就比较复杂了  不过还是可以分析出来  首先非阻塞赋值是在这个模块结束的时候一起完成赋值的 并不是下一个下降沿才执行   这个模块最后一条语句就是赋值语句  所以基本上是立即执行了 (阻塞赋值是立即执行的,如果有多个赋值,就会阻碍下一条赋值语句)  其次for语句在这里  其实是一个时钟只执行一次  就是说第一个下降沿 q[2]<=q[1],第二个下降沿q[3]<=q[2], 这样理解下来  其实begin。。。end之间只有一条语句   也就没有什么顺序不顺序  先后次序的事情了 

说了这么多   看一下运行结果就清楚了  把你的代码小小的修改了一下  如下:

module eeee (clk,a,q);

input clk;

input a;

output[6:0]q; 

reg [6:0]q;

reg [2:0]p;

always @(negedge clk) begin

q[1] <= a;

 for(p=1;p<6;p=p+1)

q[p+1]<=q[p];

end

endmodule

热心网友 时间:1天前

是的,也就是下一个clk的下降沿赋值

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com