uvm_reg中修改mirror、desired、actual value的方法总结
1、在利用寄存器模型时,可以用其来追踪dut中寄存器的值,寄存器模型中的寄存器,其每个field有两个值,分别是期望值(desired value),镜像值(mirror value)。硬件中寄存器的值为实际值(actual value),利用三个值可以帮助实现寄存器模块的检查。
2、uvm_reg中许多方法可以修改这三个值,包括read、write、peek、poke、mirror、update、set,下面我将对这几种方法如何修改三个值进行总结。
2.1 write:前门访问-寄存器产生uvm_reg_item,adapter把uvm_reg_item转为bus_drive能用的transaction,将transaction传递给bus_sequencer,在由sequencer传递给driver。
无论前门还是后门的wirte,都会调用uvm_reg::predict()来修改mirror value,design value。前门访问会在总线事务完成后修改,采用的显示预测。后门访问直接在0时刻修改,采用自动预测。
2.2 read:
同write,会调用uvm_reg::predict()来修改mirror value,design value
2.3 peek:后门读取,利用UVM DPI直接读取硬件实际值
2.4 poke:后门修改硬件实际值。
2.5 set:
修改寄存器模型中的desire value
2.6 mirror
读回硬件的实际值,通过第二个参数可以控制更新或者检查。
mirror与read的区别在于mirror可以进行检查。
Read-only or read-and-check
UVM_NO_CHECK | Read only |
UVM_CHECK | Read and check |
2.7 update:如果期望值/镜像值不同于实际值,则修改硬件实际值
在uvm_reg_block调用update后,会对里面的每个reg进行update,每个reg又会对自身的field进行write操作,所以可以更新期望值和镜像值。
2.8predict:能够修改mirror_value, design_value的核心
更新field的镜像值和所需值
kind有三种参数:
How the mirror is to be updated
UVM_PREDICT_DIRECT | Predicted value is as-is |
UVM_PREDICT_READ | Predict based on the specified value having been read |
UVM_PREDICT_WRITE |
Predict based on the specified value having been written |
如果想要更新镜像值又不对DUT进行操作,要用UVM_PREDICT_DIRECT。
write、read、peek和poke在完成对DUT的读写之后也会调用这个函数,更新镜像值,期望值。
2.8:randomize
当寄存器随机化后,期望值会被随机,但是镜像值不变,之后调用update任务,可以更新DUT中的寄存器值。
一个field能够被随机化,要求:
1. 在filed的configure第八个参数设为1.
2. filed为rand类型。
3. filed的读写类型为可写的。
总结:read、write、peek、poke、update可以修改desire/mirror value,
set,randomize只修改desire value,
mirror只修改或检查mirror value,
uvm_reg中修改mirror、desired、actual value的方法总结相关推荐
- linux路由修改密码,Linux中修改Mysql root用户密码的方法
Linux中修改Mysql root用户密码的方法 下面给大家分享下在Linux下如何修改Mysql的用户(root)的密码,分两种情况:第一种当拥有原来的mysql的root密码,第二种情况忘记原来 ...
- mysql在计算机管理中的路径怎么修改_Rstudio中修改工作路径的三种方法
原文链接: Rstudio中修改工作路径的三种方法_weixin_44370085的博客-CSDN博客_rstudio改变工作目录blog.csdn.net Rstudio中修改工作路径的三种方法 ...
- python中修改列表元素的2种方法
一.在for循环中直接更改列表中元素的值不会起作用: 如: l = list(range(10)[::2]) print (l) for n in l: n = 0 print (l) 运行结果: [ ...
- linux文件编码无法修改,在Linux系统中修改文本的字符编码的方法
正如我们所知道的那样,电脑只能够处理低级的二进制值,并不能直接处理字符.当一个文本文件被存储时,文件中的每一个字符都被映射成二进制值,实际存储在硬盘中的正是这些"二进制值".之后当 ...
- 关于TextView中修改部分字体颜色、大小方法的总结
TextView属性描述 属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/e ...
- Ubuntu中修改grub重启出现 Memtest86 解决方法
如下图所示 解决方法 第一步:按ESC键重启同时按SHIFT键,进入如下界面 第二步:选择第一个选项按Enter进入Ubuntu系统,然后打开终端输入命令sudo vim /etc/default/g ...
- Ae中修改一个合成的持续时间的方法
1.选中合成,右键,点击"合成设置..." 2.输入你想要的持续时间,点击确定,就可以了.
- 如何在Ubuntu中修改默认程序
简介: 这个新手指南会向你展示如何在 Ubuntu Linux 中修改默认程序对于我来说,安装 VLC 多媒体播放器是安装完 Ubuntu 16.04 该做的事中最先做的几件事之一.为了能够使我双击一 ...
- Windows中修改Mendeley字体及大小
Windows中修改Mendeley字体及大小的方法. 1.适用于Windows10 2.键入win+R 打开运行窗口,输入regedit 命令打开注册表. 3.在注册表上侧路径框输入HKEY_LOC ...
最新文章
- FreeMarker中文帮助手册API文档,基础入门学习文档
- 2021年广东赛区线上比赛高校组合点-五邑大学
- mysqldump导出数据库 (dos环境下)
- 微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient
- 团队项目第二次冲刺(4)
- Python Flask实现查询和添加数据
- vmw6.5安装Freebsd8.1桌面gnome
- 一个小问题:深度学习模型如何处理大小可变的输入
- 拓端tecdat|R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
- 2022危险化学品生产单位安全生产管理人员考试题库及在线模拟考试
- 自媒体短视频采集工具,采集多个平台的视频
- nas怎么做网站服务器,NAS存储搭建网站服务器
- 如何使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)
- python获取根目录_python如何获取当前工程根目录
- script加密解密工具下载
- html页面生成easyui,Easyui 为网页创建边框布局_EasyUI 教程
- SpringBoot整合knife 4j
- Teardrop攻击——发送虚假IP包信息
- windows xp系统本地磁盘图标发生变化——5种解决方法
- 练习:三子棋(python 列表list“全局变量”特性、插值字符串格式化、set 元素不重复特性)
热门文章
- 其他专业可以转行3D建模吗?
- 游戏建模师行业很难吗?十年建模师来告诉你
- 【LaTex】\begin{array}{r},\begin{array}{l},\begin{array}{c}
- 电脑提示msvcr90.dll丢失的解决方法
- 实体店如何挑选会员系统
- windows 设置全局快捷键;
- 《富爸爸,穷爸爸》文摘
- 神州网信17134.1下载
- js基础常考面试题汇总(一)(附答案)
- C++中endl、“\n”和‘\n’的区别