零基础轻松入门时序约束命令一:Create Clock

目录

一、序言

二、时序约束的入口

三、Create Clock命令格式

四、Create Clock使用场景

4.1 不约束create_clock

4.2 时钟输入端口

4.3 差分信号

4.4 虚拟时钟

4.5 -Add参数

4.6 Create clock快捷写法

4.7 Create clock约束错误


一、序言

对于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提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA芯中的小蚂蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值