cat Posted April 3, 2012 Report Posted April 3, 2012 I'm trying to do some sequence layering and I want to connect the monitor in my Lower agent to the monitor in my Upper agent with a put tlm. I am getting a compile error. I don't want to use analysis ports because it is 1-1 transfer. It is working on the sequencer side. monitor side: class U_monitor extends uvm_monitor; uvm_blocking_put_imp #(U_trans, U_monitor) U_trans_export; //to allow lower layer to send trans if has_interface=0 ... class L_adapter_monitor extends L_monitor; uvm_blocking_put_port#(uvm_sequence_item) Utrans_port; //sends to upper agent ... env: L_adpt_mon.Utrans_port.connect(U_agent_h[1].mon.U_trans_export); error: Error-[iCTTFC] Incompatible complex type usage ../testbench/env.sv, 84 Incompatible complex type usage in task or function call. The following expression is incompatible with the formal parameter of the function. The type of the actual is 'class uvm_pkg::uvm_blocking_put_imp#(class $unit::U_trans,class $unit::U_monitor)', while the type of the formal is 'class uvm_pkg::uvm_port_base#(class uvm_pkg::uvm_tlm_if_base#(class uvm_pkg::uvm_sequence_item,class uvm_pkg::uvm_sequence_item))'. Expression: this.U_agent_h[1].mon.U_trans_export Source info: this.L_adpt_mon.Utrans_port.connect(this.U_agent_h[1].mon.U_trans_export) sequencer side: (working) class L_adapter_sequencer#(type Utrans=uvm_sequence_item) extends L_sequencer; uvm_seq_item_pull_port#(Utrans) Utrans_port; //to comminicate with upper agent env: L_adpt_seqr.Utrans_port.connect(U_agent_h[1].seqr.seq_item_export); Quote
petermonsson Posted April 4, 2012 Report Posted April 4, 2012 Hi cat, The object(s) you're sending through the TLM channel don't match. You're trying to connect a uvm_blocking_put_port#(type T=uvm_sequence_item, type IMP=int) to a uvm_blocking_put_imp #(type T=U_trans, type IMP=U_monitor). try making both type T and type IMP match. Best Regards Peter Quote
jadec Posted April 10, 2012 Report Posted April 10, 2012 The types (T) must match uvm_blocking_put_port doesn't have a second type parameter. In addition, your U_monitor class will need to implement the task put( T arg ) to accept the put data. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.