首页 > 其他分享 >SDC文件常用时序约束语句

SDC文件常用时序约束语句

时间:2022-11-14 23:12:45浏览次数:78  
标签:语句 set get CLKB 时序 delay SDC input 时钟

时钟约束

1. 基本约束

create_clocks -name clk_name -period 10 [get_ports clk_in]

这是最基本的时钟约束语句,为时钟管脚创建一个时钟,综合工具会根据创建的时钟进行布局布线,并给出时序分析报告,若发生时序违例,则需要对设计进行优化修改。

2.时序约束例外

(1)假路径约束

例:set_false_path -from [get_clocks clka] -to [get_clocks clkb]

set_false_path 是指定不希望EDA工具进行分析的路径,可以是与电路正常工作不相关的测试逻辑或静态逻辑,也可以是跨时钟域的异步路径。但是set_false_path 只能指定单方向路径的timing exceptions。如果需要指定双向的timing exceptions,则需要:

set_false_path -from [get_clocks clka] -to [get_clocks clkb]

set_false_path -from [get_clocks clkb] -to [get_clocks clka]

使用set_clock_groups -asynchronous -group clka -group clkb 则更为简洁。同时set_clock_groups可以对一个时钟组的多个时钟进行约束,详细内容见链接:https://zhuanlan.zhihu.com/p/89817877

(2)多周期约束

例:set_multiple_path 

 多周期约束是指两个寄存器之间需要多个时钟才能稳定的路径,一般用于组合逻辑较大的路径。使用下图的方法数据稳定,避免出现亚稳态。

二、同步 IO约束

1. 系统同步约束

系统同步是指源端和目的端的时钟由系统提供,不由某一方提供,即PCB板上的时钟接入到FPGA作为FPGA的时钟使用,同时也接入到与FPGA通信的外部芯片中作为外部芯片的时钟使用。

(1)set_input_delay

XILINK文档对set_input_delay的描述是:The set_input_delay command specifies the input path delay on an input port relative to a clock edge at the interface of the design.

说白了就是指定输入数据和时钟的相位差,以便EDA工具分析是否内部寄存器的建立保持时间是否得到满足。这个相位差可以为正也可以为负,主要取决于数据与时钟到达的先后顺序。数据比时钟后到达,则 input_delay 为正,否则 input_delay 为负。

(2)set_output_delay

XILINK文档对set_output_delay的描述是:The set_output_delay command specifies the output path delay of an output port relative to a clock edge at the interface of the design.

与set_input_delay 类似,set_output_delay是指输出数据到达FPGA外部寄存器 和 时钟到达外部寄存器的相位差,很显然,FPGA内部是无法分析外部寄存器的建立时间是多少的,因此,外部寄存器的建立时间要求 是隐含在 set_output_delay 之中的,即set_output_delay即包含了数据的外部走线延迟,也包含了外部寄存器的建立时间要求。VIVADO进行分析时,只是比较 (数据在FPGA内部延迟 + set_output_delay)是否 大于 一个时钟周期,而不去考虑外部寄存器的建立时间,因为外部寄存器的建立时间已经隐含在set_output_delay之中了。对于EDA工具而言,就是尽量减小数据在FPGA内部的延迟,让时序需求得到满足。对于保持时间的分析也同建立时间类似。

2. 源同步约束

源同步是指数据和时钟都由发送端传送而来,其分析与系统同步的分析类似,set_input_delay也是代表数据与时钟的相位差,但由于数据和时钟都由发送发提供,那么一般情况下数据和时钟的相位差就会非常小,因为都需要经历FPGA内部延迟和外部的走线延迟,那么两者的相位差就会比较小。另外与系统同步约束不同的是,假如FPGA为数据发送方,并提供时钟,那么很显然时钟相位是可控的,在控制输出时钟的相位的基础上,则需要对输出时钟作进一步的约束。例如FPGA设计DDR SDRAM的控制器时,就可以使用PLL生成一个随路时钟,改变时钟的相位后,作为DDR SDRAM的时钟进行输出,以此来满足DDR SDRAM的时序要求。

三、异步IO约束

指定输入管脚 到 输出管脚 之间的组合逻辑 的 最大延时和最小延时

set_max_delay  10.0  -from [get_ports in_port] -to [get_ports out_port]

set_min_delay    5.0   -from [get_ports in_port] -to [get_ports out_port]

关于虚拟时钟:

