项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源

uvm_reg_field中的volatile,主要来设置m_check的变量,

  m_check,主要用在uvm_reg的mirror task,以及read task,(需要map中配置check_on_read)

uvm_reg_field中的desired,mirrored,m_parent,m_access变量都是local的,继承类中完全看不到,只能

  通过function来得到数据。

  m_access,指定field的access policy。

  m_written,指定是否是只能被写入一次的。

  reset可以被设置为多种类型的reset的值。

主要function  configure

uvm_reg中的主要变量有,m_locked,由顶层的reg_block调用

            m_parent,指向的uvm_reg_block;

            m_is_busy,当该reg正在执行frontdoor的读写操作时,该信号置 1,避免此时做predict。

            m_backdoor,外部设置进去的backdoor的方法。

            m_maps[uvm_reg_map],该reg挂载在的map的对象,在default_map,add_reg时,指定。

            hdl_pool,以string为索引,uvm_queue为对象,string方便指定RTL,Gate等不同的hdl。

            coverage收集信息,m_has_cover,m_cover_on。has_cover表示reg new的时候加入的coverage选项,

                                    cover_on表示当前设置的coverage。主要区别在调用时候,需要的是哪一种的coverage。

              reg  new的时候,需要设置的是has_cover,new的时候,直接build_coverage。需要顶层调用include_coverage。

              reg_block在new的时候,可以设置cover_on,通过set_coverage等function。sample的时候get_coverage。

reg的读写前后都有pre/post的hook task。

uvm_reg中最重要的三个task:

  read,write,根据path的不同,操作总线或者更新reg_model;内部都是都access control的,只不过backdoor的在自己内部,其他的在predict中

  predict,只是更新reg_model,是一定不会操作总线的对backdoor和kind为predict_direct的,没有access control

    predict的kind有四种,predict_write,predict_read,predict_direct,predict

  mirror,read操作加一个check函数,所以也会调用predict函数,更新reg model

  path有两种,frontdoor和backdoor。

  所有的frontdoor的操作,根据map_info中的fd信息,启动sequence或者调用map的读写操作

  

其他控制model值的task调用关系:

  update的时候,write的值是根据regmodel目前的值,来写进去的,也就是set field的值,write函数其实只是写入改变了的field

    所有的field都没有更新时,是不会进行update操作的。

    update直接更新reg model内的值,需要检测此时没有reg model的frontdoor操作等,即not_busy

  

在reg_field中的task中,基本都调用uvm_reg的task,但是read、write根据是否支持individual可能会调用map中的task

  

  uvm_reg中还有一些hdl_path的function,add_hdl_path_slice,添加到field的path路径。这些路径,之后在map中会被集成起来。

    形成一个full_name。

uvm_reg_frontdoor,从uvm_reg_sequence继承而来,本身是一个sequence

uvm_reg_backdoor,从uvm_object继承而来,本身就是一个object,其中定义了read、write的原型函数

uvm_reg_map,auto-predict的设置,影响所有的读写操作,自动更新mirror和desired value。    

          只影响frontdoor,backdoor都是直接调用do_predict函数的。

           m_regs_info,所有add到该map中的寄存器的信息,包括access,offset,addr,

        m_check_read,影响所有的read操作,mirror操作,mirror value和读到的值做比较

        m_adapter,m_sequencer,做frontdoor的read和write操作。

        m_base_addr,该map的基地址。  

        m_regs_info,每个加到该map中的寄存器,所有的信息保存在该数据结构中,

  在lock或者add_submap的时候,更新map_info中的addr,调用Function Xinit_address_mapX

  定义自己的do_bus_write和do_bus_read,

uvm_reg_block,包含类,包含底层的uvm_reg_block,uvm_reg,

       default_path,定义自己的hdl_path,

       lock,表明当前的model是lock住的,调用function lock_model()

       自己的coverage设置,new的时候设置到has_cover,get的时候,得到cover_on。

