zoukankan      html  css  js  c++  java
  • 阻塞赋值和非阻塞赋值

    2017-12-01

    在Verilog语言中,赋值语句经常使用,阻塞赋值和非阻塞赋值经常带给我们很多困扰。在此讨论两种赋值方式的差异性。

           首先根据表面含义深刻理解阻塞和非阻塞:

           阻塞:在进程语句块中(initial或者always或者其他),当前赋值语句的执行阻塞了后面语句的执行。即后面语句的赋值需要等到当前赋值过程完成才能得以执行,即可认为执行过程是顺序执行(我们要明白Verilog中,大多数情况模块都是并发执行的)。

           非阻塞:当前赋值语句的执行不会阻塞后续语句的执行,即可以认为当前赋值语句的完成和后续的执行过程是并发执行的

           下面通过一个例子说明:

    initial                       initial
    begin                          begin
    b=a;                            b<=a;
    c=b;                            c<=b;
    end                             end             

        上述左侧为阻塞赋值,右侧为非阻塞赋值;

         左侧代码中,当b=a执行完之后,即b的值已经变成了a;此时,c的值被赋给b的值,实际上,c的值就是a的值了,即c=b=a;

         而右侧代码,b被赋给a的值,c被赋给b的值同时发生,即c得到得到的b的值,并非是改变后的b的值,而是b没有改变之前的原来的值。    

  • 相关阅读:
    Django学习过程中遇到的问题
    代理工具WebScarab安装(转载)
    MongoDB安装之window版本的安装
    QT打包
    小工具--串口
    多线程--信号量
    关于多线程
    QQ界面及简单操作实现
    udp通信
    char *p = "abc";char p[] = "abc";两者之间的区别
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/7944234.html
Copyright © 2011-2022 走看看