4.8 Verilog过程连续赋值

关键词:解除分配,强制,释放

过程连续赋值是过程赋值的一种。赋值语句能够替换其他所有wire 或 reg 的赋值,改写wire 或 reg 类型变量的当前值。

与过程赋值不同的是,过程连续赋值表达式能被连续的驱动到wire 或 reg 类型变量中,即过程连续赋值发生作用时,右端表达式中任意操作数的变化都会引起过程连续赋值语句的重新执行。

过程连续性分配主要有2种,分配-取消分配和强制-释放。

分配、取消分配

分配(过程赋值操作)与取消分配(取消过程赋值操作)表示第一类过程连续赋值语句。赋值对象只能是注册或注册组,而不能是线型变量。

分配过程中对分配的连续分配,分配过程中的值被保留直到被重新分配。

例如,一个带解密端的 D 触发器可以用下面的代码描述:

实例

模块dff_normal (输入       rstn 、输入       clk 、输入       D 、输出 reg  Q);总是 @ ( posege clk或 negedge rstn ) beginif ( ! rstn ) begin   //复位后 Q = 0 有效Q <= 1'b0 ;结束否则 开始Q <= D ;       //Q = D 位于时钟端endendmodule的posege 处  

下面,用分配与取消分配改写,完成相同的功能。

即在复位信号为0时,Q端被分配语句赋值,首先输出为0。

复位信号为1时,Q端被取消分配语句取消分配,在时钟上升沿被重新分配分配。

实例

模块dff_assign (输入       rstn 、输入       clk 、输入       D 、输出 reg  Q);总是 @ ( posege clk ) 开始Q <= D ;       //Q = D 在时钟结束的 posege 处总是@ ( negedge rstn ) begin if ( ! rstn ) begin赋值Q = 1'b0 ; //复位时改变Q值有效end else begin //取消Q值叠加,取消分配Q ; //Q 保持 0 值,直到时钟脉冲到来end end endmodule

施力、释放

force(强制操作赋值)与release(取消强制赋值)表示第二类过程连续赋值语句。

但使用方法和效果,和分配与取消分配类似,赋值对象可以是reg型变量,也可以是wire型变量。

由于是无条件强制赋值,一般多用于吸附过程,不要在设计模块中使用。

当强制作用在寄存器上时,寄存器当前值被覆盖;释放时寄存器值将继续保留强制赋值时的值。之后,该寄存器的值可以被原来的过程语句赋值改变。

当强制作用在线网上时,线网型变量被强制。但是,一旦释放线网型变量,其值马上改为原来的驱动值。

为观察观察两个类型变量强制赋值的区别,利用第一节中的元素计数器10作为设计模块,测试台设计如下。

实例

