is_active是agent的一个成员,缺省值是UVM_ACTIVE,这表示处在active模式的agent需要例化driver、monitor和sequencer;而如果is_active的值是UVM_PASSIVE,这表示agent是passive模式,只可以例化monitor。active模式的agent既有激励功能也有监测功能;passive模式的agent只有监测功能。 如何配置agent为active模式还是passive模式呢?可...
is_active是uvm_agent内置的一个成员变量,通过顶层传值,控制driver是否进行例化,且is_active的值默认为UVM_ACTIVE。 UVM_PASSIVE:例化monitor而不需要例化driver(输出端口无需驱动) UVM_ACTIVE:例化monitor,也需要例化driver(输入端口需要驱动) 例化动作可以在build_phase函数中完成,也可以在new函数中完成,但强烈建议仅...
Read()、write()、update() 和 mirror() 是Active API,它们使用物理接口在 DUT 上运行。您可以选择使用后门机制,在这种情况下它不会消耗仿真周期。与使用前门访问相同的RTL寄存器行为一致。 Passive:仅使用寄存器模型操作。set()、get() 和 predict() 是直接在模型上操作的Passive API。调用Passive peek() 不会...
uvm_active_passive_enum is_active=UVM_ACTIVE 这里UVM默认了is_active值为UVM_ACTIVE,其中uvm_active_passive_enum为变量类型,如果要用config_db传参,使用config_db#(uvm_active_passive_enum)进行set和get。 之所以在agent中设置一个if判断语句来决定是否实例化drv的原因是因为,我们在输入和输出的端口都有agent,...
agent:将sequencer、driver和monitor封装在一起(UVM_ACTIVE/UVM_PASSIVE、两种模式),agent模块的使用提高了代码的可重用性; env:将平台上的component组件封装在一起,并配置各个组件间的通信端口,实现一个环境多个用例。运行不同用例时,在其中实例化env即可; ...
uvm_active_passive_enum is_active = UVM_ACTIVE; is_active是agent的一个成员,缺省值是UVM_ACTIVE,这表示处在active模式的agent需要例化driver、monitor和sequencer;而如果is_active的值是UVM_PASSIVE,这表示agent是passive模式,只可以例化monitor。active模式的agent既有激励功能也有监测功能,passive模式的agent只具有监...
uvm_active_passive_enumis_active=UVM_ACTIVE;typedefenumbit{UVM_PASSIVE=0,UVM_ACTIVE=1}uvm_active_passive_enum; 这个枚举变量仅有两个值:UVM_PASSIVE和UVM_ACTIVE。在uvm_agent中,is_active的值默认为UVM_ACTIVE,在这种模式下,是需要实例化driver的。那么什么是UVM_PASSIVE模式呢?以本章的DUT为例,如果在输...
uvm_active_passive_enum is_active = UVM_ACTIVE; 1. 当is_active的值为 UVM_ACTIVE 时,表示处于active模式的agent需要例化driver、sequencer和monitor。如果值为 UVM_PASSIVE,则表示agent是passive模式,只可以例化monitor。即:active模式的agent既能激励DUT,也可以监测它;passive模式则只有监测功能。
为了实现这一功能,UVM的agent自带一个成员变量is_active,该成员变量的类型是uvm_active_passive_enum。通过对这个变量进行判断,就能够改变agent例化时的行为。 当然,为了测试的灵活性,这个变量肯定需要想办法从更高层次的组件甚至是tb文件中获取。获取方式一般是直接使用config_db机制或是在上层组件中使用config_db机制...
`uvm_component_utils(agent)protecteduvm_active_passive_enum is_active = UVM_ACTIVE; monitor mon; driver drv;functionnew(stringname, uvm_component parent);super.new(name, parent);endfunctionfunctionvoidbuild_phase(uvm_phase phase);// super.build_phase(phase);uvm_report_info(get_full_name(),"...