For the following Code Snippet ::
class env #(BIT_WIDTH = 128) extends uvm_component;
`uvm_component_param_utils(env#(BIT_WIDTH))
...
endclass
typedef int unsigned UINT32 ;
class wrapper #(UINT32 BIT_WIDTH=256) extends uvm_component; // ALWAYS Unsigned Parameter Irrespective of Sign of Final Value !!
`uvm_component_param_utils( wrapper#(BIT_WIDTH) ) // [Q] Type Registration via Signed value OR Unsigned Value ??
env #(BIT_WIDTH) e1; // BIT_WIDTH would be unsigned due to UINT32 . Resolved at elaboration Time
...
function void build_phase(uvm_phase phase);
e1 = env#(BIT_WIDTH)::type_id::create("env1", this);
endfunction
endclass
The macro gets ( `uvm_component_param_utils ) expanded at Compile - Time but the parameter resolution takes place at Elaboration Time
So will the Type Registration take place for wrapper class ( and env handle e1 ) at Elaboration Time where the value of
the parameter is resolved ( via Specialization ) ??