Forum Discussion
22 Replies
- Altera_Forum
Honored Contributor
That's a labour intensive and/or error prone process.
Every time you run a new fit for FPGA1, you need to re-check the tCOs you got. If they're different from the tCOs you've constrained FPGA2 with, then you need to manually check and, if needed, update FPGA2's constrains and run a new fit If instead you specify reasonable constraints for both FPGAs that meet the conditions I wrote before, then you can just trust TQ to fail your design if something goes wrong. And if those constrains are well balanced between the FPGAs, you'll probably never have to change them again. - Altera_Forum
Honored Contributor
--- Quote Start --- That's a labour intensive and/or error prone process. Every time you run a new fit for FPGA1, you need to re-check the tCOs you got. If they're different from the tCOs you've constrained FPGA2 with, then you need to manually check and, if needed, update FPGA2's constrains and run a new fit If instead you specify reasonable constraints for both FPGAs that meet the conditions I wrote before, then you can just trust TQ to fail your design if something goes wrong. And if those constrains are well balanced between the FPGAs, you'll probably never have to change them again. --- Quote End --- You are right in principle but I don't think so practically with tool's behaviour because DDR takes care of alignment. Moreover remember you may set delay figure to some nonzero and then you target some close range of tCOs as 15 ps between data and its clock. I view setting delay to zero is a constraint by itself rather than deconstraint. The second fpga is given a false wider margin of tCO and that is why I suggested +/- 2ns instead of actual +15ps. you can further widen that up if timing can pass Your approach is also worth trying i.e. share the delay figures from start and see if timing passes on both fpgas instead of using my false figures. - Altera_Forum
Honored Contributor
I have used this methodology in the past (that's why I know it) and it does work.
And of course, if you apply this methodology to your example design, you're going to get exactly the same result. The minimum solution the fitter gave you, with a 15 ps tCO, will also meet a 0/7.8125 min/max output delay constraint by a mile. As you may have noticed, I really dislike not having solid time constrains. Independently of weather a unconstrained design meets timing requirements by a mile or I have to manually place bits of logic to meet timing, I _always_ try to have solid constraints at my starting point. - Altera_Forum
Honored Contributor
Thank you for your reply.
And I did the following test. for example, set fp2_tsu 7.8125 set fp2_th 0.0000 set fp1_max_tco [expr 15.625 - $fp2_tsu] set fp1_min_tco [expr $fp2_th] FPGA1: set_output_delay -clock fp1_co -max [expr $fp2_tsu] [get_ports fp1_do[*]] -add_delay set_output_delay -clock fp1_co -min [expr -$fp2_th] [get_ports fp1_do[*]] -add_delay set_output_delay -clock fp1_co -max [expr $fp2_tsu] -clock_fall [get_ports fp1_do[*]] -add_delay set_output_delay -clock fp1_co -min [expr -$fp2_th] -clock_fall [get_ports fp1_do[*]] -add_delay FPGA2: set_input_delay -clock fp2_ci -max [expr $fp1_max_tco] [get_ports {fp2_di[*]}] -add_delay set_input_delay -clock fp2_ci -min [expr $fp1_min_tco] [get_ports {fp2_di[*]}] -add_delay set_input_delay -clock fp2_ci -max [expr $fp1_max_tco] -clock_fall [get_ports {fp2_di[*]}] -add_delay set_input_delay -clock fp2_ci -min [expr $fp1_min_tco] -clock_fall [get_ports {fp2_di[*]}] -add_delay By TQ,the slack of setup timing is about 6ns to 7ns on both FPGA,but the slack of holdup timing is only about 0.5ns on both FPGA. For this case,Need I adjust the value of fp2_th to increase the slack of holdup timing? - Altera_Forum
Honored Contributor
No, that's good.
The hold slacks are, generally, small. - Altera_Forum
Honored Contributor
The detail of the test mentioned above.
FPGA1 : registers to Outputs(Setup) https://www.alteraforum.com/forum/attachment.php?attachmentid=6642 FPGA1 : registers to Outputs(Hold) https://www.alteraforum.com/forum/attachment.php?attachmentid=6643 FPGA2 : Inputs to registers(Setup) https://www.alteraforum.com/forum/attachment.php?attachmentid=6644 FPGA2 : Inputs to registers(Hold) https://www.alteraforum.com/forum/attachment.php?attachmentid=6645 post-sim with connecting the both FPGA in series https://www.alteraforum.com/forum/attachment.php?attachmentid=6647 the test's timing didn't reach the best effect. At this case,the slack of setup had 5ns to 7ns.Wasn't it enough? How to judge whether the timing has reached the best effect by the slack value? - Altera_Forum
Honored Contributor
What effect were you hoping for?
As far as I can see, all the signals there have good setup/hold margins and you should not be getting any violations in post-fit simulation. - Altera_Forum
Honored Contributor
--- Quote Start --- What effect were you hoping for? As far as I can see, all the signals there have good setup/hold margins and you should not be getting any violations in post-fit simulation. --- Quote End --- The timing was OK,But the clock dindn't capture the data at the middle position of the data. And I hope it does.Do you have any way to do that? - Altera_Forum
Honored Contributor
On FPGA2, have the PLL generate a clock with a 90º phase shift and use that to latch the data.
You'll notice your setup slacks will decrease and your hold slacks will increase. PS: Somehow I forgot but when using DDR, you should set I/O constrains for both edges of the clock. This is done by repeating the constraint with -clock_fall -add_delay set_input_delay -max XX -clock clk [get_ports fp1_co] set_input_delay -max XX -clock clk -clock_fall [get_ports fp1_co] -add_delay Same thing for min output delay and input delays. - Altera_Forum
Honored Contributor
--- Quote Start --- On FPGA2, have the PLL generate a clock with a 90º phase shift and use that to latch the data. You'll notice your setup slacks will decrease and your hold slacks will increase. PS: Somehow I forgot but when using DDR, you should set I/O constrains for both edges of the clock. This is done by repeating the constraint with -clock_fall -add_delay set_input_delay -max XX -clock clk [get_ports fp1_co] set_input_delay -max XX -clock clk -clock_fall [get_ports fp1_co] -add_delay Same thing for min output delay and input delays. --- Quote End --- I see.Thanks. And I encountered one case.However I adjusted the value of the tH,not all FPGAs could meet the timing.either FPGA1 or FPGA2 couldn't. Does it mean that the timing cann't be met only through the timing constraint,and the desigh is needed to modify?For example,using a PLL to shift the phase of the output clock.Right?