刚开始非常难以理解虚拟时钟是个什么东西,学习一段时间后,对其有了一定的了解,在此做一个 总结。其实在进行STA时,我们更关心的是时钟与数据的相对关系,例如不存在时钟skew,存在两个时钟同频同相的CLKA与CLKB,CLKA是接入我们FPGA的时钟,CLKB没有接入到任何物理端口。但是进行时序分析,我们完全可以把CLKB当作接入FPGA的时钟,来进行时序分析,这没有任何问题。实际上CLKB都不需要真实的存在,我们只要假设它与CLKA同频同相就可以进行分析了。  

我们创建一个虚拟时钟CLKB作为输入IO的参考时钟。创建CLKA作为FPGA内部使用的时钟,CLKA有对应的物理端口:

create_clock -name CLKA -period 10 [get_ports clka_port]

create_clock -name CLKB -period 10 

set_input_delay -max 5 -clock CLKB [get_ports data_in]

set_input_delay -min  2 -clock CLKB [get_ports data_in]

仅考虑上面的4条约束语句,对于EDA工具而言,CLKA与CLKB都是频率为100m,相位为0的时钟,只是CLKA接到了内部的寄存器当中,而CLKB只是作为输入IO的参考时钟。甚至set_input_delay 中的CLKB改为CLKA 时序分析的结果都不会发生改变。那么为什么还需要虚拟时钟CLKB呢?上文中我们提到,如果不使用虚拟时钟,set_input_delay其实指数据和时钟的相位关系,但是使用了虚拟时钟CLKB,我们就可以使用set_clock_latency等命令对CLKB的相位进行改变,来体现时钟在走线上的延迟。那么在设置set_input_delay 时,就只需考虑数据的延迟,而不需要考虑数据与时钟的相对关系。在很多情况下,实际的约束要比上面的语句复杂得多,如果不使用虚拟时钟,将所有信息的杂糅在set_input_delay之中,进行时序约束与分析时,会非常的麻烦。

标签:语句,set,get,CLKB,时序,delay,SDC,input,时钟
From: https://www.cnblogs.com/amxiang/p/16890859.html

相关文章

  • mysql打印SQL语句
    场景:在业务中,系统有时候mysql语句更新和变动,控制台看不到SQL语句信息,这时候需要把数据库交互的SQL语句打印在控制台;处理此方法之一方案:增加一个sql语句拦截器,拦截打印SQL......
  • 《剑来》语句摘录(七)
    第935章 想人的时候喝酒,想事的时候喝茶。第949章 姜尚真懒洋洋道:“帮人夜中打灯笼,帮人雨中撑伞,到头来只被嫌弃灯......
  • SQLserver 建表语句
    CREATETABLE[dbo].[Dim_Tyc_Supplier_Main_Staff_Info]( [StaffId][nvarchar](255)NOTNULL, [SupplierCode][nvarchar](255)NULL, [Position1][nvarchar](255)NUL......
  • sql操作语句
     1:创建数据库createdatabase数据库名2:createdatabase数据库名称on(name=数据库,filename='数据库路径')3:查看数据库sp_helpdb 数据库名4:表操作use......
  • group by 语句
    1--一、groupby分组统计2--select语句中的groupby子句对列进行分组3--格式:select列名1,列名2,列名3....from表名groupby列名45--......
  • mysql-最常用SQL语句大全
    DDL(DataDefinitionLanguage)数据定义语言一、操作库 --创建库createdatabasedb1;--创建库是否存在,不存在则创建createdatabaseifnotexists/ɪɡˈzɪsts......
  • 分别应用while语句、do-while语句和for语句, 求出100以内所有奇数的和。分析三种循环语
    //#include<stdio.h>//intmain()//{// inta,b,c;// b=1;a=1;c=0;// while(a<100)// {// b=a+b;// printf("%d",a); // c=a+c;// a=a+2;// }// prin......
  • 分支语句/选择语句switch
    switch语句switch(整型表达式){ 语句项;}语句项//是一些case语句//如下:case整型常量表达式;语句;break语句把语句划分为不同部分default语句switch......
  • Oracle 19C学习 - 22. WITH AS 语句
    什么是WITHAS语句WITHAS相当于虚拟视图。WITHAS也叫做分解子查询或者片段子查询。定义一个SQL片段,该片段会被后面的SQL语句用到,可以近似看作一个可用的临时视图。......
  • SQL语句查询优化方法
    建立索引并命中索引,在查询的时候,要尽量让数据库引擎使用索引。加入explain执行计划1.尽量避免使用select*2.尽量避免使用!=3.尽量避免使用or优化方式:可以用unio......