Altera_Forum
Honored Contributor
14 years agoConstraining external ripple clocks correctly on external pin (pad_io)
Regarding constraining of external clocks generated by registers.
I have now used several days trying to make correct constrains for my external clock generated by a DDR register driven by a PLL clock. The external clock must have the the correct phase compared to the data signals to make a proper analyse and make me able to close timing as my design is tight, because my databus is really bidir. But bidir is not the issue here, I just pretend the ssync_tx_data are my address bus to simplify the case. So my design is the same as shown in Wiki Source_Synchronous_Timing.pdf case 3 page 15 published 30 aug 2011. But the Timequest generate clock does NOT have the correct phase compared to the Timequest datasheet report nor compared to the timing shown in a gate level simulation? The difference is quite big somethink like 1ns for fast and about 3nS for slow. To me it looks like the delay from the ddr_tx_clk input clock to the pin (pad_io is not included)? However for the ssync_tx_data the delay all the way to the pad_io is included! It is possible to extract the missing delay manually and add it as an offset to generated clock statement, but the delay differs for slow and fast so adding it manually do not reflect the real world! The proper slow and fast delays must be included by TQ to be correct for both cases. The constrains in the user guides are: create_clock -period 6.25 ns -name fpga_clk [get_ports fpga_clk] derive_pll_clocks create_generated_clock -source [get_pins {inst1|altpll_component|auto_generated|pll1|clk[1]}] -name ssync_tx_clk_ext [get_ports {ssync_tx_clk}] # External device delays # setup requirement is 1.4 and hold is 0.4ns set_output_delay -clock { ssync_tx_clk } -min [expr 0.4 + 0.150 - 0.05] [get_ports {ssync_tx_data[*] ] set_output_delay -clock { ssync_tx_clk } -max [expr 1.4 + 0.150 - 0.05] [get_ports {ssync_tx_data[*] ] -add_delay What I see is that the phase reported by TQ clocks and used together with my set_input_delay and set_output_delays differs from the actual real world timing (gate level simulation)! I believe the generated clock named ssync_tx_clk_ext shows the timing on the input of the DDR register and NOT the pin=pad_io ssync_tx_clk! For the data signals outputs timing in TQ seems to fit well with datasheet report tco and gate level timing, but not for the clock. We need to have a generated clock that includes the ddr_tx_clk input clock to pad_io delay which differs a lot for slow and fast silicium to do a proper analyze. Is there a way to generate the clock at the actual pin (pad_io)? Or have I misunderstood somethink here? Any help is appreciated :confused: