まだ理解していません。引用元:uvm_users_guide_1.1.pdf P.158
// Upper-layer classesclass upper_item extends uvm_sequence_item; ...endclass : upper_itemclass upper_sequencer extends uvm_sequencer #(upper_item); ...endclass : upper_sequencer// Lower-layer classesclass lower_item extends uvm_sequence_item; ...endclass : lower_itemclass lower_sequencer extends uvm_sequencer #(lower_item); uvm_seq_item_pull_port #(upper_item) upper_seq_item_port; ... function new (string name, uvm_component parent); super.new(name, parent); upper_seq_item_port = new(“upper_seq_item_port”,this); endfunction : new ...endclass : lower_sequencerclass lower_driver extends uvm_driver #(lower_item); ...endclass : lower_driverclass higher_to_lower_seq extends uvm_sequence #(lower_item); ... // Constructor and UVM automation macros go here. // See Section 4.8.2 upper_item u_item; lower_item l_item; virtual task body(); forever begin `uvm_do_with(l_item, { ... }) // Constraints based on u_item end endtask : body // In the pre_do task, pull an upper item from upper sequencer. virtual task pre_do(bit is_item); p_sequencer.upper_seq_item_port.get_next_item(u_item); endtask : pre_do // In the post_do task, signal the upper sequencer we are done. // And, if desired, update the upper-item properties for the // upper-sequencer to use. virtual function void post_do(uvm_sequence_item this_item); p_sequencer.upper_seq_item_port.item_done(this_item); endfunction : post_doendclass : higher_to_lower_seq