verilog赋多位值_Verilog重点解析(2)(赋值)

2023-11-09

源自:微信公众号 “数字芯片实验室”

1、连续赋值和过程赋值之间有什么区别?

2、initial和always中的赋值有什么区别?

initial和always中的赋值都是过程赋值。

3、阻塞和非阻塞赋值之间有什么区别?

阻塞和非阻塞赋值都是过程赋值。

4、如何使用连续赋值建模双向nets?

assign语句构成一个连续赋值。 RHS变化立即影响LHS。 然而,LHS的任何变化都不会影响RHS。

例如,在以下声明,rhs net的更改将更新到lhs net,但反之不会。

wire rhs,1hs ;

assign lhs = rhs ;

System Verilog引入了一个关键字alias,能定义双向nets。

例如,在以下代码中,rhs的任何变化都会更新到lhs,反之亦然。

module test_alias ;

wire [3:0] lhs ,rhs ;

alias lhs = rhs ;

initial begin

force rhs = 4’h2 ;

$display(“lhs = %0h , rhs = %0h”,lhs,rhs) ;

release rhs ;

force lhs = 4’hc ;

$display(“lhs = %0h , rhs = %0h”,lhs,rhs) ;

release lhs ;

end

endmodule //test_alias

如果上述alias换成assign,则输出如下:

lhs = 2 , rhs = 2

lhs = c , rhs = z

然而,由于定义了alias,输出如下:

lhs = 2 , rhs = 2

lhs = c, rhs = c

在上面的示例中,对net任何一侧的更改都会更新到另一侧。

5、task和function之间有什么区别?

Verilog中的task和function都可以实现常用功能,有助于代码的清晰和可维护,避免在不同位置复制大量代码。 本质上,task和function都提供了在模块中不同位置重用相同代码段的“子程序”机制。

但是,task和function在以下方面有所不同:

6、静态task和动态task有何不同?

动态task在关键字task和名称之间有automatic关键字。 动态task在每个task调用期间,自动分配变量内存空间,即每次调用都不会覆盖这些值。没有automatic关键字,变量是静态分配的,这意味着这些变量在不同的task调用之间共享,因此可以被覆盖。

以下示例说明了关键字automatic的效果。 这是一个不可综合的代码。

module modify_taskval;

integer out_val ;

task automatic modify_value;

input [1:0] in_value ;

output [3:0] out_value ;

reg [1:0] my_value ;

begin

//syntax error to use nonblocking assignment with automatic variables

my_value = in_value ; //blocking assignment

#5

$display(“my_value = \t%0d, t = %0d”,my_value,$time) ;

out_value = my_value + 2 ;

end

endtask

initial begin

fork

begin //First parallel call

#1

$display(“in1 = \t\t %0d,t = %0d”,2,$time) ;

modify_value(2,out_val) ;

end

begin //Second parallel call

#2

$display(“in2 = \t\t%0d,t = %0d”,3,$time) ;

modify_value(3,out_val) ;

end

join

end

endmodule

在上面的示例中,my_value是task中的局部变量。 每当调用此task时,输入in_value在5个仿真时间单位之后赋值给局部变量。 在initial begin中,有一个fork-join,它启动两个并行进程,分别在仿真时间单位#1和#2之后开始。 第1个进程赋值2给my_value,第2个进程赋值3给my_value。 假设没有automatic关键字,使用上面的代码运行仿真,会输出以下内容:

in1 = 2 , t = 1 //passed value is 2

in2 = 3 , t = 2

my_value = 3 , t = 6 //retained value is 3

my_calue = 3 , t =7

没有automatic关键字的事件序列如下:

1. 从仿真时间0开始启动fork-join两个进程。

2.第一个进程在#1之后调用modify_value,并赋值局部变量my_value为2.此时 t = 1。

3.第二个进程在#2之后调用modify_value,并赋值局部变量my_value为3.此时t = 2。请注意现在赋值给局部变量my_value的值被3覆盖。

4.再经过4个时间单位,即在t = 1 + 5 = 6时,第1个task调用$display。由于最新值现在是“3”, my_value显示“3”,而不是 “2”。

