Using put method - but unable to execute

Hi,

Below is my code snippet I am trying to execute - My issue is with line 296 where I am using a put method that is not getting executed.
This method is inside a callback. Can someone help me understand why the put method is not working? Please let me know if any additional information is needed.

Thanks in advance.

282      if (gbl.LPMA_enable_bit == 1) begin
 283
 284         //Declaring handle for svt_usb_link_service
 285         svt_usb_link_service link_service_handle = svt_usb_link_service::type_id::create();
 286
 287         if ((link_command.is_advertisement()) && (link_command.word_info[0]==svt_usb_link_command::LCRD_D)) begin
 288
 289           `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("Entering LPMA callback"), UVM_HIGH);
 290
 291            link_service_handle.service_type              = svt_usb_link_service::LINK_SS_PORT_COMMAND;
 292            link_service_handle.link_ss_command_type      = svt_usb_link_service::USB_SS_ATTEMPT_U2_ENTRY;
 293
 294            //Input the link service command into the link service in port
 295           `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("Inputing U2 service type to link_service_in_port"), UVM_HIGH);
 296            component.link_service_in_port.put(link_service_handle);
 297           `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("U2 service request completed"), UVM_HIGH);
 298
 299            if (gbl.lp0_vip_agent.shared_status.ltssm_state == svt_usb_types::U2) begin
 300              `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("Entered U2 state"), UVM_HIGH);
 301            end
 302         end
 303
 304         //For this, the TE has to use the callback “pre_usb_ss_tx_link_command_transform_cb_exec” to wait until the VIP sends LPMA.
 305         if (link_command.word_info[0] == svt_usb_link_command::LPMA) begin
 306
 307            `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf( "LKRX: LPMA recevied lp_ix=%0d \n", lp_ix ) , UVM_MEDIUM);
 308
 309             //Then, the TE has to direct the VIP to send LCRD_A using the service command “LINK_COMMAND”.
 310             link_service_handle.service_type = svt_usb_link_service::LINK_COMMAND;
 311             link_service_handle.link_command = new();
 312             link_service_handle.link_command.word_info[ 0 ] = svt_usb_link_command::LCRD_A;
 313             link_service_handle.link_command.word_info[ 1 ] = svt_usb_link_command::LCRD_A;
 314            `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("service_type and link_command assigned"), UVM_HIGH);
 315
 316             //Input the link service command into the link service in port
 317            `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("Inputing LCRD_A service type to link_service_in_port"), UVM_HIGH);
 318             component.link_service_in_port.put(link_service_handle);
 319            `uvm_info (pre_usb_ss_tx_link_command_transform_prfx, $sformatf ("LCRD_A service request completed"), UVM_HIGH);
 320         end
 321
 322      end //LPMA_enable_bit

In reply to sk9:

Please use code tags making your code easier to read. I have added them for you.

By “not getting executed” do mean to say[list=]
[] if you put a breakpoint on line 296, the breakpoint is never hit, or
[
] the put() is getting executed, but hangs never returning
[*] the put() executes and returns, but you see no effect of the put().
[/list]

Any one of these situations requires a lot more explanation around the code behind it, declaration of variables involved, how connections were made. You will probably need to learn how to interactively debug your UVM testbench.