2. PolarFire器件架构与时序资源

时序收敛不是单纯靠约束和工具迭代就能解决的问题,它首先取决于器件本身的物理资源。PolarFire FPGA 的时序性能由四类资源共同决定:逻辑单元(LSRAM/µSRAM 与 LUT 构成的逻辑簇)、通用布线架构、时钟网络,以及专用硬核(如 DSP、SerDes、PCIe、DDR 控制器等)。理解这四类资源的延迟特性与约束边界,才能在综合与布局布线之前预判哪些路径天然容易收敛、哪些路径必须提前干预。

逻辑单元:LUT 与进位链的延迟差异

PolarFire 的可编程逻辑以逻辑簇(Logic Cluster)为基本单位,每个簇包含若干 4 输入 LUT、进位链、寄存器和局部布线。对时序影响最大的两个结构是 LUT 级联和进位链。LUT 级联每增加一级,都会引入一级 LUT 延迟加一段局部布线延迟;而进位链(Carry Chain)在器件内部是专用硬连线,其单位延迟远小于用 LUT 模拟的加法器。这意味着:一个 32 位加法器若用 LUT 实现,可能需要 8~10 级级联;若用进位链实现,则延迟主要沿进位链传播,级数虽多但每级延迟低,整体路径更短。

实际工程中,综合工具通常会自动推断进位链,但前提是代码风格可被识别。例如使用 +、-、比较器时,工具倾向于映射到进位链;而写成 if/else 逐位判断的代码,则可能被拆成多级 LUT,导致路径延迟显著增加。因此,在写加法、累加、计数器、地址比较等逻辑时,应保持算术运算的原始表达,避免人为拆位。

布线架构:局部、区域与全局布线的延迟分层

PolarFire 的布线资源分为局部布线、区域布线和全局布线。局部布线连接同一逻辑簇或相邻簇内的资源,延迟最低;区域布线跨越多个逻辑簇,延迟随距离增加;全局布线用于时钟、复位等高扇出信号,延迟相对固定但驱动能力强。时序路径的延迟中,布线延迟往往占 50% 以上,尤其是跨区域的长线。

这带来一个关键结论:逻辑级数相同,不代表时序相同。两个设计都只有 6 级 LUT,但一个集中在同一区域,另一个分散在芯片两端,后者延迟可能高出数倍。因此,在布局阶段应尽量让同一时序路径上的逻辑在物理上靠近。PolarFire 的布局器会尝试优化,但若代码或约束导致逻辑被分散,工具也难以完全消除长线延迟。常见做法包括:对关键模块使用区域约束(Region Constraint)、避免在关键路径上插入跨区域的多路选择器、以及减少高扇出控制信号在关键路径上的使用。

时钟网络:全局时钟与区域时钟的取舍

PolarFire 提供全局时钟网络和区域时钟网络。全局时钟可驱动整个器件,偏斜(Skew)小但布线资源有限;区域时钟只覆盖局部区域,偏斜略大但资源更充裕。时钟网络对时序路径的影响体现在两个方面:一是时钟到寄存器时钟端的延迟(Clock Insertion Delay),二是不同寄存器之间的时钟偏斜。

对于跨时钟域路径,若两个时钟都走全局网络,偏斜可控;若一个走全局、一个走区域,则偏斜可能增大,导致建立/保持时间余量被压缩。因此,在时钟规划阶段应明确:哪些时钟需要全局覆盖,哪些可以限制在区域。对于高频时钟,优先使用全局网络;对于低频、局部使用的时钟,可考虑区域网络以节省全局资源。此外,PolarFire 的时钟调节电路(CCC)可生成多路时钟,但每路输出都会引入相位噪声和抖动,级联多个 CCC 会累积抖动,应尽量避免。

专用硬核:DSP、SerDes 与存储控制器的时序边界