类似地,对于第二个过程,即t =2 + 5 = 7,第2个task调用$display。由于最新值仍为“3”,因此此处my_value显示“3”。

关键在上面的步骤3中,其中第2个进程的my_value在第1个进程$display之前覆盖了第1个进程的my_value。这是因为没有automatic关键字,task中的变量是静态的,并且对task的所有调用共享。

现在,在task和task名称之间使用关键字automatic,仿真输出一下内容:

in1 = 2 . t = 1 //passed value is 2

in2 = 3 ,t = 2

my_value = 2,t = 6 //passed value 2 preserved

my_value = 3 , t = 7

按照上述相同的步骤,这次,由于存在关键字automatic,变量不会被其他进程覆盖。

下表总结了动态task和静态task之间的差异:

持续更新~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

verilog赋多位值_Verilog重点解析(2)(赋值) 的相关文章

  • 为Qt应用程序的用户添加帮助文档

    qt5 简单文本查看器例子 Qt Assistant支持交互式帮助 并使您能够向Qt应用程序的用户显示客户文档 以下示例说明如何将Qt Assistant用作应用程序的帮助查看器 使用Qt Assistant作为应用程序的自定义help查看
  • Oracle V$SESSION详解

    V SESSION是APPS用户下面对于SYS V SESSION 视图的同义词 在本视图中 每一个连接到数据库实例中的session都拥有一条记录 包括用户session及后台进程如DBWR LGWR arcchiver等等 V SESS
  • 大数据环境下的“隐形隐私”保护问题

    导语 隐形隐私 泄漏问题一直我们乃至全球最难解决的问题 数据安全不止是一个企业发展的核心关键 更关系到企业单位的生死存亡 企业单位重要客户信息泄露并在市面上大肆流通发生之后我们在想尽各种方法亡羊补牢 可是我们数据安全难道不是要从最一开始就做
  • 针对初学者,解决一些问题【Kali】手把手教你设置Kali源地址以及更新源和安装所有工具命令

    文章目录 一 设置添加修改源地址 1 首先在命令提示符中输入以下命令打开源列表文件 2 按i进入编辑模式 3 在下面源地址中至少选择一个复制粘贴进去 4 添加进入以后按ESC键退出编辑模式 按 输入wq保存退出 二 更新源命令 三 软件包操
  • TCP为什么需要三次握手

    tcp为什么要第三次握手 time wait是做什么的 tcp有几种状态 画出所有的状态转换图 晚上看到的面试题 TCP三次握手的印象很深 但为什么需要3次握手 还是想不起来了 简单而言 如果不是三次握手的话 那么到底需要几次握手最佳呢 2
  • 关于毕业求职的就业经验-写给我亲爱的校友们

    提示 希望下面的文章对大家能有所帮助 文章目录 前言 一 毕业季的几种选择 1 考研 2 就业 3 其他 二 到了毕业季应该怎么去找到自己心怡的工作 三 需要掌握的基本技能 以我嵌入式开发角度 四 该怎么去跳槽到更好的公司 五 未来规划 1
  • SPARK安装

    首先是结论 最终我没能在win10上运行起来spark 官方给的quickstart http spark apache org docs latest api python getting started quickstart html
  • Matlab学习1.0

    1 Matlab通用命令 1 常用命令 cd 显示 or改变当前文件夹 dir 显示当前文件夹下的文件 clc 清空工作窗中显示的内容 load 加载指定文件的变量 diary 日志文件命令 调用DOS命令 home 光标移动到窗口最左上角
  • 网络安全知识库

    0x00 前言 本篇用来整理所有的零散的知识 作为一个技能树或者技能表来进行引导 CTF 加解密合集 CTF Web合集 0x01 Http 1 http头 1 1 本地访问识别 如何伪造http头 让后端认为是本地访问 0x02 Web
  • Python爬虫反反爬:CSS反爬加密彻底破解!

    刚开始搞爬虫的时候听到有人说爬虫是一场攻坚战 听的时候也没感觉到特别 但是经过了一段时间的练习之后 深以为然 每个网站不一样 每次爬取都是重新开始 所以 爬之前谁都不敢说会有什么结果 前两天 应几个小朋友的邀请 动心思玩了一下大众点评的数据
  • css动画效果之transition(动画过渡效果属性)

  • pandas dataframe 读取 xlsx 文件

    refer to https medium com kasiarachuta reading and writingexcel files in python pandas 8f0da449cc48 dframe pd read excel
  • github代码推送总是失败

    github代码推送问题 因为github仓库代码的推送总是失败 所以改了一个方案采用ssh的方式来进行代码的推送 并记录操作步骤 方案 https方式换成ssh方式 git ssh 生成 假如已经生成的话 可以略过此步骤 ssh keyg
  • Android启动service的方法

    在 Android 中启动 service 的方法如下 创建 service 的类 并在 AndroidManifest xml 文件中注册该 service 使用 Intent 类来启动 service 例如 Intent intent
  • [转]公司管理混乱,从哪里入手?

    案例分析 我们是一个40人左右的小公司 规模虽小 但管理起来感觉力不从心 经常碰到工人抵抗 情绪化 上班迟到 旷工 不服从管理 即使勉强接受 也不会用心去做 草草应付了事 每次都提议是否弄个规章制度 但也是白纸一张 到了月底 实施不了 因为
  • 使用OpenGL 立方体贴图

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 OpenGL 立方体贴图 二 使用步骤 1 代码 2 着色器程序 运行结果 注意 源码下载 参考 前言 对于室外3D 场景 通常可以通过在地平线上创造一些逼真的效果 来
  • SpringBoot利用AOP写一个日志管理(Log)

    1 需求 目前有这么个问题 有两个系统CSP和OMS 这俩系统共用的是同一套日志操作 Log 目前想区分下这俩系统的日志操作 那没办法了 只能重写一份Log的日志操作 你也可以参照若依框架的日志系统实现 2 新建一张日志表 sys oper
  • libevent学习篇之一:libevent快速入门

    https www jianshu com p 8ea60a8d3abb LibEvent快速入门 简介 基本的socket变成是阻塞 同步的 每个操作除非已经完成 出错 或者超时才会返回 这样对于每一个请求 要使用一个线程或者单独的进程去

