阻塞赋值与非阻塞赋值(verilog篇)

2017-09-30 竹海 相约电子ee

相信刚刚接触verilog的读者,多少对阻塞赋值和非阻塞赋值仍有一些困惑。笔者在这篇文章,带领大家深入的理解这两者的区别。

首先笔者给一些实验及仿真数据。通过修改testbench文件,利用modelsim软件来观察两者的不同。

同样也可以这样写:

输出波形如下:

稍作改动:

输入波形如下:

细心的读者会发现是 " = " 与 " <= "的区别。

1> 当使用 " = " ,记为阻塞赋值。从开始时刻开始,经过2个周期置1,持续4个周期后置0。也就是说在执行一条语句时,其他的语句不能执行。

打个比方,有很多车都要上高架,由于道路堵塞,一次只能通过一辆车,其他车只能等这辆过去后,才能过。

2 > 当使用 " <= " ,记为非阻塞赋值。从开始时刻开始,经过2个周期置1;从开始时刻,经过4个周期后置0。你会发现,经过四个周期后,test信号始终维持低电平,好像最后一句赋值没发生一样。

再打个比方,还是很多车准备过高速路口,通常有多个出口。现在有三辆车都过,这三辆车是互不影响的。

实际上也就是延迟三个周期置高电平,可是延迟两个周期已经置高电平了,可以分析这句一定是同时进行的。

通过作者的分析,相信读者可能加深了对两者区别的理解。

在此笔者推荐用阻塞赋值的方法,书写testbench脚本初始化模块,这样时序较为容易分析。

那么以上两者对电路有那种影响呢?

采用非阻塞赋值,部分代码如下:

always @(posedge clk)

begin

b <= a;

z <= b;

end

其综合对应的电路如下:

采用阻塞赋值,部分代码及综合电路如下:

always @(posedge clk)

begin

b = a;

z = b;

end

区别已经很明显了,具体区别就不再赘述,不过在这里,我想说的是,不要以为加入寄存器变量,一定意味着添加寄存器,这是错误的。

对于阻塞赋值,b为寄存器变量,可没有输出为b的寄存器哟。

综上所述,阻塞赋值和非阻塞赋值各占一片天。always 里面一定是非阻塞赋值,这可不一定哟。

具体问题具体分析,我相信,即使最简单的语法知识,深入分析之后,也会收获很多的。

转载:https://mp.weixin.qq.com/s?__biz=MzI4NTM4NjgyNg==&mid=100000173&idx=1&sn=b6cc881e9e82893b0d8ab22ef2fa7549&chksm=6bedb0885c9a399e334dafd5623a1260950a7ae5f6751fc2206b7d441baa073516b39ca16cfc&mpshare=1&scene=23&srcid=11295jqBMDZ97ciHjoM2uuZP#rd

阻塞赋值与非阻塞赋值(verilog篇)的更多相关文章

  1. 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:掌握阻塞赋值与非阻塞赋值的区别 实验平台:无 实验原理:     阻塞赋值,操作符为"=","阻塞"是指在进程语句( ...

  2. FPGA之阻塞赋值与非阻塞赋值

    Verilog语言中讲的阻塞赋值与非阻塞赋值,但从字面意思来看,阻塞就是执行的时候在某个地方卡住了,等这个操作执行完在继续执行下面的语句,而非阻塞就是不管执行完没有,我不管执行的结果是什么,反正我继续 ...

  3. Verilog HDL中阻塞语句和非阻塞语句的区别

    在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”).正确地使用这两种赋值语句对于Verilog的设计和仿真非常重要. Verilog语言中讲的阻塞赋值与非 ...

  4. Verilog堵塞赋值与非堵塞赋值

    verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1.堵塞赋值与非堵塞赋值: 2.代码測试: 3.组合逻辑电路和时序逻辑电路. 堵塞赋值与非堵塞赋值: 1.堵塞赋值"=&q ...

  5. 阻塞IO、非阻塞IO、同步IO、异步IO等

    https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...

  6. 理论铺垫:阻塞IO、非阻塞IO、IO多路复用/事件驱动IO(单线程高并发原理)、异步IO

    完全来自:http://www.cnblogs.com/alex3714/articles/5876749.html 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同 ...

  7. python网络编程-同步IO和异步IO,阻塞IO和非阻塞IO

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

  8. Node.js官方文档:到底什么是阻塞(Blocking)与非阻塞(Non-Blocking)?

    译者按: Node.js文档阅读系列之一. 原文: Overview of Blocking vs Non-Blocking 译者: Fundebug 为了保证可读性,本文采用意译而非直译. 这篇博客 ...

  9. 【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?

    通过上篇文章([死磕NIO]- 阻塞.非阻塞.同步.异步,傻傻分不清楚),我想你应该能够区分了什么是阻塞.非阻塞.异步.非异步了,这篇文章我们来彻底弄清楚什么是阻塞IO,非阻塞IO,IO复用,信号驱动 ...

随机推荐

  1. ASP.NET Core 2.2 基础知识(二) 中间件

    中间件是一种装配到应用管道以处理请求和相应的软件.每个软件都可以: 1.选择是否将请求传递到管道中的下一个组件; 2.可在调用管道中的下一个组件前后执行工作. 管道由 IApplicationBuil ...

  2. 在小程序开发中使用 npm

    微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发人员在熟悉了 npm 生态环境后,对微信小程序诟病的地方. 微信小程序在 2.2.1 版本后增加了对 npm 包加载的支持,使得小 ...

  3. small test on 5.30 night T2

    (题面写错了,应该是一条从b -> a 的边) 让我们设状态 (a,b,c) 表示存在一个点k,使得  dist(k,b) - dist(k,a) * 2 + 3 = c,显然这里的第三维可以压 ...

  4. Codeforces 138D World of Darkraft(Multi-Nim)

    [题目链接] http://codeforces.com/problemset/problem/138/D [题目大意] H*W的棋盘中每个点都是L.R.X三者之一,两人轮流选一个点, 若为L则向左下 ...

  5. 1.7(学习笔记)过滤器(Fliter)

    一.过滤器(Fliter)简介 过滤器是位于客户端与服务器之间的滤网,在访问资源时会经过一系列的过滤器, 满足条件则放行,不满足条件的将其拦截. 过滤器可以看做是一个特殊的Servlet,设置了过滤器 ...

  6. cocos2d-x 扩展 修改 备注

    1.引擎源码相关扩展     说明:class/cellsExt 下的全部文件为扩展文件,有auto字样的文件为生成文件,*.pkg文件为自动生成文件的接口配置档,参考tolua++,源文件中代在[s ...

  7. cocos2dx 3.13 etc1 ClippingNode Bug 修正

    void TrianglesCommand::useMaterial() const { if(_stencl){ /*******[solyess] etc1 mask的支持************ ...

  8. pythonGUI编程用Canvas模拟画板

    代码如下: from tkinter import * import webbrowser root = Tk() w = Canvas(root,width=400,height=200) w.pa ...

  9. Java中泛型得到T.class

    例子: public class Test<T> { public Class<T> getTClass() { return (Class<T>) ((Param ...

  10. 扩展gridview轻松实现冻结行和列(增强型)

    上一篇说过,还可以扩展gridview的分页功能以及实现导出结果为EXCEL/PDF的功能.实现好后应该封装起来,以方便后续的项目简单使用.至于要如何实现,我想不必过多的说了.下面是显示结果和主要的代 ...