赞
踩
对于某些特殊的FPGA工程,可能会存在部分对于布局布线有较为精确要求的模块。此时,将这些逻辑约束在FPGA的特定位置上是一个较好的解决方案。
关于pblock的使用可以参考文章布局约束Pblock设置方法_evlpr8的博客-CSDN博客,这篇写得相当详细。这里说两个我实际使用pblock时遇到的问题。
一. pblock 和 LOC 的优先级问题
由于项目中存在部分需要用BEL和LOC的进行布局约束的逻辑资源,这些资源分布于工程的各个模块中。如果将该部分资源与pblock约束的逻辑资源交叉的部分分离开来,即使是使用GUI而非修改xdc,也会显得十分麻烦。
而在实现工程时,在对pblock的约束语句中,可以将所有二级模块都放到该pblock中,随后对于需要使用BEL和LOC进行约束的逻辑资源,再额外添加相应的约束语句。目前看来BEL和LOC执行的优先级是高于pblock的add_cells_to_pblock命令的。
这一操作会在message里留下warning:[DRC LOCE-1] Pblock ranges contradict LOC constraints on logic assigned to the Pblock: Pblock pblock_1's ranges fail to contain LOC constraints on assigned instance block3/XLXI_1/XLXI_8/XLXI_1/XLXI_1 (and 1516 other instances). 但是实现结果是符合预期的。
二. pblock的IS_SOFT属性
在将模块逻辑资源的布局布线全部约束在给定的pblock区域之后,有时候会发现部分未被约束的逻辑资源被放置到了pblock之外的位置上,即使pblock内部的逻辑资源是充足的。这可能是VIVADO在pblock约束和最小时序违例中进行均衡的结果。通过使用以下语句:
set_property IS_SOFT FALSE [get_pblocks pblock_1]
可以修改pblock的 IS_SOFT 属性,该属性为FALSE时,所有的逻辑资源都不会被放置在pblock之外,除了使用BEL和LOC进行约束的部分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。