将阻塞模块改为下述代码:

module blocking(clk,a,b,c);
input[:] a;
input clk;
output[:] b,c;
reg[:] b,c; always @(posedge clk)
begin
c=b;
$display("blocking:a=%d,b=%d,c=%d.",a,b,c);
end always @(posedge clk)
begin
b=a;
$display("blocking:a=%d,b=%d,c=%d.",a,b,c);
end endmodule

仿真得出结果:

# ________________
# blocking:a= 3,b= x,c= x.
# blocking:a= 3,b= x,c= x.
# non_blocking:a= 3,b= x,c= x.
# ________________
# blocking:a= 7,b= 3,c= x.
# blocking:a= 7,b= 3,c= x.
# non_blocking:a= 7,b= 3,c= x.
# ________________
# blocking:a=15,b= 7,c= 3.
# blocking:a=15,b= 7,c= 3.
# non_blocking:a=15,b= 7,c= 3.
# ________________
# blocking:a=10,b=15,c= 7.
# blocking:a=10,b=15,c= 7.
# non_blocking:a=10,b=15,c= 7.
# ________________
# blocking:a= 2,b=10,c=15.
# blocking:a= 2,b=10,c=15.
# non_blocking:a= 2,b=10,c=15.

若更改两个always 模块的先后顺序如下:

module blocking(clk,a,b,c);
input[:] a;
input clk;
output[:] b,c;
reg[:] b,c; always @(posedge clk)
begin
b=a;
$display("blocking:a=%d,b=%d,c=%d.",a,b,c);
end always @(posedge clk)
begin
c=b;
$display("blocking:a=%d,b=%d,c=%d.",a,b,c);
end endmodule

则会得到结果:

# ________________
# blocking:a= 3,b= 3,c= x.
# blocking:a= 3,b= 3,c= 3.
# non_blocking:a= 3,b= x,c= x.
# ________________
# blocking:a= 7,b= 7,c= 3.
# blocking:a= 7,b= 7,c= 7.
# non_blocking:a= 7,b= 3,c= x.
# ________________
# blocking:a=15,b=15,c= 7.
# blocking:a=15,b=15,c=15.
# non_blocking:a=15,b= 7,c= 3.
# ________________
# blocking:a=10,b=10,c=15.
# blocking:a=10,b=10,c=10.
# non_blocking:a=10,b=15,c= 7.
# ________________
# blocking:a= 2,b= 2,c=10.
# blocking:a= 2,b= 2,c= 2.
# non_blocking:a= 2,b=10,c=15.

可以看出alway模块的先后顺序会影响b,c的取值。理论上,两个模块是并行执行的,他们出现的先后顺序并不会影响最终得到的结果。

但从这里看出,其是有先后顺序的。只是不知道是仿真器的顺序执行的原因还是竞争冒险导致的。

不过这种情况在非阻塞赋值时不会出现,非阻塞赋值结果是一致的。

verilog阻塞与非阻塞的初步理解(二)的更多相关文章

  1. Verilog中的阻塞与非阻塞

    这篇文档值得阅读 按说阻塞与非阻塞是Verilog中最基本的东西,也是老生常谈.但是最近看到很多程序里用到阻塞语句竟然不是很明白,说到底是从来没有自己仔细分析过.当然一般情况程序中也是推荐用非阻塞的. ...

  2. JS异步解决方案之概念理解-----------阻塞和非阻塞,同步和异步,并发和并行,单线程和多线程

    首先记住一句话,JS是单线程的. 单线程意味着什么?单线程意味着 它不能依靠自己实现异步. JS实现的异步,往往都是靠 浏览器.Node 的机制(事件驱动.回调)实现的. 下面让我这个单身狗 以谈恋爱 ...

  3. NIO学习笔记,从Linux IO演化模型到Netty—— 究竟如何理解同步、异步、阻塞、非阻塞

    我的观点 首先,分开各自理解. 1. 同步:描述两个(或者多个)个体之间的协调关系. 比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调 ...

  4. node.js中对同步,异步,阻塞与非阻塞的理解

    我们都知道javascript是单线程的,node.js是一个基于Chrome V8 引擎的 javascript 运行时环境,注意 node.js 不是一门语言,别搞错了. javascript为什 ...

  5. 正确理解这四个重要且容易混乱的知识点:异步,同步,阻塞,非阻塞,5种IO模型

    本文讨论的背景是Linux环境下的network IO,同步IO和异步IO,阻塞IO和非阻塞IO分别是什么 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进 ...

  6. 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

  7. 网络IO之阻塞、非阻塞、同步、异步总结

    网络IO之阻塞.非阻塞.同步.异步总结 1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一 ...

  8. socket阻塞与非阻塞,同步与异步、I/O模型,select与poll、epoll比较

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步:      所谓同步,就 ...

  9. socket阻塞与非阻塞,同步与异步

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网 ...

  10. IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)

    IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇) 当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事. <IO - 同步,异步,阻塞,非阻塞 >是我在开始学习e ...

随机推荐

  1. asp.net mvc 设置启动页面在区域中

    在开发过程中,我们有时候需要启动区域中的页面为起始页面,那我们就需要子啊路由中添加一段代码 如何完整案例:         public static void RegisterRoutes(Rout ...

  2. 数据结构之二分查找(PHP)

    <?php //二分查找算法 //前提:索引数组.数组已排好顺序 $a=array(1,3,4,6,8,9,11,13,15,24,25,27,30,38); $search = 30;//要查 ...

  3. perl split 的一种特殊用法

    参考 http://blog.chinaunix.net/uid-1919528-id-2792055.html split 函数的正规语法应该是: split /PATTERN/, EXPR 而使用 ...

  4. linux永久更改eth0的ip地址

    linux中永久修改ip和子网掩码,可以用命令也可以直接到文件里修改.这里推荐直接到文件中修改.1.进入网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-e ...

  5. Diccuz!NT的dll版本号控制技巧

    dnt每次发布新版本时,公布出来的版本号都是3位数以上,拿3.6.711这个版本号的代码来说,几乎每一个dll上都是统一的版本号命名: 对于一个成熟的产品来说,统一一致的版本号命名有以下的好处: 1. ...

  6. 系统补丁更新导致MVC3.0.0升级到3.0.1的问题解决

    在更新了系统补丁之后,会不知觉的将MVC3.0.0升级到MVC3.0.1的问题,解决的思路如下: 1.全部MVC引用使用NuGet进行包的管理. 2.单独把MVC库抽离出来,然后放在单独的项目文件夹, ...

  7. Discuz! X2.5 /source/class/helper/helper_seo.php Remote Code Execution Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 SEO模块中的preg_replace+修正符e+双引号引发的远程代码执 ...

  8. Android WebService

    Web Service简介 Web of Services refers to message-based design frequently found on the Web and in ente ...

  9. persistent.xml hibernate 利用sql script 自定义生成 table 表

    <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http:// ...

  10. Blast本地化

    转载]Blast本地化:使用Blastall进行数据库比对 (2012-02-13 21:25:31)   用blastall进行序列比对 blastall是最常用的blast程序之一,其功能非常强大 ...