XST has a problem mapping I/O FF and RESET inside IOB in certain cases.
XST has difficulties knowing that RESET signal of FFs should be kept together when doing the fanout control.
You can work around this issue by doing the following:
- Set local max_fanout to the reset signal in "io_module.vhd" to avoid fanout control on it.
This can be done in the XCF as shown:
BEGIN MODEL "<module_name>" NET "<reset_net_name> = "500"; END;
If it is a low polarity reset, it has to be inverted to be a high polarity reset. Then, XST will correctly push the register into the IOB.
Xiilinx is currently investigating this issue.