摘要:uvm_top = uvm_root::type_id::create("__top__", null); uvm_test_top = my_casen::type_id::create("uvm_test_top", this); env = my_env::type_id::create("e
阅读全文
摘要:在验证环境中,会经常使用uvm的后门操作系列函数,uvm_hdl_force, uvm_hdl_read, uvm_hdl_deposit等。使用后门操作可以直接通过信号的字符串hierarchy路径,进行对RTL内部信号的读取和赋值。 使用uvm_hdl_read常见的写法可能是这样: ``` b
阅读全文
摘要:环境中后门获取DUT内部信号的3种方法: 信号的Hierarchy读取 interface连接 VPI访问 其中前两种方式,借助systemverilog种阻塞等待操作,可以精确地捕获信号的跳变,比如@和wait: ``` //信号Hierarchy读取 @(tb_top.dut.cnt) @(po
阅读全文
摘要:在UVM寄存器模型的操作中,寄存器用于设置DUT状态和芯片状态信息的上报,有前门和后门读写两种方式。 推而广之,其他的DUT内部信号,由于验证的需要,有时也需要进行后门读写。这些信号除了包含前门可读的寄存器以外,还会包含reg/wire信号、状态机的状态值、memory内容等。总的来看,获取DUT内
阅读全文
摘要:uvm_top = uvm_root::type_id::create("__top__", null); uvm_top= new("__top__", null); uvm_test_top = my_casen::type_id::create("uvm_test_top", this); u
阅读全文
摘要:引子 开始本文讨论之前我们先来以一个具体的例子来引出我们今天将要讨论的问题。 put_response/get_response的常规用法实例 图1是apb_master_driver中的一段代码,106-109行是关于driver中将transaction信息通过response的方式返回给发起这
阅读全文
摘要:相信大多数朋友在打印类中数组成员时都遇到过数组打印信息不全的困扰:  假如图中pload[5]到pload[194]中
阅读全文
摘要:uvm_sequence_item.svh ``` // Function: get_sequencer // 返回一个指向默认sequencer的指针 // Returns a reference to the default sequencer used by this sequence. fu
阅读全文
摘要:// Task: get_response // 默认情况下,sequences必须通过调用get_response找回responses。 // 如果没有指定transaction_id, 此任务将返回发送给这个sequence的下一个response。 // 如果在response队列里面没有r
阅读全文
摘要:``` // Function: get_transaction_id // // Returns this transaction's numeric identifier, which is -1 if not set // explicitly by ~set_transaction_id~.
阅读全文
摘要:uvm_component.svh ``` typedef uvm_config_db#(uvm_bitstream_t) uvm_config_int; typedef uvm_config_db#(string) uvm_config_string; typedef uvm_config_db#
阅读全文
摘要:``` 在使用UVM构建测试平台时调用`uvm_info时发现波形中信号变化的时间和`uvm_info显示的时间不一致(本文以`uvm_info为例说明),并且使用UVM-1.1和UVM-1.2居然`uvm_info显示的时间还不一样,这到底是怎么回事儿呢?下面本文将通过追究下到底是什么原因导致的,
阅读全文
摘要:通常我们需要在验证环境中对路径path做正则或者对寄存器名做正则匹配来做针对的处理,如打印,检查或者屏蔽等操作,因此我们需要能在UVM环境中使用正则表达式进行字符串的搜索匹配。 恰好,UVM给我们提供了两个接口,分别是如下两个函数: ``` function int uvm_re_match(str
阅读全文
摘要:相信大家对于SystemVerilog里的force和release,以及assign和deassign已经比较熟悉了。 force和release配合使用,可以用来强制赋值,优先级高于assign和deassign,这两者都属于连续赋值语句。 但是force的值会一直保持,而deposit只是se
阅读全文
摘要:为什么需要这个工具 验证工程师在初学UVM时,需要花些精力了解UVM验证环境的搭建。但是,验证工程师怎么能把有限的精力花费在搭建环境框架上呢。于是乎,有这么一个可以按需生成环境框架的工具就是必须品了。 由于是开源,可以根据验证团队的需求,做定制化的修改,这也是一个喜闻乐见的优点。 工具介绍: 官方介
阅读全文
摘要:之前有朋友问我怎么用脚本产生一个验证环境,这个问题今天和大家介绍下两种做法。 第一种用VCS自带的uvmgen工具 当你在命令行时直接输入uvmgen会输出如下信息: 选择1 然后按照提示步骤进行UVM环境的创建 创建完之后我们看看环境目录 刚才我们创建的env,agent,scoreboar,co
阅读全文
摘要:介绍一个通过GUI方式自动生成UVM环境的工具,uvm_testbench_gen。 工具来源于DVCon US 2022的一篇论文:Novel GUI Based UVM Test Bench Template Builder。 工具源码开源在git: https://github.com/hel
阅读全文
摘要:// Task: wait_trigger // Waits for the event to be triggered. // If one process calls wait_trigger in the same delta as another process // calls <trig
阅读全文
摘要:当uvm_do的第一个参数是某个transaction的指针时,uvm_do主要包括实例化+随机化和约束+发送; 当uvm_do的第一个参数是某个sequence的指针时,uvm_do主要包括实例化+随机化和约束+启动; // for a sequence item, the following a
阅读全文
摘要:`ifndef MY_DRIVER__SV `define MY_DRIVER__SV class my_driver extends uvm_driver#(my_transaction); virtual my_if vif; `uvm_component_utils(my_driver) fu
阅读全文