最近在Kintex 7上开发新的项目,骤然发现曾经在Virtex 5和Spartan 6上移植过来的成熟算法,综合布线时出现Map时间非常漫长的现象。
这个漫长不是一般的长,打个比方,以前在Virtex 5下同一个算法完成全部综合布线仅用10分钟,在Kintex 7下却耗时长达7~8个小时。从console窗看,常常卡在7.8 或8.8 global placement这一步,后面有很多..................,不知什么时候是个头,常常电脑跑通宵,第二天早上看结果,但这样几乎一天只能跑两次,太可怕了。
没法儿了,算法代码上没有可改动的可能(很成熟了,且不是他的问题),只能从属性设置上入手,进行一些修改。调整之前都是默认设置,调整后结果还是很明显的,时间大大缩短了,这才松了一口气。
可尝试的方法有几种,下面慢慢道来:
1、effort level
在map上点右键属性Process Properties,advance高级设置第一条就是这个,这个默认是high,这种情况下完成耗时是7~8个钟头。这里可以修改成standard,实际测试情况,时序稳定性没有出现影响,综合布线时间缩短到了2小时。已经有很大进步了,不过还能更快。
2、smart guide
这个叫做“增量编译”,也就是在以前综合布线的基础上,ISE在布线时只新增加或修改的部分,这样时间势必减少。(可以按C/C++语言的增量编译原理来理解)
这个设置在你的顶层文件(比如top.v)上点“右键”,菜单栏中会有“Smart Guide ...”,单击,出来的对话框有一个勾选框,勾上即可。
详细介绍可参考这篇博客
http://www.eetop.cn/blog/html/01/7901-46470.html
设置完后,第一次的综合布线还是要很长时间的,但第二次起,神奇的事情就发生了,以后小改代码,整个布线过程只需要10分钟!!!这就是福音所在
3、其他
还是Process Properties属性中的一些修改,这里原理我也暂时说不清,尝试中发现好使就记录下来了,供大家借鉴试一试。
有一次,很简单的程序调试中,加了一个divider的IP核,map耗时突然从原来的几分钟,增长到很长(具体多长我没有等待了,果断终止了,总之是趴着睡了一个大觉醒来还在global placement 。。。)
Process Properties-Map Properties
Register Duplication 由off改成on
Register Ordering 由4改成8
Enable Multi-Treading 由off改成2
改完之后,又恢复到10分钟左右完成布线了,欣喜!
先写这么多,希望能对有过同样苦恼的同仁有帮助
2016年8月补充
经过一年的尝试,百试不爽,此修改不会引起什么额外时序问题(当然代码风格一定要好),事半功倍,工作效率大大提高。
补充截图以便大家配置: