1. Agilex多时钟架构总览

在Agilex这类高性能FPGA中,时钟从来不是“一根线走到底”的简单资源。器件内部存在多层次的时钟网络、多个PLL、可编程分频器以及全局/区域/局部三类布线资源,它们共同决定了设计能否在目标频率下稳定收敛,也决定了跨时钟域(CDC)验证的复杂度。理解这套架构,是后续做多时钟约束、CDC检查和时序收敛的前提。

一、Agilex时钟网络的层次结构

Agilex的时钟资源大致可分为三层:全局时钟(Global Clock)、区域时钟(Regional Clock)和局部时钟(Local Clock)。全局时钟网络覆盖整个器件,偏斜小、扇出大,适合驱动跨多个逻辑分区的高扇出时钟,例如系统主时钟、DDR参考时钟。区域时钟只覆盖器件的一个象限或若干行/列区域,资源占用更省,适合局部模块内部使用。局部时钟则由普通布线资源或专用局部网络构成,延迟和偏斜控制能力最弱,通常用于小范围、低扇出的时钟分发。

这三类网络并非互相独立,而是通过时钟控制块(Clock Control Block)和时钟网络切换结构连接。设计者可以在同一时钟根上选择不同网络类型,但一旦选择,就会影响时序模型、偏斜预算和CDC路径的物理特性。因此,在RTL阶段就应明确每个时钟的覆盖范围,而不是等到布局布线后再补救。

Agilex 多时钟架构与时钟域划分示意 时钟源与PLL资源 外部晶振 100 MHz 差分 IOPLL 整数分频/倍频 Fabric PLL 小数分频 可编程分频器 /1 ~ /512 时钟控制块 CCB / 切换与使能 动态门控 时钟网络层次 全局时钟 覆盖全器件 低偏斜 / 高扇出 区域时钟 覆盖象限/行列 资源省 / 中等偏斜 局部时钟 小范围分发 低扇出 / 偏斜较大 时钟根选择 CLK_ROOT 约束 多时钟域与CDC路径 时钟域 A clk_core 200 MHz 同步逻辑 时钟域 B clk_ddr 400 MHz 源同步接口 时钟域 C clk_100m 100 MHz 控制/配置 时钟域 D clk_50m 50 MHz 低速外设 CDC 同步结构 双触发器 / 握手 / 异步FIFO / 脉冲同步 验证挑战:亚稳态、数据丢失、重汇聚 需约束 + 结构检查 + 仿真覆盖 注:图中频率为教学示例参数,实际设计需根据器件手册与约束文件确定

二、PLL与时钟分频资源

Agilex器件内通常包含两类PLL:IOPLL和Fabric PLL。IOPLL靠近I/O Bank,主要用于为高速接口(如DDR、PCIe、以太网)生成低抖动时钟;Fabric PLL位于内核逻辑区域,支持更灵活的小数分频和多个输出抽头,适合为内核逻辑生成多路不同频率的时钟。每个PLL可输出多路时钟,每路输出可独立配置分频比、相位偏移和占空比。

以教学示例为例:假设外部输入100 MHz差分时钟,经IOPLL倍频到400 MHz用于DDR接口,同时经Fabric PLL生成200 MHz内核时钟、100 MHz控制时钟和50 MHz低速外设时钟。这里的关键参数包括:输入频率、反馈分频比M、输出分频比N、VCO频率范围、相位偏移步进。例如VCO目标频率为1200 MHz,则M=12,N=3可得到400 MHz输出。这些参数必须在PLL配置阶段确定,并在SDC约束中通过create_clock和derive_pll_clocks正确表达。

可编程分频器则用于对已有时钟做整数分频,常见分频比包括/2、/4、/8等。它不改变时钟的抖动特性,但会引入分频后的相位不确定性,尤其在CDC路径中需要特别关注。

三、全局/区域/局部时钟域的划分原则

时钟域划分不是简单地“一个模块一个时钟”。合理的划分应遵循以下原则:第一,同一时钟域内的逻辑尽量放在同一区域,减少跨区域布线带来的偏斜;第二,高扇出、跨模块的时钟优先使用全局网络;第三,区域时钟用于局部高扇出场景,避免占用全局资源;第四,局部时钟仅用于小范围、低扇出、对偏斜不敏感的逻辑。

在实际工程中,常见的多时钟设计形态包括:单时钟多分频(同一PLL输出不同频率)、多PLL多时钟(不同PLL独立生成)、外部输入多时钟(多路晶振或恢复时钟)、以及混合形态。每种形态对应的CDC路径数量和类型不同,验证策略也不同。

四、多时钟设计的验证挑战

多时钟设计带来的核心验证挑战有三类。第一类是亚稳态:当信号从一个时钟域传到另一个时钟域时,如果目标时钟沿恰好落在源信号跳变窗口内,触发器可能进入亚稳态,输出在不确定时间内振荡。第二类是数据丢失或重复:对于多比特总线,简单的双触发器同步无法保证所有位同时稳定,可能导致数据错位。第三类是重汇聚:同一源信号经过不同CDC路径到达同一目标域,由于路径延迟不同,可能造成目标域采样到不一致的值。

针对这些挑战,验证手段包括:静态CDC结构检查(识别缺少同步器的跨域路径)、SDC约束检查(set_clock_groups、set_false_path、set_max_delay等)、以及动态仿真(注入不同时钟相位关系,观察同步器输出)。在Agilex中,还可以利用器件自带的时钟切换和门控功能,在验证阶段动态改变时钟频率或相位,模拟极端工况。

教学示例:假设一个设计包含clk_core(200 MHz)和clk_ddr(400 MHz)两个时钟域,二者同源但频率不同。若在clk_core域产生一个8位计数器,直接送入clk_ddr域采样,由于400 MHz时钟沿更密,可能在一个200 MHz周期内采样到多个值。正确做法是使用异步FIFO或握手同步,并在SDC中设置set_clock_groups -asynchronous,避免工具误做时序分析。

五、从架构到验证的衔接

理解Agilex多时钟架构的最终目的,是让验证工作有据可依。在RTL阶段,应明确每个时钟的来源、频率、覆盖范围和同步关系;在约束阶段,应正确表达时钟树、PLL派生时钟和跨域路径;在验证阶段,应结合结构检查和动态仿真,覆盖亚稳态、数据完整性和重汇聚三类风险。只有把架构、约束和验证三者对齐,多时钟设计才能真正稳定收敛。

时钟类型 覆盖范围 典型用途 验证关注点
全局时钟 全器件 系统主时钟、DDR参考 偏斜预算、跨区域CDC
区域时钟 象限/行列 局部模块高扇出 区域边界CDC
局部时钟 小范围 低扇出控制逻辑 偏斜较大、同步器位置
PLL输出 按网络类型 多频率生成 派生时钟约束、相位关系