We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 17188

7.1i CPLD CoolRunner-II - 3-state (open-drain) equations do not appear correct


General Description:

Typical open-drain logic is described in (Xilinx Answer 6717). This open-drain logic can be written as follows:

my_od <= '0' when en = '0' else 'Z';

The Fitter report equation shows:

my_od = en;

This logic appears incorrect.


The CoolRunner-II CPLD supports open-drain outputs.

In an open-drain signal, when the logic is "true", the output is in high-impedance, and relies on an external pull-up resistor to raise the bus High. When the logic is "false", the output is driven Low to keep the external bus Low.

When a signal is configured as an open-drain output, the output logic is high-impedance when "true" and driven Low when "false."

Consequently, the following equation, when implemented as on an open-drain configuration, means that when the "en" signal is "true," the output is high-impedance. When "en" is "false," the output is driven Low.

my_od = en;

To determine if an output is configured as an open-drain signal, see the section of the Fitter report (.rpt) that is labeled "Resources Used by Successfully Mapped Logic" and locate the column labeled "I/O Style." If the output has "OD" in this column, then that output is configured as an open-drain signal and the equation must be interpreted accordingly.

AR# 17188
Date Created 09/03/2007
Last Updated 12/15/2012
Status Active
Type General Article