Handling of basic SystemVerilog
See SystemVerilog-2012 23.11, Binding auxiliary code to scopes or instances. Bind constructs allow you to essentially inject module instances into other modules at run-time.
This transform, as part of the initial annotate process, is meant to
handle ``global'' (our word)
module wheelChecker (...); ... endmodule module beetle (...); ... endmodule module transAm (...); ... endmodule module top ; beetle herbie1(...); beetle herbie2(...); transAm kit(); transAm kat(); // This is a 'global' bind because it affects all beetles // We support this here. bind beetle wheelChecker frontWheelCheck(...); // This is a 'local' bind because it only affects kit and not kat. // We don't support these kinds of binds. bind transAm: kit wheelChecker frontWheelCheck(...); endmodule
Global binds are easier (and perhaps more efficient) to support because we
can add them without having to ``fork'' the definitions of modules. That is,
in the above example, adding the
We actually do support a very limited subset of local binds that may
as well have been global. That is, if some particular module
Ordering notes.