uvm_reg_sequence,只是实现了调用map中的读写操作,不支持burst_read,burst_write,

       其中启动该sequence,需要reg_sequencer,连接一个driver。

        或者在sequence中,直接调用已经存在的read,write task,这样配置的sequence,可以直接由此继承。

uvm_reg_item,uvm_sequence中的trnasaction类型,定义reg access的方式,包含一个uvm_object类型的extension,可以自定义

      在读写时,方式与adapter交互。

uvm_reg_adapter,继承自uvm_object,从其中设置一个uvm_reg_item,需要实现两个function,bus2reg和reg2bus。

    其中的变量supports_byte_enable, 影响sequence的个数。provides_reponses,影响sequencer和driver之间的交互

uvm_reg_predictor,当auto_predict关闭的时候,需要例化的component,连接到寄存器的monitor

      在write函数中显示调用do_predict函数,更新model中的mirror value,此时do_check函数,会根据read_on_check进行调用。

uvm自建的针对reg的sequence,针对普通的reg有:reg_access_seq,reg_bit_bash_seq,reg_hw_reset_seq。

uvm_reg model,主要实现了

  1) 增加了对dut的reg进行访问的方式,可以直接通过reg model进行访问。传统的只能是通过sequence,启动在bus的sequencer上来实现

  2) 方便了对dut reg进行测试的方法,通过build-in sequence来实现。

  3) 方便检测每次的bus读写的正确性,通过reg_predictor的方式来实现。

reg prediction的方式有三种,

  1) auto_predict,直接通过设置map的auto_predict选项,通过reg model的sequence,reg model都被正确的赋值,

  2) explict_predict,即设置map的auto_predict选项,有增加component,reg_predict。这样不论sequence是由reg model启动

      还是bus agent启动,不论front door,还是back door,reg model的值都是正确的。

  3) passive predict,只有一个reg predict,对back door访问不敏感。

  

reg model的集成:

  1) 每个subenv集成一个predictor,

  2) 每个reg_predictor初始化内部的reg_model,reg_adaptor,analysis port

  3) 每个subenv的sequence中,包括对用的reg_model的指针,

  4) 顶层的reg_map,初始化agent和sequencer,

  

reg model的coverage设置,

  1) include_coverage,是一个全局性的coverage开关的设置,

  2) build_coverage,一般是在configure的时候,初始化model中的变量的函数。

  3) has_coverage,在new covergroup的时候,进行选择,

  4) set_coverage和get_coverage,是在sample的时候,进行选择。

  

  sample方法,在reg的front door访问之后,自动调用。

  sample_values方法,主要实现对field value的采样,需要自己调用。

reg_model中的值的check:

  1) mirror的task,可以直接对一个reg_block或者reg进行检查。读DUT的值与当前的mirror值相同,则为uvm_is_ok

  2) read_on_check的检查,对map进行设置,在读操作的过程中,检查desired的值与当前读到的值相同,则为uvm_is_ok。

reg_model的访问级别:

  1) randomize与update,mirror,reset,都可以在reg_block的层级直接调用。

    一般可以先对reg_block进行randomize,之后进行update,很多dut的读写操作之后,mirror进行检查。

  

转载于:https://www.cnblogs.com/-9-8/p/8534430.html

