随着FPGA内部同步电路运行时钟频率的提高,时钟不确定性将成为制约设计时序性能的显著因素。《基于Xilinx CMT设计低抖动的高性能时钟》一文聚焦于如何实现低抖动的FPGA片内高速时钟,本文将从实测的角度来观察这一限制。
1.1 案例工程的基本情况:
- 一个基于Xilinx Spartan-6 FPGA(XC6SLX150-2FGG484)设计,符合CPCI/PXI规范的20通道高速RS232/422/485仿真测试模块;
- 为实现高波特率(20Mbps)的RS422/485通讯,本设计将uart_baud、uart_rx、uart_tx三个功能单元定义为uart_phy,每5通道定义为一组(BANK),每组共用一个高速片内时钟,定义为PhyClk[3:0],设计的片内高速时钟频率不小于240MHz;
- 整个设计大致消耗触发器20600,查找表18300,对一片XC6SLX150的Slices占用率大致为35%。其中高速电路部分大致消耗触发器5200,查找表4300,占整体设计的25%左右;
- 每组PhyClk[n]驱动的同步电路规模大致为1300个触发器,5600个端点(endpoints),11000条时序路径(paths),如下图:
1.2 测试方法
由于设计基于Spartan-6 FPGA完成,开发工具限制于ISE软件,其布局工具有一个叫做Placer Cost Table(俗称“布线种子”)的属性参数,取值范围1 ~ 100(默认值1),如下图:
关于Placer Cost Table的介绍,请参阅:
Xilinx AR#35534 -- What is a placement cost table and how should it be used?
AR#35534告诉我们,基于ISE软件的设计,其布局/布线结果质量(QoR)是一个符合正态分布的随机值,当用户需要评估某一设计的QoR时,Xilinx推荐基于10个及以上的Placer Cost Table进行对比评估。
《基于Xilinx CMT设计低抖动的高性能时钟》一文指出,基于Spartan-6 FPGA实现本设计的高速片内时钟有三种方案:
- 单独使用DCM_SP实现;
- 单独使用DCM_CLKGEN实现;
- 使用DCM_CLKGEN + PLL_BASE实现。
三个方案输出时钟的Discrete Jitter差异显著,在相同的系统参数(SYSTEM_JITTER、INPUT_JITTER)设定下,则合成的时钟不确定性也有显著差异。
本文的测试,保持设计中其它逻辑不变,仅修改PhyClk[3:0]时钟的实现方案,并利用ISE软件内置工具SmartXplorer,对每种测试进行20个Placer Cost Table(1 ~ 20)的扫描,评估设计的以下特性:
- 不同时钟方案引起不同的时钟不确定性下,同一设计的时序达标情况(按照ISE软件的定义,静态时序报告中Timing Score = 0,则设计完全满足时序要求);
- 当前设计基于Spartan-6 FPGA -2速度等级的器件,uart_phy电路单元的速度极限?
- 当前设计基于Spartan-6 FPGA -3速度等级的器件,uart_phy电路单元的速度极限?
- Spartan-6 FPGA -3速度等级相对-2速度等级,能提高多少设计性能?
测试结果汇总于下表(点赞CSDN的编辑器,本表格我直接从word文档中拷贝过来,否则就贴图了):
序号 | 方案1) | 速度等级2) | 设计时钟3) | 约束周期4) | 时钟抖动5) | 不确定性6) | 达标数量7) |
1 | 1 | -3 | 360MHz | 2.777ns | 0.123ns | 0.154ns | 11 (55%) |
2 | 1 | -3 | 330MHz | 2.950ns | 0.124ns | 0.155ns | 19 (95%) |
3 | 1 | -3 | 300MHz | 3.175ns | 0.126ns | 0.155ns | 18 (90%) |
4 | 1 | -2 | 320MHz | 3.125ns | 0.126ns | 0.155ns | 0 (0%) |
5 | 1 | -2 | 310MHz | 3.200ns | 0.127ns | 0.155ns | 5 (25%) |
6 | 1 | -2 | 300MHz | 3.175ns | 0.126ns | 0.155ns | 8 (40%) |
7 | 1 | -2 | 280MHz | 3.500ns | 0.129ns | 0.156ns | 20 (100%) |
8 | 1 | -2 | 240MHz | 3.250ns | 0.127ns | 0.155ns | 11 (55%) |
9 | 2 | -2 | 240MHz | 3.250ns | 0.301ns | 0.324ns | 0 (0%) |
10 | 3 | -2 | 240MHz | 3.250ns | 0.691ns | 0.519ns | 0 (0%) |
11 | 1 | -2 | 240MHz | 3.500ns | 0.129ns | 0.156ns | 17 (85%) |
12 | 2 | -2 | 240MHz | 3.500ns | 0.302ns | 0.325ns | 17 (85%) |
13 | 3 | -2 | 240MHz | 3.500ns | 0.727ns | 0.537ns | 0 (0%) |
14 | 1 | -2 | 240MHz | 3.750ns | 0.131ns | 0.156ns | 18 (90%) |
15 | 2 | -2 | 240MHz | 3.750ns | 0.304ns | 0.325ns | 19 (95%) |
16 | 3 | -2 | 240MHz | 3.750ns | 0.764ns | 0.555ns | 15 (75%) |
|
由于ISE软件的布局/布线结果质量呈现正态分布,故参照正态分布的区间划分,将本设计的实现难易程度依据20个Placer Cost Table扫描的时序达标率(λ)作如下划分:
- 极易:λ≥ 95%;
- 较易:68% ≤λ≤ 95%;
- 适中:32% ≤λ≤ 68%;
- 较难:5% ≤λ≤ 32%;
- 极难:λ≤ 5%。
1.3 测试总结:
- 分析上表8 ~ 16行测试数据,(查看测试过程中的静态时序报告,本设计在-2速度等级下,布线延迟的极限在2.8ns ~ 3.0ns左右,这是一个与设计强相关的数据,对FPGA逻辑的设计者而言,不会有官方数据,也不会有计算公式),在逼近设计的布线延迟极限前,时钟不确定性不会对设计造成致命影响,布局/布线工具可通过优化来满足设计需求。例如:表中13行的数据,约束周期为3.5ns,但由于时钟不确定性高达0.537ns,直接导致20个布线失败;表中11、12行约束周期同为3.5ns,但时钟不确定性分别为0.156ns、0.325ns,布线通过率提高到了85%;而表中16行的数据,时钟不确定性为0.555ns,但因约束周期放宽至3.75ns,布线通过率提高到了75%;
- 分析上表4 ~ 7行的测试数据,基于Spartan-6 FPGA -2速度等级的器件,当前设计可以轻松满足280MHz以下的要求,且300MHz的实现难度适中;
- 分析上表1 ~ 3行的测试数据,基于Spartan-6 FPGA -3速度等级的器件,当前设计可以轻松满足330MHz以下的要求,且360MHz的实现难度适中;
- 针对当前设计,Spartan-6 FPGA器件的-3速度等级相对-2速度等级有大致18%的性能提升;
- Spartan-6 FPGA数据手册(DS162)中,-3速度等级器件全局时钟网络的最大工作频率限制为400MHz,-2速度等级器件限制为375MHz,这自然成为Spartan-6 FPGA同步逻辑电路运行时钟的频率上限。经过充分优化的设计(5600个端点,11000条时序路径),可以发挥出器件80% ~ 90%的极限性能。
1.4 补充提示
本文的主旨是探究片内同步电路运行时钟的不确定性对FPGA高速设计的限制,但考虑到测试平台搭建不易,测试时间漫长,故而测试过程中一并完成了设计极限的摸底,确认本设计的uart_phy部分可运行于300MHz(XC6SLX150-2)/360MHz(XC6SLX150-3)的同步时钟。从设计原理来看,孤立的uart_phy电路,能跑再高的速度都是没有意义的,本设计必然还包括以下两个部分:
- uart_phy电路收/发数据的缓存,不作它想地基于Block RAM设计;
- uart_phy电路与片内低速控制电路的跨时钟域逻辑,部分逻辑工程师会选择基于Block RAM的异步FIFO实现。
这两个部分的设计,都会涉及到Block RAM的使用,那么,Block RAM是否会成为本设计的瓶颈?答案是肯定的:
- Block RAM在FPGA片内位置固定,布局/布线自由度低,与其它逻辑间的布线延迟通常较大;
- Block RAM允许的最大工作频率远低于FPGA内部CLB逻辑、BUFG等电路的最大工作频率。查看DS162中Spartan-6 FPGA Block RAM的最大工作频率,可以看到,-3/-2速度等级下,Block RAM的最大工作频率都低于本设计能达到的运行频率:
FPGA片内高速逻辑电路设计的数据缓存方案、跨时钟域方案,是在RTL阶段需要重点考虑和优化的地方,若忽略了Block RAM对高速设计的时序限制,到后期时序优化阶段再来处理Block RAM的问题,这涉及到了基础架构的修改,必然是事倍功半的!
选取Xilinx各系FPGA中/低档速度等级,整理BUFG、Block RAM各自的最高时钟频率如下表(表格数据来自本文完成时,Xilinx发布的各系FPGA数据手册):
FPGA系列 | 速度等级 | FMAX_BUFG | FMAX_BRAM | FMAX_BRAM/FMAX_BUFG |
Spartan-3AN | -4 | 334MHz | 280MHz | 83.8% |
Virtex-4 | -11 | 450MHz | 450.45MHz | 100% |
Virtex-5 | -2 | 667MHz | 500MHz | 75.0% |
Spartan-6 | -2 | 375MHz | 280MHz | 74.7% |
Virtex-6 | -2 | 750MHz | 540MHz | 77.1% |
Spartan-7 | -1 | 464MHz | 388.2MHz | 83.4% |
Artix-7 | -2 | 628MHz | 460.83MHz | 73.4% |
Kintex-7 | -2 | 710MHz | 543.77MHz | 76.6% |
Virtex-7 | -2 | 710MHz | 543.77MHz | 76.6% |
Kintex-u | -2 | 725MHz | 585MHz | 80.7% |
Virtex-u | -1H | 725MHz | 585MHz | 80.7% |
Artix-u+ | -1 | 667MHz | 645MHz | 96.7% |
Kintex-u+ | -2 | 775MHz | 738MHz | 95.2% |
Virtex-u+ | -2 | 775MHz | 737MHz | 95.1% |
可以看到:
- Xilinx FPGA在最新一代(UltraScale+)之前,除了Virtex-4这个特例,其Block RAM对设计的时序性能限制较为明显;
- UltraScale+系列FPGA的Block RAM预计不会成为设计的时序性能瓶颈。