1.callback机制:
sv中回调(callback)机制通过在类中定义虚方法(回调方法),并在适当时机(回调钩子)调用这些方法来实现。用户继承并重写这些虚方法来插入自己的代码,改变组件的行为。
2.sv中约束块可以调用函数吗?
不可以直接调用,但可以使用函数返回值(return)、随机化函数($urandom)、类方法
3.UVM中run_phase和main_phase的关系
run_phase和12个task_phase是并行执行的,都是在同一时间开始,但是main_phase作为run_phase的一部分,会在pre_main之后和post_main之前执行。在run_phase中,用户可以在任何时候启动序列(seq),而在main_phase中通常执行的主要的测试序列。
4.item_done的作用
握手机制,用于告知sqr,drv已处理该item,可移除保留副本;标志item声明周期结束,允许seq执行下一个item
5.uvm常用port
uvm_put_port、uvm_get_port、uvm_peek_port、uvm_analysis_port、uvm_analysis_export、uvm_tlm_analyasis_fifo
6.结构体和类有什么区别
继承、多态、封装、默认访问修饰符、是否包含方法、内存分配(结构体在栈、类在堆/栈)
7.数组和队列有什么区别
队列遵循先进先出,不支持随访问,队列不需要指明大小,数组可以是多维的
8.结构体和枚举类型
结构体是一种复合数据类型,用于将多个数据合成一个单一的数据结构;
枚举是一种特殊的数据类型,定义了一组命名的常量;
9.类的三大特性:继承、多态、封装
允许一个类(子类或者派生类)继承一个类(基类或者父类);
允许不同类的对象对同一消息做出响应,通过虚方法(virtual function)实现,子类可以覆盖父类中的虚方法;
将属性和方法捆绑在一起的过程;
10.sqr和drv怎么连接
seq_item_port.connect(m_sqr.seq_item_export)
11.automatic用法
确保使用automatic关键字声明的这些变量的生命周期仅限于他们被声明的代码块,即每次执行代码块都重新初始化;在类的声明时,无法继承基类的值,需要显示地初始化这些变量
12.ref在func和task
ref关键字避免了参数值在传递过程中的复制,二十直接传递了参数的内存地址,可以直接修改原始变量
13.fork join
开启多线程
14.config_db用法
set、get前两个参数为地址,第三个为代号,第四个参数为该类中的某一变量
15.virtual sequence
与vsqr用于复杂测试环境,允许协调多个不同的sqr上的seq执行,vseq只是不同的容器,vsqr是中心化的路由器,桥接不同的sqr,不直接与drv连接,也不处理任何item
16.sqr启动
定义sqr;实例化sqr;连接sqr;启动seq(start挂载或者config_db)
17.深拷贝浅拷贝的区别
浅拷贝只会复制内存地址,深拷贝会创建新的实例,并复制其内容
18.m_sqr和p_sqr的区别
在vseq的定义中有p_sqr这个变量,指向sqr的指针;简单来说,m_sequencer是sequence_item与sequencer之间的桥梁,而p_sequencer则是在sequence中对m_sequencer的直接引用,它允许sequence直接与sequencer交互。使用p_sequencer可以简化代码,避免在sequence中进行类型转换。
19.主要的phase有哪些,作用是什么
Build、connect、end of elaboration、start of simulation、run、extract、check、report、final
常用
system verilogbuild_phase:创建和配置测试平台的结构,实例化uvm_component;
Connect_phase:建立组件之间的连接,通常通过TLM端口进行;
Run_phase:消耗仿真时间,用于激励设计和数据收集;
Check_phase:检查测试环境,确保没有不期望的行为发生;
Report_phase:报告测试结果,包括测试覆盖率和错误检查结果;
Run_time phases:reset\configure\main\shut_down:模拟DUT的复位、配置、运行和断电行为