I modified the SPI OVM testbench that can be downloaded from Mentor's web site. The testbench is customized to test our design. I have been using Mentor's Questa tool to run simulation while we evaluate the tool. The testbench has worked with Questa. We are also evaluating Cadence's Incisive. I started to compile and run simulation with Incisive. It apprears to compile OK but $cast does not seem to work right.
seq_item_port.get_next_item(req); $cast(cloned_item, req.clone()); ap.write(cloned_item);
This works fine with Questa but not with Incisive. The data members in req are defined but not cloned_item after $cast.
Is there any reason that this does not work with Incisive? Questa was sourceing OVM-2.1.2 source code.
I encountered another issue related to do this. The cloned_item gets written to "ovm_analysis_port" and connected to "analysis_fifo" in the receiving end. This received item will not be processed until new cloned_item is written. I displayed some content of the received data when it gets from analysis_fifo. It still has 1st item data information. Then a new cloned_item gets written. Then the receiving end intends to process the 1st item data, it does no longer have 1st item data information, it has 2nd item data. The receiving end gets the item only once from analysis_fifo, so it should not be reading the 2nd item.
It appears that the cloned_item carries "reference" information not deep copied information. Is this supposed to work this way? If yes, how can I make sure that analysis_fifo will have "deep copied data" rather than "reference" information? If not, what could I be doing wrong to get this result?