一文搞懂阻塞赋值和非阻塞赋值

目录

  • 2.非阻塞赋值举例
  • 3.阻塞赋值举例
  • 4.总结

微信公众号获取更多FPGA相关源码:
在这里插入图片描述# 1.阻塞赋值和非阻塞赋值的区别:
(1)阻塞赋值"=",必须是阻塞赋值完成后,才进行下一条语句的执行;赋值一旦完成,等号左边的变量值立即变化。在同一个块中,非阻塞赋值表达式的书写顺序不影响赋值的结果。硬件没有对应的电路。
(要点为串行,从上到下顺序执行,立即生效)

(2)非阻塞赋值"<=",在赋值开始时计算表达式右边的值,在本次仿真周期时钟的下降沿时才更新被赋值变量,即赋值不是立即生效的;非阻塞赋值允许块中其他语句同时执行。在同一个块中,阻塞赋值表达式的书写顺序会影响赋值的结果。硬件有对应的电路。
(要点:并行,不是立即生效,同时执行)

2.非阻塞赋值举例

相信刚入门的读者,看完上面的理论是一脸懵逼,实践出真知,来看下面一个简单的例子:

module test(
	input 	clk,
	input	din,
	output	dout
    );
	reg r1,r2,r3;
	always @(posedge clk) begin
		r1 <= din;
		r2 <= r1;
		r3 <= r2;										
	end												
	assign dout = r3;
endmodule

非阻塞赋值RTL视图

话不多说,写个简单的仿真来看结果,设置输入din为0,1,2,3一直循环。

`timescale 1ns / 1ps

module test_tb;
parameter 		T = 20	;
reg				clk		;	
reg		[1:0]	din		;
wire	[1:0]	dout	;

always #(T/2) clk = ~clk;

test u_test(
.clk	(clk	),
.din	(din	),
.dout   (dout	)
);

initial begin
	clk = 1'b0;
	din = 2'b0;
	for(;;) begin
		#T
		din = din + 1'b1;
	end
end

endmodule

非阻塞赋值仿真

可以看到第一个时钟周期,r1被赋值为din的’0’,但是由于上个周期r1为未知,此时r2的值为未知;同理r3的值也应该被赋予的是上个周期的值,也是未知。从第三个周期开始,dout才开始输出din的值,相当于din被延迟了三个周期输出。由于非阻塞赋值"<="的特性,常常用来对信号打拍,在消除亚稳态和边沿检测时经常用到。

3.阻塞赋值举例

还是使用上面的例子,只是把"<=“改为”="。

`timescale 1ns / 1ps

module test(
	input 			clk		,
	input	[1:0]	din		,
	output	[1:0]	dout
    );
	
	reg [1:0]	r1,r2,r3;
	
	always @(posedge clk) begin
		r1 = din;
		r2 = r1;
		r3 = r2;
	end	
	assign dout = r3;
	
endmodule

阻塞赋值RTL视图

还是仿真看下结果:

阻塞赋值仿真

可以看到,r1,r2,r3在一个时钟上升沿,都赋值为输入din的值。

4.总结

阻塞赋值对应的电路结构往往与触发沿没有关系,只与输入的电平变化有关系;非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值的情况。

8个要点:

  1. 时序电路建模时,用非阻塞赋值(<=)。
  2. 锁存器电路建模时,用非阻塞赋值(<=)。
  3. 用always块建立组合逻辑时,用阻塞赋值(=)。
  4. 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。
  5. 在同一个always块中不要既用非阻塞赋值又用阻塞赋值。
  6. 不要在一个以上的always块中为同一个变量赋值。
  7. 用$strobe系统任务来显示用非阻塞赋值的变量值。
  8. 在赋值时不要使用#0延迟。

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/710932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ollama 本地CPU部署开源大模型

Ollama可以在本地CPU非常方便地部署许多开源的大模型。 如 Facebook的llama3, 谷歌的gemma, 微软的phi3&#xff0c;阿里的qwen2 等模型。 完整支持的模型列表可以参考&#xff1a;https://ollama.com/library 它基于llama.cpp实现&#xff0c;本地CPU推理效率非常高&#xff0…

Postman简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装和卸载 5.菜单和菜单项 6.使用 7.应用场景 8.示例 8.1.简单的GET请求 8.2.POST请求提交数据 8.3.查询参数 9.未来展望 10.总结 1.概述 Postman是一款用于API开发、测试和文档管理的综合性工具。允许开发者和测试人员创建…

leetcode刷题记录42-1584. 连接所有点的最小费用

问题描述 给你一个points 数组&#xff0c;表示 2D 平面上的一些点&#xff0c;其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的绝对值。 请你返回将所有点连…

建议收藏 | IT运维体系合集(附PPT下载)

现如今&#xff0c;IT运维工作的重要性日益凸显。对于构建IT运维管理系统而言&#xff0c;进行系统的运维建设以确保运维服务工作正常、有序、高效、协调地进行尤为重要。 很多人对运维建设停留在传统的认知层面&#xff0c;缺乏系统的培训。因此本篇文章分享一套IT运维体系合…

LLM大语言模型算法特训,带你转型AI大语言模型算法工程师(完结)

LLM大语言模型算法 与AI大语言模型算法工程师的联系 LLM&#xff08;Large Language Model&#xff09;大语言模型是指像GPT这样的大型自然语言处理模型&#xff0c;而AI大语言模型算法工程师则是负责开发和优化这些模型的专业人士。它们之间的联系可以从以下几个方面来理解&a…

