Elimination of
In this transformation, we throw away declarations like
BOZO. This transformation is sort of okay, but we should come up with something better. As it turns out, something as simple as eliminating supplies actually has some subtleties.
A deficiency of our current approach is: what if someone tries to assign to a supply? At best, they'll get some kind of message that says they're trying to assign to a constant, which won't be very informative. Our approach also completely throws away the overwhelming strength of a supply, in case we ever want to try to do anything with that.
We do not throw out any supply0 or supply1 wires which are also inputs or outputs to the module. Instead, we convert them into regular wires! This is crazy. What are the semantics of an input that is a supply? What if someone hooks up something that isn't supply-like to it?
We annotate inputs that we convert in this way with the property VL_SUPPLY_0 or VL_SUPPLY_1, so that some day we might do the most basic kind of checks that you haven't hooked up a bad wire to a supply, and so that the verification person may at least see that this input is supposed to have a particular value.