contents.gifindex.gif

Using Istype 'invert' and 'buffer'

The istype 'invert' declaration ensures an inverter between the signal's output pin and its associated flip-flop. The istype 'buffer' declaration ensures no inverter between the flip-flop and pin. These attributes are primarily used to control the behavior of presets, resets, and power-up states for devices with programmable output pin inversion, and to restrict device independent designs to certain classes of parts (only those with inverted outputs, for example).

An output can be declared as type 'invert', and still be implemented with either positive or negative-polarity. This is because many devices feature fixed inverters between the flip-flop outputs and the actual output pins, and programmable-polarity elements located at the terminus of the programmable arrays (before the flip-flops). Devices such as this allow automatic polarity selection to be performed (to reduce product term requirements) without affecting the behavior of flip-flops (as observed on the device outputs).

Note: The XC9500 family does not have inverters between the macrocell flip-flop and the output pin. However, the existance of an inverter is emulated for register behavior when the 'invert' attribute is applied.

Since the 'invert' and 'buffer' attributes are related to flip-flops, they have no meaning and do not apply to signals that are used or declared as combinational (for example, by using the 'COM' attribute), nor do they apply to input signals.

When 'invert' or 'buffer' are used for an output signal, the information is passed to later ABEL programs (such as the PLASim simulator, device fitters, and the Fuseasm fuse mapper) in the OPEN-ABEL file. If the 'invert' attribute is specified, outputs that were described using the dot extensions .D, .T, .S, .R., .J., and .K are complemented in the programmed device.

To see two designs that illustrate this concept, click on "Invert/Buffer Example" below.

Invert/Buffer Example

The .Q dot extension (for feedback specification) is directly affected by the 'invert' and 'buffer' attributes. When 'invert' is specified, the .Q feedback reference is always the complement of the .FB feedback reference. When 'buffer' is specified, .Q and .FB feedback references are synonymous.