verilog阻塞与非阻塞的初步理解(二)
将阻塞模块改为下述代码:
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阻塞与非阻塞的初步理解(二)的更多相关文章
- Verilog中的阻塞与非阻塞
这篇文档值得阅读 按说阻塞与非阻塞是Verilog中最基本的东西,也是老生常谈.但是最近看到很多程序里用到阻塞语句竟然不是很明白,说到底是从来没有自己仔细分析过.当然一般情况程序中也是推荐用非阻塞的. ...
- JS异步解决方案之概念理解-----------阻塞和非阻塞,同步和异步,并发和并行,单线程和多线程
首先记住一句话,JS是单线程的. 单线程意味着什么?单线程意味着 它不能依靠自己实现异步. JS实现的异步,往往都是靠 浏览器.Node 的机制(事件驱动.回调)实现的. 下面让我这个单身狗 以谈恋爱 ...
- NIO学习笔记,从Linux IO演化模型到Netty—— 究竟如何理解同步、异步、阻塞、非阻塞
我的观点 首先,分开各自理解. 1. 同步:描述两个(或者多个)个体之间的协调关系. 比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调 ...
- node.js中对同步,异步,阻塞与非阻塞的理解
我们都知道javascript是单线程的,node.js是一个基于Chrome V8 引擎的 javascript 运行时环境,注意 node.js 不是一门语言,别搞错了. javascript为什 ...
- 正确理解这四个重要且容易混乱的知识点:异步,同步,阻塞,非阻塞,5种IO模型
本文讨论的背景是Linux环境下的network IO,同步IO和异步IO,阻塞IO和非阻塞IO分别是什么 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进 ...
- 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型
1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...
- 网络IO之阻塞、非阻塞、同步、异步总结
网络IO之阻塞.非阻塞.同步.异步总结 1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一 ...
- socket阻塞与非阻塞,同步与异步、I/O模型,select与poll、epoll比较
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就 ...
- socket阻塞与非阻塞,同步与异步
socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网 ...
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇) 当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事. <IO - 同步,异步,阻塞,非阻塞 >是我在开始学习e ...
随机推荐
- Java中为什么main()中不能创建内部类对象?
对main方法而言,虽然写在类中,它是游离于任何类之外的,因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问 . 1:非静态内部类,必须有一个外部类的引用才能创建. 2:在外部类的非静态方 ...
- 绘制图形与3D增强技巧(二)----直线图元
一. glBegin(GL_LINES); glend(); 二.线带和线环 glBegin(GL_LINE_STRIP); glend(); glBegin(GL_LINE_LOOP); glend ...
- HQL多种查询实现
1.返回int public int countByUsername(String username) { String hql = "select count(*) from BeanCa ...
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 1531 Solved: 352[Submit][Sta ...
- 【PowerOJ1740】 圆桌问题
https://www.oj.swust.edu.cn/problem/show/1740 (题目链接) 题意 n个单位的人去吃饭,m张餐桌,同一单位的人不能在同一餐桌,问可行方案. Solution ...
- tyvj2018 小猫爬山
之前做过一道题"破锣摇滚乐队",把猫都编了号,每辆车只能装一些编号递增的猫,而且前一辆车的猫编号都比后一辆车小.那道题的DP状态是:f[i][j]表示装了前i只猫,使用了j辆车时第 ...
- fileinput
# -*- coding: utf-8 -*- __author__ = 'metasequoia' import fileinput def file_input(): for line in fi ...
- 第一章、欢迎进入C#编程世界
1.GUI:图形用户界面. 2.在C#中,所有可执行代码都必须在方法中定义,而方法必须从属于类或结构. 3.程序集中可能包含多个命名空间的类,而一个命名空间可能跨越多个程序集. 4.解决方案文件使用. ...
- hibernate-聚合函数分组统计数据查询
聚合函数: 实例: package Test; import static org.junit.Assert.*; import java.util.List; import org.hibernat ...
- css中关于居中的那点事儿
css中关于居中的那点事儿 关于居中,无论是水平居中,还是垂直居中都有很多方式,下面我来介绍一些常用的. 第一部分:水平居中 1.实现行内元素的居中.方法:在行内元素外面的块元素的样式中添加:text ...