时序约束实操

描述

易灵思提供了相关时序约束的PPT,内容非常全面,但是我们还是发现很多客户在使用Efinity时,时序约束存在很多问题。

添加约束

添加约束的目的是为了告诉FPGA你的设计指标及运行情况。在上面的生成约束之后,在Result àxx.sdc中提供约束参考(请注意该文件不能直接添加到工程中,需要热复制到别的指定目录或者新建自己的SDC文件添加到工程)。

pll

编译完成之后可以查看时序报告,也可以通过routing àxx.timing.rpt来查看路径详细延时信息,如果想查看更可以通过指令来打印或者通过print_critical_path来控制打印的路径数量 。

时钟约束 

(1)通过IO输入的gclk。

如下图,因为时钟是通过外部IO输入的,所以FPGA并不知道这个时钟频率是多少。打开.pt.sdc可以看到提供相关约束参考。

pll

我们只需要补充相关的时钟周期即可以使用。

pll

比如,我们要约束adc_clk_in为100M:

 

create_clock -period 10.000 [get_ports {adc_clk_in}]

 

(2)PLL的输出的时钟约束 。

因为PLL的输入输出频率都是设置好的,所以软件可以检测到。如下图,输入输出时钟频率都是30MHz.

pll

在pt.sdc文件中会提供相应的约束 。

 

create_clock -period 33.3333 pll_inst1_CLKOUT0

 

在时钟约束完成之后,可以查看Routing -->.timing.rpt文件中所有的时钟是否都进行了完整的约束 。

pll

IO约束

首先我们要了解易灵思的架构是core和interface分开的,相对于core,interface内部的GPIO,LVDS,JTAG及其它都是外设。所以所有针对于input_delay和outpu_delay的约束都是针对于interface的。至于FPGA对于我们平时理解的外设,比如FPGA外部连接一片AD/DA,这种是没有办法约束的。

pll

在pt.sdc文件中可以看到关于set_input_delay和set_output_delay的约束。可以看到有些约束是已经屏蔽,那是因为添加的IO没有打开寄存器。
 

pll

如下图,易灵思建议把所有IO都添加上IO寄存器。

pll

有的客户会有疑问,clock的PIN Name是什么?其实就是与core内连接的寄存器用什么时钟,interface中就用什么时钟。

pll

(3)跨时钟域约束 

在保证程序上对跨时钟域做了处理之后,约束上要对跨时钟进行约束 。跨时钟约束的语法是set_clock_groups或者set_false_path,关于用于网上很多,可以自行查找。

 

set_clock_groups -asynchronous -group {jtag_inst1_TCK jtag_inst1_DRCK}

 

在所有时钟约束完成之后要保证时序报告的slack都为正值。

pll

编译完成之后可以查看时序报告,也可以通过routing àxx.timing.rpt来查看路径详细延时信息

如果时序上还有违例,在result--> Routing-->timing.rpt文件中查看具体的路径。根据路径来解决具体的时序问题。

pll

如果想查看更可以通过指令来打印或者通过print_critical_path来控制打印的路径数量 。

pll

也可以通过report_timing来报告具体的时序路径及数量。

pll

先打开Tcl Command Console,如果Show/Hide Tcl command Console是灰色的,要先点击Load Place and Route Data加载布局和布线的数据。

pll

打开Tcl command consolel,使用report_timing命令来查看需要的路径。

pll

具体report_timing的用法,请参考EfinityTiming Closure UserGuide.pdf。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分