之前一直对seq和driver或者monitor等component组件的数据传输不太清楚,在学习了大佬的写法之后,记录一下整体的结构,后续学习使用
以从monitor向sequence中传输数据为例:
在monitor和sequencer中使用uvm_blocking_peek端口
//monitor 组件,声明peek_export端口
class task_monitor extends uvm_monitor;
uvm_blocking_peek_imp#(task_item, task_monitor) peek_export;
function new(string name = “task_monito”, uvm_component parent=null);
super.new(name, parent);
peek_export = new("peek_export",this);
endfunction
......
endtask
//sequencer ,声明peek_port端口
class task_sqr extends uvm_sequencer#(task_item);
uvm_blocking_peek_port#(task_item) peek_port;
......
endtask
在agent中连接
class task_agent extends uvm_agent;
task_minotor monitor;
task_driver driver;
task_sequencer sqr;
.......
function viod connect_phase();
super.connect_phase(phase);
if(is_active == UVM_ACTIVE)begin
driver.seq_item_port.connect(sqr.seq_item_expor