(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

基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验

本文详细介绍了基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验。通过分析纯滞后系统的控制难题,探讨大林算法在工业控制中的应用优势,并提供Matlab-Simulink环境搭建、控制器D(z)设计、振铃消除及仿真实验的完整流程。文章还对比了大林算法与PID控制的性能差异,为工程实践提供参考。

dropout6artist的博客 797

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

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

Reborn Lee 8242

基于云盾构建等保三级Web安全体系:从合规要求到实战落地

网络安全等级保护(等保)是保障信息系统安全的重要制度,其核心原理是通过分级防护、动态调整的策略,构建纵深防御体系。在技术层面,等保要求覆盖物理环境、通信网络、区域边界、计算环境和安全管理中心等多个层面,旨在通过技术和管理相结合的方式,有效应对网络攻击和数据泄露风险。对于Web应用而言,满足等保三级要求具有极高的技术价值,它不仅是合规的刚性需求,更是提升业务系统整体安全水位、建立用户信任、保障业务连续性的关键工程实践。在云计算时代,利用云原生安全服务(如Web应用防火墙WAF、云安全中心、态势感知等)可以高效

weixin_29324877的博客 308

高效复用PCB设计:Cadence Sub-Drawing跨项目复制技巧

本文详细介绍了Cadence Allegro中Sub-Drawing功能的应用技巧,帮助PCB工程师高效复用成熟设计模块。通过分步教学,从精准导出到完美导入,并提供了解决坐标错位与DRC冲突的实用避坑指南。掌握这一技巧能显著提升设计效率,实现团队知识的标准化积累与快速复用。

weixin_29172201的博客 398

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

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

Reborn Lee 3673

nCode:GlyphWorks案例教程一

nCode GlyphWorks案例一Comparing Frequency Content of Two Different Tests案例文件目标配置选择数据 Comparing Frequency Content of Two Different Tests 在本案例中,我们将比较来自两个不同测试的六个加速计通道的频率内容。将三轴加速度计放置在车辆的左前角和右前角,然后分别在两个不同的试验路面上行驶12分钟以上。 案例文件 此案例的文件(采用nCode DAC格式)位于nCode安装目录下的\demo

追月行的博客 1万+

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

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

左超 1379

ArcMap安装与配置全攻略:从下载到实战应用

本文提供了ArcMap 10.4.1从系统准备、详细安装到破解激活的完整指南,并包含首次启动的界面介绍与一个实战GIS分析项目。针对初学者,文章强调了在ArcGIS Pro成为趋势的当下,学习经典ArcMap对于理解核心概念和兼容现有工作流仍有重要价值,帮助用户避开安装常见陷阱,快速上手实战应用。

weixin_29200741的博客 340

ICNN实现入侵检测的思路与源码(CIC-IDS-2017)

基于ICNN实现入侵检测,可用于现实网络

t1274171989的博客 8415

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

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

a346544987的博客 678

Unlocking Decoding-time Controllability: Gradient-FreeMulti-Objective Alignment with Contrastive Pr

将基于庞大网络语料库训练的大型语言模型(LLMs)(OpenAI,2023;Touvron 等,2023;Google,2023)与人类偏好对齐,是减少产生不安全(Wei 等,2023)、幻觉(Zhang 等,2023b)和有偏见(Gallegos 等,2023)内容的重要一步。随着偏好学习技术(如 PPO(Schulman 等,2017)、DPO(Rafailov 等,2023)及其他变体(Azar 等,2023;Ethayarajh 等,2024;

qq_52053775的博客 1169

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

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

借问众神明的博客 2407

腾讯滑块验证码防水墙 tdc.js 补环境实录

腾讯滑块验证码破解研究摘要 本文记录了破解腾讯防水墙滑块验证码(tdc.js)的全过程。研究重点包括: 流程分析:通过抓包分析验证码完整链路,识别出关键参数collect和eks需从tdc.js虚拟机获取 环境模拟:采用渐进式补环境方法,针对字节码虚拟机特性构建完整的window对象,包括navigator、screen、canvas等API的精确模拟 核心破解:成功调用TDC.getData()和TDC.getInfo()获取关键参数,解决POW计算和滑块缺口识别问题 优化调整:针对errorCode 5

码王吴彦祖的博客 233

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

阻塞赋值与非阻塞赋值的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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【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、付费专栏及课程。

余额充值