新玩具到手,我第一件事永远是拧螺丝。这次拆的是正点原子DL16 Plus逻辑分析仪,16通道,标称1GHz采样率,同价位国产逻辑分析仪里算相当能打了。拆开之前我最好奇的是那颗藏在屏蔽罩下的FPGA——1GHz采样对FPGA的IO速率、时钟管理和内部逻辑都有硬性要求,如果用的是国产FPGA,那这颗芯片实际承担的工作量远比“采个0和1”要复杂得多。这篇文章不是广告,也不是劝退,就是一个嵌入式爱好者拆完机器、看完波形之后,把内部布局、采样原理和选型心得整理成的一份拆解笔记。想看原理的,想买前避坑的,或者好奇国产FPGA到底在仪表里干了什么活的,都能从里面找到点东西。
1. 先别急着拆:1GHz采样率在逻辑分析仪里意味着什么
1.1 采样率、带宽和存储深度,这三个指标先对齐
很多刚接触逻辑分析仪的朋友,看到“1GHz采样率”就被唬住了,以为买回去就能测一切数字信号。其实逻辑分析仪有三大指标:采样率、存储深度和输入通道数。采样率决定时间分辨率,存储深度决定一次能抓多长,通道数决定能同时看多少路。这三个指标互相牵制,尤其采样率和存储深度是直接对立的关系。1GHz采样意味着每1纳秒采一个点,如果存储深度只有几兆字节,那高速模式下连续抓取的时间可能只有几毫秒。
我举个实际例子帮大家理解。以16通道、1GHz、单通道1bit计算,一秒钟产生的原始数据量是16Gbit,也就是2GB。按32MB板载缓存算,全通道满速采样时,只能连续采16毫秒就把缓存灌满。所以逻辑分析仪的“1GHz采样率”通常不是让你持续录的,而是让你在触发条件满足后抓一小段精细波形用的。低速协议、长时间监控场景,反而要把采样率降下来,腾出存储空间。
选逻辑分析仪时,官方标称参数不能只看采样率,要把“采样率 × 存储深度”打包看,再对照你的项目场景问一句:我需要抓多久?我看什么信号?抓SPI的CS片选时序,50MHz采样率绰绰有余;抓一个纳秒级毛刺,没有1GHz根本看不到。DL16 Plus这种1GHz采样配置,定位就是“高速小段精细抓取”,这个定位决定了它的使用方式,也解释了为什么内部必须有一颗像样的FPGA来扛数据。
1.2 1GHz到底值多少钱:抓毛刺和高速信号时才显真章
作为一个常年调板子的人,我的经验是:1GHz采样率在九成时间里属于“性能过剩”,但剩下那一成场景,它能救命。典型场景就是查毛刺。数字电路里,信号线上一个几纳秒的毛刺,可能让触发器误锁存,也可能让RS485收发器误动作。普通100MHz采样率逻辑分析仪,采样间隔10ns,毛刺宽度5ns时,可能刚好漏采,也可能采到一个不确定电平,让你误判成正常信号变化。
用1GHz采样就完全是另一回事了。1ns一个采样点,能清楚看出毛刺是从哪个时钟沿附近冒出来的,脉宽大概几个纳秒,和哪根信号线时序相关。如果毛刺反复出现,还能结合触发功能,把毛刺作为触发条件,每次毛刺出现时自动抓一拍,慢慢定位源头。
另一个非它不可的场景是高速串行信号。比如SDIO、RMII以太网、以及某些FPGA之间的并行总线,信号翻转频率在几十到几百兆赫兹。要判断建立保持时间是否满足,或者找到哪根数据线偶发翻转错误,普通采样率根本看不出来边沿的细微偏移。1GHz采样虽然比不上示波器的实时带宽,但在纯数字信号的时序分析上,已经足够发现绝大多数问题。所以“1GHz”这个数字不是营销噱头,它是针对特定问题的针对性配置,只不过这个“特定问题”遇到之前,你很难体会它有多重要。
2. 拧开四颗螺丝:DL16 Plus的内部硬件布局
2.1 一块主板上的四个功能分区
拆开外壳之后,整个板子的功能分区非常清晰,基本就是一条流水线:输入信号进来,先经过保护整形电路,然后进FPGA做高速采样和触发,采样数据暂时存放在旁边的SDRAM里,最后由USB桥接芯片负责把数据搬给上位机。板子不大,但每个区域界限分明,维修和改版都方便。这种布局在逻辑分析仪里算是标准思路了,真正体现设计功力的,是每个分区的细节处理。
输入保护区是最容易被忽略、但最关键的一环。DL16 Plus每个通道入口都有ESD保护二极管、限流电阻和钳位电路。大概作用就是:被测板子万一有浪涌或者接错电平,先让保护电路牺牲,尽量不伤到后面的FPGA。看板子上这些元件的封装和位置,能判断出设计者有没有认真做过试验——元件离接口近、走线短、保护器件的地孔打得足,都是认真处理过的痕迹。
FPGA区域是整块板的绝对核心。16路采样信号从输入保护电路过来后,以LVCMOS电平进入FPGA的普通IO引脚,并不经过专用高速串行通道。这说明所谓1GHz采样,不是靠SerDes解串,而是在FPGA内部用多相位时钟加并行寄存器实现的。这一点稍后详细展开。SDRAM放在FPGA旁边,数据线和地址线等长布线的痕迹明显,高频下的时序裕量靠这些细节换来。USB桥接芯片在板子另一端,与FPGA之间走的是并行总线,负责把缓存好的数据搬运到电脑。
2.2 那块低调的FPGA,从丝印到上电行为都写着“国产”
我拿到的这台机器,FPGA表面丝印磨掉了,看封装和引脚密度,第一反应是国产中小容量FPGA的典型封装风格。旁边配套的配置芯片、时钟无源器件和电源方案,也和我在国产FPGA开发板上见到的套路高度一致。如果没猜错,这颗芯片大概率是高云或同级别国产FPGA,容量在几千到上万逻辑单元之间。这类器件资源不大,但IO数量多、PLL够用、功耗低,用在逻辑分析仪这种“大量并行采样加有限逻辑处理”的场景,性价比确实很高。
怎么判断一块FPGA是国产还是进口?外行看丝印,内行看配套电路和软件动作。首先看核心电压:Xilinx和Altera的7系列、Cyclone系列多用1.0V核心,国产小容量FPGA常见1.2V核心。其次看配置方式:很多国产FPGA支持内置flash或者外挂SPI flash启动,板子上Flash型号能帮你缩小范围。更直接的判断方法是插上电脑,看设备管理器里的USB描述符和厂商ID,因为上位机软件往往带FPGA厂商的配置工具或者驱动特征。这种识别方式不保证百分百准确,但结合封装、电源和软件表现,判断方向八九不离十。
还有一点,这颗FPGA在板上的角色,并不是简单把采样数据转成串口发出去了事。16通道1GHz采样,数据速率是2GB/s,如果FPGA内部逻辑只做透传,数据根本出不去。它内部要同时完成时钟管理、采样对齐、触发判断、FIFO缓存、SDRAM读写控制,还要响应USB桥接芯片的读取请求。这个工作负载,对IO资源和内部逻辑布局的要求都很刁钻,不是随便一颗低成本CPLD能顶下来的。国产FPGA能在这个位置稳定工作,至少说明这类中低端器件已经具备做便携仪表的硬实力。
2.3 周边电路的用心程度,决定1GHz的“含水量”
拆机时我格外注意了电源和时钟这两块。1GHz采样对电源纹波极其敏感,IO bank供电哪怕有几十毫伏的噪声,都会在采样阈值附近制造误码。板上FPGA核心供电和IO供电分得很开,高频去耦电容就贴在FPGA电源引脚旁边,没有跨过过孔再连接,这说明Layout阶段把电源完整性当回事了。另外,板上有一个温补晶振或高精度有源晶振,给FPGA提供基准时钟。逻辑分析仪的采样时间戳是否准确,就看这颗晶振的稳定性,能用温补晶振的,说明厂商不想在基础指标上偷工减料。
时钟树设计也有讲究。FPGA内部PLL会把外部输入时钟倍频到需要的采样基频,比如250MHz,再通过PLL输出多个相位。这个过程中,时钟走线如果跨分割或者离数据线太近,会引起时钟抖动,最终表现为采样点位置漂移,波形在上升沿处出现肉眼可见的“毛边”。我仔细看了板上时钟线附近的铺铜和过孔,处理得还算规矩。对于一款几百块价位的产品,这种细节到位了,1GHz采样率才有可信度。反过来,如果板上一片省料、电源噪声明显,那即便标称1GHz,实际抓出来的波形也不敢全信。
3. 所谓的“1GHz采样”,在FPGA内部其实是一套数学游戏
3.1 250MHz的主时钟,如何变身1GHz采样窗口
逻辑分析仪不像示波器那样需要高带宽模拟前端,它只要判断信号是高还是低,所以采样可以走“多相位时钟过采样”这条路。原理其实很朴素:假设FPGA内部PLL输出4路频率250MHz、相位间隔90度的时钟,相位0在t0时刻采样,相位90在t0+1ns采样,相位180在t0+2ns采样,相位270在t0+3ns采样,四路合起来,等效每隔1ns采一个点,这就是1GHz采样率。
在FPGA内部实现时,每个输入通道会同时接到这4个时钟域的多组寄存器上。也就是说,同一个输入信号,在每1ns内被4个不同相位的时钟沿各锁存一次,得到4个采样值。这4个采样值在下一个时钟周期被同步到统一时钟域,组成一个4bit的并行向量。这样,内部逻辑只需要工作在250MHz,就可以应对等效1GHz的数据流。这种结构在FPGA里非常好实现,关键点是4个相位的时钟偏移要准,PLL的相移精度以及IO寄存器布局都会影响最终的采样均匀性。
我拆机前本以为1GHz采样会用到FPGA的ISERDES或者SerDes硬核,但实际看板子走线,输入信号直接连普通IO,并没有进专用高速串行通道。这也印证了上面的判断——它用的是“多相位并行过采样”,而不是高速串行解串。这种方案的好处是灵活,任何支持PLL多相输出和普通IO的FPGA都能做;代价是采样数据展开后并行度很高,16通道就是16个4bit向量,内部逻辑布线压力不小。
3.2 最容易翻车的环节:相位对齐与亚稳态
多相位过采样说起来简单,真正让固件工程师头疼的是相位对齐和亚稳态问题。首先,PLL输出的4个相位时钟,理论上是均匀分布的,实际中因为时钟树延迟、负载差异和PVT波动,相位误差一定存在。如果相位0和相位90的实际间隔差出几百皮秒,采样点在时间轴上就不是均匀分布,恢复出来的信号边沿位置会带误差。对于1GHz采样,几百皮秒的误差已经能明显影响毛刺宽度判断了。
为了解决这个问题,固件里通常要做动态校准。常见做法是在上电后由FPGA输出一个已知测试序列,回环到输入通道,用内部逻辑扫描4个相位的采样结果,统计边沿出现在哪个相位区间,然后微调PLL的相移设置。这个过程类似示波器的自校正,但完全靠FPGA逻辑自动完成。DL16 Plus上电后,如果你用示波器看它的时钟引脚,会发现有一段规律的翻转序列,那就是在校准阶段。
亚稳态是另一个躲不掉的坑。输入信号与采样时钟是异步关系,信号恰好在时钟采样窗口附近变化时,寄存器输出可能进入既不是0也不是1的亚稳态。1GHz过采样下,这种风险发生概率比低速采样高得多,因为采样点更密,信号沿附近总有寄存器踩在“危险区”边缘。设计上,采样寄存器后面通常还会接一级或多级同步寄存器,把亚稳态通过时间“消化”掉。少数逻辑分析仪还会用“多数表决”机制,连续采5个点取3个相同的值作为有效电平,本质上也是牺牲一点时间分辨率换稳定性。
3.3 触发引擎是逻辑分析仪的灵魂
采样数据再多,如果上位机拿到的是一堆没有特征的波形,找问题依然费劲。逻辑分析仪的真正价值在触发。触发的作用是让设备从“一直录”变成“只在满足特定条件时录”。这个条件可以是上升沿、下降沿、某个电平组合、总线上的某个数据值,甚至是特定宽度的毛刺。FPGA内部实现触发的方式,是在并行数据流上挂一组比较器,每个时钟周期检查当前并行向量是否匹配预设条件。
拿毛刺触发举例,FPGA维护一个滑动窗口,窗口里放最近几个采样周期的并行数据。如果检测到“0→1→0”且高电平持续时间不超过用户设定值,就触发。这个检查在250MHz时钟域完成,但窗口内数据来自1GHz过采样,所以能识别的最小毛刺宽度可以到1ns量级。触发系统还要区分“预触发”和“后触发”:预触发要求触发前一段时间的数据也保留下来,所以FIFO里始终维护一个环形缓冲,触发发生后停止写入并保留缓冲内容。这些逻辑全部在FPGA内部并行运行,不占用上位机资源,这也是逻辑分析仪必须用FPGA,而不是用单片机DMA硬扛的原因。
4. 数据从探针到波形:固件、USB和上位机如何协同
4.1 16通道@1GHz每秒产生2GB数据,USB真扛不住
上面算了笔账:16通道全开1GHz采样,每秒产出的原始数据量是2GB。就算只用1个通道,1GHz采样下也是125MB/s。这个速度,USB 2.0的峰值带宽480Mbps换算下来约60MB/s,实际有效传输也就30-40MB/s;USB 3.0好不少,但受限于桥接芯片和固件效率,能稳定跑到350-400MB/s已经不错。无论哪种,都远远追不上数据产生速度。
所以逻辑分析仪处理高采样率问题的思路,从来不是“边采边传”,而是“先存后传”。FPGA把采样数据写入板载SDRAM,写满预设深度后停止采样,再通过USB桥接芯片慢慢往电脑搬运。这就是为什么存储深度这个参数如此重要。DL16 Plus的缓存有限,实际使用中高采样率下能抓到的波形长度并不长,如果遇到需要长时间捕获的场景,就得把采样率降到100MHz甚至更低,换取更长的记录时间。
我实际使用时一般遵循一个经验法则:先根据要观察的协议确定最低够用采样率,比如UART解码5倍过采样就够,SPI解码至少10倍过采样,然后在这个基础上加一点裕量,把剩余存储空间留给记录时长。直接用1GHz去抓UART对话,看起来威风,实际上录不到几帧就满了,反而是浪费。你越懂数据带宽的约束,越能把这台设备的性能用在刀刃上。
4.2 固件状态机与USB搬运工
FPGA内部的工作流程可以抽象成一个状态机:空闲、等待触发、正在采样、停止采样、数据上传。等待触发时,FPGA持续把采到的数据写入环形FIFO,并实时比较触发条件。一旦触发条件满足,固件会继续采集一段预设的“后触发深度”,然后停止。这时候SDRAM里存的就是一段完整的、包含触发点前后上下文的波形。上位机点击“读取”后,固件才把SDRAM里的数据分包,通过USB批量传输端点发出去。
USB桥接芯片在这里的角色更像一个“搬运工”。它不关心数据内容,只负责把FPGA输出的并行数据转成USB包。为了不丢数据,FPGA和桥接芯片之间通常有一组握手信号,比如FIFO空、FIFO满、读使能。上位机也要配合,发一个“开始读取”命令,然后不停发起USB批量读请求,直到收到预期字节数。这个过程如果上位机线程调度不及时,缓冲满了就会丢包,体现在软件上就是波形中间出现一段缺失。所以好的逻辑分析仪上位机,USB读取线程通常会开到高优先级,并且内部有环形缓冲和断包重组逻辑。
固件里还有个容易被忽略的细节:SDRAM的刷新。SDRAM需要周期性刷新,刷新期间无法读写数据。如果刷新时机恰好在采样过程中,可能导致一段数据写不进去。正经实现会在FPGA里用一个“刷新抢占”机制,在采样FIFO将要溢出时插入刷新周期,或者把SDRAM控制器设计成在FIFO半满时做突发写,尽量避开刷新窗口。拆机后我看到SDRAM布线上有专门的时钟和命令线,这部分的稳定运行直接决定了长时间采样有没有“掉帧”。
4.3 协议解码的正确打开方式:别把采样率当信仰
上位机把原始采样点还原成波形之后,协议解码功能才算登场。逻辑分析仪的解码,本质上是在已经采样得到的0/1时间轴上,匹配协议规定的电平跳变和位时序。解码并不需要1GHz采样,一般协议解码器会先对采样数据做“抽稀”和“沿提取”,然后按协议时序把bit流拼成字节和帧。
我见过不少新手把采样率拉到最高,觉得这样解码最准。实际上,UART一帧9600bps,位宽约104微秒,就算用10MHz采样率,一个bit里也有1040个采样点,解码绰绰有余。真正该调高采样率的场景是抓高速接口边沿时序或者毛刺分析,而不是跑低速协议。面对低速协议时,过高的采样率只会让有限存储深度迅速耗尽,抓不了几帧就停了。正确做法是:先估信号速率,选一个刚满足需求的采样率,然后尽可能拉长记录时间;只有在需要分析信号完整性问题时,才把采样率拉满,集中抓一段短波形。
从这个角度说,DL16 Plus的定位其实很聪明。1GHz采样率满足“工程师手里必须有高速抓拍能力”的硬需求,上位机里再配合常见的UART、I2C、SPI、CAN等协议解码,日常调试完全够用。你不需要每时每刻都用满1GHz,但当你需要查一个纳秒级毛刺时,没有这个能力就只能干瞪眼。
5. 拆完这台机,聊聊我对国产FPGA“默默加班”的真实感受
5.1 国产FPGA在仪表类产品里的能力边界
以前提到国产FPGA,很多人的印象还是“做个流水灯、跑个状态机可以,上点高速就虚”。拆完DL16 Plus之后,我的看法有变化。至少在逻辑分析仪这种产品形态里,国产FPGA是真能顶事的。16通道1GHz多相位过采样,对IO数量和PLL相移精度都有要求,还要在内部跑触发逻辑、SDRAM控制器、FIFO调度,这套组合拳打下来,一颗中小容量国产FPGA稳稳接住了。
当然,能力边界也很明显。国产FPGA在高性能SerDes、超高速收发器、大容量分布式RAM这些方面,和国际一线器件还有差距。你真要去搞PCIe Gen3、100G以太网、复杂DSP算法,国产器件现阶段还是吃力。但在“IO多、逻辑密度中等、时钟频率几百MHz内、成本敏感”的赛道里,国产FPGA的性价比和供应稳定性都很能打。逻辑分析仪、协议转换器、小型采集卡、电机控制、工业IO控制器,这些产品用国产FPGA是很务实的选择。
我在开发板圈和工控圈见过很多朋友问“国产FPGA能学吗?”,我的回答都是“能,而且应该学”。无论是高云还是紫光同创、安路、易灵思,它们的基础开发流程、Verilog语法、时序约束思想,和Xilinx/Altera高度一致。先在国产器件上入门FPGA开发,把状态机、FIFO、PLL、UART这些基本功练熟,后面切到国际大厂平台,迁移成本很低。反过来,如果一开始就用旗舰芯片做入门,很多资源你在小项目里根本用不到,学习重点反而被带偏。
5.2 用国产FPGA做开发的甜头和弯路
既然讲到国产FPGA生态,我就把开发中碰到的实际情况摊开说。甜头方面,第一是上手成本低,国产FPGA开发板几百块能拿下,配套教程也越来越多,正点原子自家的资料库、B站视频都是中文的,对新手友好度比看英文手册高不少。第二是芯片供货稳定,这几年全球芯片供应链紧俏,国产器件的交期和价格反而稳定,做产品的人最在意这个。第三是很多器件支持内置Flash,上电即启动,外围电路省事,适合做小型化产品。
弯路也有几条,提前说出来帮大家避开。国产FPGA开发工具虽然一直在进步,但在编译速度、时序收敛报告、IP核丰富度上,和Vivado/Quartus还有差距。有些IP核要单独申请授权,文档有时候不够全,碰到问题只能去论坛翻帖子或者直接发邮件问原厂FAE。在做1GHz这类高速采样设计时,时钟约束和IO约束一定要从项目开始就写好,不要等布局布线跑出时序违规才回头补。还有一点,国产FPGA型号迭代快,同一系列不同后缀的芯片,其PLL能力、LVDS支持、内置Flash大小可能差别很大,选型时务必逐项核对数据手册,不能只看“同系列”就默认一致。
另外,我建议新手做第一个国产FPGA项目时,不要一上来就挑战高速ADC、MIPI接收这种复杂场景。先用它点亮一个数码管,跑一个UART,再挂一个SDRAM控制器,循序渐进地把基础模块调通。高速设计里很多问题不是逻辑写错了,而是约束没写全或者电源没处理好。等你能熟练读懂编译报告里的时序路径,用国产FPGA做逻辑分析仪这种级别的东西,就不存在“能不能”的问题了。
5.3 给正在选逻辑分析仪的读者的三个建议
拆完机器、测完几个典型场景之后,我按自己的经验给正在挑逻辑分析仪的朋友三条建议。
第一,别只看采样率,把“采样率-存储深度-通道数”看作一个整体。尤其是存储深度,它决定高采样率下你能抓到多长的波形。如果你主要调试低速协议,一个中等采样率加超大存储深度的设备,反而比1GHz小缓存设备更实用。反过来,如果你经常处理FPGA调试、DDR训练、高速串行接口,那1GHz采样加上够用的触发能力,就是值得投资的配置。
第二,看上位机软件和解码生态。逻辑分析仪的硬件决定“能采得多快”,上位机决定“能看得多懂”。一个解码器丰富、波形操作流畅、支持导出数据的软件,能把调试效率提高好几倍。买之前先下载厂商的软件试用一下,看看支持的协议列表,再对比硬件参数,别冲动下单。
第三,关注固件迭代能力。逻辑分析仪这种产品,硬件定型后,固件和上位机才是长期体验的分水岭。厂商愿不愿意持续更新协议解码器、修触发逻辑的Bug、优化USB传输效率,直接关系到你用了一年半载之后的体验。这也是我这次拆机格外关注FPGA的原因——如果主控是一颗可编程FPGA,意味着产品后期还有大量功能升级空间;如果主控是固定逻辑芯片,那出厂那天功能就锁死了。
我这台DL16 Plus拆完装回去之后,又顺手用它抓了一晚上的I2C时序。看着上万帧数据在屏幕上稳定滚过,再想想板子上那颗默默跑着多相位采样的国产FPGA,我最大的感受是:国产芯片不是不能做高速活,只是很多时候缺一个让人看见它们工作的机会。这次拆机,算是我给“默默加班”的它,点了个名。