Recently Amit (Yet another successful VLSI engineer from CVC’s incubation http://www.cvcblr.com/trng_profiles/CVC_EIC_profile.pdf, asked this:
In OVM/UVM (http://www.cvcblr.com/trng_profiles/Do-it-Right-UVM.pdf) I am little confused about the way components are hooked-up hierarchically. Consider the code below:
In the above constructor ,sometimes I am writing parent =null and some times only parent ,and then passing in super.new();, blindly i am doing this ,but i am not understanding why i am making parent=null and sometime leaving this as parent . what will be the effect of making so. kindly help me.
Answer/Explanation:
As an enhancement to Verilog, System Verilog allows “default values” for function/task (methods) arguments. By doing so it allows the caller of these methods to have the flexibility in number of arguments – a.k.a variable arguments to a function (though not overloading as in VHDL). So in the example above, the new has 2 arguments, both having default values.
If we had: (NOTE: the 2nd argument has NO default value)
then the caller of this function must pass atleast 1 argument.
Summary: if a default value is provided in the function declaration, then while calling the function, that argument becomes “optional”.
Now what is the impact of this in OVM context? Actually quite a bit – it is about the “TB hierarchy” – a.k.a print_topology in OVM/UVM. See few screenshots from Aldec’s Riviera-Pro (http://www.aldec.com/en/products/functional_verification/riviera-pro) 2011.02 version below:
Consider a simple OVM based env with:
env –> agent –> monitor
If monitor is constructed with “parent” set to “this” (i.e. the agent), then we get:
If monitor is constructed with “parent” set to “null” then we get:
It gets little murkier with OVM’s factory playing an interim layer with create – but that’s left as an exercise for the readers
We at CVC feel proud to support customers even long after their short training stay with us, see our list of training sessions at: http://www.cvcblr.com/trainings
Happy SV-ing
TeamCVC