当前位置: 首页 > news >正文

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念


阻塞赋值阻塞赋值的赋值号用“=”表示,对应的是串行执行。

对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他 Verilog 语句的干扰,直到现行的赋值完成时刻,即把当前赋值号右边的值赋值给左边的时刻完成后,它才允许下一条的赋值语句的执行。串行块(begin-end)中的各条阻塞型过程赋值语句将以它们在顺序块后的排列次序依次执行。阻塞型过程赋值语句的执行过程是:首先计算赋值号右边的值,然后立即将计算结果赋值给左边,赋值语句结束,变量值立即发生改变。阻塞的概念是指在同一个 always 块中,其后面的赋值语句从概念上是在前一句赋值语句结束后再开始下面的赋值。
 

非阻塞赋值非阻塞赋值的赋值号用“<=”表示,对应的是并行执行。

这是因为对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值非阻塞操作开始时计算非阻塞赋值符的赋值号右边的语句,赋值操作结束时刻才更新赋值号左边的语句,可以认为是两个步骤(赋值开始时刻和结束时刻)来完成非阻塞赋值。在计算非阻塞语句赋值号右边的语句和更新赋值号左边的语句期间,其他的 Verilog 语句包括其他的 Verilog 非阻塞赋值语句都能同时计算赋值号右边的语句和更新赋值号左边的语句,允许其他的 Verilog 语句同时进行操作。非阻塞赋值的操作可以看作为两个步骤的过程:在赋值开始时刻,计算赋值号右边的语句。在赋值结束时刻,更新赋值号左边的语句。注意:非阻塞操作只能用于对寄存器类型变量进行赋值,因此只能用于“initial”和“always”块中,不允许用于连续赋值“assign”。

二、 两者的区别


1.硬件电路的区别
在时序逻辑中使用非阻塞赋值会生成触发器;在组合逻辑仲使用阻塞赋值会综合成一个连线。因此一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑。

2.语句执行顺序
非阻塞赋值语句是并行执行的,等到always块结束后,才完成赋值,而阻塞赋值是顺序执行的,下一条赋值语句要等到上一条赋值语句完成后才能赋值,并且阻塞赋值是立即完成的。

3.混用容易产生的错误
在组合逻辑中,使用非阻塞赋值,则和使用阻塞赋值没什么区别;但是在时序逻辑中,使用阻塞赋值进行赋值,除了第一个语句综合为触发器外,后续的语句均综合为一个连线,如下。

4、赋值顺序

阻塞赋值:前面语句执行完,才可执行下一条语句;即:前面语句的执行(b=a)阻塞了后面语句的执行(c=b)。即:always块内,2条语句顺序执行。 

always @(posedge iclk)beginb = a;c = b;end

非阻塞赋值:always块内,2条语句同时执行。即:前面语句的执行(b=a)不会阻塞后面语句的执行(c=b)。

always @(posedge iclk)beginb <= a;c <= b;end

http://www.lryc.cn/news/405240.html

相关文章:

  • 动态特征转换的艺术:在Mojo模型中实现自定义变换的策略
  • 如何让Python爬虫在遇到异常时继续运行
  • 手把手带你搭建Snort入侵检测系统
  • 小程序内嵌uniapp页面跳转回小程序指定页面方式
  • 基于 Three.js 的 3D 模型加载优化
  • Jlink下载与适配keil ccs theia教程 用jlink代替ti自己的下载仿真器
  • C# 进制之间的转换(二进制,八进制,十进制,十六进制)
  • Linux 基础开发工具 : Vim编辑器
  • Delphi 11.2 配置Android SDK 环境
  • Spring Boot 学习(10)——固基(Idea 配置 git 访问 gitee)
  • 11 个接口性能优化技巧(上)【送源码】
  • AIoTedge 智能边缘物联网平台
  • 深入理解CSS基础【代码审计实战指南】
  • html改写vue日志
  • Transformer-Bert---散装知识点---mlm,nsp
  • 基于术语词典干预的机器翻译挑战赛笔记 Task3 #Datawhale AI 夏令营
  • 定制QCustomPlot 带有ListView的QCustomPlot 全网唯一份
  • Fast Planner规划算法(一)—— Fast Planner前端
  • 问题记录-SpringBoot 2.7.2 整合 Swagger 报错
  • 【视觉SLAM】 十四讲ch5习题
  • Webpack基础学习-Day01
  • 如何防止热插拔烧坏单片机
  • JQuery+HTML+JavaScript:实现地图位置选取和地址模糊查询
  • ArcGIS Pro SDK (九)几何 13 多部件
  • 【Node】npm i --legacy-peer-deps,解决依赖冲突问题
  • h5点击电话号跳转手机拨号
  • 从数据湖到湖仓一体:统一数据架构演进之路
  • Electron 渲染进程直接调用主进程的API库@electron/remote引用讲解
  • 在python中使用正则表达式
  • 华清数据结构day4 24-7-19