阻塞赋值与非阻塞赋值

文章目录

  • 一、何为“阻塞”?
  • 二、阻塞赋值与非阻塞赋值
    • 1. 阻塞式赋值“=”
    • 2.非阻塞式赋值“<=”
  • 三、什么时候用阻塞赋值或非阻塞赋值?


一、何为“阻塞”?

所谓“阻塞”,可以理解为阻止顺序语句块中其他语句的执行。例如,在一个块语句中,如果含有多条阻塞式赋值语句,当执行到其中某条语句时,若该语句未执行完,那么其后面的语句将处于等待中,不会被执行,好像都被阻塞了一样。

二、阻塞赋值与非阻塞赋值

赋值操作可以细分为两个部分:(1)RHS运算操作(计算等式右手方向的数值);(2)将RHS运算结果赋值给LHS。
那么阻塞赋值与非阻塞赋值两者最本质的区别在于操作(1)与操作(2)是并行执行的还是串行执行的。

1. 阻塞式赋值“=”

阻塞赋值即执行RHS的运算,同时将RHS的运算结果赋值给LHS。
①赋值语句立即执行,执行完毕后才执行下一条语句(即为阻塞的含义,依次顺序执行);
②计算完“=”右边的值之后,立刻更新“=”左边的值,即左侧值在赋值语句执行完后立即改变。

assign连续(阻塞)赋值代码如下(示例):

wire    [DW-1:0]    RHS;

assign LHS = RHS;

在always块中进行阻塞赋值代码如下(示例):

reg    [DW-1:0]    RHS;
always @(*) begin
    LHS = RHS;
end

2.非阻塞式赋值“<=”

非阻塞赋值先执行将RHS的运算,再将RHS的运算结果赋值给LHS。在计算非阻塞赋值的RHS表达式和更新LHS期间,其他的Verilog语句,包括其他的Verilog非阻塞赋值语句都能同时计算RHS表达式和更新LHS,非阻塞赋值允许其他的Verilog语句同时进行操作。
①语句执行到此时,先计算“<=”右侧值,但不立即赋值给左侧;
②always块结束后才完成此次赋值操作;
所有过程语句中的非阻塞赋值语句,必须在块语句执行结束时才会整体完成赋值更新。非阻塞赋值只能用于对reg进行赋值,因此只能用在initial和always块等过程块中。

在always块中进行非阻塞赋值代码如下(示例):

reg    [DW-1:0]    RHS;
always @(边沿信号) begin
    LHS <= RHS;
end

阻塞赋值中 “RHS运算操作” 与 “将RHS运算结果赋值给LHS” 是并行执行的,即RHS中运算结果一旦发生变化就立马赋值给LHS,LHS立马随之变化。而在非阻塞赋值中,“RHS运算操作” 与 “将RHS运算结果赋值给LHS” 是串行执行的,即先执行“RHS运算操作” ,得到RHS运算结果,再“将RHS运算结果赋值给LHS” 。

三、什么时候用阻塞赋值或非阻塞赋值?

组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值。

  1. assign赋值语句中只能使用“=”,且等号左边的目标对象只能是wire型
  2. initial和always语句中,两种赋值符号都可以使用,但等号左边的目标对象只能是reg型变量。
  • always块中用阻塞赋值“=”,综合生成组合逻辑的电路结构,这种电路结构只与输入电平的变化有关。
  • always块中用非阻塞赋值“<=”,综合成时序逻辑的电路结构,这种电路结构往往与触发沿有关,只在触发沿时才可能发生赋值的变化。
    在这里插入图片描述
    注意:在一个always块中,不要既用阻塞赋值又用非阻塞赋值。不允许在多个always块中对同一个变量进行赋值。
    在这里插入图片描述
    程序(1)为阻塞赋值,结果显示使用了1个寄存器; 程序(2)为非阻塞赋值,结果显示使用了2个寄存器。

另外,begin end中赋值语句的顺序对阻塞赋值有影响,而对非阻塞赋值没有影响,因为非阻塞赋值允许其他的Verilog语句同时进行操作,而对于阻塞赋值必须执行完该赋值后才执行下一条语句,示例如下。

  1. 阻塞赋值
    在这里插入图片描述
  2. 非阻塞赋值
    在这里插入图片描述

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

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

相关文章

ASP.NET Core----基础学习04----Model模型的创建 服务的注入

文章目录 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a;&#xff08;1&#xff09;模型的创建&#xff08;2&#xff09;服务的注入 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a; &#xff08;1&#xff09;模型的创建 模型的基础类Student…

阿里云 Ubuntu 开启允许 ssh 密码方式登录

以前用的 centos&#xff0c;重置系统为 ubuntu 后在ssh 远程连接时遇到了点问题&#xff1a; 在阿里云控制台重置实例密码后无法使用密码进行 SSH 连接登录 原因&#xff1a;阿里云 Ubuntu 默认禁用密码登录方式 解决办法&#xff1a; 先使用其他用户登录到服务器 这里进来…

Java中多线程经典案例

案例一单例模式 只有一个对象,只实例化一个对象 饿汉模式 在程序开始初期的实例化一个对象 static成员初始化时机是在类加载的时候,static修饰的instance只有唯一一个,初始化也是只执行一次,static修饰的是类属性,就是在类对象上的,每个类对象在JVM中只有一份,里面的静态成员…

下载安装JavaFX及解决报错:缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序|Eclipse

目录 1.下载并解压 2.Eclipse配置 3.报错问题 解决方法1&#xff1a;将javaSE更改到9以下 解决方法2&#xff1a; 使用module-info.java配置解决 1.下载并解压 JavaFX下载地址&#xff1a;JavaFX - Gluon 选择合适自己电脑配置的sdk版本下载 打不开网页的参考这个博客&…

