阻塞式与非阻塞式的区别仿真

FPGA学习 -通过波形图来看阻塞赋值和非阻塞赋值的区别 本文章采用阻塞赋值和非阻塞赋值对比的方式来讨论二者的区别,利用简单的例程+波形图直观查看细小差别。 1.模块文件: module block_nonblock(clk50M,rst_n,a,b,c,out); input clk50M; input rst_n; input a; //实现a+b+c=out,拆分成两部。一步是定义d且d=a+b,另一布是out=c+d input b; input c; output reg [1:0]out; //out 阅读详情

阻塞式源代码:

module block(
	//input 
	clk,
	rst_n,
	//output 
	result_o,
	a,
	b 
);
input clk,rst_n;

output reg [4:0] result_o;
output reg [3:0] a,b;
always @(posedge clk )
	begin 
		if(!rst_n)
			begin
				a = 4'd0;
				b = 4'd0;
			end 
		else 
			begin 
				a = 4'd2;
				b = b + 1'b1;
				result_o = a + b + 1'b1;
			end 
	end 

endmodule

阻塞式测试代码:

`timescale 1 ns/ 1 ns
module block_vlg_tst();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
reg rst_n;
// wires                                               
wire [3:0]  a;
wire [3:0]  b;
wire [4:0]  result_o;
parameter CLK_PERIOD = 20;
// assign statements (if any)                          
block i1 (
// port map - connection between master ports and signals/registers   
	.a(a),
	.b(b),
	.clk(clk),
	.result_o(result_o),
	.rst_n(rst_n)
);
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
	clk = 1'b0;
	rst_n = 1'b0;
	#(CLK_PERIOD*5) rst_n = 1'b1;
	#(CLK_PERIOD*5) $stop;
// --> end                                             
$display("Running testbench");                       
end  

always  #(CLK_PERIOD/2) clk = ~clk; 
                                                            
always                                                 
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
begin                                                  
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                          
@eachvec;                                              
// --> end                                             
end                                                    
endmodule

阻塞式仿真波形:

非阻塞式代码:

module block_un(
	//input 
	clk,
	rst_n,
	//output 
	result_o,
	a,
	b 
);
input clk,rst_n;

output reg [4:0] result_o;
output reg [3:0] a,b;
always @(posedge clk )
	begin 
		if(!rst_n)
			begin
				a <= 4'd0;
				b <= 4'd0;
			end 
		else 
			begin 
				a <= 4'd2;
				b <= b + 1'b1;
				result_o <= a + b + 1'b1;
			end 
	end 

endmodule

非阻塞式测试代码:

`timescale 1 ns/ 1 ns
module block_un_vlg_tst();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
reg rst_n;
// wires                                               
wire [3:0]  a;
wire [3:0]  b;
wire [4:0]  result_o;

// assign statements (if any)                          
block_un i1 (
// port map - connection between master ports and signals/registers   
	.a(a),
	.b(b),
	.clk(clk),
	.result_o(result_o),
	.rst_n(rst_n)
);
parameter CLK_PERIOD = 20;
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
 	clk = 1'b0;
	rst_n = 1'b0;
	#(CLK_PERIOD*5) rst_n = 1'b1;
	#(CLK_PERIOD*5) $stop;
// --> end                                             
$display("Running testbench");                       
end  

always  #(CLK_PERIOD/2) clk = ~clk;                                                 
always                                                 
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
begin                                                  
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                                       
@eachvec;                                              
// --> end                                             
end                                                    
endmodule

非阻塞式仿真波形:

Verilog -- 阻塞与非阻塞的仿真与综合 Verilog – 阻塞与非阻塞的仿真与综合 文章目录Verilog -- 阻塞与非阻塞的仿真与综合基本概念Verilog层积事件列(stratified event queue)示例:自触发的always块阻塞和非阻塞的综合问题非阻塞赋值和$display0延时建议 参考 Clifford E. Cummings, Sunburst Design, Inc. “Nonblocking Assi... 阅读详情

相关推荐

FPGA学习:理解阻塞赋值与非阻塞赋值

一、初步理解阻塞赋值与非阻塞赋值 在Verilog HDL语言中,信号有两种赋值方式: (1).非阻塞(Non_Blocking)赋值方式( 如 b <= a; ) 块结束后才完成赋值操作。 b的值并不是立刻就改变的。 这是一种比较常用的赋值方法。(特别在编写可综合模块时) (2).阻塞(Blocking)赋值方式( 如 b = a; ) 赋值语句执行完后,块才结束。 b的值在...

1747

Verilog阻塞赋值与非阻塞赋值实战体验

阻塞赋值与非阻塞赋值之间的问题不仅仅在于赋值语句。

Fairchild_1947的博客 1346

【STM32F103C8T6】STM32 HAL库 最强串口收发 非阻塞式串口收发 (单字节中断收发、DMA 中断收发)

