时序问题不同,在PlanAhead软件中处理这些时序问题的解决方案也跟着变化。在PlanAhead设计工具中解决时序问题需要不断实践。该解决方案体现以下操作步骤中:
1. 选择高亮显示失败的时序路径。
2. 右击路径上的某个实例,选择“Highlight With →color of choice”。
3. 在左侧栏中,将底部第二个Mult18释放。右击“Unplace。这将为时序失败的块RAM腾出空间。
4. 点击拖动底部的Mult18向左上移动一个位置。
5. 点击拖动右边的块RAM到底部左侧的自由块RAM位置。
6. 选定失败的时序路径,确认路径看起来是优化的。
7. 选择“Tools→Clear PlacementConstraints”。点击第一个选项中的“Next”。
8. 选择“Unplace All But SelectedInstances”。在余下的向导步骤点击“Next”。
9. 如果希望在“PlanAhead软件外运行实施流程,选择“File →Export Floorplan”。
10. 工具会输出一个新的文件名为“top.ucf”的UCF文件。你可直接使用这一文件,或者将文件中的约束加入到原始UCF中。
11. 另一个选择是在PlanAhead软件内运行实施工具。
选择“Tool→Run ISE Place & Route with ExploreAhead。
ExploreAhead提供了许多很好的功能,包括:自动从器件观察窗导入约束到UCF;简化了从ExploreAhead中运行的布局和时序结果的导入。
图2. PlanAhead 10.1版软件显示出将DSP48和块RAM锁定后的正确路径。
Pblock和底层规划
如果发现布局中有许多时序失败路径,手工布局调整通常无法解决问题。反过来,应当创建区域组。创建区域组(Pblock)的方式之一是在网表窗口中右击模块名字并选择“Draw Pblock”。然后在器件观察窗中希望放置区域组的地方画一个长方形。
工具会创建一个Pblock,同时会显示有关的详细信息。属性窗口会显示Pblock需要的逻辑资源以及画出的长方形区域组中可用的资源。
设计的底层规划是一个需要深度交互的过程。你可能会发现需要反复多次调整区域组才能够达到目标。请记住有时创建的区域组越小越少越好。你并不是总需要将整个模块固定为区域组。集中于时序失败的基本单元,将它们组合为区域组并单独为其进行底层规划。
在此过程中,应当利用Pblock指标(Metrics)来更好地理解有关功能,如区域组中可配置的逻辑块(CLB)的利用情况如何(可以在PlanAhead软件左上窗口中点击Metrics标签来查看可用的指标)。这可帮助确定是否某个特定区域中太拥挤以致妨碍布线。如果确实比较拥挤,可能需要通过平面规划将设计逻辑放得散开一些。
一旦利用PlanAhead软件获得尽可能好的时序分数,最后的任务就是优化代码。PlanAhead设计工具现在支持HDL源文件。根据你导入的源文件不同,你可以从时序问题出发通过交叉探查功能回查到网表或HDL。
利用原理图观察窗(Schematic view),可以察看整个时序路径。只需要从时序结果中选择时序路径并按F4。仔细观察从其他模块扇入扇出的逻辑。由于外部接口要求,工具可能经常需要将模块在芯片上散开部署。如果是这样,可能需要使用流水线。
Block RAM和DSP输出时序是引起时序问题的常见原因。通过在这些模块的输出进行存储,通常可以恢复一纳秒甚至更多的时间。