随机推荐

  • 岁月划过生命线(16.02 ~ 10 -提前转正)

    岁月划过生命线 16 02 10 提前转正 标签 coder 10月9号收到了提前转正通知后就想写些总结 总结在微店的一年里见过的人 读过的书 做过的事儿 不然怕很多有意思的细节以后都忘了 但一直找借口迟迟懒得动笔 这篇总结断断续续竟写了一
  • Linux驱动入门必须get的知识点-01.基本框架与操作

    0 编写编译驱动的Makefile 指定驱动的测试的路径 ROOM DIR nfs rootfs home 2 study 指定测试Demo的交叉编译工具链 DEMO DIR home linux 1 DataShare 0 交叉编译工具链
  • Mybatis-Plus代码生成器快速上手示例

    Mybatis Plus代码生成器 实验脚本 Table structure for parent list DROP TABLE IF EXISTS parent list CREATE TABLE parent list p id in
  • Audacity如何改变音频节奏?Audacity调整音频节奏方法

    很多人在录完音频后都会试听效果 经常会发现音频的节奏要么太快 要么太慢 可是自己又不愿意花时间 花人力 物力再去录制音频 为了解决这问题 我们可以用Audacity改变音频的节奏 加快或者减慢某个音频片段或者整个音频的节奏 只是很多人不懂怎
  • Windows 11 & Server 2022 HLK kit WHQL认证注意事项

    微软已经发布Windows 11 Server2022 HLK WHQL 测试套装 针对这一版HLK 有一个地方十分值得注意 在创建Porject的时候会出现 is windows driver Project 选择框 这一选项目前是用于工
  • (小米系统系列一)小米/红米BL解锁,解BL锁方法(亲测可用)

    文章参考自原作者 原作者链接 https www bilibili com read cv3305336 https www xiaomi cn post 17982230 http www miui com unlock download
  • Java Eclipse如何调试代码

    下面通过一个简单的例子来了解一下 Eclipse 调试程序的方法 public class Test1 public static void main String args for循环 如果for后面 内的条件一直成立 内的代码一直执行
  • Pandas基础操作

    Pandas基础 文章目录 Pandas基础 一 Series 二 DataFrame 三 索引值 四 索引和选取 loc和iloc函数讲解 五 行和列的操作 map apply applymap函数讲解 Pandas的函数应用 层级索引
  • 数据结构与算法之快速排序

    package com yg sort author GeQiLin date 2020 2 26 21 00 import java util Arrays public class QuickSort private static in
  • [SWPUCTF 2021 新生赛]easyupload2.0

    打开以后是一个文件上传的界面 然后用burp抓包看一下 传入一个php文件 发现php是不行滴 然后想到用phtml改一下后缀 看是否可以略过 然后发现掠过了 爆出来了路径 上传成功 直接用蚁建 lianjie 链接成功 然后目录寻找fla
  • pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析

    pthread mutex t 和 pthread cond t 配合使用的简要分析 1 原理 假设有两个线程同时访问一个全局变量 n 这个全局变量的初始值等于0 Int n 0 消费者线程 A 进入临界区 访问 n A 必须等到 n 大于
  • idea~不定时更新

    idea 不定时更新 类结构图 全局搜索和替换 修改鼠标停留 并显示api描述 开启idea下方边框 https www jetbrains com help idea 2019 2 using code editor html utm s
  • python运算符讲解

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 疫情之下 你我素未谋面 但你一定要平平安安 一 起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 运算符 python运算符 一 运算符类型 二 实际应
  • 【超详细】gitee+picgo个人图床搭建+插件安装bug处理

    超详细 gitee picgo个人图床搭建 各种插件安装bug处理 你好我是久远 最近在搭个人静态网页 到了最后一步了 传了几篇文章上去 结果文章传上去 了 图片全都失效了 没有办法 用现成的图床吧 担心哪天网站不稳定 图片全炸掉 所以最后
  • Android10.0 Binder通信原理(九)-AIDL Binder示例

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 【文献调研】慢病患者就医行为预测:就医选择行为有哪些?预测什么?如何预测?慢病患者?

    文章目录 0 吾日三问 1 基于医保数据的就医行为预测及推荐模型的研究 1 1 摘要 1 2 基于张量CP分解的就医行为分组预测模型 1 3 总结 2 居民就医行为主要影响因素的调查研究 2 1 摘要 2 2 相关内容 3 分级诊疗背景下多
  • 2020-11-22

    实验三 XSS和SQL注入 实验目的 了解什么是XSS 了解XSS攻击实施 理解防御XSS攻击的方法 了解SQL注入的基本原理 掌握PHP脚本访问MySQL数据库的基本方法 掌握程序设计中避免出现SQL注入漏洞的基本方法 掌握网站配置 系统
  • Windows批处理(cmd/bat)常用命令小结

    一 前言 批处理文件 batch file 包含一系列 DOS命令 通常用于自动执行重复性任务 用户只需双击批处理文件便可执行任务 而无需重复输入相同指令 编写批处理文件非常简单 但难点在于确保一切按顺序执行 编写严谨的批处理文件可以极大程
  • Josephus问题,数组和链表(C++实现)

    文章目录 问题 需求分析 ADT定义 关键思路 问题 设有n个人围坐在圆桌周围 现从第s个人开始报数 数到第m的人出列 然后从出列的下一个人重新开始报数 数到第m的人又出列 如此反复直到所有的人全部出列为止 需求分析 n个人坐满一张圆桌 为
  • verilog赋多位值_Verilog重点解析(2)(赋值)

    源自 微信公众号 数字芯片实验室 1 连续赋值和过程赋值之间有什么区别 2 initial和always中的赋值有什么区别 initial和always中的赋值都是过程赋值 3 阻塞和非阻塞赋值之间有什么区别 阻塞和非阻塞赋值都是过程赋值