应用PlanAhead 进行布局规划

 应用PlanAhead 进行布局规划
FloorPlanning 工具是PlanAhead 的一个组成部分,用它可以对FPGA 设计进行分析,首先找到设计中的时序问题或者拥塞的问题,然后再通过使用PloorPlanning 约束,以指导实现工具产生更优的结果。例如,使用LOC 约束可以将Pblock(Phisical Block Region)中的逻辑对象锁定在一个位置或者锁定在一个区域。

为了有效地使用FloorPlanning,必须对Xilinx 的器件结构有较深入的了解,如果不熟悉器件结构,那么通过FloorPlanning 工具生成的布局约束,非但不会提高设计性能,很多情况下还会使系统性能下降。用FloorPlanning 进行布局规划,没有一种现成的、“正确”的规划方案,而是需要经过设计者多次尝试,从而找到合理的规划方案。

1. 指定关键逻辑到Pblock 中。

此处我们继续使用10.5 节所用实例,从图10-68 时序分析结果可以看到,此设计有多处时序违例,主要是usbEngine0 和usbEngine1 模块。其实,可以用多种方式使此处时序收敛,我们这里只是介绍一种用FloorPlanning 进行时序收敛的方法。在【Netlist】窗口选择usbEngine0 模块,在其右键菜单中选择【Draw Pblock】,用鼠标左键在【Device】窗口画一个矩形框,并可以通过鼠标拖拉调整矩形框大小,使其可以容纳所有usbEngine0 所需资源。如图10-75 所示。用同样的方法创建usbEngine1 的Pblock。

应用PlanAhead 进行布局规划_第1张图片

图10-75 创建Pblock

2. 手动添加LOC 位置约束。

运行Ctrl+F,打开图10-76 查找对话框,按图中所示设置查找条件,单击【OK】开始查找。图10-77 为查找结果。
在图10-78 所示的【Device】窗口,单击工具栏的(Create Site Constraint Mode)图标,进入创建位置约束模式。在图10-77 的查找结果窗口选择一个BRAM16,用鼠标拖放到【Device】窗口,找到一个BRAM 资源并释放,这样就为设计中的BRAM16 指定了一个物理位置。

应用PlanAhead 进行布局规划_第2张图片

图10-76 查找条件设置

应用PlanAhead 进行布局规划_第3张图片

图10-77 查找结果

应用PlanAhead 进行布局规划_第4张图片

图10-78 BRAM 位置约束

用这种方法可以指定设计中BUFG、DCM、Port、PPC、MGT 等元素的位置。这里创建的位置约束,是一个固定的约束,会被写入UCF 文件中,它与从ISE 导出的约束有所不同,ISE 导出的约束是不固定的,在【Device】用不同的颜色标识。

建立LOC 约束,除了这里介绍的方法,还可以单击(Create BEL Constraint Mode)按钮,创建基于Slice 的位置约束。

单击(Assign Instance Mode)按钮,创建例化元件的位置约束。
单击【Edit】→【Undo】或者按钮,可以取消位置约束的操作。

3. 查看FloorPlan 的实现结果。

在PlanAhead 主界面,切换到【Floorplan – fp_usb_timing】视图,如图10-79 所示,单击【Design Runs】标签,可以看到impl_2 的实现结果中Timing Score 为0,说明此实现已满足到时序要求。

应用PlanAhead 进行布局规划_第5张图片

图10-79 【Floorplan – fp_usb_timing】视图

4. 锁定关键逻辑。
FPGA 设计中,逻辑模块的性能经常是不确定的,多次实现结果可能出现较大的差别,为了保证实现的一致性,一个方法就是锁定关键逻辑的位置,例如BRAM 和DSP 资源,这些资源的布局经常会对设计性能产生比较大的影响。我们可以先运行布局布线产生一个满足时序的实现结果,再将这个结果中的BRAM 和DSP 的位置锁定,作为约束指导下次布局布线的参考。

下面介绍锁定BRAM 和DSP 位置。

在PlanAhead 主界面,切换到【Floorplan – fp_usb_timing】视图,单击【Design Runs】标签,可以看到impl_2实现结果中Timing Score 为0,说明此实现已满足到时序要求,如图10-79 所示,双击打开此实现结果。运行【Edit】→【Find】,按照图10-80 所示设置查找条件,找到设计中所有的BRAM和DSP 资源。

查找结束后,在【Find Results】视图中任意选择一个元素,按Ctrl+A 键,选择所有BRAM 和DSP 元素,在右键菜单中选择【Fix Instances】,这样就锁定了布局布线后的BRAM 和DSP 位置。这个位置约束会被写入UCF 文件,作为下次实现的指导。

5. 保留与usbEngine 相关的位置约束,删除其余位置约束。

在【Physical Hierarchy】视图中选择usbEngine Pblocks,在右键菜单中单击【SelectPrimitives】,如图10-81 所示。

应用PlanAhead 进行布局规划_第6张图片

图10-80 查找

应用PlanAhead 进行布局规划_第7张图片

图10-81 选择usbEngine关键逻辑原语

运行【Tools】→【Clear Placement Constraints】,弹出图10-82对话框,选择将要清除的布局类型为【Instance placement】。

单击【Next】按钮,弹出图10-83所示对话框,选择将要清除的布局对象,这里选择【Unplace all except for 8923 selected instance】。

应用PlanAhead 进行布局规划_第8张图片

图10-82 选择布局类型

应用PlanAhead 进行布局规划_第9张图片

图10-83 【Clear Placement Constraints】对话框

单击【Next】按钮,弹出图10-84所示对话框,选择布局对象中哪些逻辑元素可以被清除,这里保留默认值。

应用PlanAhead 进行布局规划_第10张图片

图10-84 清除布局约束的实例类型

应用PlanAhead 进行布局规划_第11张图片

图10-85 仅保留usbEngine关键逻辑布局结果

单击【Next】按钮,在后续出现的对话框中,保留默认选项,在最后一个对话框中单击【Finish】,就会清除关键逻辑usbEngine部分的所有布局布线。

新的布局约束结果如图10-85所示。在【Device】窗口的右键菜单中选择【Fix instances】,usbEngine关键逻辑的布局约束被写入UCF文件,指导ISE布局布线。

需要注意的是,布局约束仅锁定了逻辑资源的位置,不会锁定布线,在实现结果中,布线结果仍会有差异。

你可能感兴趣的:(Verilog/FPGA,实用总结区)