我是靠谱客的博主 丰富电灯胆,最近开发中收集的这篇文章主要介绍Verilog中begin···end语句执行顺序,阻塞赋值与非阻塞赋值,always和assign,wire和reg,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Verilog中分阻塞赋值和非阻塞赋值两种,组合逻辑多用阻塞赋值,此时使用begin···end语句,将一条执行完再执行下一句,即顺序执行。
而时序逻辑多是并行执行,多用非阻塞赋值,begin···end语句的作用只是相当于函数的花括号,将一段语句划分成块,但是在块里语句依然是并行执行的,在一个模块完成时会同时执行,所以在非阻塞赋值中begin···end语句并非顺序执行的。
问题:q[p]的值是在什么时候赋给q[p+1]的?是一个时钟下降沿for全部执行完,还是一个clk下降沿执行一条for语句?
always@(negedge clk)
begin
for(p=1;p<6;p++)
q[p+1]<=q[p];
end
组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,同一个模块中不要既用阻塞又用非阻塞。。。。verilog是硬件,是电路,所以调试的时候不能设置断点,所有模块都是并行。非阻塞赋值只在整个语句结束后才改变等式左端的值!所以不管for循环几次,用非阻塞赋值,只进行一次
原则1:时序电路建模时,用非阻塞赋
最后
以上就是丰富电灯胆为你收集整理的Verilog中begin···end语句执行顺序,阻塞赋值与非阻塞赋值,always和assign,wire和reg的全部内容,希望文章能够帮你解决Verilog中begin···end语句执行顺序,阻塞赋值与非阻塞赋值,always和assign,wire和reg所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复