Getting same item from analysis fifo, even though monitor writes only once

Hi,
-Monitor analysis port is connected scoreboard export
-scoreboard export is connected to scoreboard’s analysis fifo.

From my monitor i am writing only once, but from analysis fifo, i recive the same item twice. Can anyone tell me what is the mistake i am doing ?

UVM_INFO …/PSRAMTBsrc/PsramMaster_PsramMon.sv(68) @ 153855000 ps: uvm_test_top.env.ps_mon [PSRAM_MON] PKT TYPE : SYNC_WR(80H)

UVM_INFO …/PSRAMTBsrc/PsRamSco.sv(349) @ 153855000 ps: uvm_test_top.env.sb [uvm_test_top.env.sb] GOT PSRAM ITEM : PKT TYPE : SYNC_WR(80H)

UVM_INFO …/PSRAMTBsrc/PsRamSco.sv(349) @ 153855000 ps: uvm_test_top.env.sb [uvm_test_top.env.sb] GOT PSRAM ITEM : PKT TYPE : SYNC_WR(80H)

In reply to saravanantvs:

Check that you only made one connection.

In reply to dave_59:

Hi Dave,

I found out the issue. socreboard is getting item only once. But the uvm_info is getting printed two times. May i know how to solve this.

task PsRamSco::psram_rcv();
PsramTrns psram_item_h;
forever begin
uvm_info(get_full_name(),$psprintf("Size of fifo is-1 : %0d",f_mon_analysis_exp.size()),UVM_LOW) f_mon_analysis_exp.get(psram_item_h); $display("JUST CHECKING"); uvm_info(get_full_name(),$psprintf(“Size of fifo is-2 : %0d”,f_mon_analysis_exp.size()),UVM_LOW)
`uvm_info(get_full_name(),$psprintf(" GOT PSRAM ITEM : %0s",psram_item_h.sprint()),UVM_LOW)
if(psram_item_h.is_sync_wr()) begin
processSyncWr(psram_item_h);
end

JUST CHECKING
UVM_INFO …/PSRAMTBsrc/PsRamSco.sv(351) @ 153135000 ps: uvm_test_top.env.sb [uvm_test_top.env.sb] Size of fifo is-2 : 0
UVM_INFO …/PSRAMTBsrc/PsRamSco.sv(351) @ 153135000 ps: uvm_test_top.env.sb [uvm_test_top.env.sb] Size of fifo is-2 : 0

In reply to saravanantvs:

Hi Dave,

I have found out the problem.
In report_severity_action, if i specify UVM_DISPLAY | UVM_LOG. then i am getting same info messages more than once. but once i change it to only UVM_LOG. Then i am getting only once.
Any idea why it is happening like this.

axi_fd = $fopen(“AXI_MON_LOG.log”,“w”);
set_report_id_file(“AXI_MON”, axi_fd );
//set_report_severity_action(UVM_LOW, (UVM_DISPLAY | UVM_LOG) );
set_report_severity_action(UVM_LOW, UVM_LOG );

In reply to saravanantvs:

Your problem is you used
set_report_id_file(“AXI_MON”, axi_fd );
, but your message ID is
`uvm_info(get_full_name(),…)
, so your message ID don’t match. The default log file is the display.

You can

  1. use set_report_default_file() instead of set_report_id_file()
  2. make the IDs match by using set_report_id_file(get_full_name(),axi_fd);
  3. make the IDs match by using `uvm_info(“AXI_MON”,…)

I prefer options 1 or 3. I don’t like using get_full_name for the message ID. It is duplicate information in the message. You should use more unique message IDs for fine-grain control.