As an example, suppose we want to construct a binary counter, by designing a counter ``bit'', and then chaining the bits together to form a counter. In SMV, the counter bit might be declared as follows:
MODULE counter_bit(carry_in, clear, bit_out, carry_out) { INPUT carry_in, clear : boolean; OUTPUT bit_out, carry_out : boolean; next(bit_out) := clear ? 0 : (carry_in ^ bit_out); carry_out := carry_in & bit_out; }
The ``INPUT'' and ``OUTPUT'' declarations are specialized forms of type declarations, which also give the direction of signals being declared. These declarations must occur before any ordinary type declarations or assignments.