|
楼主 |
发表于 2013-5-7 09:31:17
|
显示全部楼层
非常感谢asic_wang的指教!
我还是有些问题不大明白。以下是我目前的apb_sequencer的代码:
- class apb_master_sequencer extends uvm_sequencer #(apb_transfer);
- // Config in case it is needed by the sequencer
- apb_config cfg;
- // Provide implementations of virtual methods such as get_type_name and create
- `uvm_component_utils_begin(apb_master_sequencer)
- `uvm_field_object(cfg, UVM_DEFAULT|UVM_REFERENCE)
- `uvm_component_utils_end
- // Constructor
- function new (string name, uvm_component parent);
- super.new(name, parent);
- endfunction : new
- // UVM build_phase
- virtual function void build_phase(uvm_phase phase);
- super.build_phase(phase);
- if (cfg == null)
- if (!uvm_config_db#(apb_config)::get(this, "", "cfg", cfg))
- `uvm_warning("NOCONFIG", "apb_config not set for this component")
- endfunction : build_phase
- endclass : apb_master_sequencer
复制代码 然后在test中为其指定default_sequence
- class multiple_read_after_write_test extends base_test;
- `uvm_component_utils(multiple_read_after_write_test)
- function new(string name="multiple_read_after_write_test",uvm_component parent);
- super.new(name,parent);
- endfunction : new
- virtual function void build_phase(uvm_phase phase);
- super.build_phase(phase);
- uvm_config_db#(uvm_object_wrapper)::set(this,"demo_tb0.apb0.master.sequencer.run_phase","default_sequence",multiple_read_after_write_seq::type_id::get());
- endfunction : build_phase
-
- endclass : multiple_read_after_write_test
复制代码 那么,(1)把DUT的中断port通过virtual interface连接到apb sequencer的interrupt上
是否我应该在apb_sequencer中添加一个interrupt的变量(还是wire?)
(2)我看grab和ungrab的时候都使用了指针p_sequencer,嗯,如果只grab apb_sequencer的使用权的话,是否是应该是“grab(p_sequencer.apb_sqr)"?
另外,关于interrupt和grab的使用,我还有些一知半解,懵懵懂懂的,能否指明哪份资料里面有详细说明,我查了UVM_1.1_class_reference中没有interrupt相关的东西,而uvm_users_guide_1.1中也只有那么一点点。关于这部分我还是从头补齐比较好。 |
|