(Verilog HDL)阻塞赋值和非阻塞赋值的区别和使用

Verilog基础语法(11)之阻塞与非阻塞赋值 阻塞赋值在一个always块中,后面的语句会受到前语句的影响,具体来说,在同一个always中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被“阻塞”。在一个过程块内多个阻塞赋值语句是顺序执行的。一条非阻塞赋值语句的执行是不会阻塞下一条语句的执行,也就是说在本条非阻塞赋值语句执行完毕前,下一条语句也可开始执行。非阻塞赋值语句在过程块结束时才完成赋值操作。在一个过程块内的多个非阻塞赋值语句是并行执行的。在Verilog HDL语言中,信号有两种赋值方式,即阻塞赋值和非阻塞赋值。 阅读详情

过程赋值语句多用于对reg型变量进行复制,过程赋值有阻塞复制和非阻塞赋值两种。

非阻塞赋值的符号为:<=

阻塞赋值符号为:=

(1)非阻塞赋值的例子:

reg c,b;

always@(posedge clk)

begin

b <= a;

c <= b;

end

aa

(2)阻塞赋值的例子:

reg c,b;

always @ (posedge clk)

begin

b = a;

c = b;

end

bb

上述例子中,使用非阻塞赋值方法,其中的每个<=都可以理解为一个寄存器。而在同一

个时钟下面采用的非阻塞赋值方法,模块内所有寄存器都同时随时钟跳变。这是硬件处理

的精髓,也是时序电路中大量使用非阻塞赋值的原因。

在实际书写verilog HDL代码的过程中,对于always中reg型变量,如果不是处理组合逻

辑,尽量不使用阻塞赋值的方法。这主要是基于代码的可综合性考虑的,因为在verilog

HDL代码编译的时候,对于有些从后编译的编译器,阻塞赋值会找成时序上与预想的不

一致。对于以上阻塞赋值的例子,采用非阻塞方法应该写为

reg c,b;

always @ (posedge clk)

begin

b <= a;

c <= a;

end

实现电路和原方法一样。

而在always用于组合逻辑中,采用阻塞赋值表明未使用寄存器。

如

reg a,A,B,f_a;

always @ (a or A or B)

begin

f_a = a ?A : B;

end

以下是使用阻塞和非阻塞赋值应遵循的一些基本原则,这些原则有利于防止竞态(race condition)的发生。

(1)当用always块来描述组合逻辑(combinational logic)时,应当使用阻塞赋值。

(2)对于时序逻辑(sequential logic)的描述和建模,应当使用非阻塞赋值。

(3)在同一个always模块中,最好不要混合使用阻塞赋值和非阻塞赋值,对同一变量

既进行阻塞赋值,又进行非阻塞赋值,在综合时会出错。所以always中要么全部使用非

阻塞赋值,要么把阻塞赋值和非阻塞赋值分在不同的always中书写。

(4)尽量不要再在多个不同的always块中对同一变量赋值。

(5)使用$strobe显示使用非阻塞赋值的变量。

 

参考文献:

【1】Nonblocking Assignments in Verilog Synthesis, Coding
Styles That Kill! Clifford E. Cummings

【2】数字系统设计与Verilog HDL 王金明

Verilog中的阻塞与非阻塞赋值 在Verilog HDL语言中,信号有两种赋值方式,即阻塞赋值和非阻塞赋值。 1、阻塞(Blocking)赋值(如 b = a) 阻塞赋值,顾名思义,即在一个always块中,后面的语句会受到前语句的影响,具体来说,在同一个always中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被“阻塞”。在一个过程块内多个阻塞赋值语句是顺序执行的。 赋值语句执行完后,块才结束。 b的值在赋值语句执行完后立刻就改变的。 每条语句执行之后才能执行下一条语... 阅读详情

相关推荐

阻塞赋值与非阻塞赋值

AI 生成阻塞赋值与非阻塞赋值是Verilog HDL(硬件描述语言)中的两种基本赋值方式,它们在执行方式、电路结构对应以及使用场景上存在着显著的差异。

m0_38012497的博客 1344

Verilog语法之阻塞赋值和非阻塞赋值

本文转自知乎罗成的文章Verilog语法之六:阻塞赋值与非阻塞赋值 总的文章小白如何快速入门Verilog 本文首发于微信公众号“花蚂蚁”,想要学习FPGA及Verilog的同学可以关注一下。 一、初步理解阻塞赋值与非阻塞赋值 在Verilog HDL语言中,信号有两种赋值方式: (1).非阻塞(Non_Blocking)赋值方式( 如 b <= a; ) 块结束后才完成赋值操作。 b的值并...

yijiancmy的博客 5944

Verilog模块的结构、数据类型、变量和基本运算符号

