UVM学习笔记—前门访问/后门访问
目录
0.前言
1.前门访问
2.后门访问
2.1路径设置
2.2操作类型
0.前言
在UVM学习笔记—寄存器模型的搭建及使用中提到过前门访问和后门访问的概念,这篇文章将会详细的阐述一下这2种访问方式
1.前门访问
前门访问操作就是通过寄存器配置总线(如APB总线)来对DUT进行操作,因此其在波形上可见。无论在任何总线协议中,前门访问操作只有两种:读操作和写操作;前门访问实际上是一个贴合实际的访问方式,因为对于流片回来的芯片,其访问方式只能通过物理总线访问。
对于前门访问的读操作的执行过程在白皮书P230-231有详细的描述,在此不再copy,这里将整个过程画一个草图示意:
当在某个component或者seq中调用寄存器模型通过前门访问向DUT发起读操作时,寄存器模型产生uvm_reg_bus_op的变量,该变量通过adapter转换成sqr能接收的transaction类型交给sqr,sqr再交给driver,driver驱动到DUT上,然后得到读取的数值,该数值放入rsp中然后调用item done,该rsp直接返回到adapter的bus2reg中进行转换回uvm_reg_bus_op变量被reg model接收;为何需要用到rsp来返回,这里涉及到seq,sqr和driver的握手机制,后续会另写一篇文章讲解。
2.后门访问
后门访问是通过设置好每个寄存器的路径进行访问的,而且不消耗仿真时间,但因为未通过总线进行读写因此无法在波形上体现出来。
那么为何要存在后门访问这种形式呢?考虑到2点:一是当需要验证成百上千个寄存器时,通过前门访问需要消耗大量的时间,效率并不高;二十如果对于一个16位的计数器(计数时钟上升沿的个数),想要验证其在16'hffff时再加1是否会回到16'h0000,如果通过前门访问需要1位1位累加,这需要相当长的时间,但如果通过后门访问直接修改位16'hffff再开启时钟则瞬间就能验证完这个验证点。
2.1路径设置
后门访问最关键的就是要设置好每个寄存器的路径,那么该如何设置呢?
在UVM学习笔记—寄存器模型的搭建及使用中讲搭建reg block时,对于每个寄存器有一个configure操作:
class reg_block extends uvm_reg_block;······invert.configure(this, null, "invert");//第三个参数即后门访问路径······
endclass
而在base test时有一个设置绝对路径的操作:
function void base_test::build_phase(uvm_phase phase);
······
rm.set_hdl_path_root("top_tb.my_dut");
······
endfunction
这两个路径合起来就是invert寄存器的路径,实际验证中这个路径类似于如下:
2.2操作类型
前面的前门/后门操作都有读写两种操作:
reg_model.INVERT_REG.read(status, value, UVM_FRONTDOOR);//前门读
reg_model.INVERT_REG.write(status, 16'h1, UVM_FRONTDOOR);//前门写reg_model.INVERT_REG.read(status, value, UVM_BACKDOOR);//后门读
reg_model.INVERT_REG.write(status, 16'h1, UVM_BACKDOOR);//后门写
后门访问新增了peek/poke操作:
reg_model.INVERT_REG.peek(status, value, UVM_BACKDOOR);// 通过后门访问方式读取寄存器的值,不关心DUT的行为,即使寄存器的读写类型是不能读,也可以将值读出来
reg_model.INVERT_REG.poke(status, 16'h1, UVM_BACKDOOR);//通过后门访问方式写入寄存器的值,不关心DUT的行为,即使寄存器的读写类型是不能写,也可以将值写进去
对于read clear类型的field,peek读操作不会clear,所以有的时候peek和read操作结果不一样
对于write clear类型的filed,poke操作不会clear,所以有的时候poke和write操作结果不一样
UVM学习笔记—前门访问/后门访问相关推荐
- 网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储
Linux基础教程学习笔记28--使用Samba访问网络存储 SMB用于Windows和类Linux系统直接的文件共享 安装samba client包: [root@linuxidc~]# yum i ...
- VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程.
VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程. 2013-02-20 1.数据库访问技术 a.JET与DAO JET(Joint Engine Technology)数 ...
- UVM学习笔记(五)寄存器
文章目录 一.reg_model的实现 二.总线bus_agent的实现 三.MCDF的REG硬件实现 四.Adapter & Predictor实现 4.1 Adapter实现 4.2 Ad ...
- uvm学习笔记----适合新手快速学习
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofH8i8OK-1635320932444)(C:\Users\lenovo\AppData\Roaming\Typor ...
- UVM学习笔记—寄存器模型的搭建及使用
目录 0.前言 1.DUT中的寄存器是什么? 2.为什么需要寄存器模型? 3.如何搭建寄存器模型 3.0基本概念 3.1搭建一个reg(将reg filed加入到reg) 3.2搭建一个reg blo ...
- Android NDK学习笔记4:JNI访问Java构造函数
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119348263 本文出自[赵彦军的博客] 文章目录 方式一:NewObject 方 ...
- Android NDK学习笔记3:JNI访问Java属性、方法
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119209444 本文出自[赵彦军的博客] 文章目录 Java 类型和JNI符号对比 ...
- 安卓学习笔记:安卓11访问/读写 Android/data 目录
省流提示:采用android studio工具开发,记录一次低级的开发,避免以后忘记或者踩坑. 最近有个业余项目开发到一小半,过程中需要读写 Android/data目录的文件,采用常规的文件操作总是 ...
- 【学习笔记】数据链路层——随机访问介质访问控制(ALOHA、CSMA、CSMA/CD、CSMA/CA),截断二进制指数规避算法
文章目录 小前言 一. ALOHA协议 纯ALOHA协议 时隙ALOHA协议 ALOHA对比 CSMA协议 定义与分类 ① 1-坚持CSMA ② 非坚持CSMA ③ p-坚持CSMA 总结 CSMA/ ...
最新文章
- linux下epoll如何实现高效处理
- 详解iBaits中SqlMapClientTemplate的使用
- 常用的HTTP状态码
- iOS 从相机或相册获取图片并裁剪
- canal布在mysql端还是服务端_canal使用入坑,亲测 !!!!
- centos通过yum的方式快速安装jdk1.8
- 本地可以ping远程的服务器,但服务器不能ping本地
- 证件照尺寸及背景颜色值
- 零基础应如何学习UI设计
- Bill Gates和Elon Musk推荐,人工智能必读的三本书 -《终极算法》,《超级智能》和《终极发明》
- 直播间人气互动软件教程
- 如何用QT做串口调试助手Qseriaport类的使用
- 最佳 Maya 免费建模插件!
- cad lisp 二次抛物线_用Cad画二次抛物线.doc
- 把backtrader改造成金融强化学习回测引擎
- 音频均衡器 matlab code,急求高手 设计声音均衡器 滤波器
- Leetcode 92反转链表
- 【GlobalMapper精品教程】004:生成标准经纬网图幅(1:100万)案例教程
- oracle JOB 的创建列子
- 随想录·算一算买车的账