
UVM
文章平均质量分 82
小小verifier
材料转IC验证,分享每天学习笔记和心得...Keep hungry!Keep foolish!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
uvm_reg_bit_bash_seq 源码分析
文章目录1.源码解析2. 知识点补充有关 uvm_reg_hw_reset_seq 源码请看: uvm_reg_hw_reset_seq 源码 。uvm_reg_bit_bash_seq 会对reg_model 中每个可以读写的寄存器域分别写入 0 、1,然后再读回,用于检查寄存器的每个bit的读写功能是否正常。1.源码解析1.先将reg_model 复位。2.通过搜索 resource_db,判断哪些 reg_block 和 reg 不需要测试。然后对每个需要进行测试的reg 进行 sin原创 2022-01-10 15:36:03 · 7935 阅读 · 9 评论 -
uvm_reg_hw_reset_seq 源码分析
文章目录1.代码解析2.知识点补充设置reg不测试关于resource_dbuvm_reg_hw_reset_seq用于初期检查DUT中的寄存器硬件值是否与reg_model 中的复位值一致,防止设计在实现时弄错复位值。1.代码解析1.先reset reg_modle 。将reg_modle中的镜像值和期望值复位。2.判断是否在外部设置了哪些 reg_block 不需要进行 reset 测试 。3.判断是否有哪些 reg 不需要测试。4.对所有需要进行测试的 reg 通过前门的方式读回DU原创 2022-01-10 15:21:54 · 3673 阅读 · 0 评论 -
VCS的ralgen命令产生UVM寄存器模型
文章目录前言一、寄存器描述表格二、生成 .ralf 寄存器文件2.1 field2.2 register2.3 register block2.4 system三、产生UVM寄存器模型前言 在验证时,寄存器模型是必不可少的一个环境,且在项目中可能面临着需要不断更新迭代的需求。那么如何快速建立 UVM寄存器模型 呢?采用VCS ralgen脚本的主要步骤如下:中心化的寄存器描述文件,如 ods、CSV、XML等;根据寄存器描述文件产生ralgen需要的 .ralf 格式的寄存器文件;vcs的原创 2021-12-16 17:05:06 · 7694 阅读 · 6 评论 -
UVM寄存器模型的作用和优势?
文章目录一、对寄存器模型的配置怎么反映到总线上?二、怎么保证寄存器模型与寄存器保持一致 ?三、寄存器模型的优势?????寄存器模型的基础知识可以看:UVM寄存器模型寄存器模型是根据寄存器描述文档所建立,是真实硬件寄存器在软件世界的模型。在验证的过程中,只有先保证寄存器的功能正确,才能使寄存器模型能够准确反映硬件的状态。那么怎么通过寄存器模型完成对寄存器的访问?寄存器模型又具有什么样的优势呢?一、对寄存器模型的配置怎么反映到总线上?这其中关键的一环就是adapter的事务级转换 和 map 提供寄原创 2021-11-30 10:55:50 · 4207 阅读 · 1 评论 -
UVM中sequence的启动方式
你是否在面试或笔试中被问到了sequence有哪些启动的方式?今天就来梳理一下sequence的启动到底有哪些。原创 2021-11-22 16:48:13 · 3077 阅读 · 1 评论 -
域的自动化—UVM
????最近在写代码时,常常忽略了field automation机制带来的便利性,这里做一个全面的总结。下面我将分为 object 和 component 类型的对象中做域的自动化。首先,常用的宏包括:uvm_field_int(arg,FLAG) ,需要传递:变量+ 标志位uvm_field_enum(T,arg,FLAG) ,需要传递:类型+ 变量+ 标志位uvm_field_object(arg,FLAG)uvm_field_string(arg,FLAG)uvm_field_arr原创 2021-11-18 13:44:09 · 5101 阅读 · 0 评论 -
IC验证面试-如何发送错误异常激励?
文章目录如何发送错误激励前言方法1 - 关闭约束方法2 - SV中约束重载方法3 - UVM工厂覆盖如何发送错误激励前言本文均以产生异常的CRC校验位为例。首先错误的激励是异常情况,而大多数的情况都是发送正常的激励。如果直接在transaction中添加一个错误激励的标致位,如下:class my_transaction extends uvm_sequence_item; rand bit[7:0] addr rand bit[31:0] data; rand bit[31:0] c原创 2021-07-31 14:23:01 · 2959 阅读 · 0 评论 -
UVM中批量修改寄存器值?set+update?
如何批量修改寄存器模型的desired value?set+update?在编写测试用例中,我们很多时候都需要通过寄存器做访问,难免需要配置硬件中各个寄存器的值。write( ) 方法是可以直接设置寄存器的真实值(设置硬件中寄存器的值),但是我们总不能一个一个设置寄存器值。一般我们通过对uvm_reg 或者uvm_reg_field 层次调用set() 设置我们所感兴趣的状态,配置寄存器模型中各个域的 desired value。此时,也许你就会直接对rgm(整个uvm_reg_block)调用updat原创 2021-07-25 21:04:48 · 4444 阅读 · 0 评论 -
UVM中item_done的作用?
文章目录1.与sequencer之间完成握手。2.与sequence之间完成握手。总结PS:sequencer 的仲裁机制1.与sequencer之间完成握手。当 driver 使用 get_next_item( ) 得到一个 transaction 时,sequencer 同时也会保留一份这个刚刚发送出去的 transaction。当 driver 没有得到 transaction 的情况下,sequencer会将这个 transaction 重新再发送一遍给driver。那么 sequencer原创 2021-07-08 10:33:55 · 5390 阅读 · 3 评论 -
UVM环境集成
UVM继承不同模块验证环境的思路:方案一:复用底层模块验证环境的组件,顶层环境需要新建一个scoreboard ;方案二:直接复用底层模块的验证环境,要在顶层环境的build_phase阶段,对各个模块环境中不需要产生激励的agent配置为UVM_PASSIVE。这种方式不需要新建scoreboard,可以间接使用模块环境中的scoreboard 。两种方式的对比:方案一需要新建一个scoreboard,而方案二直接复用模块环境中的scoreboard如果顶层设计没那么复杂,重原创 2021-06-29 23:42:34 · 1145 阅读 · 0 评论 -
config机制 — UVM
文章目录概念1.interface的传递2.传递变量3.传递object概念uvm提供了uvm_config_db配置类以及几种方便的变量设置方法来实现仿真时的环境控制;uvm_config_db::set() 通过层次和变量名,将这些配置信息存放在uvm_package唯一的全局变量uvm_package::uvm_resource中。全局变量uvm_resource用来存储和释放配置资源信息。uvm_resource是uvm_resource_pool类的全局唯一实例,该实例有两个resource数原创 2021-06-12 09:45:40 · 2200 阅读 · 2 评论 -
寄存器模型 — UVM
文章目录基本概念寄存器模型的集成访问寄存器的方式1. 前门访问2. 后门访问3.前门访问和后门访问的比较寄存器模型的常规方法1. mirror、desired 和 actual value2. prediction的分类3. uvm_reg 的访问方法4. uvm_mem与uvm_reg的联系与差别基本概念寄存器块(reg_block)由包含很多的寄存器,也可以有存储器;每个寄存器都由很多的域;单个域包含多个bit位。寄存器模型相关类(均为Object类型)类名功能uvm原创 2021-06-19 11:12:43 · 6408 阅读 · 0 评论 -
uvm组件
文章目录UVM组件1. uvm_driver2. uvm_monitor3. uvm_sequencer4. uvm_agent5. uvm_scoreboard6.uvm_env7.uvm_testUVM结构总结uvm_topuvm_test构建环境的主要组件UVM组件1. uvm_driver该类会从uvm_sequncer中获取事务(Transaction),经过转化进而在接口中对DUT进行时序激励。该类是参数化类,用户在定义新的driver类时,当声明该类所需要获取的事务参数REQ类型,默认情原创 2021-06-16 16:53:29 · 2173 阅读 · 0 评论 -
report机制 — UVM
文章目录消息方法消息处理消息宏消息机制消息过滤回调函数消息方法function void uvm_report_info(string id,string message,int verbosity = UVM_DEDIUM,string filename = "",int line = 0);function void uvm_report_worning(string id,string message,int verbosity = UVM_DEDIUM,string filename = ""原创 2021-06-16 16:32:45 · 2038 阅读 · 0 评论 -
phase机制—UVM
简介在SV中,虽然对象可以通过构建函数new()实现,但是单单通过new()函数无法解决一个重要问题——验证环境在实现层次化时,如何保证例化的先后关系,以及各个组件在例化后的连接。通过phase机制,可以清晰的将UVM仿真阶段层次化。这里的层次化不仅仅是各个phase的先后执行顺序,处于同一个phase中的层次化组件之间的phase也有先后关系。执行机制注意:一个有9个phase,从build ——> final,自上而下,顺序执行;八个都是函数(意味着要立即做反馈),只有run原创 2021-06-16 16:22:55 · 3065 阅读 · 0 评论 -
工厂机制(factory)—UVM
文章目录简介ucm_component和uvm_object的例化uvm_coreservice_t类注册后的对象创建(component或者object)component/object与工厂有关的方法工厂创建component/object的方法覆盖方法确保正确覆盖的代码要求简介工厂的存在,就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性;实例或者类型的替代,在UVM中称作覆盖(override),而**被用来替换的对象或者类型,应该满足注册(regi原创 2021-06-16 15:38:42 · 2959 阅读 · 0 评论 -
TLM通信 — UVM
文章目录简介1.端口的使用2.单向通信3.双向通信4.多向通信5.通信管道1. TLM_FIFO2. Analysis Port3. Analysis TLM FIFO4. request & response 通信管道简介系统原型阶段和芯片验证阶段均使用了TLM通信方式。前者是为了更快地实现硬件原型之间的数据通信,后者是为了更快地实现验证组件之间的通信。仿真速度是TLM对项目进度的最大贡献,同时TLM传输中的事务又可以保证足够大的信息量和准确性。TLM并不是某种语言的产物,而是作为一种提高原创 2021-06-10 10:20:28 · 2695 阅读 · 2 评论 -
通信同步(uvm_event、uvm_barrier 、uvm_callback)— UVM
文章目录前言1. uvm_event2. uvm_barrier3. uvm_callback前言UVM需要解决组件之间的线程同步问题。SV中可以用event、semaphore和mailbox进行线程同步,但是考虑到UVM组件的封闭性原则,不推荐采用层次索引的形式来索引公共的event或者semaphore,UVM通过如下的类来达到组件之间的同步:两个组件之间的同步:uvm_event,uvm_event_pool 和 uvm_event_callback多个组件之间的同步:uvm_barrie原创 2021-06-09 19:43:35 · 1971 阅读 · 0 评论 -
sequence和sequencer — UVM
文章目录简介1.sequence 和 item2.sequencer 和 driver1. 通信方式——TLM端口2.事务传输3. 通信时序3.sequence和sequencer1.常用方法和宏的定义2. sequencer仲裁特性4.sequence的层次化1. hierarchical sequence2. virtual sequence3. layering sequence简介发送item的过程:sequence是产生sequence item对象的地方,也可以产生sequence对象来原创 2021-06-09 19:31:53 · 3901 阅读 · 0 评论 -
如何构建UVM验证环境?
环境的核心要素:单元组件的自闭性回归创建通信端口连接顶层配置单元组件的自闭性自闭性是指单元组件(如uvm_agent 或者uvm_env)自身可以成为独立行为、不依赖于其他并行的组件。单元自闭性为日后的组件复用提供了良好的基础。各个子环境可以独立集成于顶层环境,互相也不需要额外的通信连接,各自划分“小世界”。回归创建环境框架的创建就是依赖于回归创建。通过这种方式,上一级的组件在例化自身之后,会执行各个phase阶段,通过build_phase可以进一步创建子组件,而这些子组件也通原创 2021-06-03 14:18:29 · 1911 阅读 · 0 评论 -
UVM相对SV验证环境的优势
前言UVM做的事情就是给提高验证环境的复用性,那么相对SV,UVM 为什么提高了复用性?一下几点将回答这个问题。总结为以下几点:1.各个模块的验证环境是独立封装的,对外不需要保留数据端口,因此便于环境的进一步集成复用。这也就是说每个模块单元都具有自闭性,自闭性是指单元组件(如uvm_agent 或者uvm_env)自身可以成为独立行为、不依赖于其他并行的组件。单元自闭性为日后的组件复用提供了良好的基础。各个子环境可以独立集成于顶层环境,互相也不需要额外的通信连接,各自划分“小世界”。而在SV中则不原创 2021-06-03 14:11:41 · 4557 阅读 · 0 评论