Best practice recommendation for analysis transaction broadcast to multiple subscribers

Hello

I was wondering what the accepted best practice is for transmitting and receiving transactions via OVM TLM. On transmission I can understand the philosophy to ‘clone on TX’ since the originator owns the original handle and may decide to alter it after TX. Also - there is a chance that a downstream subscriber could corrupt the handle also.

What about RX though? Even using ‘clone on TX’ - you could have multiple subscribers that will all have the same (cloned) handle presented on their respective analysis exports. Should you also ‘clone on RX’ - since there is no guarantee on what other subscribers may do to that handle? Is this an overly defensive mindset … obviously the more cloning the more memory usage so performance may suffer.

My concern about a subscriber potentially affecting a handle is based around code similar to the simplified excerpt below. What happens if I get an abort at the exact same time as I get a in interrupt object into the FIFO - could the disable fork effectively null the handle of the RXed transaction - and thus affect other subscribers?

Would be interested in general thoughts/ideas/experience in this area.

Thanks

  • Andy

task my_class::wait_until_intr(output bit status);
  intr_class  intr_obj;

  fork
  begin
      fork : FORK_WAIT_DONE
        begin
            m_intr_fifo.get(intr_obj);
            status = 1;
        end
        begin
            poll_for_abort();
            status = 0;
        end
      join_any
      disable fork;
  end
  join
  endtask


The recommend practice is clone the object while transmitting and receiving to make sure that none of components will be effected by other.