## Timing Assertions Section
# Primary clocks
# Virtual clocks
# Generated clocks
# Clock Groups
# Bus Skew constraints
# Input and output delay constraints
## Timing Exceptions Section
# False Paths
# Max Delay / Min Delay
# Multicycle Paths
# Case Analysis
# Disable Timing
## Physical Constraints Section
# located anywhere in the file, preferably before or after the timing constraints or stored in a separate constraint file
1. 基本时钟
1) 一个输入端口
2) 一个吉比特收发器输出引脚
2. 虚拟时钟
指的是没有物理连接设计中任何网表元器件的时钟
1) 外部设备IO参考时钟设计中的一个时钟
2) FPGA IO路径和一个内部生成时钟相关,但是不能正确地对该生成时钟进行定时。
3) 设计者只想为IO延迟约束相关的时钟致命不同的抖动和延迟,但是不修改内部时钟特性
3. 生成时钟
1) 通过命令create_generated_clock定义用户所需要的时钟
2) 将其连接到一个网表对象,最好是时钟树根引脚
Create_clock –name clkin –period 10 [get_ports clkin]
Create_generated_clock –name clkdiv2 –source [get_pins REGA/C] –divide_by 2 \
[get_pins REGA/Q] 或
Create_generated_clock –name clkdiv2 –source [get_ports clkin] –divide_by 2 \
[get_pins REGA/Q]
4. 时钟组
Set_clock_groups 命令禁止在所标识的时钟组之间,以及在一个时钟组内的时钟进行时序分析。
5. IO延迟约束
输入延迟
1) 最小和最大输入延迟命令选项
最小延迟分析(保持/去除)
最大延迟分析(建立/恢复)
Create_clock –name sysclk –period 10 [get_ports clk0]
Set_input_delay –clock sysclk –max 4 [get_clock DIN]
Set_input_delay –clock sysclk –min 1 [get_clock DIN]
2) 时钟下降输入延迟命令选项
-clock_fall
3) 添加输入延迟命令选项 –add_delay
1) 存在一个最大(最小)输入延迟约束
2) 设计者想在相同端口上添加第二个最大(最小)输入延迟
输出延迟
Create_clock –name clk_ddr –period 6 [get_ports DDR_CLK_IN]
Set_output_delay –clock clk_ddr –max 2.1 [get_ports DDR_DOUT]
Set_output_delay –clock clk_ddr –min 0.9 [get_ports DDR_DOUT]
Set_output_delay –clock clk_ddr –max 1.9 [get_ports DDR_DOUT]\
-clock_fall –add_delay
Set_output_delay –clock clk_ddr –min 1.1 [get_ports DDR_DOUT]\
-clock_fall –add_delay
6. 时序例外
多周期路径
命令 | 功能 |
---|---|
Set_multicycle_path | 指明将数据从路径开始传播到路径结束时,所需要的时钟周期数 |
Set_false_path | 指明在设计中不进行分析的路径 |
Set_max_delaySet_min_delay | 设置最小和最大路径延迟值,这将使用用户指定的最大和最小延迟值覆盖默认的建立保持约束 |
Set_case_analysis | 使用逻辑常熟或者在端口/引脚的逻辑跳变执行时序分析,以限制通过设计的信号传播 |
源时钟(-start),发送沿移动 | 目的时钟(-end),接受沿移动 | |
---|---|---|
建立 | 向后 | 向前(默认) |
保持 | 向前(默认) | 向后 |
定义带有建立因子N的多周期路径
情景 | 多周期约束 |
---|---|
相同时钟域或同步时钟域 | Set_multicycle_path N –setup –from CLK1 –to CLK2Set_multicycle_path N-1 –hold –from CLK1 –to CLK2 |
从慢到快时钟的同步时钟域 | Set_multicycle_path N –setup –from CLK1 to CLK2Set_multicycle_path N-1 –hold –end –from CLK1 to CLK2 |
从快到慢时钟的同步时钟域 | Set_multicycle_path N –setup –start –from CLK1 to CLK2Set_multicycle_path N-1 –hold –from CLK1 to CLK2 |
伪路径
1) 没有起作用
2) 不需要确定时序
A. 跨时钟域,其中添加了2倍频合成器逻辑
B. 在上电时,可能被写一次的寄存器
C. 复位或者测试逻辑
D. 当可应用的时候,忽略一个分布式RAM写和异步读时钟之间的路径
去除从reset端口到所有寄存器的时序路径
Set_false_path –from [get_ports reset] to [all_registers]
禁止两个异步时钟域之间的时序路径
Set_false_path –from [get_clocks CLKA] to [get_clocks CLKB]
禁止两个时钟域任何方向的所有路径
Set_false_path –from [get_clocks CLKA] to [get_clocks CLKB]
Set_false_path –from [get_clocks CLKB] to [get_clocks CLKA]
从RAM前的写寄存器到RAM后接收读时钟的寄存器之间定义假路径
Set_false_path –from [get_cells <wirte_registers>] –to \
[get_cells <read_registers>]
从RAM写引脚开始定义假路径
Set_false_path –from [get_cells –hier –filter
REF_NAME=~RAM*&&IS_SEQUENTIAL&&NAME=~
PATTERN_FOR_DISTRIBUTED_RAMS>}]
最大/最小延迟
1) 使用最大延迟约束覆盖一个路径上的默认建立要求
2) 使用最小延迟约束覆盖默认保持要求
Case分析
在一些设计中,某些信号在特定模式下是一个常数。
set_case_analysis <value><pins or ports objects>
value 的值可以是0、1、rise、rising、fall、falling
例子:
Create_clock –name clk_1 –period 10 [get_pins clock_sel/I0]
Create_clock –name clk_2 –period 5 [get_pins clock_sel/I1]
Set_case_analysis 1 [get_pins clock_sel/S] //选择信号S为固定值