XDC

时间:2022-04-28
本文章向大家介绍XDC,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
## 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为固定值