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;还有返回类型和参数两部分可以…

本地配置多个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;这样即完成了插入空格 以…

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

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

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

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

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

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

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

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

yolov5-tracking-xxxsort yolov5融合六种跟踪算法(三)--目标跟踪

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接&#xff1a;https://github.com/zzhmx/yolov5-tracking-xxxsort.git 先按照之前的博客配置好环境&#xff1a; yolov5-tracking-xxxsort yolov5融合六种跟踪算法&#xff08;一&#xff09;–环境配…

【论文阅读笔记】Revisiting RCAN: Improved Training for Image Super-Resolution

论文地址&#xff1a;https://arxiv.org/abs/2201.11279 代码地址&#xff1a;https://github.com/zudi-lin/rcan-it 论文小结 本文的工作&#xff0c;就是重新审视之前的RCAN&#xff0c;然后做实验来规范化SR任务的训练流程。 此外&#xff0c;作者得出一个结论&#xff1a;…

单片机51 输入和输出

一、IO口基本概念介绍 单片机的IO口&#xff08;Input/Output口&#xff09;是连接单片机与外部电路或设备的接口。单片机的IO口可以分为输入口和输出口两种&#xff0c;用于控制和监测外部设备的状态。 1. 输入口&#xff1a;单片机的输入口用于接收外部电路或设备的信号。输…

❤ hexo主题+Gitee搭建个人博客

Hexo的基本使用 ​官网 官网地址&#xff1a;https://hexo.io/zh-cn/ Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他渲染引擎&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。即把用户的markdown文件…

【Qt】鼠标拖拽修改控件尺寸---八个方位修改

前提 在开发一个类似qdesiger的项目中 使用QGraphicsProxyWidget将Qt基础控件作为item放在场景视图中显示和编辑 创建自定义类继承QGraphicsProxyWidget&#xff0c;管理控件 成员变量 有控件的xywh等&#xff0c;其中x、y坐标存储是基于最底层widgetitem的 坐标系 x轴以右为正…

前端快速网格布局

直接进去CSS Grid Generator 真的好方便&#xff1a;

k8s-heml联动harbor 18

将打包的heml包上传到harbor仓库进行管理 创建一个公开的项目来接收传送的heml包 安装helm-push插件&#xff1a; helm plugin install https://github.com/chartmuseum/helm-push &#xff08;在线安装&#xff0c;要求网速要快或者提供科学上网&#xff09; 离线安装&…