模块的端口声明了模块的输入输出口,其格式如下:module 模块名(口1,口2,口3,口4,......);在Verilog模块中所有过程块(如initial块、always块)、连续赋值语句、实例引用都是并行的。它们表示的是一种通过变量名互相连接的关系。在同一模块中这三者出现的先后顺序没有关系。只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于模块的功能定义部分以上的内容是和以往学习的C语言最大的不同,C语言是顺序执行的语句,这就是二者之间的差异。

qq_43460068的博客 3447

verilog中的阻塞和非阻塞赋值

verilog阻塞和非阻塞赋值语句

weixin_45545092的博客 6538

Verilog中阻塞赋值和非阻塞赋值的正确使用

文章主要介绍Verilog中阻塞赋值和非阻塞赋值的正确使用方法。

EDA/PLD中的阻塞与非阻塞赋值

作者:李秋凤,华清远见嵌入式学院讲师。   稍微接触过Verilog HDL的都对阻塞与非阻塞赋值略知一二,也是我们经常强调的重点之一,在课堂上还是有学员问什么不一样呢,为什么我用阻塞赋值也能得出正确的结果呢?   在编写可综合代码的时候,建议大家不要忘了打开RTL网表查看器看看我们自己综合出来的电路是不是自己想要的逻辑。   我就阻塞与非阻塞赋值这个问题详细说明一下。   1、连续赋值   连续赋值语句的硬件实现是:从赋值语句(=)右边提取出的逻辑,用于驱动赋值语句左边的线网(net)   连续赋值语句   module continousassignment(a,b,c);

Verilog HDL 初级入门知识简单讲解(wire 和 reg 类型的区别, always 和 assign 的区别,“阻塞”赋值 和 “非阻塞赋值”的区别 )

本文转载自原作者:姚纪元,原文地址已失效        很多刚学Verilog HDL (硬件描述语言)的朋友肯定会对阻塞赋值和非阻塞赋值比较疑惑,那我们就一起来抛开这层迷雾吧。首先我们要理解两种变量类型 Net Type(连线型)和 Register Type (寄存器型)。(有些参考书上有分为3种类型,这个无关紧要)。        Net Type(连线型),从名字上理解就是“导线”呗,...

GameForTwo写文字的地方 4079

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架)

weixin_41926602的博客 3万+

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

刚开始接触Verilog HDL语言时,这种硬件描述语言有一点与软件的程序设计语言直观上的最大区别大概就是这个赋值语句了(这里只是强调直观上的最大区别,事实上的最大区别并非如此)。 Verilog HDL中的赋值方式有两种:阻塞赋值与非阻塞赋值。 之前也看过很多种解释,例如,阻塞赋值(=)适用于组合电路的设计,非阻塞赋值(<=)适用于时序电路的设计;还有阻塞赋值和非阻塞赋值只是语法上存在...

Reborn Lee 8242

手把手教你配置MAX96712解串器:从I2C地址分配到PWM帧同步

本文详细解析了MAX96712解串器在自动驾驶视觉链路中的核心配置流程。从I2C地址分配、GMSL2数据流映射到实现多摄像头精准同步的PWM帧同步触发,手把手指导工程师构建高可靠性的图像传输系统,并提供了实用的Linux调试技巧与问题排查思路。

weixin_29297127的博客 926

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1565

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

目录 连续赋值符号 阻塞赋值符号 非阻塞赋值 映射赋值符号 位置赋值 以前已经写过博文专门介绍阻塞赋值和非阻塞赋值运算符了,见博文:【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式,可今天看《FPGA之道》这本书时,回首过去,觉得说得还不够,这里再一次总结下 Verilog 中的赋值运算符。其中包括阻塞赋值和非阻塞赋值,感觉理解更进一步了。 包括对阻塞以及非阻塞这些字...

Reborn Lee 3673

Oracle GoldenGate (OGG) 实战:从安装到故障排查的完整避坑指南

本文提供了一份详尽的Oracle GoldenGate实战指南,涵盖从环境准备、核心进程配置到性能调优与故障排查的全过程。重点解析了OGG安装与部署中的常见陷阱,并分享了确保数据同步链路稳定运行的高级运维技巧与常见故障处理方法,帮助技术人员高效避坑。

weixin_29230649的博客 380

verilog HDL 的阻塞和非阻塞语句分析

在FPGA设计中完全透视verilog HDL 的阻塞和非阻塞语句,是个人在verilog HDL运用中的一些心得体会。        阻塞和非阻塞语句作为verilog HDL语言的最大难点之一,一直困扰着FPGA设计者,即使是一个颇富经验的设计工程师,也很容易在这个点上犯下一些不必要的错误。阻塞和非阻塞可以说是血脉相连,但是又有着本质的差别。理解不清或运用不当,都往往会导致设计工程达不到预期的

左超 1379

保姆级教程:用K210麦克风阵列模块实现声源定位(附完整Python代码与坐标计算)

