TimeQuest

本文详细介绍了FPGA设计中时序约束的概念、创建时钟的方法、时钟关系约束、输入/输出延迟约束及Timing exception约束的设置过程。通过实例分析,指导读者如何在设计中正确应用这些约束,确保时序一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

47 TimeQuest的使用


    TimeQuest对设计中各组成部分的归类主要有cellspinsnetsports几种。寄存器,门电路等为cells;设计的输入输出端口为ports;寄存器,门电路等的输入输出引脚为pinsportspins之间的连线为nets


时钟约束 

添加时序约束的第一步就是创建时钟。这是因为后面其他的时许约束都要参考相关的时钟的。

时钟分类:

1.基准时钟,FPGA原是始终,如我的Cyclone 50M;

约束语法结构:(新建sdc文件,然后打开timequest analysis report clock选项)

create_clock  -name  CLK  -period  20 -waveform {0 10} [get_ports {CLK}]

建立             名称         周期    占空比 50%  连接到port CLK

2.虚拟时钟

 

3.多频率时钟

4.生成时钟

 

PLL约束

    当我们使用到PLL的时候,我们需要约束输出时钟:

使用一句:derive_pll_clocks 会看到report clock选项中增加两个或几个时钟;

也可以使用:

create_generated_clock -name CLK25M -source CLK_IN -duty_cycle 50.000 -multiply_by 1 -master_clock {CLK_IN} [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}]

 

 

    在TimeQuestTasks窗口里,选择Report Unconstrained Paths命令,TimeQuest会报告出所有需要下约束但实际并没有约束的情况。在Report里的Unconstrained Path列表下,我们可以查看这个报告。双击Clock Status Summary,就可以在主窗口看到所有时钟的情况;

 

时钟关系约束

当设计中有多个时钟时,时钟之间可能存在三种关系,分别是同步,异步和互斥。

 

 

 

 

语法约束:

set_clock_groups -asynchronous -group {CLK}  -group {CLK1  CLK2}

可以看到两组都是false Path 说明是异步时钟

 

没约束之前,软件默认三个时钟都是同步时钟,所以会分析并报告出三个时钟之间所有

Timing path

 

互斥时钟约束:

set_clock_groups -exlusive -group {CLK} -group {CLK1}

 

接着第四章:http://blog.sina.com.cn/s/blog_72c14a3d01016966.html 

设定输入/输出延迟 约束

 

    在我们对FPGA做时序分析的时候,软件只知道FPGA内部的时序信息,对External Device的情况并不清楚。所以我们必须要添加额外的约束来反映FPGA外部的时序信息。一般情况下,我们用input delay来表示输入信号相对于CLK的延迟。即上图我们用红线表示出来的部分。为了便于讨论,我们把FPGA内部蓝色走线的部分称为chip delay。如果我们能给出input delay的大小,那么软件就可以计算出chip delay的大小,从而保证该条timing path符合设计要求。

 

一般情况下,External Devicespec会给出input delay的大小。我们在做FPGA时序分析的时候,只需要用命令将input delay加入到约束中就可以了:

    set_input_delay -clock clk 1.5 [all_inputs]

    set_input_delay -clock clk -clock_fall 1.5 [get_ports myin*] 

 

同理 output delay

 

set_output_delay -clock clk 0.5 [all_outputs]

set_output_delay -clock clk -clock_fall 0.5 [get_ports myout*]

 

Timing exception约束

 

常用的设定timing exception的方式有两种:false pathMulticycle path。先来讨论false path

False path就是不需要关注其时序的timing path。如果将一条timing path设为false path,软件在做时序分析时,会自动忽略掉这条timing path,不做分析;

set_false_path -from [get_pins {DAC7512|DACSM[2]|clk}] -to [get_ports {DA_DIN}]

但实际上并不是说上面的这条timing path的时序变得没有问题,原来的问题依然存在,甚至会更糟糕,只是我们把它设定为false path了,软件不会再去分析它而已。这就要求对于set_false_path的使用,一定要慎重。只有肯定不用关注某条timing path的时序时,才能使用这个命令,否则软件不会对它做任何的分析,出问题的概率会比较大

 

multicycle path。一般情况下,信号在timing path的起点(亦即第一个时钟沿)发生变化,Terminate会在timing path的终点(亦即第二个时钟沿)采集该信号。这种情况,做时序检查就需要按1T来做,这也是设计中最常见的一种情况。但如果信号在第一个时钟沿发生变化,terminate端在第三个时钟沿时采集该信号,那么就不需要保证信号在第二个时钟沿传递到终点,也就是说,不需要做1T的检查而是做2T的检查,即保证信号在第三个时钟沿之前到达终点。依次类推,可以对timing path进行nTn > 1)的检查,这时统称该timing pathmulticycle path

 

set_multicycle_path -setup 2 -from [get_pins {DAC7512|DACSM[2]|clk}] -to [get_ports {DA_DIN}]

 

set_multicycle_path -hold 1 -from [get_pins {DAC7512|DACSM[2]|clk}] -to [get_ports {DA_DIN}]


<转载>http://blog.sina.com.cn/s/articlelist_1925270077_0_1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值