AR# 857: Synopsys: XC5200: clock inversion is implemented in a function generator, not at the flip-flop.
Synopsys: XC5200: clock inversion is implemented in a function generator, not at the flip-flop.
When Synopsys performs mapping for 5200 designs, the "replace_fpga" command is not required. Instead of writing to gates, the compiler writes EQN records in the .sxnf file to map combinatorial logic to function generators. This means that simple inversions or events on the negative clock-edge in your code result not in an INV record in the .sxnf, but rather in an EQN record with the equation's being equal to ~I0.
Since the Xilinx tools do not see this as an absorbable inverter, it is placed in a separate function generator (just as the EQN statement mandates). Thus the clock inversion for flip-flops triggered on the negative edge of the clock takes place in a separate Logic Cell, rather than directly at the flip-flop's clock pin.
Either of the solutions below will work:
1. After compiling in Synopsys, run the command "replace_fpga -force". This will put everything in terms of gates. You will lose all of Synopsys' mapping directives, leaving all mapping up to the Xilinx core tools. Do this before writing out the .sxnf file.
2. Manually edit the .xff file, deleting the offending EQN component(s) and modifying the appropriate PIN records to include an INV attribute. This is really only a solution for specific cases such as an inverted GSR pin to STARTUP or a negative edge clock.
Below is an example of a falling-edge-clocked flip-flop correctly written in XNF format: SYM, out_reg/$1I13, DFF, HIERG=2, LIBVER=2.0.0 PIN, C, I, n34, , INV PIN, D, I, n33 PIN, Q, O, n32