Dave, OK, I think I understand that - values are "scheduled" than updated immediately. But what about the default output skew of "0", even then I don't get it immediately? The $display is a simplification of the actual usage. Also one may want to display it from a completely different place than where it is being driven. For instance I can have a Debug Monitor that will simply display all TB driven/sampled signals and is a separate component in my Verif env. For it to reliably work I would need to declare all outputs as inouts instead. In reality this is a much serious user problem: Imagine I write a sample debug code like:
class my_debug_mon extends avm/vmm ;
virtual my_if.tb_mp my_vif; // It has clocking block my_cb
task my_mon; forever .. if (my_vif.my_cb.value_driven_kind == IP_Pkt) $display("IP_Pkt with Starting Data as: %x ", my_vif.my_cb.data); ...
The above code is incomplete but does illustrate the kind of usage I'm looking at. Perhaps the WA is to use the Interface level objects, but this will be confusing as I will need to do the synchronization myself. I can't use the MP level items as I have only the my_cb directly under MP.
My fundamental question is: why put such a restriction when the good old VHDL is moving away from it and also Verilog didn't have it. Sure SV has complicated synchronization scheme, but the full power/need of it is debatable - after all we have been doing this for years without these interfaces and interface value addition (especially with this limitation) is not as much as things like class, assertions etc. IMHO.
Thanks Ajeetha, CVC www.noveldv.com |