作者:张大侠,文章来源:傅里叶的猫微信公众号
Vivado的Implementation主要有三大步:
如果再详细一点:
opt_design
在这一步,Vivado会对综合后的网表文件做一些优化,删除一些无用的或者Vivado认为可以冗余的逻辑,但如果代码中使用了DONT_TOUCH 和MARK_DEBUG,在此步骤就不会被优化掉。
power_opt_design
这一步可以在opt_design后执行,也可以在place_design后执行,该步骤主要是用Xilinx的智能门控时钟方案来减少FPGA设计中的动态功耗,但并不会改变时钟和逻辑的设计。
place_design
在布局时,Vivado的布局器会优先考虑下面三点:
在布局之前,Vivado会进行DRC检查。但比较扯淡的是,如果DRC发现错误,很多情况下,下面的步骤并不会停止,直到生成bit文件时才报错,会让工程师误以为这一步没有问题。
phys_opt_design
该步骤主要进行的优化如下:
route_design
Vivado的router有两种工作模式:
Vivado会优先对全局资源进行布线,比如时钟、复位、I/O和其他专用资源;接下来就是根据时序的紧张程度进行布线,优先布线时序紧张的路径。
这里需要注意的是,在某些手动锁定的布线约束下,router通常无法对某些信号进行最佳布线,这往往是因为时序约束不规范导致的。如果我们仔细观察那些不是最优路径的网络,我们会发现问题经常出在时序约束上。
所以最好的方式就是在routing之前,查看place_design的时序报告,检查时序约束是否正确。所以对于大型工程,采用non-project方式可能更好一些,因为project模式下,我们直接点击Implementation就可以执行完所有的步骤了,往往中间的结果我们也不会很在意。