`时标 1ns / 1ns模块测试;注册          rstn ;寄存器          时钟;reg [ 3 : 0 ]    cnt ;线         输出;counter10 u_counter (.rstn     ( rstn ) 、.clk     ( clk ) 、.cnt     ( cnt ) 、.cout     ( cout ) ) ;初始 开始时钟       = 0 ;rstn       = 0 ;# 10 ;rstn       = 1'b1 ;等待 ( test.u_counter.cnt_temp == 4'd4 ) ;@ (negedge时钟) ;强制     test.u_counter.cnt_temp = 4'd6 ;强制     test.u_counter.cout     = 1'b1 ;# 40 ;@ (negedge时钟) ;释放   test.u_counter.cnt_temp ;释放   test.u_counter.cout ;结束初始 开始clk = 0 ;永远 # 10 clk = ~ clk ;end//完成模拟always begin# 1000 ;if ( $time >= 1000 ) $finish ;结束模块 // 测试

仿真结果如下。

由图可知,在 cnt_temp 等于 4 时(80ns), cnt_temp 被强制赋值为 6,cout 被强制赋值为 1。

释放时(120ns), cnt_temp 为寄存器类型,仍然保持原有值不变,直到时钟上升沿由此进行加法赋值操作,值才等于 7 。

120ns 时,由于 cout 是线网型变量,其值不能保存。原码 counter10 模型中而存在语句驱动:allocate cout = (cnt_temp==4'd9),所以 cout 值等于 0 。

源码下载:Verilog过程连续赋值源码免费下载

希望你也学会了,更多编程源码模板请来二当家的素材网:https://www.erdangjiade.com

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++——基础语法(2):函数重载

4. 函数重载 函数重载就是同一个函数名可以重复被定义&#xff0c;即允许定义相同函数名的函数。但是相同名字的函数怎么在使用的时候进行区分呢&#xff1f;所以同一个函数名的函数之间肯定是要存在不同点的&#xff0c;除了函数名外&#xff0c;还有返回类型和参数两部分可以…

Composition API 和 Options API

为什么Composition API 比 Options API 更好 Composition API是Vue.js 3.x版本引入的一种新的组织代码的方式。它相对于Options API有一些明显的优势&#xff0c;使得它在某些场景下更加灵活和易于使用。 更好的逻辑组织&#xff1a;Composition API允许将相关代码逻辑打包在一…

如何进行数据库分区和分片操作?

什么是数据库分区和分片&#xff1f; 数据库分区和分片都是数据库物理设计中的技术&#xff0c;旨在提高数据库的性能和管理大规模数据。 数据库分区是一种物理数据库的设计技术&#xff0c;其主要目的是在特定的SQL操作中减少数据读写的总量以缩减响应时间。分区并不是生成新…

mysql 输出所在月份的最后一天

内置函数 LAST_DAY(date) 参数&#xff1a; date &#xff1a;一个日期或日期时间类型的值&#xff0c;表示要获取所在月份最后一天的日期。 返回值&#xff1a; 返回一个日期值&#xff0c;表示输入日期所在月份的最后一天。 栗子 月总刷题数和日均刷题数_牛客题霸_牛客…

本地配置多个git账户及ll设置

本地配置多个git账户 清除全局配置将命令行&#xff0c;切换到ssh目录生成GitLab和Gitee的公钥、私钥去对应的代码仓库添加 SSH Keys添加私钥ll设置 管理密钥验证仓库配置关于gitgitee.com: Permission denied (publickey) 清除全局配置 此步骤可以不做&#xff0c;经测试不影…

总结一下最近几个主界面

目前展示了用Avalonia做几个主要流行的主界面&#xff0c;演示了一下组件的使用。用不同的实现方式实现一些方法。 1、独立大屏展示&#xff0c;类似一个实时监控&#xff0c;这是一种目前很方便的大屏效果。 主要涉及的内内容&#xff1a; &#xff08;1&#xff09;窗标题实…

【视频编码\VVC】环路滤波基础知识

本文为新一代通用视频编码H.266\VVC原理、标准与实现的简化笔记。 定义&#xff1a;在视频编码过程中进行滤波&#xff0c;滤波后的图像用于后续编码。 目的&#xff1a;1、提升编码图像的质量。2、为后续编码图像提供高质量参考&#xff0c;获得更好的预测效果。 VVC中主要…

使用LinkedList实现堆栈及Set集合特点、遍历方式、常见实现类

目录 一、使用LinkedList实现堆栈 堆栈 LinkedList实现堆栈 二、集合框架 三、Set集合 1.特点 2.遍历方式 3.常见实现类 HashSet LinkedHashSet TreeSet 一、使用LinkedList实现堆栈 堆栈 堆栈&#xff08;stack&#xff09;是一种常见的数据结构&#xff0c;一端…

后端程序员入门react笔记(五)ajax请求

常见的ajax Ajax 最原始的方式&#xff0c;基于原生的jsXmlHttpRequest 多个请求之间如果有先后关系&#xff0c;会存在很多层回调的问题&#xff0c;也是基于原生jsJquery Ajax 基于原生XHR封装&#xff0c;依赖Jquery框架&#xff0c;由jquery 框架去封装原生的XML(Xml)封装…

【高德地图】Android高德地图控件交互详细介绍

&#x1f4d6;第5章 与地图控件交互 ✅控件交互&#x1f9ca;缩放按钮&#x1f9ca;指南针&#x1f9ca;定位按钮&#x1f9ca;地图Logo ✅手势交互&#x1f9ca;缩放手势&#x1f9ca;滑动手势&#x1f9ca;旋转手势&#x1f9ca;倾斜手势&#x1f9ca;指定屏幕中心点的手势操…

CSP-J 2023 T1 小苹果

文章目录 题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题目传送门题解思路总代码 提交结果尾声 题目 题目描述 小 Y 的桌子上放着 n n n 个苹果从左到右排成一列&#xff0c;编号为从 1 1 1 到 n n n。 小苞是小 Y 的好朋友&#xff0c;每天她都会从…

EXCEL 在列不同单元格之间插入N个空行

1、第一步数据&#xff0c;要求在每个数字之间之间插入3个空格 2、拿数据个数*&#xff08;要插入空格数1&#xff09; 19*4 3、填充 4、复制数据到D列 5、下拉数据&#xff0c;选择复制填充这样1-19就会重复4次 6、全选数据D列排序&#xff0c;这样即完成了插入空格 以…

MySQL问题记录

问题 Ubuntu2204 通过 apt 安装 mysql-server8.0.36 后&#xff0c;数次修改密码不生效&#xff0c;仍可无密码登录。 解决 mysql_native_password 是MySQL 5.7及之前版本使用的默认身份验证插件。在MySQL 8.0及更高版本中&#xff0c;默认的身份验证插件 caching_sha2_pass…

密评技术要求实施详解:每一步都关键

密评简介 密评定义&#xff1a;全称商用密码应用安全性评估, 是对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估的活动。 评测依据&#xff1a;GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》。 密评对象&…

新能源汽车PACK电池包的气密性测试需要用到哪些快速密封连接器

PACK电池包是新能源汽车的重要部件之一&#xff0c;在全部组装完成后需要对其壳体进行气密性测试&#xff0c;以确保壳体的密封性能&#xff0c;避免有雨水、灰尘等外界侵扰拒之门外&#xff0c;从而保证电池的使用寿命不受损害。 新能源汽车PACK电池包 在做气密性测试时需要用…

VoIP(Voice over Internet Protocol 基于IP的语音传输)介绍(网络电话、ip电话)

文章目录 VoIP&#xff08;基于IP的语音传输&#xff09;1. 引言2. VoIP基础2.1 VoIP工作原理2.2 VoIP协议 3. VoIP的优势和挑战3.1 优势3.2 挑战 4. VoIP的应用5. 总结 VoIP&#xff08;基于IP的语音传输&#xff09; 1. 引言 VoIP&#xff0c;全称Voice over Internet Prot…

更多闰年数

输入2 个正整数a和b&#xff0c;表示开始的年份和结束的年份&#xff0c;问从a年到b年有多少闰年&#xff1f; 输入格式 第一行2个整数a和b&#xff0c;范围在[1, 1,000,000,000]。 输出格式 只一个整数。 输入/输出例子1 输入&#xff1a; 1 10000 输出&#xff1a; …

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程&#xff0c;需要几个步骤呢&#xff1f; 1、添加线程组2、添加HTTP请求3、添加监听器&#xff0c;查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…

致CentOS 7普通用户之装机初始化说明

一&#xff1a;CentOS 7安装盘制作 1.准备&#xff1a;linux操作系统安装包&#xff0c;百度搜索下载&#xff1a;CentOS 7。&#xff08;一般安装包&#xff0c;包含CentOS 7全系列版本&#xff0c;自己选择安装配置&#xff09; 2.准备&#xff1a;rufus.exe安装盘制作软件…

CUDA自学笔记001 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&#xff0c; 1&#xff0c;CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2&#xff0c;CUDA编程模型提供了内存访问控制&#xff0c;我们可以实现主机和GPU设备内存的控制&#xff0c;我们可以实现CPU和GPU之间内存的数据传…