PolarFire 的 DSP 块、SerDes、PCIe 硬核和 DDR 控制器是专用硬核,它们不占用通用逻辑和布线资源,但会引入固定的接口时序要求。以 DSP 块为例,其内部乘法器和累加器有固定的流水线级数,若在 DSP 外部再插入额外逻辑,可能破坏流水线平衡,导致路径延迟集中在 DSP 接口处。SerDes 和 PCIe 硬核则对参考时钟、复位顺序和收发器接口有严格时序要求,这些路径通常需要手动约束或使用硬核自带的时序模型。

DDR 控制器是典型的硬核时序边界:其用户接口(User Interface)有固定的读写时序窗口,若用户逻辑在接口处引入额外延迟,可能导致读写失败。因此,在连接 DDR 控制器时,应尽量使用硬核提供的 FIFO 或寄存器接口,避免在接口路径上插入组合逻辑。

PolarFire 四类资源对时序路径的影响 逻辑单元 4-LUT 级联 进位链(专用) 寄存器/局部布线 LUT 级联延迟 > 进位链 布线架构 局部布线(低延迟) 区域布线(中延迟) 全局布线(高扇出) 布线延迟常占路径 50%+ 时钟网络 全局时钟(低偏斜) 区域时钟(局部覆盖) CCC 时钟调节 偏斜与抖动影响建立/保持 专用硬核 DSP 块 SerDes / PCIe DDR 控制器 固定接口时序窗口 典型时序路径:寄存器 → 逻辑 → 布线 → 寄存器 源寄存器 LUT / 进位链 组合逻辑 局部/区域布线 延迟随距离增加 目的寄存器 时钟网络 偏斜/抖动 关键路径 = 逻辑延迟 + 布线延迟 + 时钟偏斜 硬核接口路径需单独约束与验证

四类资源对时序路径的联合作用

一条典型时序路径的延迟可以拆解为:源寄存器时钟到输出延迟 + 组合逻辑延迟(LUT/进位链)+ 布线延迟 + 目的寄存器建立时间 + 时钟偏斜。其中,组合逻辑延迟和布线延迟是设计者可以主动优化的部分,时钟偏斜由时钟网络规划决定,而硬核接口延迟则由器件固定特性决定。

在实际工程中,建议按以下顺序排查时序问题:先看路径是否经过硬核接口,若是,检查接口约束是否完整;再看逻辑级数是否过多,若过多,考虑流水线切割或改用进位链;然后看布线是否跨区域,若是,尝试区域约束或逻辑复制;最后看时钟网络是否混用全局与区域,若是,统一时钟网络或调整时钟规划。这个顺序不是固定流程,而是从“不可控因素”到“可控因素”的排查逻辑,能帮助设计者快速定位瓶颈所在。

实践提示:在 PolarFire 中,进位链和 DSP 块是提升时序性能最直接的两类资源。对于高频算术路径,优先让工具推断进位链或 DSP;对于跨区域长线,优先用区域约束把逻辑拉近;对于时钟,优先保证关键路径上的寄存器使用同一类时钟网络。

示例:一个 16 位累加器的时序对比

假设在 PolarFire 上实现一个 16 位累加器,时钟目标 250 MHz(周期 4 ns)。若用 LUT 级联实现,综合后可能得到约 8 级 LUT,每级 LUT 加局部布线约 0.35 ns,组合逻辑延迟约 2.8 ns,加上寄存器和布线,总路径可能超过 4 ns,难以收敛。若改用进位链实现,进位链每级延迟约 0.1 ns,16 位进位链总延迟约 1.6 ns,加上接口逻辑,总路径可控制在 3 ns 以内,满足 250 MHz 要求。这个对比说明:同样的功能,选择不同的逻辑资源,时序结果可能完全不同。在写代码时,应尽量让算术运算保持可被推断为进位链或 DSP 的形式,而不是用通用 LUT 去模拟。

总结来说,PolarFire 的时序收敛必须从器件架构出发:逻辑单元决定组合逻辑延迟的下限,布线架构决定物理距离带来的延迟,时钟网络决定偏斜与抖动,专用硬核决定接口时序边界。只有把这四类资源的特性纳入设计决策,才能在约束、综合和布局布线之前就为时序收敛打好基础。