这篇博客,通过举例说明:非阻塞赋值和阻塞赋值的区别?

一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑;

非阻塞赋值语句是并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值语句要等到上一条赋值语句完成后才能赋值,并且阻塞赋值是立即完成的;

例如:

always@(posedge clk) begin

b <= a;

c <= b;

end

可见,在时序逻辑中使用非阻塞赋值会生成触发器。(有几条赋值语句就会生成几个触发器)

如果使用阻塞赋值呢?

如:

always@(posedge clk) begin

b = a;

c = b;

end

可以看到区别,第一条语句生成了一个触发器,第二条语句会综合成一个连线,这就是阻塞赋值与非阻塞赋值的区别。

为了更有说服力,再举一个例子:

always@(posedge clk) begin

c = a&b;

d = c;

end

可见,第二条赋值同样综合出来是一条连线。

作为对比,再用非阻塞赋值来看:

always@(posedge clk) begin

c <= a&b;

d <= c;

end

可见,非阻塞赋值综合出来的电路是触发器;

在秋招面试以及笔试中,会经常被问道,如果在组合逻辑使用非阻塞赋值会怎么样?

我们刚刚实验了在时序逻辑中使用阻塞赋值会怎么样?也该看看在组合逻辑中使用非阻塞赋值是什么情况了?

如:

always@(*) begin

b <= a;

c <= b;

end

假如用阻塞赋值:

可见,和使用阻塞赋值没什么区别。

同样,为了更有说服力,再举一个例子:在赋值的同时做了运算。

always@(*)begin

c <=  a & b;

d <= c;

end

有了上面的讨论,也应该能猜到综合出来的电路和阻塞赋值没什么区别。

我们可以这么说,在时序逻辑中,使用阻塞赋值,会出现意料之外的结果;

在组合逻辑中,使用非阻塞赋值,则和使用阻塞赋值没什么区别。

最后,为了让代码规范无误,我们一定要遵循规则,在时序逻辑中使用非阻塞赋值,在组合逻辑中使用阻塞赋值。

相关链接:

【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式

【 Verilog HDL 】进一步了解 Verilog HDL 的赋值运算符

通过举例谈谈阻塞赋值与非阻塞赋值的区别相关推荐

  1. 查询框赋值后不可编辑_【技巧分享】阻塞赋值与非阻塞赋值

    原创 小黑同学 明德扬FPGA科教 关于阻塞赋值和非阻塞赋值的问题,明德扬的学员提得比较多,今天小黑老师专门给大家普及一下阻塞赋值和非阻塞赋值的相关知识. 一.概述 1.阻塞赋值对应的电路往往与触发沿 ...

  2. verilog reg赋初值_Verilog语法之六:阻塞赋值与非阻塞赋值

    本文首发于微信公众号"花蚂蚁",想要学习FPGA及Verilog的同学可以关注一下. 一.初步理解阻塞赋值与非阻塞赋值 在Verilog HDL语言中,信号有两种赋值方式: (1) ...

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

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

  4. (13)FPGA面试题阻塞赋值与非阻塞赋值

    1.1 FPGA面试题阻塞赋值与非阻塞赋值 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题阻塞赋值与非阻塞赋值: 5)结束语. 1.1.2 本节引言 &q ...

  5. FPGA阻塞赋值与非阻塞赋值用法

    1.1 FPGA阻塞赋值与非阻塞赋值用法 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA阻塞赋值与非阻塞赋值用法: 5)结束语. 1.1.2 本节引言 &quo ...

  6. 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆

    罗成:Verilog语法之六:阻塞赋值与非阻塞赋值​zhuanlan.zhihu.com 通过上面的文章先了解下,阻塞赋值和非阻塞赋值的区别. b<=a; c<=b; 非阻塞赋值 b=a; ...

  7. verilog中阻塞赋值与 非阻塞赋值的区别

    非阻塞(Non_Blocking)赋值方式( 如 b <= a; ), 块结束后才完成赋值操作,值并不是立刻就改变的, 这是一种比较常用的赋值方法.(特别在编写可综合模块时). 阻塞(Block ...

  8. Verilog中阻塞赋值和非阻塞赋值的区别

    Verilog中阻塞赋值(=)和非阻塞赋值(<=)的区别 **阻塞赋值:**前面语句执行完,才可执行下一条语句:即:前面语句的执行(b=a)阻塞了后面语句的执行(c=b).即:always块内, ...

  9. 【Verilog 基础】阻塞赋值和非阻塞赋值的区别

    目录 阻塞赋值 非阻塞赋值 实际工程仿真 阻塞赋值仿真 编写Verilog代码 编写测试文件代码 综合看RTL图 进行实际仿真 非阻塞赋值仿真 编写Verilog代码 编写测试文件代码 综合看RTL图 ...

最新文章

  1. ecliplse 调试android 断点,如何在Github maven项目上开始调试
  2. java中getter_Java中的Getter和Setters解释了
  3. Java学习笔记07--日期操作类
  4. java office 集成开发_Office文件格式突变,促使Java和Office更完美集成
  5. python 递归遍历二叉树
  6. 给 COLA 做减法:应用架构中的“弯弯绕设计”
  7. 如何查询spark版本_掌握Spark SQL中的查询执行
  8. arm-linux-gcc:Command not found的问题
  9. 前端学习(2739):重读vue电商网站49之第三方库使用CDN
  10. NLP预训练之路——从word2vec, ELMo到BERT
  11. DataGridComboBoxColumn控件
  12. Android 11正式发布:小米、OPPO等手机将陆续更新
  13. LInux iptables学习
  14. 西南交通大学计算机应用基础,西南交通大学计算机应用基础作业-客观部分
  15. VS 2015 卸载所有组件工具
  16. 为什么选择Mapabc
  17. VB是对API的封装 qq 快速登录 各种webservice接口搜集 ReReg.bat 注册登录组件
  18. linux病毒通过U盘传播,一个通过U盘传播的病毒详细分析,近期抓的但是是09年的病毒...
  19. 不卷了!技术团队成员集体辞职
  20. 鲁卡斯队列求黄金分割数

热门文章

  1. JAVASCRIPT复制到剪贴板
  2. java.util.ResourceBundle使用详解
  3. asp.net 取得上一页的url
  4. linux 账户安全,在Linux上踢除某个用户和账户安全
  5. jQuery中的.bind()、.live()和.delegate()之间区别分析
  6. cryptojs aes加密每次结果不同_Javascript加密算法标准库,支持Nodejs+浏览器——crypto-js...
  7. java取geosever数据_Geoserver - 连接到SQL Server 2008 Express并获取数据
  8. windows不能在启动oracle,Windows不能在当地电脑启动OracleDBConsoleorcl
  9. 测试MindMotion 的 ISP功能 - 无法进入ISP功能
  10. ESP32-S的UART2的初始化需要注意的问题