本教程详细介绍了如何使用K210麦克风阵列模块实现高精度声源定位,包括硬件连接、算法解析与实战代码。通过Python代码示例,展示了从原始数据获取到三维空间坐标计算的完整流程,适用于智能家居、机器人导航等场景。

weixin_42558093的博客 228

自动分割和测量混凝土钢筋的思路与原理

该文提出了一种基于PCL库的点云处理系统,用于自动测量混凝土结构中钢筋的几何参数。系统采用多阶段处理流程:首先通过RANSAC算法提取地面并旋转对齐;接着使用区域生长算法分割混凝土结构;然后采用RANSAC线检测识别钢筋,按方向分类;最后通过圆柱拟合和坐标差计算获得钢筋间距、直径和高度差等参数。文章详细介绍了各模块的核心算法,包括地面检测、坐标变换、钢筋识别和几何计算等关键步骤,并分析了主要参数的敏感性。系统通过分层处理和坐标变换确保测量精度,为混凝土结构的无损检测提供了自动化解决方案。

weixin_45196569的博客 680

举例说明Verilog HDL 阻塞赋值与非阻塞赋值

在给初学者讲解中发现了一些小问题,在此做一下深入的举例说明阻塞和非阻塞赋值 阻塞赋值符号:= 用于组合逻辑电路 非阻塞赋值符号:<= 用于 时序逻辑电路 阻塞是指在同一个always块中,其后面的赋值语句从概念上是在前一条赋值语句结束后开始赋值的。 非阻塞语句是首先计算语句块内部所有右边表达式(RHS)的值,然后完成对左边寄存器变量的赋值操作 例1: 如下2段代码对比: 1、 always @(posedge clk) begin b=a; c=b; end RT

a346544987的博客 678

美军利用MANET技术实现无人作战单元协同作战

本文首先介绍了移动自组织网络 (MANET)以及Wave Relay®波形中继技术,并探讨了波形中继MANET平台在美空军ABMS项目等军事方面的运用情况。

guanyifu9的博客 855

【verilog中的阻塞赋值与非阻塞赋值】

文章目录1: 非阻塞赋值语句2:阻塞赋值语句总结 1: 非阻塞赋值语句 非阻塞(Non_Blocking)赋值方式块结束后才完成赋值操作。b的值并不是立刻就改变的。对于时序电路中的always块的reg信号,一般采用非阻塞语句赋值。这种方式的赋值并不是马上执行的,也就是说always块内的下一条语句执行后,b并不等于a,而是保持原来的值。always块结束后,才进行赋值。 如: module no_blocking (clk, a ,c ); input cl

借问众神明的博客 2407

扩散模型与强化学习(13):In-Context Reward Hacking现象与解决方案

奖励作弊(Reward Hacking)指智能体通过钻规则漏洞而非真正完成任务来最大化奖励信号。以论文编辑实验为例,研究提出“上下文奖励作弊”(ICRH)概念,即模型利用共享上下文钻空子,如盲目添加“正确!”或输出无关内容。实验发现,模型规模扩大可能加剧ICRH,且提示词优化难以根治。与传统奖励作弊不同,ICRH发生在部署阶段,由通用性驱动。应对建议包括多轮测试、多样化反馈及异常场景模拟,但尚无完美解决方案。

沉迷单车的追风少年 1319

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

阻塞赋值与非阻塞赋值的RTL模型

1.非阻塞赋值:并行的 当两个信号有依赖关系时,如地址与数据 always @(posedge clk) begin b <= a; c <= b; end endmodule always @(posedge clk) begin b = a; c = b; end

qq_40946355的博客 371

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Verilog阻塞赋值与非阻塞赋值的理解(个人总结)

Verilog阻塞和非阻塞区别的理解,从仿真角度举例分析。

weixin_62246030的博客 706

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【FPGA】——Verilog语法

简介 (一)概述 Verilog是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,可表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 数字电路设计者利用这种语言,可以从顶层到底层逐层描述自己的设计思想,用一系列的模块来表示及其复杂的数字系统。然后利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电...

朱坚强的博客 1032

Verilog常用语法

Verilog可综合常用语法 一、模块的结构、数据类型、变量和基本运算符号 1 模块的结构 1.1 端口定义 module 模块名(口1,口2,口3,…); 两种模块例化方式: 方法一:模块名(连接端口1信号名,连接端口2信号名,连接端口3信号名,…); 方法二:模块名(.端口名1(连接信号1名),.端口名2(连接信号2名),…); 例化时还可以对模块中的参数型(parameter)变量进行重新赋值; 例如: module min(input clk,input rst_n,input a1,outpu

详解FPGA及硬件电路开发 4万+
上一篇: (Verilog HDL)wire型和reg型的电路区别
下一篇: (Verilog HDL)如何提高代码的仿真效率
leonsc
博客等级 码龄18年 29粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值