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的方法总结相关推荐

  1. linux路由修改密码,Linux中修改Mysql root用户密码的方法

    Linux中修改Mysql root用户密码的方法 下面给大家分享下在Linux下如何修改Mysql的用户(root)的密码,分两种情况:第一种当拥有原来的mysql的root密码,第二种情况忘记原来 ...

  2. mysql在计算机管理中的路径怎么修改_Rstudio中修改工作路径的三种方法

    原文链接: Rstudio中修改工作路径的三种方法_weixin_44370085的博客-CSDN博客_rstudio改变工作目录​blog.csdn.net Rstudio中修改工作路径的三种方法 ...

  3. python中修改列表元素的2种方法

    一.在for循环中直接更改列表中元素的值不会起作用: 如: l = list(range(10)[::2]) print (l) for n in l: n = 0 print (l) 运行结果: [ ...

  4. linux文件编码无法修改,在Linux系统中修改文本的字符编码的方法

    正如我们所知道的那样,电脑只能够处理低级的二进制值,并不能直接处理字符.当一个文本文件被存储时,文件中的每一个字符都被映射成二进制值,实际存储在硬盘中的正是这些"二进制值".之后当 ...

  5. 关于TextView中修改部分字体颜色、大小方法的总结

    TextView属性描述 属性名称    描述 android:autoLink    设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/e ...

  6. Ubuntu中修改grub重启出现 Memtest86 解决方法

    如下图所示 解决方法 第一步:按ESC键重启同时按SHIFT键,进入如下界面 第二步:选择第一个选项按Enter进入Ubuntu系统,然后打开终端输入命令sudo vim /etc/default/g ...

  7. Ae中修改一个合成的持续时间的方法

    1.选中合成,右键,点击"合成设置..." 2.输入你想要的持续时间,点击确定,就可以了.

  8. 如何在Ubuntu中修改默认程序

    简介: 这个新手指南会向你展示如何在 Ubuntu Linux 中修改默认程序对于我来说,安装 VLC 多媒体播放器是安装完 Ubuntu 16.04 该做的事中最先做的几件事之一.为了能够使我双击一 ...

  9. Windows中修改Mendeley字体及大小

    Windows中修改Mendeley字体及大小的方法. 1.适用于Windows10 2.键入win+R 打开运行窗口,输入regedit 命令打开注册表. 3.在注册表上侧路径框输入HKEY_LOC ...

最新文章

  1. FreeMarker中文帮助手册API文档,基础入门学习文档
  2. 2021年广东赛区线上比赛高校组合点-五邑大学
  3. mysqldump导出数据库 (dos环境下)
  4. 微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient
  5. 团队项目第二次冲刺(4)
  6. Python Flask实现查询和添加数据
  7. vmw6.5安装Freebsd8.1桌面gnome
  8. 一个小问题:深度学习模型如何处理大小可变的输入
  9. 拓端tecdat|R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
  10. 2022危险化学品生产单位安全生产管理人员考试题库及在线模拟考试
  11. 自媒体短视频采集工具,采集多个平台的视频
  12. nas怎么做网站服务器,NAS存储搭建网站服务器
  13. 如何使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)
  14. python获取根目录_python如何获取当前工程根目录
  15. script加密解密工具下载
  16. html页面生成easyui,Easyui 为网页创建边框布局_EasyUI 教程
  17. SpringBoot整合knife 4j
  18. Teardrop攻击——发送虚假IP包信息
  19. windows xp系统本地磁盘图标发生变化——5种解决方法
  20. 练习:三子棋(python 列表list“全局变量”特性、插值字符串格式化、set 元素不重复特性)

热门文章

  1. 其他专业可以转行3D建模吗?
  2. 游戏建模师行业很难吗?十年建模师来告诉你
  3. 【LaTex】\begin{array}{r},\begin{array}{l},\begin{array}{c}
  4. 电脑提示msvcr90.dll丢失的解决方法
  5. 实体店如何挑选会员系统
  6. windows 设置全局快捷键;
  7. 《富爸爸,穷爸爸》文摘
  8. 神州网信17134.1下载
  9. js基础常考面试题汇总(一)(附答案)
  10. C++中endl、“\n”和‘\n’的区别