当前位置:   article > 正文

Verilog中begin···end语句执行顺序,阻塞赋值与非阻塞赋值,always和assign,wire和reg_begin end里的非阻塞赋值是顺序执行吗

begin end里的非阻塞赋值是顺序执行吗

Verilog中分阻塞赋值和非阻塞赋值两种,组合逻辑多用阻塞赋值,此时使用begin···end语句,将一条执行完再执行下一句,即顺序执行。
而时序逻辑多是并行执行,多用非阻塞赋值,begin···end语句的作用只是相当于函数的花括号,将一段语句划分成块,但是在块里语句依然是并行执行的,在一个模块完成时会同时执行,所以在非阻塞赋值中begin···end语句并非顺序执行的。

问题:q[p]的值是在什么时候赋给q[p+1]的?是一个时钟下降沿for全部执行完,还是一个clk下降沿执行一条for语句?

  1. always@(negedge clk)
  2. begin
  3. for(p=1;p<6;p++)
  4. q[p+1]<=q[p];
  5. end
组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,同一个模块中不要既用阻塞又用非阻塞。。。。verilog是硬件,是电路,所以调试的时候不能设置断点,所有模块都是并行。非阻塞赋值只在整个语句结束后才改变等式左端的值!所以不管for循环几次,用非阻塞赋值,只进行一次

原则1:时序电路建模时,用非阻塞赋

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/614347
推荐阅读
相关标签
  

闽ICP备14008679号