求助,关于quartusii中的clock network delay!万分感谢!
注:launch时钟为80MHz,latch时钟为280MHz。
跨越时钟域?你要满足这个setup和hold干嘛?不是false path吗?
false path是让时序分析器不分析还是怎么?您再详细说下,谢谢!
实际不存在的路径或对时序没有要的路径一般都设成false path,这样设了后,确实时序工具就不会分析对应的路径了,或者通过时钟分组把两个时钟设成异步时钟组,那样时序工具也不会分析两个时钟间的路径,不过自己要从设计上保证信号能保持足够长时间以被令一个时钟采到
异步时钟域之间的控制信号一般可以采用握手方式处理,以保证设计的稳定性,如果是快时钟采慢时钟的信号的话一般也可以用寄存器打两拍后用,来尽量避免亚稳态(特别是用作状态机的跳转信号时)
跨越时钟的信号是需要良好的设计风格和规范,保证信号的完整采样。所以后端STA不需要分析这些路径的时序。所以可以false path掉这些路径,这样的话时序分析工具就不会分析了。不同公司的软件设置false path的方法都不一样,看看软件的约束方法文档吧。
谢谢回复,我现在主要的问题是,ip核内部有异步时钟域的数据交流,我没有办法修改程序。从时序报告里看,在异步时钟域交互的个别路径有报错的情况,所以只能从时序约束方面避免这种情况的发生。
谢谢回复,您的意思是说在跨时钟域交互的路径里,不用管它是否采错,都不用处理,只要在同一个时钟域不错就行了?是这个意思么?
不是不管是否采样错误,而是设计需要保证不能错误采样。
设计保证的话,后端时序分析就不需要分析这一条路径了。事实上靠STA无法分析跨越时钟的时序关系,因为两个不同时钟时序完全没关系。
谢谢您的回复,在我的例子中,两个时钟是有关系的,80MHz时钟是280MHz时钟经PLL分频后的输出。这样的话,时序分析器就知道这两个时钟之间的关系了。
这点我没有说清楚,不好意思啊!
有一些问题你没有搞清楚:
1. 你没有理解跨越时钟之间信号传输的处理原则。
2. 你没有非常明确静态时序分析的作用。
#1: 跨越时钟域之间的信号传输要通过前端设计保证信号的完整采样,不能有错误采样出现。常用的方法有异步FIFO,握手协议,同步等等。为什么这样,因为后端STA(静态时序分析)工具能够分析和保证所有同步设计的时序不会出错,只要formal保证网表功能正确性,STA保证时序正确性。那么芯片设计基本上没有问题。但是STA分析工具不能很好的分析和处理异步时钟之间的信号处理,因为异步时钟没有确切的时钟相位关系。所以异步时钟之间的信号需要通过设计保证。STA不能保证。既然不能保证,那么STA就会在分析异步时钟域之间的信号时序关系时候报错,那么需要将这些路径false path掉,让STA工具不分析其时序。因为前段设计保证正确性,所以后端分析工具不需要分析。
#2: 上面也大概说了STA的作用。STA是根据你设计的RTL代码综合之后的网表,分析网表之间的同步时序逻辑之内的时序功能。也就是你的设计综合成网表之后(或布局布线后)是否满足你设计的时钟速度或者时序约束要求。
综上所述,为什么要设置false path,是为了让STA时序分析的时候忽略这些不需要分析的路径。包括实际不存在的一些假路径和异步时序路径。因为假路径对芯片功能没影响,所以不用分析,异步时序路径因为STA不能很好的分析,所以不分析。
你明白了吗?
没错,你的设计中80M时钟是通过280M的时钟分频出来的。但是,PLL如何确定他们每个周期之间的相位关系呢?280M的时钟和80M的时钟之间完全没有整数倍的关系,那么经过一定的时间延迟之后,这两个时钟根本没有确定的相位关系。你让STA工具怎么分析这之间的时序路径?
谢谢您的回复,我明白您说的意思了,就是说,最好只用STA分析同步时序,如果有同步时序问题,可以用后端约束来解决。对于异步时钟域来说的话,最好从代码方面解决,比如说异步fifo、握手或者用快速时钟将慢速时钟数据打两排的方法解决。是这个意思吧,呵呵。
PLL时钟输出不一定有固定的相位关系吧,况且两个时钟之间不是简单的2倍或3倍关系,在设计中也很难控制而这的相位关系吧
说得太好了,小编对STA与异步问题理解非常好。 顺带向小编请教一个问题,我最近在自学PT的使用方法,在把sdf与netlist读入后,使用report_timing报路径时序时,clock network delay 一项总是ideal,可是明显这个应该有延时的,我不知道是不是report_timing中哪个参数没有设置对还是怎么回事,小编指导一下。
或者是SDC没有写对?
