前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【日更计划119】数字IC基础题【UVM部分】

【日更计划119】数字IC基础题【UVM部分】

作者头像
空白的贝塔
发布2021-06-17 14:52:08
5590
发布2021-06-17 14:52:08
举报
文章被收录于专栏:摸鱼范式摸鱼范式

上期答案

[320] 在UVM中,如何结束仿真?

UVM具有phase机制,由一组构建阶段,运行阶段和检查阶段组成。在run()阶段进行实际的测试仿真,并且在此phase中,每个组件都可以在开始时提出raise_objection和drop_objection。一旦所有组件都drop_objection,则run_phase完成,然后所有组件的check_phase执行,然后测试结束。

这是正常仿真结束的方式,但是如果某些组件由于设计或测试平台中的错误而挂起,则仿真超时也可以终止run_phase。当run_phase启动时,并行超时计时器也会启动。如果在run_phase完成之前超时计时器达到指定的超时限制,则将发出一条错误消息,然后将执行run_phase之后的所有phase,最后测试结束。

[321] 什么是UVM RAL(UVM Register Abstraction Layer)?

UVM RAL(UVM Register Abstraction Layer)是UVM所支持的功能,有助于使用抽象寄存器模型来验证设计中的寄存器以及DUT的配置。UVM寄存器模型提供了一种跟踪DUT寄存器内容的方法,以及一个用于访问DUT中寄存器和存储器的层次结构。寄存器模型反映了寄存器spec的结构,能够作为硬件和软件工程师的共同参考。RAL还具备其他功能,包括寄存器的前门和后门初始化以及内置的功能覆盖率支持。

[322] 什么是UVM Callback?

uvm_callback类是用于实现回调的基类,这些回调通常用于在不更改组件类的情况下修改或增强组件的行为。通常,组件开发人员会定义一个专用于应用程序的回调类,该类扩展并定义一个或多个虚方法,称为回调接口。这些方法用于实现组件类行为的重写。

一种常见用法是在driver将错误发送到DUT之前将错误注入到生成的数据包中。以下伪代码展示了如何实现。

  1. 定义一个具有错误位的数据包类
  2. 定义一个从sequence中提取数据包,输入到DUT的driver类
  3. 定义从基类uvm_callback派生的driver回调类,并添加一个虚方法,该方法可用于注入错误或翻转数据包中的某个位。
  4. 用`uvm_register_cb()宏注册回调类
  5. 在接收和发送数据包到DUT的driver的run_phase()方法中,基于概率执行回调以导致数据包损坏
class Packet_c; 
    byte[4] src_addr, dst_addr; 
    byte[] data; 
    byte[4] crc;
endclass
//User defined callback class extended from base class 
class PktDriver_Cb extends uvm_callback; 
    function new (string name = "PktDriver_Cb"); 
        super.new(name);
    endfunction
    
    virtual task corrupt_packet (Packet_c pkt);
        //Implement how to corrupt packet 
        //example - flip one bit of byte 0 in CRC 
        pkt.crc[0][0] = ~pkt.crc[0][0]
    endtask 
endclass : PktDriver_Cb

//Main Driver Class 
class PktDriver extends uvm_component;
    `uvm_component_utils(PktDriver) 
    
    //Register callback class with driver
    `uvm_register_cb(PktDriver,PktDriver_Cb)
    
    function new (string name, uvm_component parent=null);
        super.new(name,parent); 
    endfunction
    
    virtual task run(); 
        forever begin 
            seq_item_port.get_next_item(pkt);
            `uvm_do_callbacks(PktDriver,PktDriver_Cb, corrupt_packet(pkt))
            //other code to derive to DUT etc
        end
    endtask
endclass
[323] 什么是uvm_root类?

uvm_root类充当所有UVM组件的隐式顶级和phase控制器。用户不直接实例化uvm_root。UVM会自动创建一个uvm_root实例,用户可以通过全局(uvm_pkg-scope)变量uvm_top访问该实例。

[324] uvm_test的父级类是什么?

uvm_test类是用户可以实现的顶级类,并且没有显式父类。但是,UVM有一个称为uvm_top的特殊组件,它被指定为测试类的父级。

形式验证

[325] 什么是形式验证?

形式验证是使用数学建模来验证设计实现是否符合spec的方法。形式验证使用数学推理和算法来证明设计符合spec。在形式验证中,该工具隐式地涵盖了所有情况(输入和状态),而无需开发任何激励生成器或预期输出。该工具需要以property或更高级别的模型形式对spec进行形式描述,以详尽地涵盖所有输入组合,证明功能的正确性。SystemVerilog的property也可用于形式化描述spec。

本期题目

[326] 形式验证是静态仿真还是动态仿真?
[327] 形式验证有哪些方法?
[328] 解释模型检查
[329] 什么是形式等效
[330] 列出一些可以使用形式等效的场景

正确答案将在下一期公布,或者到下面的文章获取答案

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上期答案
    • 形式验证
    • 本期题目
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档