max80.sdc 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # -*- tcl -*-
  2. # Clock constraints
  3. # Note: round up
  4. create_clock -name "clock_48" -period 20.834ns [get_ports {clock_48}]
  5. create_clock -name "rtc_32khz" -period 30517.579ns [get_ports {rtc_32khz}]
  6. # Automatically constrain PLL and other generated clocks
  7. derive_pll_clocks
  8. # Automatically calculate clock uncertainty to jitter and other effects.
  9. derive_clock_uncertainty
  10. # Reset isn't actually a clock, but Quartus thinks it is
  11. create_generated_clock -name rst_n \
  12. -source [get_nets pll|*clk\[1\]] \
  13. [get_registers rst_n]
  14. # Reset is asynchronous with everything as far as we are concerned.
  15. set main_clocks [get_clocks pll|*]
  16. set_clock_groups -asynchronous \
  17. -group $main_clocks \
  18. -group [get_clocks rst_n]
  19. set sdram_clk [get_clocks pll|*|clk\[0\]]
  20. set cpu_clk [get_clocks pll|*|clk\[1\]]
  21. set vid_clk [get_clocks pll|*|clk\[2\]]
  22. # The SDRAM ack signal is delayed by a minimum of 1 SDRAM plus one CPU
  23. # cycle by the sdram_mem_ready logic, so make it a multicycle path.
  24. #set_multicycle_path -from [get_registers sdram:sdram|rd1*] \
  25. # -to [get_registers picorv32:cpu|*] -start -setup 3
  26. #set_multicycle_path -from [get_registers sdram:sdram|rd1*] \
  27. # -to [get_registers picorv32:cpu|*] -start -hold 2
  28. # Anything that feeds into a synchronizer is by definition
  29. # asynchronous, but encode it as allowing multicycle of one
  30. # clock, to limit the possible skew (but it is of course not possible
  31. # to eliminate it...)
  32. set synchro_inputs [get_registers *|synchronizer:*|qreg0*]
  33. set_multicycle_path -from [all_clocks] -to $synchro_inputs \
  34. -start -setup 2
  35. set_multicycle_path -from [all_clocks] -to $synchro_inputs \
  36. -start -hold 1
  37. # Don't report signaltap clock problems...
  38. set_false_path -to [get_registers sld_signaltap:*]