I've got 16 bidirectional pins and I want the registers as close as possible to the pad to cut down on any routing delays between the last register and the pad on the output side and the first register and the pad on the input side.The input side is working great using the FAST_INPUT_REGISTER constraint. On the output side, I've got constraints for FAST_OUTPUT_REGISTER and FAST_OUTPUT_ENABLE_REGISTER. The problem is that the bus is 16 bits wide but there is only one output enable bit. I was hoping Quartus II would be able to figure out that it needs to duplicate this register 16 times and place the close to the pads but it isn't happening. Looking in TimeQuest at the placement coordinates, I can see that the data bit registers are right next to the pads but the output enable register is not because it is shared across 16 pads and the skew is very large across the 16 bits of my bus. Anyone have any thoughts on how to resolve this? I tried creating 16 separate output enable registers but the tool just optimized them back to one register, even when I specified constraints to keep the registers. Any thoughts?
What version of Quartus? I've had very good experience with it replicating registers into the OE(with recent versions of Quartus, but I mean within the last 4 years or so, so it's been working for a while). I usually just do I/O timing constraints and it does the replication for me, although Fase OE Register assignments should work too.If you've already replicated it though, that definitely should work. What assignment/constraint did you put on to stop that from occurring? Can you show the syntax? (It can be done in HDL or assignments in the .qsf, so a few ways to go about it...)
I'm using Quartus 9.0sp2.Once I replicated the register manually I used QSF constraints to try to preserve the replicated OE registers: set_instance_assignment -name PRESERVE_REGISTER ON -to *dat_ena* set_instance_assignment -name REMOVE_DUPLICATE_REGISTERS OFF -to *dat_ena* What was weird was that they still got optimized out. However, the point is now moot, I was able to get the tool to replicate the register for me. I changed the logic back to having just a single output enable and it appears to be working correctly now although I'm not immediately sure what I did to fix it. Perhaps I had a code problem somewhere although I could see the path in timequest and there was no logic between the register and the pad but I must have been doing something wrong somewhere.