满足设计的时序要求本身已非易事,而要实现某项设计的整体时序具有完全可重复性有时候却是不可能的任务。幸运的是,设计人员可以借助有助于实现可重复时序结果的设计流程概念。影响最大的四个方面分别是 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/documentation/white_papers/wp231.pdf。
复位与其他控制信号
复位的选择会影响到设计的性能、面积和功率。加电时电路初始化并不需要全局复位,但是它会对设计过程中能够采用的资源类型产生重大影响。如果在 HDL 中存在全局复位,则无法推断移位寄存器。一个移位寄存器产生的可重复结果比十个寄存器还多。
另外,DSP 和块 RAM 寄存器仅仅包含同步复位。如果编码中包含异步复位,则无法使用此类寄存器,从而迫使设计中转而使用可配置逻辑块 (CLB)寄存器。而把寄存器放入 DSP、块 RAM 或者同时放入二者中更容易保持相同结果。在一般逻辑中运用同步重置可减少逻辑电平。slice 寄存器能拥有异步或同步复位。如果设计采用同步复位,那么组合逻辑就可以采用同步置位。这样就可以降低一个 LUT 的逻辑电平。
一个控制置位包含一组独特的时钟、时钟启用、置位与复位信号,而且在分布式 RAM 中还包含可写入信号。控制置位信息非常重要,因为寄存器必须共享封装在同一片中的同一控制置位信号。这可能影响封装和利用率, 造成可重复结果问题。有关复位的更多信息,请参阅赛灵思 WP272 《复位诀窍: 考虑局部而非全局》 (http://www.xilinx.com/support/documentation/white_papers/wp272.pdf) 。有关控制置位的更多信息,请参阅WP309 《Spartan®-6 FPGA 定向与重定向指南》 (http://www.xilinx.com/support/documentation/white_papers/wp309.pdf ) 。尽管此白皮书专用于 Spartan-6器件,但其中还包含了适用于所有 FPGA的有益通用信息。
了解FPGA资源
了解什么样的 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 关键词会指示相关工具在等式中不包含时钟偏移。
更多信息,请参阅 UG625 《赛灵思约束条件指南》 (http://www.xilinx.com/support/documentation/ sw_manuals/xi l inx11/cgd.pdf)或者 WP257 《何为PERIOD 约束条件?》 (http://www.xilinx.com/support/documentation/ white_papers/wp257.pdf)之中的 “异步时钟域”章节。
另外关键一点是确保不发生竞态状态。从一个领域跨越另一个领域时可以采用 FIFO。否则,设计人员需要双重同步一个 (仅有一个)控制信号,并且在接收时钟域利用其接收其它信号。