以下描述fpga约束,与asic可能有少量差异。
1)基准时钟create_clock -add 多个晶振驱动一个时钟输入脚
2)虚拟时钟 create_clock
作用:
用于约束input 和output。虚拟时钟,它为外部寄存器提供时钟驱动源,对fpga内部不起作用。它的频率设置和fpga内部基准时钟一样的频率。
写法和create_clock一样,只是没有get_ports。
3)随路时钟约束
随路时钟,因为fpga内部接口使用的时钟和随路时钟,是一个。所以约束不能再使用虚拟时钟。否则,可能导致timing ,launch 和latch 不能正确识别。
4)pll 约束
creat_generated_clocks 和drive_pll_clocks 两种方法
create_generated_clocks -source 可以使用pll输入的pins 或输入基准时钟(使用get_ports clk)。
使用pll的输入pins
约束中可以使用get_registers。设计中存在LVDS or serdes 时,altera推荐使用drive_pll_clocks。
drive_pll_clocks
或 drive_pll_clocks create_based_clocks
5)drive_clocks
自动约束。timequest检测到设计没约束时,会自动约束。但项目完毕后最好不要使用该命令。因为设计中存在多个时钟时,drive_clocks会将多个时钟约束成同一个频率。
6)set_clock_groups -exclusive 或asynchronous
timequest默认所有时钟是相关的,除非说明。
多个时钟源驱动同一个引脚,-exclusive 表示:两个时钟源不会同时有效。