Keywords: ISE, BUFT, 3-state, tristate, tri-state, mux, MAP
In Spartan-3/-3E and Virtex-4 designs, why are tristates not replaced by logic?
There are four situations where XST is not able to replace a tristate by logic:
- The tristate is connected to a black box.
- The tristate is connected to the output of a block, and the hierarchy of the block is preserved.
- The tristate is connected to a top-level output.
- The "tristate2logic" constraint is set to "no" on the block where tristates are placed or on the signals to which tristates are connected.
For Virtex-5, XST always replaces tristates with logic as long as its not one of the above conditions. This might cause a multi-source generation that is detected in NGDBuild. XST behavior was changed for Virtex-5 families since MAP no longer replaces tristates with logic.
Note that for Virtex-4 and all Spartan-3 variations, MAP can convert the tristates to logic because it has all the information needed to resolve the entire tristate bus. However, MAP does NOT convert tristates for Virtex-5 (even though XST retains them for the reasons mentioned above). Consequently, you must make the necessary adjustments to the design to make sure the synthesis tool can convert them.