基于STM32CubeMX的串口非阻塞式收发实验(单字节中断收发,DMA中断收发任君选择) 首先是用STM32CubeMX创建工程 我这里用的是STM32F103C8T6最新系统开发板,芯片选择这里就直接跳过,直接来选择外设吧。 选择时钟源: 选择DEBUG总线: 配置串口: 这里只用串口1举例,其他串口基本没有区别。 配置时钟: 工程基本配置: 好,到现在为止按生成代码后会得到一个基本的工程,编译然后烧录或者用stlink 在线仿真都是没有问题的。 接下来就是添加我们的串口处理代码: 这里

weixin_42488680的博客 2690

FPGA中仿真概念

FPGA中仿真概念需要对输入Verilog或VHDL的设计进行仿真,以检查设计的功能正确性。对于HDL RTL功能,需要使用不可综合的Verilog结构编写测试台。阻塞和非阻塞赋值的仿真不...

OpenFPGA的博客 1621

Verilog 语言基础

想要很详细的理解Verilog语言基础,建议先下载Robei软件,这样可以很形象化的把语句理解透彻。 1 Verilog 基础 1.1. 数据 (1)电路四种状态 Verilog 用 4 个值来实现电平描述:0,1,Z 和 X。 (2)数值表示方法:位数+’+进制+值。 (3)数据类型 硬件的数据类型描述以驱动的方式来分类,常用的有两种:reg 和 wire。 1.2. 运算符 (1)逻辑运算符 (2)算术运算符 (3)比较运算符 1.3. 结构声明 由于 Robei 的存在,以下部分代码可以不

qq_35256534的博客 1120

雷达截面积建模仿真(RCS)

在目标侧,其形状、材料、尺寸(相对于雷达波长)和相对于雷达观察方向的方向等特征都会影响雷达看到的RCS。严格的数学处理超出了讨论的范围,但入射波和目标之间的相互作用可以定性描述。对于给定的散射方向,可以积分求和物体表面电流的振幅相位,当电流同相时,会出现较大的回波幅度。随着目标方向和雷达视角随时间变化,电流振幅和相位会发生变化,形成看似随机的峰值和零点的散射模式,出现“相长”和“相消”干涉。除了雷达到目标的距离外,雷达截面(RCS)是RRE(雷达距离方程)中唯一与目标相关的参数,因此不在雷达设计者的。

qq_30796447的博客 3137

Verilog阻塞式赋值与非阻塞式赋值的分析

在Verilog HDL中,有两种过程性赋值方式,即阻塞式(blocking)和非阻塞式(non-blocking)。这两种赋值方式看似差不多,其实在某些情况下却有着根本的区别,如果使用不当,综合出来的结果和你所想得到的结果会相去甚远。 Tip:所谓过程性赋值就是指在initial或always语句内的赋值,它只能对寄存器数 据类型的变量赋值。 阻塞式(blocking)的操作符为 “

成长日志 2041

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

关于四位计数器的设计,阻塞式与非阻塞式赋值引发的问题

1、今天,从教材中学了两种可综合的四位计术器的设计方法,先附上代码吧。 (1)、建模: 方法一: module counter1(out,cout,data,load,cin,clk);   input [3:0]data;   input load,cin,clk;   output cout;   output [3:0]out;   reg [3:0]out;     

Tina_yaoyao的专栏 1090

赴美参加学术会议办理流程

有幸能在研究生阶段获得学校资助出国参加学术会议,首先要感谢学校的支持,以及学院和实验室的各位老师~ 接下来说下参会整个准备过程: 本人在接到论文录用通知后,就开始办理相关手续。因为会议地点是美国夏威夷,而且录用通知时间与会议召开时间只隔两个月左右,所以接下来两个月时间要办好学校出国申请手续,赴美签证,因为专业原因,据说签证不好办,所以时间比较紧。学校出国申请和签证相关材料是并行进行的,赴美花费...

xingxin_xu的博客 3194

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走 同步的比较简单,直接在coze 工作流里面就可以搞定了,也不用写代码之类的

AI懒虫 2357

Verilog HDL学习——深入认识非阻塞式赋值和阻塞式赋值

qq_42295125的博客 241

别再纠结Dify了!实测对比RAGFlow和Dify,聊聊企业知识库到底该怎么选

本文深度对比了RAGFlow和Dify在企业知识库选型中的实际表现,从技术架构、性能指标、部署成本等多维度进行分析。RAGFlow在复杂文档处理和准确率方面表现突出,适合有专职技术团队的企业;而Dify则以低门槛和快速部署见长。文章提供了六维度评估法,帮助企业根据文档复杂度、准确率要求等技术指标做出明智选择。

weixin_30897233的博客 669

什么是Verilog中的阻塞式赋值和非阻塞式赋值,一篇文章说清楚!

Verilog中阻塞赋值与非阻塞赋值的核心区别在于执行方式:阻塞赋值(=)顺序执行,会阻塞后续语句;非阻塞赋值(<=)并行执行,所有计算同时开始,赋值在当前时间步结束时完成。阻塞赋值适用于组合逻辑,非阻塞赋值必须用于时序逻辑以避免竞争冒险。关键设计原则包括:时序电路/锁存器用非阻塞赋值,组合逻辑用阻塞赋值,同一always块中不混用两种赋值,不为同一变量设置多驱动源。正确使用这两种赋值方式是编写可靠Verilog代码的基础。

