本文转载自:孤独的单刀的CSDN博客
注:本文由作者授权转发,如需转载请联系作者本人
概述
主要翻自xilinx《WP361,Maintaining Repeatable Results》。
满足设计中的时序要求本身可能很困难,所以生成 100% 可重复的时序设计似乎是不可能的。幸运的是,有一些设计流程概念可以帮助复现可重复的时序结果。
影响最大的四个方面是:
HDL 设计
具有非常高的资源利用率和频率要求的设计要获得可重复的结果是一件最具挑战性的事情,但是它们也是最需要可重复结果的设计。获得可重复结果的第一步是良好的设计实现(RTL)。已经有几篇关于这个主题的论文,但本文有一些重点和一般建议。
HDL 修改
通常,HDL 修改是解决时序问题的最佳方法。如果两条不同的路径需要相同的资源(逻辑组件或布线)来满足时序要求,那么其中一条路径将失败。如果修改 HDL 以使时序更容易满足,那么这将不是问题。
良好的层次边界
遵循良好的分层边界设计有助于逻辑整合,这有助于在进行设计更改时保持可重复的结果。需要遵循的几条规则包括:
逻辑级数
LUT 逻辑级别过多的设计很难获得可重复的结果。通常,问题不是 LUT 延迟,而是 LUT 之间的布线延迟。这在设计的高性能领域极为重要。 以下是太多逻辑级别的一些常见来源:
有关编码最佳实现的更多信息,请参阅 WP231, HDL Coding Practices to Accelerate Design Performance
复位和其他控制信号
复位的选择会影响设计的性能、面积和功耗。上电时电路初始化不需要全局复位,但全局复位会对设计中可使用的资源类型产生重大影响。例如:
有关复位的更多信息,请参阅 WP272, Get Smart About Reset: Think Local, Not Global
有关控制集的更多信息,请参阅 WP309,Targeting and Retargeting Guide for Spartan-6 FPGA
了解 FPGA 资源
了解可用的 FPGA 资源以及何时如何使用它们非常重要。通常,有综合指令来定义应该使用哪些资源。
SRL 的时钟输出比 FF 的时钟输出慢;因此,使用 FF 作为移位寄存器的最后一级是有用的。大多数综合工具会自动执行此操作,但如果涉及移位寄存器的路径存在问题,最好确认最后一级是寄存器。
在 SRL 前面有一个 FF 为布局器提供了更多选择来满足时序要求,从而保持结果。同样,大多数综合工具会自动执行此操作,但如果涉及移位寄存器的路径存在问题,最好确认第一阶段是寄存器。
寄存器 — FPGA 有许多寄存器,使流水线成为提高性能的有用技术。在多个流水线触发器上禁用 SRL 推断非常重要。
有关 Block RAM 的更多信息,请参见 WP231, HDL Coding Practices to Accelerate Design Performance
有关移位寄存器的更多信息,请参见 WP271, Saving Costs with the SRL16E
时钟域问题
必须正确约束跨不相关时钟域的路径。来自同一源时钟(例如 DCM)的时钟由工具自动关联。 PERIOD 约束也可以关联外部时钟。
未在设备内部创建的不相关时钟需要特别考虑。默认情况下,这些时钟不受工具限制。如果有特殊的时序考虑,则需要使用 FROM:TO 约束来正确约束路径。 DATAPATHONLY 关键字告诉工具不要在方程式中包含时钟偏差。
有关详细信息,请参阅中的“异步时钟域”部分UG625, Constraints Guide,或WP257, What Are PERIOD Constraints?
确保不发生竞争条件也很重要。当从一个时钟域跨越到另一个时钟域时,可以使用 FIFO。如果条件不允许,则应仅对一个控制信号进行双同步,并且该控制信号应在接收时钟域中用于接收其他信号。
高扇出信号
通常,高扇出信号可能是设计中的门控因素。尽管大多数综合工具都有扇出控制,但建议在 HDL 中复制这些信号以获得更多可重复的结果。这需要与指令相结合,以确保合成工具不会删除重复项。如果高扇出信号在顶层逻辑中,一种方法是复制该信号,然后用单独的信号驱动每个顶层模块。
如果综合工具扇出控制没有给出期望的结果,并且修改 HDL 不合适,那么在 MAP 中使用寄存器复制以及最大扇出约束通常会比综合做出更好的寄存器复制选择。有关详细信息,请参阅 MAX_FANOUT UG625, Constraints Guide。
信号名称
作为一般调试问题,如果信号名称在跨层次结构时保持不变,则更容易跟踪问题路径。如果名称不断更改,则很难在时序报告和其他调试输出中跟踪。 将信号方向放在所有模块或实体的端口定义上也很有帮助。
综合优化
综合对可重复的结果有很大的影响。如果综合输出的网表不是最优的,那么实现工具就不可能有理想的条件。 可以使用多种综合技术来帮助改进实现结果:
布局
布局规划将组件的放置锁定到特定位置或范围。这减少了放置的可变性,增加了设计的可重复性。更好的性能几乎总是可以通过布局规划和/或使用位置约束来获得。也就是说,糟糕的布局或糟糕的位置限制可能会导致无法满足时序要求。布局在某种程度上是一门艺术,需要对工具和设计有深入的了解。符合时序的实现结果可用作创建良好布局的指南。 有几个不同的布局层级:
引脚选择
如果主要根据电路板要求选择引脚,FPGA 实现工具可能很难保持可重复的结果。以下建议有助于实现可重复性:
区域组布局
区域组布局规划很容易做到,但它经常被误用,造成糟糕的布局规划,产生的问题反而多于解决的问题。 良好布局的一些一般准则包括:
有关区域组布局规划的更多信息,请参阅UG632, PlanAhead User Guide 和UG633, Floorplanning Methodology Guide。
Locating Core Blocks
通常,定位核心组件,例如 BRAM、FIFO、DSP、DCM 和全局时钟资源有助于实现可重复性。最好通过查看良好的布局并使用设计知识来验证这些是处于良好的位置来完成。在定位这些BRAM、FIFO 和 DSP 组件时,应考虑控制信号和数据流向(总线对齐)。在 .map 报告文件中可以找到用于定位现有设计的时钟区域的约束。保持相同的时钟区域可防止布局器更改时钟区域划分,这可能会改变设计的布局规划。使用 reportgen -clock_regions design.ncd 创建报告。
定位整个模块
PlanAhead 软件能够锁定关键模块上的所有布局信息。下次运行时,布局相同,但不保存布线信息。有关 PlanAhead 软件中位置约束的更多信息,请参见 UG632,PlanAhead User Guide.
定位关键路径
如果锁定整个模块是多余的,则可以在 PlanAhead 软件中锁定关键路径。这种技术应该以非常有限的方式使用。如果存在导致大多数问题的特定路径,则最好通过更改 HDL 来解决时序问题。如果这是不可能的,有限使用定位特定时序路径可能会有所帮助。
实现选项
实现工具中的几个选项提高了可重复性。以下是一些有助于保持可重复结果的一般准则:
设计保留
设计保留流程使用分区。这是保证可重复结果的唯一方法。设计保留的主要目标是实现一致的模块性能,以减少时序收敛阶段的时间量。它还要求用户对遵循良好的设计实践做出最大的承诺。
分区保留先前已实现的设计的未更改部分。如果分区的网表未更改,则实现工具使用“复制粘贴”过程来保证保留该分区的实现数据。通过保留实现结果,分区可以在不影响设计的保留部分的情况下实现设计的修改部分。 在 12.1 和未来版本中,PlanAhead 软件和命令行工具支持设计保留。
有关设计保留的更多信息,请参阅 WP362,Repeatable Results with Design Preservation,以及 UG748,Hierarchical Design Methodology Guide.
SmartGuide 技术
SmartGuide 技术在运行实现时使用之前的实现结果作为起点。 SmartGuide 技术的主要目标是减少运行时间。可以移动引导布局和/或布线,以便对设计进行布线或满足时序要求。 SmartGuide 技术最适用于不试图突破 QoR 或利用率限制的设计。
在以前版本的工具中,有一个精确指南和一个杠杆指南。通常,精确的指导方法会导致设计无法路由。如果需要精确保存,则建议的流程是设计保存。杠杆式指南已被 SmartGuide 技术取代。
经常有人问是否应该使用 SmartGuide 技术或分区。答案取决于设计师在设计流程中的位置。在进行小的设计更改时,应在设计周期结束时使用 SmartGuide 技术。使用此流程,很容易看出提议的更改是否适用于设计。分区需要更大的承诺来遵循良好的设计层次结构规则。应在何时决定使用分区的设计保存流程开始组织HDL。此规则的一个例外是当设计已经遵循分区的分层规则时。
有关详细信息,请参阅设计注意事项章节 UG626, Synthesis and Simulation Design Guide。
SmartXplorer
SmartXplorer 和 PlanAhead 软件是有助于实现时序收敛的工具。这两种工具都运行不同的实现选项集,以找到最适合设计的方案。然后可以使用这些结果来查看哪些布局往往具有更好的时序结果。然后可以使用这些布局结果来创建良好的区域组布局规划。不同的结果也可能指向设计问题。如果同一路径在所有运行中都失败,则更改 HDL 以消除时序问题是有益的。
SmartXplorer(Variability Passes)和 PlanAhead 软件的另一个很好的用途是使用不同的成本表运行多个实施。成本表会影响设计的初始布局。通常,不同的起点允许处于满足时序边缘的设计满足时序。运行前十个成本表通常就足够了。一旦找到一个好的成本表,它通常可以用于多次设计迭代。当它不再工作时,用户需要搜索一个新的。 SmartXplorer 还支持 XST 综合的不同选项。应该使用这种方法找到用户设计的最佳综合选项。
有关这两种工具的详细信息,请参阅 WP287, Timing Closure Exploration Tools with SmartXplorer and PlanAhead Tools.
高级实施选项
在设计之初,建议对 MAP 和 PAR 使用默认的尝试。一开始使用过多的高级选项会隐藏时序问题,而修改 HDL 可以最好地解决这个问题。当设备利用率增加时,工具越来越难以收敛到符合时序的解决方案。如果使用默认选项,则可以使用更高工作量的选项来获得设计流程后期的最后几皮秒时序,从而保持时序结果。 有关实施选项的更多信息,请参见 UG628,Command Line Tools User Guide.
管理利用率
LUTS/FFS 利用率低 (<25%) 或 LUTS/FFS 利用率高 (>75%) 的设计可能难以一致地布局和布线。对于利用率高的设计,请查看slice控制集、复位(FPGA 通常不需要同步复位/设置)、逻辑使用率高于预期的模块(在 PlanAhead 中很容易完成),或者是否正在发生 SRL/DSP48 推理。
高利用率的另一面是低利用率。对于所有组件类型的利用率为 25% 或更少的设计,低利用率算法会生效并保持组件紧密放置。但是,如果 I/O 利用率超过 25%,则实施工具可以分散设计,以便将逻辑保持在 I/O 附近。仔细放置 I/O 和使用区域组可以最大限度地减少此问题。
软件版本
尽量在时序收敛阶段使用同一版本的综合软件。因为不同版本的软件可能对时序收敛的算法并不一致。
结论
有很多种方法来实现设计的可重复性。最好的方法是保持合理高效的HDL设计准则,且通过修改HDL的方式来对时序收敛。如果这种方法无法实现可重复性,则可以通过使用综合、实现、布局策略来实现。设计保留使用分区来保证数据流。SmartXplorer是一种使用之前实现结果的技术。如果一个设计的资源使用率非常高且有很高的质量要求,那么最好的方法可能是通过 PlanAhead 或者SmartXplorer软件以设定不同的布局和实现选项来实现单一的扁平化设计。