马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 wenhuajianyuan 于 2021-4-11 18:48 编辑
1.验证平台超时退出的设置方式? 通过uvm_root的set_timeout(time timeout, bit overridable = 1)函数来设置; 通过command行+UVM_TIMEOUT=<timeout>,<overridable>。
2.如何设置sequence产生的transaction的优先级? 一方面,通过uvm_do_pri ,uvm_do_on_pri,uvm_do_pri_with或uvm_do_on_pri_with宏来产生transaction,代表priority的参数数值越大,优先级越高,默认为-1。另一方面,通过仲裁算法set_arbitration使优先级起作用(其中SET_ARB_STRICT_FIFO和SET_ARB_STRICT_RANDOM代表严格按照优先级顺序产生transaction)。
3.如何控制sequence有效性? 通过重载is_relevant函数可以使sequence失效或重新生效,返回值为1代表有效,0代表无效。 virtual function bit is_relevant() if A return 0; else rerun 1; endfunction 通常wait_for_relevant与is_relevant成对重载,因为若所有有效sequence的transaction发送完时,失效sequence尚未释放出来,验证平台会报错。而当存在wait_for_relevant时,若sequencer所启动的所有sequence失效,则自动调用wait_for_relevant并等待sequence有效(因此wait_for_relevant中需要设置使sequence恢复有效的条件)。
4.uvm_do等宏(没有显示指定sequencer指针的宏)默认的sequencer指针是什么? 这一类宏默认的sequencer指针为宏对应的sequence启动时指定的sequencer指针,sequence把该指针放在其成员变量m_sequencer中。也就是说,uvm_do等价于`uvm_do_on(tr,this,m_sequencer)。
5.什么是向下类型转换和向上类型转换? 父类向子类转换称为向下类型转换,此时子类的句柄指向父类对象,可用cast进行类型转换:1.定义一个子类对象,child_tr=new;2.父类句柄指向子类对象,father_tr=child_tr;3.类型转换,$cast(child_tr,father_tr),若类型兼容则返回1,否则返回0. 子类向父类转换称为向上类型转换,此时父类句柄指向子类对象,直接用“=”即可实现转换。
6.m_sequencer和p_sequencer的关系? m_sequencer是每个sequence自带的成员变量,其类型为uvm_sequencer_base。 当sequence中想要使用sequencer的成员变量时,由于类型不一致,无法直接使用m_sequencer句柄,可以通过`uvm_declare_p_sequencer转换生成对应的p_sequencer来使用(`uvm_declare_p_sequencer(my_sequencer)执行了两步操作:1.声明了一个my_sequencer类型的句柄p_sequencer;2.进行类型转换,将m_sequencer类型句柄转换为p_sequencer类型,相当于$cast(p_sequencer,m_sequencer))。
7.什么是前门访问,什么是后门访问? 前门访问是指通过配置总线来对DUT进行读写操作;后门访问不通过总线进行操作,而是通过层次化的引用来改变寄存器的值。
8.如何实例化寄存器模型中的map? 通过调用uvm_reg_block中的create_map来实现。 Eg:default_map = create_map(“default_map”,0,4,UVM_LITTLE_ENDIAN,0); 其中,第一个参数表示实例化名称,第二个参数为基地址,第三个参数为总线宽度(单位为byte),第四个为大小端,最后一个参数代表是否可以按照byte寻址。
9.重载的条件以及优势? 在父类中定义的函数或任务,如果为virtual类型,则可以在子类中对它进行重载。重载的优势是子类指针以父类类型传递时,表现的行为仍为子类行为。
10.寄存器模型中的adapter定义的两个函数分别是什么作用? reg2bus:寄存器模型通过sequence发出的uvm_reg_bus_op型变量转换成bus_sequencer可以接受的形式。 bus2reg:当监测到总线有操作时,把收集到的transaction转换成寄存器模型可以接收的形式。
11.factory机制重载的函数有哪些? 全部替换: set_type_override_by_type(uvm_object_wrapper original_type, uvm_object_wrapper override_type, bit replace=1); 部分替换: set_inst_override_by_type(string relative_inst_path, uvm_object_wrapper original_type, uvm_object_wrapper override_type); 两个函数中代表重载和被重载类的参数都是uvm_object_wrapper类型,可通过xxx::get_type()获得。 也可直接用字符串表示。对应的函数分别是:set_type_override(string original_type_name, string override_type_name, bit replace=1); set_inst_override(string relative_inst_path, string original_type_name, string override_type_name); set_type_override_by_type(uvm_object_wrapper original_type,uvm_object_wrapper override_type,bit replace=1);和uvm_component中的同名函数类似,传递的参数也相同。 set_inst_override_by_type(uvm_object_wrapper original_type,uvm_object_wrapper override_type,string full_inst_path);传递的代表路径的参数与uvm_component中的同名函数不同,full_inst_path指要替换的实例中使用get_full_name()得到的路径值。 set_type_override_by_name(string original_type_name, string override_type_name, bit replace=1);与uvm_component中的set_type_override类似,参数也一致。 set_inst_override_by_name(string original_type_name, string override_type_name, string full_inst_path);与uvm_component中的set_inst_override相比,路径参数不同,此处仍需要full_inst_path。
12.使用factory机制重载的条件有哪些? 重载的类和被重载的类,都要在定义时注册到factory机制中; 被重载的类在实例化时,需要使用factory机制的实例化方式,而不能使用new方式; 重载的类与被重载的类之间有派生关系,即被重载的类必须为重载类的父类; component与object之间不能进行重载。
关注公众号并回复”UVMBOOK”可获取更多UVM学习资料
|