The following error occurs on designs that 1) contain TBUFs located in multiple levels of hierarchy driving the same net, and 2) utilize incremental synthesis (separate NGCs are created for each logical block):
"ERROR:NgdBuild:456 - logical net 'xyz' has both active and tristate drivers"
The problem here is that in Incremental Synthesis, the top module is synthesized without knowing the content of the sub-modules. When the top-level module is synthesized and it has inout ports driving tbufs in lower-level sub-modules, it does not know what the load is, so the incorrect buffer is inferred (in this case, an ibuf).
You can work around this problem in the following ways:
1. Use the "buffer_type" attribute, which allows the user to specify which iobuffer (or none) must be inserted for each port.
2. Edit the "XCF" file to set INCREMENTAL_SYNTHESIS=YES and RESYNTHESIZE=NO on all sub-blocks except the top level. This allows sub-module context analysis to infer correct buffer type IOBUF instead of IBUF during top-level synthesis.
3. Manually remove the "xst" directory from your ISE Project Directory as you use Incremental Synthesis.