diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/lofar2_unb2c_sdp_station.sdc b/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/lofar2_unb2c_sdp_station.sdc index 6f0327b42261592e1a10b79da8d73447d305b59e..e0e0be917ccdf2f0e4aee33c63c4c25de8746951 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/lofar2_unb2c_sdp_station.sdc +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/quartus/lofar2_unb2c_sdp_station.sdc @@ -97,8 +97,58 @@ set_clock_groups -asynchronous -group [get_clocks {*xcvr_native_a10_0|g_xcvr_nat #-group [get_clocks {inst2|xcvr_4ch_native_phy_inst|xcvr_native_a10_0|g_xcvr_native_insts[?]|rx_pma_clk}] \ #-group [get_clocks {inst2|xcvr_pll_inst|xcvr_fpll_a10_0|tx_bonding_clocks[0]}] +# JESD + +# The link_clk has clk contstraint of 100 MHz, but this seems not sufficient to +# guarantee proper cross clock domain data transfer between the link_clk and +# the 200 MHz frame_clk. Therefore use set_clock_uncertainty to enforce +# constraints on link_clk and frame_clk that are somewhat more than Fmax = 200 +# MHz. To get a reasonable Fmax use Fmax reported for designs where the JESD +# did not show bit errors or sample shifts. +# +# For unb2c e.g. Fmax = 218 MHz for link_clk and Fmax = 244 MHz for frame_clk +# were achieved, so similar as for unb2b. Thererfore choose to use same Fmax +# values as for unb2b, +# +# In Timing Anayser -> Tasks Report Setup Summary -> Start -> Report timing for +# link_clk yields timing diagram. Paste set_clock_uncertainty constraint in +# cli -> Report: Regenerate, to update timing results. +# +# link_clk 100 MHz: +# _________ ____ +# | | | +# ^ v ^ +# ___| |_________| +# 0 5 10 ns +# <-----------* = 5.727 ns for both rise-rise and rise-fall +# <------> = 10 - 5.727 = 4.263 ns --> 234 MHz +# +# frame_clk 200 MHz: +# ____ ____ +# | | | +# ^ v ^ +# ___| |____| +# 0 2.5 5 ns +# <-* = 0.496 ns for both rise-rise and rise-fall +# <------> = 5 - 0.496 = 4.504 ns --> 222 MHz +# +# Idem use same set_clock_uncertainty for fall-fall and fall_rise. Although +# maybe only the rise-rise constraint for link_clk is already sufficient. + +# Increase clock uncertainty to force link_clk to have Fmax > 234MHz +set_clock_uncertainty -rise_from [get_clocks {*|iopll_0|link_clk}] -rise_to [get_clocks {*|iopll_0|link_clk}] 5.727 +set_clock_uncertainty -rise_from [get_clocks {*|iopll_0|link_clk}] -fall_to [get_clocks {*|iopll_0|link_clk}] 5.727 +set_clock_uncertainty -fall_from [get_clocks {*|iopll_0|link_clk}] -rise_to [get_clocks {*|iopll_0|link_clk}] 5.727 +set_clock_uncertainty -fall_from [get_clocks {*|iopll_0|link_clk}] -fall_to [get_clocks {*|iopll_0|link_clk}] 5.727 + +# Increase clock uncertainty to force frame_clk to have Fmax > 222MHz +set_clock_uncertainty -rise_from [get_clocks {*|iopll_0|frame_clk}] -rise_to [get_clocks {*|iopll_0|frame_clk}] 0.496 +set_clock_uncertainty -rise_from [get_clocks {*|iopll_0|frame_clk}] -fall_to [get_clocks {*|iopll_0|frame_clk}] 0.496 +set_clock_uncertainty -fall_from [get_clocks {*|iopll_0|frame_clk}] -rise_to [get_clocks {*|iopll_0|frame_clk}] 0.496 +set_clock_uncertainty -fall_from [get_clocks {*|iopll_0|frame_clk}] -fall_to [get_clocks {*|iopll_0|frame_clk}] 0.496 + # false paths added for the jesd interface as these clocks are independent. -set_false_path -from [get_clocks {*xcvr_fpll_a10_0|outclk2}] -to [get_clocks {*iopll_0|link_clk}] -set_false_path -from [get_clocks {*iopll_0|link_clk}] -to [get_clocks {*xcvr_fpll_a10_0|outclk2}] -set_false_path -from [get_clocks {*xcvr_fpll_a10_0|outclk2}] -to [get_clocks {*iopll_0|frame_clk}] -set_false_path -from [get_clocks {*iopll_0|frame_clk}] -to [get_clocks {*xcvr_fpll_a10_0|outclk2}] +#set_false_path -from [get_clocks {*xcvr_fpll_a10_0|outclk2}] -to [get_clocks {*iopll_0|link_clk}] +#set_false_path -from [get_clocks {*iopll_0|link_clk}] -to [get_clocks {*xcvr_fpll_a10_0|outclk2}] +#set_false_path -from [get_clocks {*xcvr_fpll_a10_0|outclk2}] -to [get_clocks {*iopll_0|frame_clk}] +#set_false_path -from [get_clocks {*iopll_0|frame_clk}] -to [get_clocks {*xcvr_fpll_a10_0|outclk2}]