Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Timing closure(时序收敛)是很多人关心的而又似乎不能穷尽的问题。按照一张表做完,就达到努力最大化了:

1)综合阶段:Synplify的retiming可以在综合阶段最大化性能,可以尝试;不需要过约束;
2)时序约束阶段:时序约束仍然是最重要的手段,确保所有时钟都得到合理约束,timing exception该写也要写;仔细检查报告,反复修改;
报告检查主要是定位问题在于 1)时钟skew或者uncertainty么? 2) logic delay么?3)net delay吗? 4) holding timing问题比setup timing问题更难搞,应该优先解决。
3)工具选项方面:
3.1)RTL里面的clock enable, set, 或者reset等信号的MAXFANOUT可以去掉,如果资源并不太紧张的话;
3.2)place
design directives (up to 10),physoptdesign iterations (Aggressive, Alternate directives).
3.3) 重要的clock, placedesign/physoptdesign 对重要的时钟setclockuncertainty 过约束0.500 ns
3.4) 增加timing QoR priority(group
path –weight)
3.5) 如果只有微笑的改动,考虑使用 incremental compilation flow保护过去时序成果
4) Route和Place阶段的努力(这一阶段的努力需要多次尝试取得平衡,因为人工干预很多时候出现A好了B又坏了的问题, 需要反复迭代):
4.1) floorplan:充分了解设计的情况下划分pblock,引导布局工具;
4.2)LOC约束:指定某设计位于FPGA的某位置;
以上两点都需要小心应用,pblock不应该太多(1个或者稍微多点,比如指定某个模块不要跨SLR是个有效的办法)否则会打乱工具的算法;LOC不当会带来巨大的netdelay;

xilinx有个网页,有关于timing closure的一切:https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0006-vivado-design-analysis-and-timing-closure-hub.html

Timing closure(时序收敛)是很多人关心的而又似乎不能穷尽的问题。按照一张表做完,就达到努力最大化了:

1)综合阶段:Synplify的retiming可以在综合阶段最大化性能,可以尝试;不需要过约束;
2)时序约束阶段:时序约束仍然是最重要的手段,确保所有时钟都得到合理约束,timing exception该写也要写;仔细检查报告,反复修改;
报告检查主要是定位问题在于 1)时钟skew或者uncertainty么? 2) logic delay么?3)net delay吗? 4) holding timing问题比setup timing问题更难搞,应该优先解决。
3)工具选项方面:
3.1)RTL里面的clock enable, set, 或者reset等信号的MAXFANOUT可以去掉,如果资源并不太紧张的话;
3.2)place
design directives (up to 10),physoptdesign iterations (Aggressive, Alternate directives).
3.3) 重要的clock, placedesign/physoptdesign 对重要的时钟setclockuncertainty 过约束0.500 ns
3.4) 增加timing QoR priority(group
path –weight)
3.5) 如果只有微笑的改动,考虑使用 incremental compilation flow保护过去时序成果
4) Route和Place阶段的努力(这一阶段的努力需要多次尝试取得平衡,因为人工干预很多时候出现A好了B又坏了的问题, 需要反复迭代):
4.1) floorplan:充分了解设计的情况下划分pblock,引导布局工具;
4.2)LOC约束:指定某设计位于FPGA的某位置;
以上两点都需要小心应用,pblock不应该太多(1个或者稍微多点,比如指定某个模块不要跨SLR是个有效的办法)否则会打乱工具的算法;LOC不当会带来巨大的netdelay;

xilinx有个网页,有关于timing closure的一切:https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0006-vivado-design-analysis-and-timing-closure-hub.htmlxilinx有个网页,有关于timing closure的一切: https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0006-vivado-design-analysis-and-timing-closure-hub.html

Timing closure(时序收敛)是很多人关心的而又似乎不能穷尽的问题。按照一张表做完,就达到努力最大化了:

1)综合阶段:Synplify的retiming可以在综合阶段最大化性能,可以尝试;不需要过约束;
2)时序约束阶段:时序约束仍然是最重要的手段,确保所有时钟都得到合理约束,timing exception该写也要写;仔细检查报告,反复修改;
报告检查主要是定位问题在于 1)时钟skew或者uncertainty么? 2) logic delay么?3)net delay吗? 4) holding timing问题比setup timing问题更难搞,应该优先解决。
3)工具选项方面:
3.1)RTL里面的clock enable, set, 或者reset等信号的MAXFANOUT可以去掉,如果资源并不太紧张的话;
3.2)place
design directives (up to 10),physoptdesign iterations (Aggressive, Alternate directives).
3.3) 重要的clock, placedesign/physoptdesign 对重要的时钟setclockuncertainty 过约束0.500 ns
3.4) 增加timing QoR priority(group
path –weight)
3.5) 如果只有微笑的改动,考虑使用 如果只有微小的改动,考虑使用 incremental compilation flow保护过去时序成果
以上选项根据vivado版本不同改动也很大,供参考,具体参见具体版本的文档。 4) Route和Place阶段的努力(这一阶段的努力需要多次尝试取得平衡,因为人工干预很多时候出现A好了B又坏了的问题, 需要反复迭代):
4.1) floorplan:充分了解设计的情况下划分pblock,引导布局工具;
4.2)LOC约束:指定某设计位于FPGA的某位置;
以上两点都需要小心应用,pblock不应该太多(1个或者稍微多点,比如指定某个模块不要跨SLR是个有效的办法)否则会打乱工具的算法;LOC不当会带来巨大的netdelay;

xilinx有个网页,有关于timing closure的一切: https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0006-vivado-design-analysis-and-timing-closure-hub.html

Timing closure(时序收敛)是很多人关心的而又似乎不能穷尽的问题。按照一张表做完,就达到努力最大化了:

1)综合阶段:Synplify的retiming可以在综合阶段最大化性能,可以尝试;不需要过约束;
2)时序约束阶段:时序约束仍然是最重要的手段,确保所有时钟都得到合理约束,timing exception该写也要写;仔细检查报告,反复修改;
报告检查主要是定位问题在于 1)时钟skew或者uncertainty么? 2) logic delay么?3)net delay吗? 4) holding timing问题比setup timing问题更难搞,应该优先解决。
3)工具选项方面:
3.1)RTL里面的clock enable, set, 或者reset等信号的MAXFANOUT可以去掉,如果资源并不太紧张的话;
3.2)place
design directives (up to 10),physoptdesign iterations (Aggressive, Alternate directives).
3.3) 重要的clock, placedesign/physoptdesign 对重要的时钟setclockuncertainty 过约束0.500 ns
3.4) 增加timing QoR priority(group
path –weight)
3.5) 如果只有微小的改动,考虑使用 incremental compilation flow保护过去时序成果
以上选项根据vivado版本不同改动也很大,供参考,具体参见具体版本的文档。 以上选项根据vivado版本不同改动也很大,供参考,具体参见具体版本的文档。
4) Route和Place阶段的努力(这一阶段的努力需要多次尝试取得平衡,因为人工干预很多时候出现A好了B又坏了的问题, 需要反复迭代):
4.1) floorplan:充分了解设计的情况下划分pblock,引导布局工具;
4.2)LOC约束:指定某设计位于FPGA的某位置;
以上两点都需要小心应用,pblock不应该太多(1个或者稍微多点,比如指定某个模块不要跨SLR是个有效的办法)否则会打乱工具的算法;LOC不当会带来巨大的netdelay;

xilinx有个网页,有关于timing closure的一切: https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0006-vivado-design-analysis-and-timing-closure-hub.html