MySQL概述——DDL

1.SQL通用语法 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾。 2. SQL语句可以使用空格/缩进来增强语句的可读性。 3.MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写。 4.注释: &#xff08;1&#xff09;单行注释:--注释内容或#注释内容(MySQL特…

MoCo v3(ICCV 2021)

paper&#xff1a;An Empirical Study of Training Self-Supervised Vision Transformers official implementation&#xff1a;https://github.com/facebookresearch/moco-v3 出发点 本文并没有提出一种新的方法&#xff0c;而是对计算机视觉领域最近进展中的一个重要且基础…

MySQL 日志(一)

本篇主要介绍MySQL日志的相关内容。 目录 一、日志简介 常用日志 一般查询日志和慢查询日志的输出形式 日志表 二、一般查询日志 三、慢查询日志 四、错误日志 一、日志简介 常用日志 在MySQL中常用的日志主要有如下几种&#xff1a; 这些日志通常情况下都是关闭的&a…

我用AI绘画Stable Diffusion 一个月后,竟然能做出惊艳所有人的效果!

大家好&#xff0c;我是设计师阿威 如今要拍摄一组写真&#xff0c;需要服装、道具、灯光、场地、布景、拍摄、后期等过程。整个过程需要统一才能形成好的写真效果。现在有了AI绘图技术&#xff0c;我们可以实现通过AI绘图&#xff0c;只用计算机计算就得到一组接近真实的写真照…

Python 中国象棋游戏【含Python源码 MX_011期】

简介&#xff1a; 中国象棋是一种古老而深受喜爱的策略棋类游戏&#xff0c;也被称为中国的国粹之一。它在中国有着悠久的历史&#xff0c;起源可以追溯到几个世纪以前。Python 中国象棋游戏是一个用Python编程语言编写的软件程序&#xff0c;旨在模拟和提供中国象棋的游戏体验…

Github 2024-06-10开源项目周报 Top15

根据Github Trendings的统计,本周(2024-06-10统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8Jupyter Notebook项目2Go项目2C++项目1Shell项目1Lua项目1JavaScript项目1MDX项目1C项目1HTML项目1Python - 100天从新手到大师 创建…

Maven 项目的创建(导入依赖、仓库、maven的配置、配置国内源、以及可能遇到的问题)

一、创建Maven项目 使用的编译软件&#xff1a;idea 软件版本&#xff1a; 社区版 2021.1 - 2022.4&#xff08;为什么选择这个版本&#xff0c;因为只有这个版本里有一些插件是可以安装的&#xff09; 专业版不限制&#xff08;专业版功能是最全的&#xff0c;但是收费&am…

【会议征稿,ACM出版】2024年云计算与大数据国际学术会议(ICCBD 2024,7月26-28)

2024年云计算与大数据国际学术会议(ICCBD 2024)将于2024年7月26-28日在中国大理召开。ICCBD 2024将围绕“云计算与大数据”的最新研究领域, 旨在为从事研究的专家、学者、工程师和技术人员提供一个国际平台&#xff0c;分享科研成果和尖端技术&#xff0c;了解学术发展趋势&…

能耗分析与远程抄表是什么?

一、引言 在21世纪的数字化时代&#xff0c;能耗分析和远程抄表已成为现代能源管理的重要组成部分。这两项技术不仅提高了能源效率&#xff0c;还为企业和个人提供了更精细的能源使用数据&#xff0c;从而实现更科学的节能减排。 二、能耗分析的深度洞察 能耗分析是通过收集…

Python保姆级教程 数据类型—新手小白入门必看

python学习资料&#xff0c;下方已打包好 一、基本数据类型与变量&#xff08;上&#xff09; 2.1 注释 优点&#xff1a; 代码说明 没注释的代码 有注释的代码 不让解释器执行注释的那句话 2.2 单行注释 单行注释快捷键&#xff1a;ctrl &#xff1f; 2.3多行注释 …

【Java】内部类、枚举、泛型

目录 1.内部类1.1概述1.2分类1.3匿名内部类(重点) 2.枚举2.1一般枚举2.2抽象枚举2.3应用1&#xff1a;用枚举写单例2.4应用2&#xff1a;标识常量 3.泛型3.1泛型认识3.2泛型原理3.3泛型的定义泛型类泛型接口泛型方法 3.4泛型的注意事项 1.内部类 1.1概述 内部类&#xff1a;指…

大模型:原理、进展及其影响

大模型:原理、进展及其影响---中国人民大学人工智能学院 一、大模型的背景和原理 二、大模型的飞速发展及趋势 三、大模型的深刻影响

1_常见指令【Linux中常见30个指令的学习和使用】【万字长文】

常见指令以及权限理解 开始学习linux前的注意事项 在学习linux之前&#xff0c;我们要知道linux是一个操作系统。 那操作系统是什么呢&#xff1f;&#xff08;这里只做大概了解&#xff09; 操作系统就是一个管理软硬件的软件。 它对上提供良好&#xff08;稳定、高效、安…

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障&#xff1a; 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃&#xff0c;由于数据涉密&#xff0c;需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测&#xff0c;经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

力扣hot100:75. 颜色分类(双指针)

75.颜色分类 本题是经典的「荷兰国旗问题」&#xff0c;由计算机科学家 Edsger W. Dijkstra 首先提出。 75. 颜色分类 1、遍历两遍 遍历两遍&#xff0c;第一遍放置0的位置&#xff0c;第二遍放置1的位置&#xff0c;我们只需要维护一个当前放置位置即可。 class Solution…