Demeditec Diagnostics — AMH ELISA试剂盒

抗缪勒氏管激素(AMH)&#xff0c;是一种二聚体分子量为140 KDa的糖蛋白&#xff0c;是转化生长因子-β (TGF-β)细胞因子家族&#xff0c;在生殖结构正常分化中起重要作用。AMH已被被确定为卵巢储备的可靠标志&#xff0c;有助于预测早期卵泡丢失和更年期开始。AMH水平也反映了…

【Python画图-seaborn驯化】一文学会seaborn画因子变量图catplot函数使用技巧

【Python画图-seaborn驯化】一文学会seaborn画因子变量图catplot函数使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内…

【运营版】公众号接口回调出租用出售微信公众号多域名无限回调授权系统+接口文档

此系统用于微信无限回调单个用户授权&#xff0c;如你的无限回调借给他人使用&#xff0c;怕他人泛滥您的无限回调&#xff0c;导致您的域名或者公众号经常封&#xff0c;那么你们可以用此系统给他们设置一个授权使用权限&#xff0c;如给指定域名添加授权登录&#xff0c;那么…

【Linux】目录的相关命令——cd,pwd,mkdir,rmdir

1.相对路径与绝对路径 在开始目录的切换之前&#xff0c;你必须要先了解一下所谓的路径&#xff08;PATH)&#xff0c;有趣的是&#xff1a;什么是相对路 与绝对路径&#xff1f; 绝对路径&#xff1a;路径的写法“一定由根目录/写起”&#xff0c;例如&#xff1a;/usr/shar…

间接平差——以水准网平差为例 (matlab详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (matlab详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

深入分析 Android BroadcastReceiver (十)(完)

文章目录 深入分析 Android BroadcastReceiver (十)1. 深入理解 Android 广播机制的高级应用与实践1.1 高级应用1.1.1 示例&#xff1a;广播启动服务1.1.2 示例&#xff1a;数据变化通知1.1.3 示例&#xff1a;下载完成通知 1.2 实践建议1.2.1 设置权限1.2.2 动态注册和注销广播…

零基础STM32单片机编程入门(十) 28BYJ-48步进电机的控制实战含源码视频

文章目录 一.概要二.28BYJ-48步进电机介绍三.步进电机的主要特性四.步进电机驱动1.驱动硬件介绍2.四相八拍程序控制介绍 五.STM32单片机驱动步进电机正转反转实验六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一.概要 步进电机是将电脉冲信号转变为角位移或线位移的开环…

102.二叉树的层序遍历——二叉树专题复习

迭代方式&#xff1a; class Solution {// 定义一个成员变量res来存储层序遍历的结果List<List<Integer>> res new ArrayList<>();// levelOrder方法是层序遍历的接口&#xff0c;它接受一个二叉树的根节点rootpublic List<List<Integer>> lev…

开展新版FMEA培训如何避免陷入形式主义?

在企业中开展新版FMEA培训&#xff0c;旨在提升员工对产品潜在故障及其影响的识别、评估和控制能力&#xff0c;从而增强产品质量和可靠性。然而&#xff0c;不少企业在开展新版FMEA培训时往往容易陷入形式主义&#xff0c;导致培训效果不佳。为了避免这种情况&#xff0c;我们…

视频压缩软件哪个压缩最小,视频用什么软件压缩最小

在数字媒体时代&#xff0c;视频内容的生产与分享已成为生活常态。但随之而来的问题就是&#xff0c;大视频文件占用过多存储空间&#xff0c;上传和分享也变得不便。本文将为你揭示如何将视频压缩到最小&#xff0c;同时保持画质清晰。让我们一起探索吧&#xff01; 下载并文件…

Java SE 9模块化系统。

JDK 9模块化介绍 介绍Java SE 9&#xff1a;拼图项目1.拼图项目将引入Java SE 9的全新概念&#xff1a;Java模块系统。2.Java模块解决了什么问题3.细节描述 Java SE 9模块系统的优点1.由于Java SE 9将把JDK&#xff0c;JRE&#xff0c;JAR等分成较小的模块&#xff0c;因此我们…

程序员必知的 89 个操作系统核心概念

1. 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;&#xff1a;是管理计算机硬件与软件资源的系统软件&#xff0c;同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系…

Spring Boot源码概述及应用案例

文章目录 Spring Boot源码关键点应用案例&#xff1a;构建一个简单的Spring Boot Web应用1. 创建项目2. 主类3. 添加用户实体4. 创建用户服务5. 创建REST控制器6. 运行和测试应用 深入与扩展1. 数据持久化2. 安全性增强 Spring Boot源码关键点 Spring Boot 的源码设计遵循模块…

SQLServer的系统数据库用别的服务器上的系统数据库替换后做跨服务器连接时出现凭证、非对称金钥或私密金钥的资料无效

出错作业背景&#xff1a; 公司的某个sqlserver服务器要做迁移&#xff0c;由于该sqlserver服务器上数据库很多&#xff0c;并且做了很多的job和维护计划&#xff0c;重新安装的sqlserver这些都是空的&#xff0c;于是就想到了把系统4个系统数据库进行替换&#xff0c;然后也把…

LeetCode热题100刷题8:54. 螺旋矩阵、73. 矩阵置零、48. 旋转图像

54. 螺旋矩阵 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> vec;if(matrix.empty())return vec;int left0;int right matrix[0].size()-1;int up0;int down matrix.size()-1;while(true) {for(i…

flask、fastapi在服务器制作接口携参访问返回参数

flask创建接口&#xff1a; 一、安装python 官网下载Download Python | Python.org 二、安装flask 在选择的文件夹路径cmd调用bash安装 pip install Flask三、创建flask应用 # app.py from flask import Flask, request, jsonify app Flask(__name__) app.route(/ech…