How to define methods for multiple blocking put imp's in a single component

IF I have more than one blocking put implementation in my scloreboard of different typed, How can i declare implmentation method(put) for each instance?
(for reference : in uvm_analysis imp will use `uvm_analysis_imp_decl(_abc) macro to declare instance then write_abc method) do we have any feature like this? if yer please provide , if no please suggest me some alternative?

In reply to bhargav_1909:

From uvm_tlm_defines.svh ::


//Define two new put interfaces which are compatible with uvm_put_ports and uvm_put_exports.

`uvm_put_imp_decl(_1)
`uvm_put_imp_decl(_2)

class my_put_imp#(type T=int) extends uvm_component;
   uvm_put_imp_1#(T) put_imp1;
   uvm_put_imp_2#(T) put_imp2;
   ... 
   function void put_1 (input T t); 
     //puts comming into put_imp1
     ... 
   endfunction
   function void put_2(input T t); 
     //puts comming into put_imp2
     ... 
   endfunction
endclass

In reply to ABD_91:
I’m not sure if patching the source code is a good approacvch.
Could you please in some more detail why you are need several put ports?

In reply to chr_sue:

My intention was to convey that similar to uvm_analysis_imp_decl**, user also has a macro for **uvm_put_imp_decl

In reply to ABD_91:

Thanks for your response ABD_91,

Now the macro that you suggested `uvm_put_imp_decl should define implementation methods for blocking and non-blocking put implementation’s

do we have macro defined specifically for blocking put imp declaration?

if yes, could you please provide me example or reference material.

Regards,

In reply to chr_sue:

Thanks for your question chr_sue :
Hope this information finds you well .
I have two requirements in my project,
first one is, I have to send packets from monitor(20 monitors in my environment) to scoreboard , I used TLM blocking put port(instead of analysis port) in all monitors to pass packets to scoreboard.
my question from this requirement is , in my scoreboard how can I define implementations and methods ?

correct me if I am wrong : I am thinking for all of my monitors (which are passing same type of data to scoreboard), I can use only one implementation method in scoreboard for all my implementations? is it correct?

my second requirement is : in the same way, I have 20 monitors which are sending same data to scoreboard but different from case 1 .
now , I want to define implementations to all my 40 monitor’s(20 of one kind , 20 of other)
what would be appropriate way to tackle this?

In reply to bhargav_1909:

A few things:
(1) using a blocking port on the analysis side has the risk that you are loosing data which is really bad.

(2) When you are transferring transactions from the monitor to the scoreboard you have to store these transations until they will be processed in the scoreboard. Here you can use the uvm_tlm_analysis_fifo, one fifo for each monitor. This fifo has a built-in analysis_export which can be connected directly to the monitor’s analysis port.

(39 For tarnsfering the data from the monitor to the sb analysis fifos you have simply to call the write method of the analysis fifos.

This approach is a sfe approach and guarantees no transaction get lost and they are always in the right order. Additionally it allows you to connect other components to the monitor’s analysis port like coverage collectors.