满足设计的时序要求本身已非易事,而要实现某项设计的整体时序具有完全可重复性有时候却是不可能的任务。幸运的是,设计人员可以借助有助于实现可重复时序结果的设计流程概念。影响最大的四个方面分别是 HDL 设计实践、综合优化、平面布局和实施方案。 就获得可重复结果而言,资源利用和频率要求都很高的设计是最大的挑战。它们也是可重复结果流程需求最高的设计。得到可重复结果的第一步是在 HDL设计阶段运用设计合理的实践。遵循出色的分层边界实践有助于保持逻辑整体性,而这在设计变更时有助于保持可重复结果。一条不错的规则就是把那些需要整体优化、实施和验证的逻辑放在同一层级。另外需要记录模块的输入和输出。这样就可以把时序路径保持在模块内部,从而避免模块改变时引起相互影响。最后,把所有需要放入更大 FPGA资源 (如 Block RAM 或 DSP)的逻辑全部设置在相同层级。 逻辑电平 从所需 QoR 结果需要太多查询表(LUT) 逻辑电平的设计很难获得可重复结果。LUT 延迟一般不是问题所在,而问题是 LUT 之间的路由延迟。这在设计的高性能领域至关重要。 逻辑电平过多往往归因于 i f /else结构较大和选择语句较长。如果合适,可以采用 “ful l_case”和 “paral lel_case” Veri log 指令优化较少逻辑的选择语句,这种技巧一般能够减少逻辑电平。较大的多路复用器或者解码器可能造成路由拥塞,从而导致不可重复的结果。多级注册多路复用器 / 解码器路径有助于解决此问题。对于加算器而言,用注册的加算器链代替注册加算器树可以提高性能。如果加算器全部注册的话,则链会比树造成更长时延。有关编码最佳实践的更多信息, 请参考赛灵思白皮书 《提高设计性能的 HDL 编码实践》 (WP231), http://www.xilinx.com/support/do ... te_papers/wp231.pdf。 复位与其他控制信号 复位的选择会影响到设计的性能、面积和功率。加电时电路初始化并不需要全局复位,但是它会对设计过程中能够采用的资源类型产生重大影响。如果在 HDL 中存在全局复位,则无法推断移位寄存器。一个移位寄存器产生的可重复结果比十个寄存器还多。 另外,DSP 和块 RAM 寄存器仅仅包含同步复位。如果编码中包含异步复位,则无法使用此类寄存器,从而迫使设计中转而使用可配置逻辑块 (CLB)寄存器。而把寄存器放入 DSP、块 RAM 或者同时放入二者中更容易保持相同结果。在一般逻辑中运用同步重置可减少逻辑电平。slice 寄存器能拥有异步或同步复位。如果设计采用同步复位,那么组合逻辑就可以采用同步置位。这样就可以降低一个 LUT 的逻辑电平。 了解什么样的 FPGA 资源可用以及何时是最佳利用时机至关重要。一般会有综合指令来定义使用哪些资源。例如,块 RAM 最适合深存储器 (deepmemory)需求,而分布式 RAM 适用于宽总线,尤其是在局部时钟为高速数据计时的情况下。块 RAM 和分步式 RAM在控制信号具有较大扇区出时会出现某种问题。重复控制信号并且采用布局规划技巧把块与相同信号融合在一起有助于维持可重复结果。 移位寄存器会降低设计的利用率,而其能够促进可重复性。有一些性能问题值得注意。SRL 的时钟到输出比触发器的时钟到输出慢; 因此,最好把触发器用作移位寄存器的最后一级。大部分综合工具都能自动实现这一点,但是,如果涉及移位寄存器的路径出现问题,则最好确认其最后一级是否为寄存器。 初始寄存器也存在类似问题。SRL前端设置触发器能让放置器有更多选以择满足时序要求,进而维持结果。同样,大部分综合工具都能自动实现这一点,但是,如果涉及移位寄存器的路径出现问题,则最好确认其最后一级是否为寄存器。 FPGA 有许多寄存器,从而使得流水线技术可在提高性能方面发挥重要作用。其中,重要的一点是禁用经多重流水线优化的触发器 SRL 推论。上文引用的关于 HDL 编码实践的白皮书 (WP231)提供了关于块 RAM 的更多信息。有关移位寄存器的更多信息,请参阅 WP271 《借助 SRL16E 节约成本》 (http://www.xi l inx.com/support/docume n t a t i o n /wh i t e _ p a p e r s /wp271.pdf ) 。 时钟域问题 设计人员必须慎重正确约束跨越不相关时钟域的路径。相关工具会自动关联来自相同源时钟 (如 DCM)的时钟。PERIOD 约束条件也能关联外部时钟。不是器件内部创建的无关时钟需要特殊考虑。系统默认不约束此类时钟。如果有特殊时序考虑,设计人员必须采用FROM:TO 约束条件正确约束相关路径。DATAPATHONLY 关键词会指示相关工具在等式中不包含时钟偏移。 另外关键一点是确保不发生竞态状态。从一个领域跨越另一个领域时可以采用 FIFO。否则,设计人员需要双重同步一个 (仅有一个)控制信号,并且在接收时钟域利用其接收其它信号。 高扇出信号 高扇出信号通常会成为设计中的决定因素。即使大部分综合工具支持扇出控制,在 HDL 中复用这些信号来得到可重复性更高的结果也是明智之举。设计人员应该把这种策略和指令结合起来,以确保综合工具不会移除这些重复信号。如果一个高扇出信号位于逻辑顶层,则可以复用该信号,然后用单独信号驱动每一个顶层模块。 如果综合工具扇出控制不能得到预期结果并且无法修改 HDL,那么在BRAM 的 MAP 逻辑中采用寄存器复用约束条件以及最高扇出约束条件,往往会产生比综合更好的寄存器复用选择。更多相关信息,请参阅 《约束条件指南》(UG625) 中的 MAX_FANOUT。做为一个常见的调试问题,跨越层级时保持一致的信号名称更便于追踪存在问题的路径。如果信号名称经常改变,则很难追踪时序报告和其它调试输出。把信号方向放入所有模块或实体的端口定义中也有所裨益。 综合优化 综合会对可重复结果产生巨大影响。如果从综合过程得不到最佳输出网表,就无法在实施工具中产生理想条件。设计人员可以采用多种综合技术帮助改善实施结果。 在执行综合时采用时序约束条件至关重要。用户往往会在综合过程中过度约束,然后在赛灵思实施工具中放宽时序约束条件。这样可以增加综合工具负担, 从而减轻实施工具的负担。 接下来使用综合工具产生的时序报告。如果一条路径在综合与实施过程中无法满足时序要求,则可以修改 HDL或综合选项,以便在综合之后满足时序要求。这样可以在实施阶段节约时间。 在综合过程中得到可重复结果是在实施工具中得到可重复结果的最佳途径。大多数综合工具支持自下而上的流程,其为设计的顶层以及各个下层模块建立了独立综合项目。用户可以根据HDL 变更情况控制更新网表。大多数商用综合工具都具有增量流程。 平面布局规划的重要性 平面布局规划把组件定位到设计中的一个具体位置或者范围。这可以减少布局变化,从而提高设计的可重复性。通过平面布局规划或者采用位置约束 (或兼而用之)通常可以实现更高的性能。 也就是说,糟糕的平面布局规划或位置约束会导致无法达到时序要求。平面布局规划有一定技术含量,要求具备工具和设计方面的高级知识。你可以采用符合时序要求的实施结果做为指导原则来创建理想的布局。 如果主板需求是选择引脚布局的 主要因素,FPGA 实施工具可能很难获得时序维持可重复结果。但是设计人员可以借助多种有助于实现可重复性的技巧。 首先要清楚数据流。比如,数据会从中心 I/O 流向侧 I/O。可以把与总线相关的所有引脚保持在 FPGA 的同一领域,以此限制控制信号的布线距离。I/O总线控制信号布置在相关地址与数据总线附近。需要一起优化的信号应当布置在一起。如果更关注主板布线,则在 I/O上利用流水线技术优化寄存器有助于改进引脚布局差强人意的 FPGA 布线。 区域组平面布局规划 区域组平面布局规划是一种高级平面布局规划技术,其定义了模块在FPGA 之内的位置。虽然该技术易于使用, 但常常被误用, 从而导致所解决的问题比所造成问题更多这一糟糕平面布局结果。有一些出色平面布局规划的总体指导原则可以帮助您避免走入上述误区。应当使所有区域组保持相似的利用率。比如,应避免让一个分组利用率达到 60% 而让另一个达到 99%。不要重叠区域组。唯一的例外情况是,如果两个不同的区域组具有需要布置在一起的某些逻辑单元 , 则允许重叠 CLB 的一、两行或列。此时用户负责确保为两个区域组约束提供足够资源。 如果需要把设计的两个不同逻辑部分放在相同物理位置,则应当把它们放入同一个区域组。一般允许一层嵌套,也就是父区域组中的一个子区域组。如果一个大区域组里的一小部分需要布置到某个狭窄区域, 则需要上述分层。仅对设计中的关键部分进行平面布局规划而让相关工具决定非关键逻辑的布局非常重要。连接到固定资源 (如 I/O、收发器或处理器块)的逻辑可能会从平面布局规划中受益。可以采用顺利实施的结果做为准则来确定布局或时序问题。诸如赛灵思 PlanAhead ™软件 (图 1)和时序分析器等工具有助于可视化显示相关问题。 尽可能减少各个全局时钟所用区域数量以及各个区域的时钟 (区域与全局)数量一般会有所裨益。如果您准备为某个时钟域的增加更多逻辑,切勿过度约束,而应当进行相应规划。如果某个时钟域的时钟全部投入使用,则很难找到有效布局。而 PlanAhead 软件所提供的对齐时钟域功能可以简化上述平面布局规划工作。对于拥有 10 多个时钟域的Virtex® FPGA 设计而言,当前实施方案所用的时钟域位于 .map 报告文件中, 同时还附带了 UCF 约束条件。 有关区域组平面布局规划的更多信息,请参阅 UG632 《PlanAhead用户指南》 (h t t p : / / w w w . x i l i n x .com/suppor t /documentat ion/sw_ma n u a l s / x i l i n x 1 1 /Pl a nAh e a d _UserGuide.pdf)以及 UG633 《平面布局方法指南》 (http://www.xi l inx.com/support/documentation/sw_manuals/xilinx12_1/Floorplanning_Methodology_Guide.pdf) 。 块、模块与路径定位Block RAM、FIFO、DSP、DCM 以及全局时钟资源等核心器件的定位往往有助于实现可重复性。其最佳做法是着眼于良好布局,同时采用相关设计知识布局规划。可以采用 reportgen – clock_regions design.ncd 创建相关报告。PlanAhead 软件能够锁定关键模块的全部布局信息。在下一轮中,实施布局保持不变,但是并不保存布线信息。有关 PlanAhead 软件定位约束条件的更多信息,请参阅 UG632 《PlanAhead 用户指南》 、UG633 《平面布局规划方法指南》以及相关 PlanAhead 手册的 “设计的平面布局规划”章节。 如果锁定整个模块影响过大,则可以在 PlanAhead 软件中锁定某条关键路径。但是使用该方法时应当慎之又慎。如果某条具体路径导致某种主要问题,最好通过修改 HDL 来解决时序问题。否求。赛灵思 SmartGuide ™ 技术是另一种维持可重复结果的选择,最适合不强求最高 QoR 或最高利用率的设计。如果设计保存和 SmartGuide 技术都不适用于一种设计,则可以采用 SmartXplorer或 PlanAhead 软件策略维护时序。 对于 QoR 需求较高的设计, 有一些高级实现选项可以帮助维持时序。控制利用率往往是维持可重复结果的关键。随着设计规模增大,维持可重复结果的难度也随之提高。整个设计阶段始终采用相同软件版本有助于实现可重复结果。 |