目录
一、序言
对于FPGA设计新手来说,时序约束是入门路上的重要知识点,时序约束命令众多,使用场景复杂,后面将针对每一条命令的用法以直白易懂得方式带领大家轻松入门。本文将对时序约束中最最最基础的约束命令create_clock(创建时钟)命令进行讲解。
Create Clock它用于定义设计中的主时钟(时钟的源头),告诉工具时钟的频率、周期、占空比等关键信息,是后续时序分析、时序优化的前提,掌握它,才算真正踏入时序约束的大门。
二、时序约束的入口
以Synthesis阶段为例,时序约束可通过Flow Navigator->SYNTHESIS->Run Synthesis->Edit Timing Constraints进入设置窗口,Implement的时序约束入口类似。

Vivado创建工程后,添加设计的源文件,运行完Synthesis,时序约束流程才能获取设计中的端口,连线或单元。未运行完Synthesis时,Edit Timing Constraints是置灰状态的。

也可通过菜单栏“Window->Timing Constraints” 进入。

三、Create Clock命令格式
Create Clock约束命令的语法格式如下
create_clock -period <arg> [-name <arg>] [-waveform <args>] [-add] [-quiet] [-verbose] [<objects>]
进入Create Clock的设置界面,可以查看到相关设置参数

Clock name:是设置时钟名称
Source Objects:设置时钟来源的位置,设置对象可为I/O Port,Cell Pins,Nets

Waveform:Period设置时钟的周期,必须大于0,Rise at/Fall at分别是单个时钟周期中上升沿和下降沿所在的位置,默认情况时50%的占空比,通过这三个参数可以约束出任意波形的时钟。
Add this clock to the existing clock:勾选后,对于如果某个对象已创建时序约束,再次使用create clock创建另一个时钟时,将不会将之前的约束覆盖。
以上设置完后会在Command后直接显示完整的约束命令,如下图在port CLKIN1上创建一个时钟clkin1,周期为6ns,占空比50%的时钟

四、Create Clock使用场景
4.1 不约束create_clock
对于很多新手来说,容易忘记时序约束,如果设计无create_clock,在Report Timing Summary报告中,Intra-clock paths和Inter-Clock Paths都无报告,在Unconstrained Paths中将报告设计中所有未做时序约束的路径

4.2 时钟输入端口
以时钟输入端口为例,时钟信号周期为10ns,占空比为50%,通过输入缓冲器和全局时钟缓冲器BUFG到达寄存器的时钟输入端口。

约束命令: create_clock -name SysClk -period 10 -waveform {0 5} [get_ports sysclk]
4.3 差分信号
差分信号作为主时钟输入时,以一个差分信号输入到PLL的时钟输入端口CLKIN1为例,主时钟必须约束到差分端口的输入正极(sys_clk_clk_p)

约束命令:create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]
4.4 虚拟时钟
虚拟时钟是设计中的一种特殊时钟,它的生成不需要物理引脚,通常用于FPGA芯片的外部接口时序分析,因为,外部器件的时钟不会直接连接到FPGA上,所以可以通过虚拟时钟来模拟外部时钟与FPGA引脚的关系。
虚拟时钟通过create_clock约束生成,约束时不指定Source objects,只需设置名称和波形,下图示例为创建周期为10ns的虚拟时钟
create_clock -period 10.000 -name virtual_clcok -waveform {0.000 5.000}
虚拟时钟通常结合set_input_delay和set_output_delay使用
create_clock -period 10.000 -name virtual_clcok -waveform {0.000 5.000}
set_output_delay -clock [get_clocks virtual_clcok] 1.123 [get_ports ff_clkout0_a]
set_input_delay -clock [get_clocks virtual_clcok] 1.110 [get_ports d]
4.5 -Add参数
下面两条约束create_clk1和create_clk2的约束对象source objects都是clk1,约束内容不同,未勾选Add this clock to the existing clock时,约束如下

查看时序分析结果,只有create_clk2的信号,create_clk1已被覆盖

勾选Add this clock to the existing clock(Add Clock)

时序分析报告中,create_clk1和create_clk2都存在,即同一个位置clk1约束了两个时钟,时序分析中两个时钟独立,相互之间也会进行时序分析

4.6 Create clock快捷写法
处理使用GUI界面配置后自动生成create clock保存的xdc文件中,也可以直接在xdc文件中手写create clock约束,如果使用默认的边沿和占空比,可不指定边沿位置以及对象属性(如ports,nets,pins),软件可自动查找到位置,可简写如下
create_clock -period 10.000 -name clkin1_port CLKIN1
create_clock -period 8.000 -name clkin1_pin CLKIN1_IBUF_inst/I -add
在GUI界面上可看到约束生效

4.7 Create clock约束错误
约束错误时,如约束的对象不存在,软件会自动识别并告警,如下图中的port名为CLKIN11,约束前面也有invalid提示

1628

被折叠的 条评论
为什么被折叠?



