1. PolarFire器件时钟架构总览
在PolarFire FPGA中,时钟不是“一根线走遍全芯片”的简单资源,而是一套分层、分区、可编程的时钟分发体系。理解这套体系,是后续做多时钟域设计和CDC验证的前提。本节从全局时钟网络、区域时钟资源、时钟输入输出引脚、PLL与CCC模块四个方面建立硬件基础。
一、全局时钟网络与区域时钟资源
PolarFire的时钟网络大致分为两个层级:全局时钟网络(Global Clock Network)和区域时钟网络(Regional Clock Network)。全局网络覆盖整个器件,适合分发需要到达任意逻辑单元的高扇出时钟,例如系统主时钟、DDR参考时钟;区域网络只覆盖器件的一个或若干相邻区域,适合局部模块内部使用的时钟,能减少全局资源的占用和功耗。
PolarFire器件按物理布局划分为多个时钟区域(Clock Region)。每个区域内部署有区域时钟资源,可独立驱动本区域内的时序单元。全局时钟与区域时钟之间并非互斥:一个时钟源既可以走全局网络,也可以走区域网络,具体由时钟分配结构决定。设计时应遵循“就近使用”原则——只在单个区域内使用的时钟尽量走区域网络,跨区域或全芯片使用的时钟才占用全局资源。
全局时钟网络的数量是有限的,PolarFire器件通常提供若干条全局时钟干线(Global Clock Spine),每条干线可被多个时钟源驱动,但同一时刻一条干线只能由一个源驱动。这意味着时钟资源分配本质上是一种“布线+复用”问题,需要在设计早期规划,而不是等到布局布线阶段才发现资源冲突。
二、时钟输入输出引脚
PolarFire的时钟输入引脚分为专用时钟输入引脚和普通I/O引脚两类。专用时钟输入引脚直接连接到时钟输入缓冲器和CCC/PLL,具有更低的抖动和更确定的延迟,适合作为系统主时钟、高速接口参考时钟的输入。普通I/O引脚也可以作为时钟输入,但需要经过通用布线资源,抖动和延迟特性较差,一般只用于低速、非关键的时钟。
时钟输出引脚方面,PolarFire支持将内部时钟通过专用时钟输出引脚或普通I/O输出到片外,用于驱动外部器件或作为测试点。在CDC验证中,把关键时钟引出到示波器或逻辑分析仪观察,是判断时钟是否真正稳定、是否存在毛刺或频率偏差的直接手段。
三、PLL与CCC模块的分布与能力
PolarFire器件内部集成了两类时钟生成与管理模块:PLL(锁相环)和CCC(Clock Conditioning Circuit,时钟调理电路)。它们分布在器件的不同位置,各自服务于附近的时钟区域。
PLL的主要能力是频率合成:输入一个参考时钟,通过倍频、分频产生一个或多个不同频率的输出时钟,同时具备相位调整和抖动滤除能力。PLL适合需要精确频率关系、低抖动的场景,例如高速串行接口、DDR控制器。
CCC则更偏向时钟调理与切换:它可以对输入时钟进行分频、相位偏移、占空比调整,并支持多路时钟源之间的无缝切换(Glitchless Switching)。CCC常用于需要动态切换时钟源、或需要多个相位版本时钟的场合。
两者的关键区别在于:PLL强调“频率合成与抖动性能”,CCC强调“时钟选择与调理灵活性”。在实际设计中,常见做法是用PLL产生主频,再用CCC对主频做分频和相位调整,分发给不同区域。
四、时钟资源规划的实际做法
在具体项目中,时钟架构规划通常从“时钟需求清单”开始。假设一个典型设计需要以下时钟:系统主时钟100 MHz、DDR参考时钟200 MHz、视频像素时钟74.25 MHz、低速配置时钟25 MHz。规划过程如下:
- 确定时钟源:100 MHz主时钟从专用时钟输入引脚进入;200 MHz DDR参考时钟可由同一PLL倍频产生,或从另一专用引脚输入;74.25 MHz和25 MHz由CCC从主时钟分频得到。
- 分配PLL/CCC:选择靠近主时钟输入引脚的PLL产生200 MHz;选择靠近视频处理区域的CCC产生74.25 MHz;25 MHz配置时钟走区域网络,只覆盖配置逻辑所在区域。
- 选择网络层级:100 MHz和200 MHz走全局网络;74.25 MHz若只在视频区域内使用,走区域网络;25 MHz走区域网络。
- 检查资源冲突:确认全局时钟干线数量足够,且没有两个时钟源争用同一条干线。
这个规划过程不需要等到综合实现阶段才做,在RTL设计之前就应完成,并以约束文件(SDC)的形式固定下来。例如,在SDC中通过create_clock定义输入时钟,通过create_generated_clock定义PLL/CCC输出时钟,让工具知道时钟之间的频率和相位关系。
五、与CDC验证的衔接
时钟架构决定了CDC路径的“物理基础”。两个时钟如果来自同一个PLL的不同输出,它们之间有确定的频率和相位关系,属于同步时钟域,CDC处理相对简单;如果来自不同PLL或不同输入引脚,则属于异步时钟域,必须使用同步器(如双触发器同步、握手同步、异步FIFO)。