summaryrefslogtreecommitdiffstats
path: root/max80.sdc
blob: 3523685270f22b7f3962cef76495ae295bd558fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- tcl -*-

# Clock constraints

# Note: round up
create_clock -name "clock_48" -period 20.834ns [get_ports {clock_48}]
create_clock -name "rtc_32khz" -period 30517.579ns [get_ports {rtc_32khz}]

# Automatically constrain PLL and other generated clocks
derive_pll_clocks

# Automatically calculate clock uncertainty to jitter and other effects.
derive_clock_uncertainty

# Reset isn't actually a clock, but Quartus thinks it is
create_generated_clock -name rst_n \
    -source [get_nets pll|*clk\[1\]] \
    [get_registers rst_n]

# Reset is asynchronous  with everything as far as we are concerned.
set main_clocks [get_clocks pll|*]
set_clock_groups -asynchronous \
    -group $main_clocks \
    -group [get_clocks rst_n]

# Anything that feeds into a synchronizer is by definition
# asynchronous, but encode it as allowing multicycle of one
# clock, to limit the possible skew (but it is of course not possible
# to eliminate it...)
set synchro_inputs [get_registers *|synchronizer:*|qreg0*] 
set_multicycle_path -from [all_clocks] -to $synchro_inputs \
    -start -setup 2
set_multicycle_path -from [all_clocks] -to $synchro_inputs \
    -start -hold -1

# Don't report signaltap clock problems...
set_false_path -to [get_registers sld_signaltap:*]