Hello,
I know that this has been discussed here a few times but I still can't find a definitive answer so here we go again...
What is the best way (with Xilinx flow) to ensure that registers are packed into IOB? In my case I want three registers to be packed into the IOB for a bidirectionnal signal (in, out and oe).
The registers in question are buried in a vhdl module two hierchical levels down. This module is synthesized separately into a ngc file (as most of my other modules) to create an "incremental" flow. I'm not using xst own incremental flow however (i.e. I'm not using a xcf file with -incremental_synthesis flags).
To make matters a little more difficult, I would really like to keep the hierarchy as it makes it much easier to debug with Chipscope.
I read quite a bit about the issue and the standard tricks seem to be:
1- Use the IOB = "true" constraint in the HDL code for the registers 2- Use the flag -iob true for xst (redundant with #1) 3- Use -pr b at the map stage 4- Duplicate the oe registers and use equivalent_register_removal = "NO" to prevent xst from optimizing them away 5- Make sure that the fanout of output registers and fanin of input registers is 1. 6- Run map with the option -ignore_keep_hierarchy to flatten the design. 7- From Xilinx WP231: When using hierarchy: "Place all I/O components including any instantiated I/O buffers, registers, DDR circuitry, SerDes, or delay elements on the top-level of the design. If it is not possible to place them on the top-level, ensure that they are all contained within a single hierarchy."Now I followed the above tricks except #7. For the moment I'd be happy even if I don't keep hierarchy. The best I could acheive so far is that the input registers are in the IOB. The out and oe registers however are not.
Now maybe if I followed trick #7, I could make it work but it seems very ugly to me. I don't want logic on the top level that is related to a sub module two levels down. Furthermore, using the flag ignore_keep_hierarchy at the map stage should produce the same result, shouldn't it?
Any suggestions?
Thank you.
Patrick Dubois