[UVM]寄存器模型(reg_model)的高級用法之uvm_reg_predictor

       一、在通常的寄存器測試中,寄存器模型主要是依賴driver將讀取值返回,來更新鏡像值和期望值。這個功能被稱之為auto_predict功能。在建立寄存器模型時需要添加以下語句來打開此功能

sys_ral_model.default_map.set_auto_predict(1);

       二、除了使用driver的返回值更新寄存器模型(如下图左)外,還有另一種形式,在這種形式中,是由monitor將總線上收集到的transaction交給寄存器模型(如下图右)來更新形影寄存器的值。

三、使用這種方法需要例化一個reg_predictor,並且為這個實例再例化一個adapter

class uvm_mdma_top_env extends uvm_env;
  ral_sys_ral_modem                            uvm_mdma_top_ral_model;
  uvm_apb_reg_adapter                          reg_sqr_adapter;
  uvm_apb_reg_adapter                          mon_reg_adapter;

  uvm_reg_predictor#(svt_apb_mst_transaction)  reg_predictor;

  `uvm_component_utils(uvm_mdma_top_env)

  extern virtual function void build_phase(uvm_phase phase);
  extern virtual function void connect_phase(uvm_phase phase); 


endclass : uvm_mdma_top_env

function void uvm_mdma_top_env::build_phase(uvm_phase phase);
  super.build_phase();
  if(uvm_mdma_top_ral_model == null) begin
    uvm_mdma_top_ral_model = ral_sys_ral_modem::type_id::create("uvm_mdma_top_ral_model", this);
    uvm_mdma_top_ral_model.configure(null, "top.dut_i");
    uvm_mdma_top_ral_model.build();
    //lock之後再不能向reg_model(block)中添加寄存器
    uvm_mdma_top_ral_model.lock_model(); 
    //必須執行,將default value configure到reg_model中
    uvm_mdma_top_ral_model.reset();  
  end
  
  uvm_config_db#(uvm_reg_block)::set(null, "", "__SVT_RAL_TEST_MODEL__", uvm_mdma_top_ral_modem);
  uvm_config_db#(ral_sys_ral_chip)::set(uvm_mdma_top_sequencer, "", "uvm_mdma_top_ral_model", uvm_mdma_top_ral_model);
  reg_sqr_adapter = uvm_apb_reg_adapter::type_id_create("reg_sqr_adapter", this);
  mon_reg_adapter = uvm_apb_reg_adapter::type_id_create("mon_reg_adapter", this);
  reg_sqr_adapter.provides_response = 1;
  
  reg_predictor = uvm_reg_predictor#(svt_apb_mst_transaction)::type_id::create("reg_predictor", this);
  
endfunction : build_phase

function void uvm_mdma_top_env::connect_phase(uvm_phase phase);
  super.connect_phase();
  uvm_mdma_top_ral_model.default_map.set_sequencer(apb_master[0].sequencer, reg_sqr_adapter);
  uvm_mdma_top_ral_model.default_map.set_auto_predict(1);
  //只有設置了map后,才能將predictor和寄存器關聯在一起
  reg_predictor.map = uvm_mdma_top_ral_model.default_map; 
  reg_predictor.adaptor = mon_reg_adaptor;
  //將reg_predictor和apb_master的item_observed_port連接起來,這樣就又多了一條更新寄存器模型的路徑
  this.apb_master_agent.monitor.item_observed_port.connect(reg_prodictor.bus_in);

  uvm_mdma_top_sequencer.mdma_sqr[0] = mdma_agent_i[0].sequencer;

endfunction : connect_phase

 

版权声明:本文为gsjthxy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gsjthxy/article/details/91355966

智能推荐

记一次C/S架构的渗透测试

概述 目标站点是http://www.example.com,官网提供了api使用文档,但是对其测试后没有发现漏洞,目录、端口扫描等都未发现可利用的点。后发现官网提供了客户端下载,遂对其进行一番测试。 信息收集 先抓了下客户端的包,使用Fiddler和BurpSuite都抓不到,怀疑走的不是HTTP协议,用WireShark查看其确实用的是HTTP协议,但是数据包不好重放,这里最后使用了WSExp...

Linux:结合Securecrt进行文件上传(lrzsz)P2

1、安装rzsz软件   2、点击Scurecrt的option——X/Y/Z配置上传和下载目录   3、首先在Linux里切换到一个目录,然后用rz命令,文件就会上传到钙Linux的目录下   只要敲rz即可,然后在弹出的对话框里选择需要上传的文件即可 4、下载文件用sz   下载单个文件:在当前目录下有该文件     sz filename   下载...

SQL 提示作为 布局 生存工具指南

下面是一些展示AdventureWorks中表现最好的销售人员并列出他们的经理的结构化查询语言代码。 它产生以下结果。 所以,代码是有效的,但它是丑陋的。 如果我需要理解和改进代码,我首先需要把它变成可读的形式。 我有结构化查询语言提示,所以我可以按下计算机的ctrl按键键 踢你自己),它会应用默认的内置代码样式,并对此进行修复。 不,不是,因为我相信你仍然不喜欢它的格式。 没有两个开发人员能够就...

Vue+Springboot解决数据传输时参数格式不匹配问题

前端:使用的是ant design vue ,端口号为8000 后端:使用的是springboot框架开发,端口号为8080 需求:已经解决跨域问题,前端发送登录的信息给后台,后台接收不到 样例: 前端: 后台: 请求的数据格式为json格式,后台参数类型不匹配 解决方案 第一种: 修改后端,参数类型: 第二种方式: 在前端vue框架中加入qs插件,qs 是一个增加了一些安全性的查询字符串解析和序...

Flex布局做出自适应页面--语法和案例

本文发布在: github项目地址:https://github.com/tenadolanter/flex-layout-demo SegmentFault地址:https://segmentfault.com/a/1190000012916949/ CSDN地址:http://blog.csdn.net/qq_34648000/article/details/79115294 博客园地址:ht...

猜你喜欢

Java - 基于 Apache POI 创建 Excel 文件

基于 Apache POI 创建 Excel 文件 准备 新建 Maven Project,引入依赖: 创建行和列 设置列宽 设置列宽(第 19 行): 注意:其他行的首列的宽度是受第一行、第一列的影响而变宽,并非我们设置的。 设置字体颜色 设置字体颜色(第 25 ~ 31 行): 设置网页超链接 设置网页超链接(第 18、27 ~ 29 行): 参考 java操作excel常用的两种方式...

python基础-质数判断及优化

文章目录 一、问题描述 二、代码 三、问题2优化 四、数学补充 一、问题描述 质数判断条件: 质数是只能被1和它自身整除的数,1不是质数也不是合数。 二、代码 问题1代码 问题2代码 三、问题2优化 优化方案: 模块,通过模块可以对Python进行扩展 引入一个time模块,来统计程序执行的时间 time()函数可以用来获取当前的时间,返回的单位是秒 获取程序开始的时间,以运行时间来衡量优化结果。...

部署jenkins+svn持续集成

部署环境:CentOS7+jdk8 svn版本是windows,jenkins是linux 然后下载jenkins的yum源文件,获取jenkins的下载** 输入本机ip+端口,然后在这个web界面显示的路径里把**复制出来,下一步后选择推荐插件安装,后面需要用的插件可以再安装,等待安装完成后,第一次登陆不需要密码,可以设置登陆用户。 然后配置全局设置 如果你是yum安装得git,按照我得写,如...

7 パズル 反向BFS

题目 题意:7数码问题。在2×4的棋盘上,摆有7个棋子,每个棋子上标有1至7的某一数字,不同棋子上标的数字不相同。棋盘还有一个空格(用0表示),与空格相邻(上下左右)的棋子可以移到空格中,该棋子原先位置成为空格。给出一个初始 (保证可以转移到最终状态),找出一种从初始状态转变成给定最终状态的移动棋子步数最少的移动步骤。 输入:多组输入,每组8个数,表示初始状态前四个数为第一行从左到右,...

代理模式真得这么简单

代理模式真得这么简单 代理模式的定义 为另一个对象提供一个替身或占位符以控制对这个对象的访问 代理模式类图 简单描述就是真实对象,RealSubject,和代理对象,Proxy实现同一个接口Subect,并且代理对象Proxy持有真实对象的引用 静态代理实例 GumballMachine,作为真实对象 GumballMonitor,作为代理对象,控制对真实对象的访问 Main函数 动态代理实例 j...