xiaoxu_bjtu的博客 531

【RT-DETR涨点改进】独家创新改进篇 | AAAI2024 | RT-DETR引入CFBlock增强对长程依赖和全局语义信息的建模能力,有助于提升复杂场景下小目标、遮挡目标的检测精度

本文给大家介绍在RT-DETR中引入CFBlock模块,能够有效提升模型对长程依赖和全局语义信息的建模能力,在保持轻量化和高效推理的基础上增强特征表达力,特别有助于提升复杂场景下小目标、遮挡目标的检测精度,从而实现更优的精度与速度平衡。

Ai缝合怪、助力小伙伴高效发论文 260

Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术

引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")

liaokailin的专栏 1849

verilog中=和<=的区别

一般情况下使用<=,组合逻辑使用=赋值,时序逻辑使用<=赋值: 举个例子:初始化m=1,n=2,p=3;分别执行以下语句 1、begin m=n;n=p;p=m; end 2、begin m<=n; n<=p; p<=m; end 结果分别是:1、m=2,n=3,p=2;(在给p赋值时m=2已经生效) 2、m=2,n=3,p=1;(在begin-en...

weixin_30702413的博客 2516

〔重庆理工大学〕大学物理实验--变温霍耳效应及其参数测定

每个老师要求不同,实验报告内容和数据仅供参考。

Pretty Boy Fox的博客 3043

阻塞与非阻塞赋值的区别,看完就理解了

阻塞赋值:前面语句执行完,才可执行下一条语句;即:前面语句的执行(b=a)阻塞了后面语句的执行(c=b)。即:always块内,2条语句顺序执行。 always @(posedge i_clk) begin b = a; c = b; end 注意:a的值赋给b,b的值赋给c,是在同一个时钟上升沿完成,如下图仿真结果。 非阻塞赋值:alw...

匠心筑梦人 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

芯片人必会的task与function区别详解【Verilog高级教程】

function与task的区别详解

weixin_43698385的博客 4826

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

FPGA开发必备:用Vivado仿真分析阻塞与非阻塞赋值的时序差异

本文通过Vivado仿真实战,深入解析Verilog中阻塞赋值与非阻塞赋值的核心差异。文章对比了两种赋值方式的硬件映射模型与仿真波形,揭示了非阻塞赋值如何正确建模时序电路并规避亚稳态风险,同时提供了在组合逻辑中使用阻塞赋值的最佳实践与常见陷阱规避方法。

weixin_29284201的博客 117

ssm框架搭建

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

verilog编程注意事项(阻塞/复位/异步/编码规范/常见错误)

一、异步逻辑同步化处理,方法有: 1.采用握手信号进行同步 2.采用打2拍的方法进行同步处理 3.采用FIFO进行同步处理 二、阻塞式赋值和非阻塞式赋值的使用 1.在产生组合逻辑的always块中使用阻塞式赋值 2.在产生时序逻辑的always块中使用非阻塞式赋值 3.在普通的组合逻辑中,如assign语句中个,使用阻塞式赋值 4.在不清楚使用阻塞还是非阻塞的时候,采用非阻塞式

lucifer329的专栏 921

Verilog之delay的两种用法(inter/intra)

verilog语言中有两种延迟方式:inter-delay和intra-delay,关于inter和intra。这两个英文前缀都有“内部,之间”的意思,但又有所不同。inter表达不同事物之间,intra表达同类事物之间,两者具体的含义请细细体会:)。以阻塞式赋值为例(block assignment): 1.inter-delay的表达式为:#delay-value a=b+c; ...

weixin_30289831的博客 2906

Verilog中repeat关键字的本质、应用场景与最佳实践

在数字电路设计与硬件描述语言(HDL)领域,循环结构是控制逻辑复用的基础概念。其核心原理在于通过特定语法结构重复执行某段代码,以简化设计并提高描述效率。从技术价值看,循环结构能显著提升代码的简洁性和可维护性,尤其在测试激励生成和接口模拟等场景中作用突出。在Verilog中,repeat关键字正是这一理念的典型体现,它主要用于仿真测试环境,通过控制仿真时间内事件的重复次数,高效构建时钟生成、复位控制、数据流模拟等验证场景。然而,与可综合的for循环不同,repeat因其动态执行和仿真时间依赖的特性,无法被综合

weixin_29913663的博客 257

FPGA学习1- Verilog HDL语法学习

一.模块 module xxx(输入、输出) 输入/输出端口定义...... 信号类型声明...... 逻辑功能定义...... endmodule 其中逻辑功能定义: 二. 数据类型和运算 1.常量类型 一种为连线型,另一种为寄存器型 ①,整数 ②,实数 ③,参数型 3.变量类型 ①.连线型 ②,寄存器型 ③,momery型 4.运算符 和c语言类似的不做说明,着重说下特有的 ...

Paul_Yu_Zhang的博客 434
上一篇: 基于FPGA的频率测量
下一篇: vivado执行报错number of unplaced terminals is greater than number of available sites
全村的希望7
博客等级 码龄8年 27粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值