UVM
文章平均质量分 53
Alfred.HOO
专注于IP和SOC验证
展开
-
UVM中的phase机制
phase原创 2022-07-17 17:05:29 · 2863 阅读 · 0 评论 -
UVM中set/get_config_int/string/object与uvm_cofig_int/string/object的使用
uvm_config_int/string/object原创 2022-07-17 09:19:16 · 2143 阅读 · 0 评论 -
UVM中analysis端口的使用方法
uvm_analysis_port原创 2022-07-10 21:06:30 · 3700 阅读 · 0 评论 -
UVM中设置打印信息的冗余度阈值和重载打印信息的严重性
设置打印信息的冗余度阈值UVM通过冗余度级别的设置提高了仿真日志的可读性。在打印信息之前,UVM会比较要显示信息的冗余度级别与默认的冗余度阈值,如果小于等于阈值,就会显示,否则不会显示。默认的冗余度阈值是UVM_MEDIUM,所有低于等于UVM_MEDIUM(如UVM_LOW)的信息都会被打印出来。...原创 2022-07-10 21:05:09 · 2036 阅读 · 0 评论 -
UVM中UVM_ERROR到达一定数量后结束
UVM同样支持UVM_ERROR达到一定数量时结束仿真。对于某个测试用例,如果出现了大量的UVM_ERROR,根据这些错误已经可以确定bug所在了,再继续仿真下去意义已经不大,此时就可以结束仿真,而不必等到所有的objection被撤销。...原创 2022-07-10 21:03:53 · 3069 阅读 · 0 评论 -
UVM中超时退出set_timeout函数
在UVM中通过uvm_root的set_timeout函数可以设置超时时间:原创 2022-07-10 21:02:22 · 3809 阅读 · 0 评论 -
UVM中p_sequencer和m_sequencer的用法及其区别
在sequencer中存在如下成员变量原创 2022-07-10 20:59:48 · 1450 阅读 · 0 评论 -
UVM中uvm_config_db非直线的设置与获取
通过config_db机制进行设置,称为直线的设置。但是若在其他component,如scoreboard中,对driver的某些变量使用config_db机制进行设置,则称为非直线的设置。原创 2022-06-26 19:25:44 · 620 阅读 · 0 评论 -
UVM中config_db机制的使用方法
config_db机制用于在UVM验证平台间传递参数。他们通常是成对出现的。set函数时寄信,get函数是收信。原创 2022-06-26 19:24:51 · 1505 阅读 · 0 评论 -
UVM中uvm_config_db在sequence中的使用
在UVM中使用get_full_name()可以得到一个component的完整路径,同样的,此函数也可以在一个sequence中被调用,尝试在一个sequence的body中调用此函数,并打印出返回值原创 2022-06-26 19:23:57 · 4196 阅读 · 1 评论 -
uvm中的config机制方法总结(二)
在使用uvm_config_db API set/get时,实际发生了如下的后台操作:uvm_config_db::set通过层次和变量名,将这些信息放置到uvm_pkg唯一的全局变量uvm_pkg::uvm_resources。全局变量uvm_resources用来存储和释放配置资源信息(resource information)。uvm_resources是uvm_resource_pool类的全局唯一实例,该实例中有两个resource数组用来存放配置信息,这两个数组中一个由层次名字索引,一个由类原创 2022-06-26 19:23:01 · 1110 阅读 · 0 评论 -
uvm中的config机制方法总结(一)
在验证环境的创建过程build phase中,除了组件的实例化过程,配置阶段也是必不可少的。为了验证环境的复用性,通过外部的参数配置,使得环境在创建的时候可以根据参数的不同来选择创建的组件、组件的实例个数、组件之间的连接以及组件的运行模式等等。在更细致的环境调节(environment tuning)中,有更多的变量需要配置,例如for-loop的阈值、字符串名称、随机变量的生成比重等等。 无论是配置哪些参数,用户都可以在编译时间或者仿真时间来设置。对于编译时间中要调整这些变量,可以通过修改参数、或者引入预原创 2022-06-26 19:22:02 · 770 阅读 · 0 评论 -
get_sequencer的用法总结
get_sequencer --- 返回sequence使用的默认sequencer的引用。原创 2022-06-26 19:18:51 · 899 阅读 · 0 评论 -
Reporting Classes中uvm_report_server的get_severity_count和get_server用法
Uvm_report_server是一个全局服务器,它处理由uvm_report_handler生成的所有报告。原创 2022-06-26 19:16:55 · 1530 阅读 · 0 评论 -
UVM中uvm_report_enabled的用法
uvm_report_enabled原创 2022-06-26 19:14:41 · 523 阅读 · 0 评论 -
SystmeVerilog中get_name(), get_type_name(), get_type()的区别
UVM验证平台中提到函数,他们往往是定义在某个class中的,你调用某个函数其实是某个class中的函数!我们今天说的get_name(), get_full_name(), get_type_name() ,set_name()这些小函数,用的时候,还真是各自class各自的定义!在UVM中的class主要指的就是最常用的他们:uvm_component,uvm_sequence_item。01 uvm_component中get_name系列小函数比如在UVM验证平台中,我们在这样的一个clas原创 2022-04-24 21:21:21 · 1538 阅读 · 2 评论 -
UVM中uvm_object类的identification方法总结
方法说明set_name设定此对象的实例名,覆盖任何以前给定的名称。get_name返回对象的名字,正如在new构造函数或set_name方法中提供的名字参数。get_full_name返回此对象的完整层次结构名称。get_type返回此对象的类型代理(封装器)。get_object_type返回此对象的类型代理(封装器)。get_type_name这个函数返回对象的类型名,通常是括在引号中的类型标识符。get_inst_id返回对象的唯...原创 2022-04-23 19:27:13 · 548 阅读 · 0 评论 -
UVM中uvm_component类的identification方法总结
HIERARCHY INTERFACEThese methods provide user access to information about the component hierarchy, i.e., topology.get_parent返回此component的父component的句柄, 如果没有父component, 返回null。get_full_name返回此对象的完整层次结构名称。get_children这个函数用这个compoent的子compo...原创 2022-04-23 19:26:47 · 373 阅读 · 0 评论 -
UVM中uvm_sequence_item类的identification方法总结
identificationdescriptionget_sequence_id私有set_item_context对sequence item设置sequence 和sequencer的执行上下文set_use_sequence_info/get_use_sequence_info这些方法用于set和get use_sequence_info位的状态。set_id_info将sequence_id和transaction_id从被引用的项复制到调用项。s...原创 2022-04-23 19:26:26 · 1220 阅读 · 0 评论 -
UVM中uvm_sequence的方法总结
类声明virtual class uvm_sequence #( type REQ = uvm_sequence_item, type RSP = REQ) extends uvm_sequence_base变量变量说明rsp此sequence包含被称为rsp请求类型的字段req此sequence包含被称为req响应类型的字段方法方法说明new创建并初始化一个新的sequence对象send_request这个方法将seq原创 2022-04-23 19:26:04 · 1295 阅读 · 0 评论 -
UVM中uvm_sequencer的方法总结
类声明class uvm_sequencer #( type REQ = uvm_sequence_item, RSP = REQ) extends uvm_sequencer_param_base #(REQ, RSP)|new|使用给定的名称和父类(如果有)创建该类实例的标准componnet构造函数。||stop_sequences|告诉sequencer杀死当前在sequencer上操作的所有sequence和子sequence,并删除当前排队的所有请求、锁定和响应。|s原创 2022-04-23 19:25:32 · 2705 阅读 · 1 评论 -
UVM和SystemVerilog中的返回值使用方法
UVM中成功返回非零值:UVM中返回值的使用:virtual function void build_phase(uvm_phase phase); super.build_phase(phase); `uvm_info("my_driver", "build_phase is called", UVM_LOW); if(!uvm_config_db#(virtual my_if)::get(this, "", "vif", vif)) //使用返回值 `uvm_fatal("my原创 2022-04-20 20:19:57 · 850 阅读 · 0 评论 -
【UVM-26.6】UVM HDL后门访问支持例程
26.6 UVM HDL Backdoor Access support routines这些例程为寄存器使用的DPI/PLI后门访问提供接口。如果你不想使用DPI HDL API,那么使用vlog开关编译SystemVerilog代码。vlog ... +define+UVM_HDL_NO_DPI ...概要UVM HDL后门访问支持例程。这些例程为寄存器使用的DPI/PLI后门访问提供接口变量UVM_HDL_MAX_WIDTH 设置后门访问的位向量的最大大小。方法uvm_hdl_ch原创 2022-03-10 22:54:08 · 10422 阅读 · 0 评论 -
uvm中uvm_event, uvm_event_pool的用法
在SV中用来做线程间同步的几种方法,它们分别是semaphore、event和mailbox。而在UVM中event进化成uvm_event,不仅仅拥有达成不同组件进程之间同步的功能,还能像TLM通信一样传递数据,并且作用范围更广(TLM通信只能在uvm_component之间,而uvm_event不限于此)。常见的uvm_event使用方法首先从常见的uvm_event达成同步的方式讲起: module test import uvm_pkg::*; initial begin /原创 2021-11-29 22:10:32 · 3087 阅读 · 0 评论 -
uvm中uvm_event的方法
uvm_enent的方法有wait_on、wait_off、wait_trigger、wait_ptrigger、get_num_waiters、1.wait_on:等待事件第一次被触发;2.wait_off:如果事件已经被触发且保持on的状态,这个任务等待通过调用reset关闭;3.wait_trigger:等待事件被触发;4.wait_ptrgiger:等待事件的持久触发;5.get_trigger_time:返回事件最后一次被触发的时间;6.is_on:表明reset以后事件是否被触发;原创 2021-10-31 10:44:31 · 3139 阅读 · 0 评论 -
UVM中sequence的两种启动方式
第一种:当完成一个sequence的定义后,可以使用start任务将其启动:task my_env::main_phase(uvm_phase phase); my_sequence seq; // phase.raise_objection(this); seq = my_sequence::type_id::create("seq"); //或者 seq = new("seq"); seq.start(i_agt.sqr原创 2021-10-30 19:27:28 · 1112 阅读 · 0 评论 -
uvm中sequence和virtual sequence中objection的控制
sequence中的objection的控制策略在整颗UVM树中,树的结点很多,理论来说在任何组件中都可以控制objection。一般在sequence和virtual sequence中,也有在scoreboard和test中。一般来说,在一个实际的验证平台中,通常会有以下两种objection的控制策略:第一种:在scoreboard中进行控制,但要注意当收集到指定数量的数据后,利用fork…join_any跳出循环。第二种:在sequence中提起sequencer的objection,当原创 2021-10-30 18:51:46 · 874 阅读 · 0 评论 -
uvm中利用sequence产生transaction的各种方法
每一个sequence都应该派生自uvm_sequence,并且在定义时指定要产生的transaction。每一个sequence都有一个body任务,当一个sequence启动之后,会自动执行body中的代码。第一种:使用宏uvm_do:class case0_sequence extends uvm_sequence #(my_transaction); `uvm_object_utils(case0_sequence) my_transaction m_trans; funct原创 2021-10-30 18:53:12 · 3573 阅读 · 0 评论 -
uvm中在不同组件中提起objection和撤销objection的方式
当不在sequence组件中时,提起和撤销objection的方式:当不在sequence中可以使用phase来控制验证平台的开启和关闭。task my_driver::main_phase(uvm_phase phase); my_transaction tr; phase.raise_objection(this); //提起objection vif.data <= 8'b0; vif.valid <= 1'b0; while(!vif.rst_n)原创 2021-10-30 18:50:34 · 485 阅读 · 0 评论 -
uvm中嵌套sequence的两种启动方式
第一种时利用uvm_do系列宏在一个sequence的body中,除了可以使用uvm_do宏产生transaction外,还可以启动其它sequence,这就是嵌套sequence。uvm_do系列宏有uvm_do/uvm_do_pri/uvm_do_with/uvm_do_pri_with/uvm_do_on/uvm_do_on_pri/uvm_do_on_with/uvm_do_on_pri_withuvm_do系列宏中,当第一参数是transaction时,调用的是start_item和fini原创 2021-10-30 18:48:39 · 1348 阅读 · 0 评论 -
uvm中为sequence中starting_phase赋值的两种方式
在sequence中可以使用starting_phase来控制验证平台的关闭。有两种方式为starting_phase赋值。第一种:手工启动sequence时为starting_phase赋值。例如:seq.start(env.i_agt.sqr);class my_case0 extends base_test; function new(string name = "my_case0", uvm_component parent = null); super.new(name,原创 2021-10-30 18:46:22 · 4694 阅读 · 0 评论 -
uvm中void‘的使用方法
uvm中void’(A_port.try_put(tr))其中使用void’的意义表示不考虑返回值。对于括号中有返回值的函数,加上void’操作符的意思就是告诉仿真器这个函数虽然有返回值,但是我不需要这个返回值。加上这个的唯一好处是可以让仿真器闭嘴:本来函数有返回值,但是你不使用,这时仿真器会抛出警告。加上void’可以关闭警告,让仿真log更干净。...原创 2021-10-17 11:36:28 · 2413 阅读 · 0 评论