uvm设计分析——reg相关推荐

  1. uvm register model

    uvm register model 1. uvm register model 要点 Reference 1. uvm register model 要点 可以在reference model中发起 ...

  2. 电力电子转战数字IC——路科MCDF全览(持续更新)

    经过两次面试后,对MCDF做一次全面的深入总结. 目前进度:硬件部分的node,fifo,寄存器,formatter,MCDF顶层,APB接口,TB接口 软件部分的chnl_pkg,fmt_pkg,a ...

  3. C语言程序设计(常用函数说明)

    C语言程序设计(常用函数说明) C 语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的 DEC PDP-11计算机上使用.它由早期的编程语言 BCPL(Basi ...

  4. UVM验证平台搭建一:reg model 生成

    UVM验证平台搭建一:reg model 生成 一.概述 二.寄存器描述表格 三.生成.ralf寄存器文件 四.ralgen生成寄存器模型 一.概述 在做验证时,寄存器模型是验证平台中必不可少的,而且 ...

  5. uvm 形式验证_6.小白学uvm验证 - 寄存器模型

    写过 verilog 硬件代码的同学应该都知道 DUT 会包含很多寄存器,它们是模块间交互的接口,其用途大致可以分为两类: a. 通过读出寄存器当前的值获取 DUT 当前的状态,该类寄存器称为状态寄存 ...

  6. UVM中的sequencer

    一. p_sequencer 与m_sequencer 的关系 m_sequencer是在UVM 原码中定义的, p_sequencer 需要我们在代码中进行宏定义才能使用,通过如下定义后, 可以直接 ...

  7. UVM RAL 中的显示预测 uvm_reg_predictor

    在之前简单介绍了uvm_reg_predic是怎么实现显示预测的,连上map,连上adapter,连上bus_in即可,下面我们要详细的解释原因 先解释uvm_reg_predict中重要变量的作用 ...

  8. UVM jelly_bean

    jelly_bean 源代码 https://github.com/cluelogic/uvm-tutorial-for-candy-lovers 子弹 transaction // 首先建立一个tr ...

  9. UVM:一个简易验证平台例子

    目录 top_tb.sv my_dut.sv my_if.sv basic_test.sv.my_case0.sv.my_case1.sv my_env.sv my_agent.sv my_seque ...

  10. uvm学习笔记----适合新手快速学习

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofH8i8OK-1635320932444)(C:\Users\lenovo\AppData\Roaming\Typor ...

最新文章

  1. 【Dijkstra算法】未优化版+优先队列优化版
  2. SharePoint 2007 Web Content Management 性能优化系列 前言
  3. 关于javascript 一些有用的数值转换常量和方法
  4. James Shore:敏捷的衰落
  5. ElasticSearch——学习笔记
  6. 后缀自动机(SAM)构造实现过程演示+习题集锦
  7. 拼多多分享好友砍价Java实现_拼多多砍价怎么分享到朋友圈 砍价发到微信朋友圈方法...
  8. oracle 未找到段的存储定义,Exp-00003 no storage definition found issue in oracle 11g (未找到段 (0,0) 的存储定义)...
  9. MyBatis入门(一) -- 简介
  10. python漏洞利用脚本_利用Python脚本实现漏洞情报监控与通知的经验分享
  11. 昆明职高计算机学校,昆明职高学校,昆明职高学校前十强,昆明职高学校哪些比较好一点 - IT教育频道...
  12. 最新遥感图像解译标准数据集--202105
  13. 自学移动端(APP)自动化测试
  14. 北京理工大学c语言课后答案,《北京理工大学C语言教材习题答案》.doc
  15. 测试耳机的噪音测试软件,测试你的耳机音效,听这十首歌就够了
  16. 死区特性函数以及MATLAB验算
  17. 自己整理的Opencore引导版本升级教程【保姆级详细】
  18. 无路可逃java攻略_孤岛惊魂5
  19. java实体类命名规范_java实现周易起名-java实体类起名规范
  20. 中国移动互联在黎明之前

热门文章

  1. 基于FPGA的视频处理
  2. TransBigData 针对交通时空大数据处理的Python包
  3. 传奇3单机显示服务器进不去,传奇3单机架设的不能进入游戏
  4. dom影像图形成数字地形图_DOM卫星影像
  5. 15_微信小程序-BLE低功耗蓝牙开发-读写特征值
  6. 合理利用计算机虚拟内存,虚拟内存有什么用?虚拟内存怎么设置最好?
  7. vision安装过程中出错_NVIDIA安装程序失败 3D vision 驱动程序 失败 是为什么,如图所示...
  8. 回复git@vger.kernel.org的注意事项
  9. 资源调度有什么技术难点?
  10. 随机预言模型和标准模型 -2014-03-24 15:35