ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

热成像机芯国产化:CH9251T+FPGA方案设计与实操

热成像机芯国产化:CH9251T+FPGA方案设计与实操 1. 热成像机芯的国产化拐点为什么CH9251T加FPGA是一条务实路线热成像机芯这个品类过去几年在安防、工业测温、户外夜视、电力巡检这些场景里需求量一直在涨但核心处理方案长期被几家海外厂商的专用SOC把持。做整机的朋友应该都有体会进口SOC交期不稳定价格说涨就涨而且很多型号对国内客户的技术支持力度有限遇到问题只能自己啃英文手册。这两年国产替代的呼声越来越高但真正能落地的方案并不多要么性能缩水明显要么开发门槛高得吓人。CH9251T加FPGA这套组合是我近期比较关注的一条路线。它的核心思路很清晰用CH9251T这类国产接口与处理芯片承担图像采集、预处理和部分控制逻辑用FPGA做实时性要求高的数据搬运、时序对齐和图像算法加速两者配合完成原本一颗进口SOC干的活。标题里说“性能不减成本直降”这话不能全信但方向是对的——关键在于你怎么用FPGA把CH9251T不擅长的部分补上。这篇文章适合几类人看正在做热成像机芯方案选型的硬件工程师、想从进口SOC迁移到国产方案但不知道从哪下手的嵌入式开发者、以及做FPGA图像处理项目想找一个真实落地场景练手的朋友。我会把方案选型逻辑、CH9251T和FPGA的分工边界、DDR读写与图像流水线的实操要点、以及调试中容易踩的坑都讲清楚。不是纸上谈兵都是可以拿去对着做的内容。先说结论这套方案不是简单地把进口SOC换成两颗国产芯片就完事它需要你重新划分系统职责。CH9251T负责它擅长的接口和基础处理FPGA负责实时流水线和并行计算两者通过合理的总线或并行接口衔接。做得好BOM成本能降下来供应链也稳做得不好就是两颗芯片互相拖后腿。下面我把整个设计思路拆开讲。2. 方案整体设计与核心器件分工拆解2.1 为什么不是单颗国产SOC直接替代很多人第一反应是既然要国产替代为什么不直接找一颗国产SOC把进口那颗换掉这个问题我专门花时间调研过。热成像机芯对处理链路有几个硬要求第一要能接红外探测器的原始数据接口常见的有LVDS、MIPI或者并口第二要做非均匀性校正、坏点替换、时域降噪这些预处理第三要输出标准视频格式给后端显示或编码第四整条链路的延迟要低尤其是户外夜视和工业测温场景延迟大了体验直接崩。市面上能同时满足这些要求的国产SOC不是没有但往往在某几个点上卡脖子。比如有些SOC的LVDS接收通道数不够接高分辨率探测器就吃力有些SOC的DDR带宽在跑多路图像处理时成为瓶颈还有些SOC的NPU或DSP对热成像这类灰度数据处理效率一般。更现实的问题是很多国产SOC的SDK成熟度不够你拿来做产品要填的坑比用进口方案还多。CH9251T加FPGA的思路本质上是把“通用处理”和“实时加速”分开。CH9251T可以理解为系统的主控和接口中枢负责启动流程、外设管理、图像基础处理和输出控制FPGA则像一个可编程的协处理器专门啃那些对时序和并行度要求高的活。这样你不需要一颗全能SOC而是用两颗各有所长的芯片拼出一个更灵活的方案。2.2 CH9251T在链路中到底承担什么角色CH9251T这颗芯片从公开资料和实际项目经验来看它的定位偏向于图像接口处理与系统控制。在热成像机芯里我通常让它承担这几件事一是接收红外探测器输出的原始数据做初步的格式转换和缓存二是运行非均匀性校正和坏点替换这类相对固定的算法三是管理整机的启动、配置和外设通信四是把处理好的图像数据通过并行接口或高速串行接口送给FPGA做进一步处理。这里有个关键点CH9251T的强项是接口丰富和系统集成度高但它的算力不是无限的。如果你把时域降噪、图像增强、缩放这些也全压给它它可能就跑不动高帧率了。所以我在设计时会把CH9251T的负载控制在合理范围内让它做“确定性高、计算量适中”的工作把“计算密集、实时性苛刻”的部分交给FPGA。2.3 FPGA的分工边界与选型考量FPGA在这套方案里主要干三类活。第一类是高速数据搬运和缓存管理比如把CH9251T送来的图像数据写入DDR再按显示时序读出来这中间涉及多端口读写和带宽分配。第二类是实时图像处理比如双线性插值缩放、时域递归降噪、直方图均衡的流水线实现。第三类是时序生成和接口桥接比如产生探测器需要的驱动时序或者把图像数据转换成MIPI、LVDS等标准视频接口输出。选型上我建议优先考虑带有足够DDR控制器硬核和高速收发器的FPGA。Xilinx的Zynq-7000系列或者Artix-7系列在这个场景里用得比较多资源利用率的分析很关键——你要提前算清楚图像流水线需要多少DSP、多少BRAM、多少逻辑单元。如果是成本敏感的产品国产FPGA如安路、高云的部分型号也可以评估但要注意IP核的成熟度和开发工具的易用性。我个人的经验是第一版方案用生态成熟的FPGA把功能跑通第二版再考虑换国产FPGA降本。2.4 两颗芯片之间的接口设计要点CH9251T和FPGA之间的接口是整个方案的咽喉。常见的选择有并行接口和高速串行接口两种。并行接口的优点是时序简单、延迟低缺点是引脚多、布线麻烦跑高分辨率高帧率时容易遇到信号完整性问题。高速串行接口如LVDS或MIPI引脚少、带宽高但对FPGA的SerDes资源和PCB走线要求高。我在实际项目中倾向于用LVDS并行接口数据位宽8到16位配合像素时钟和几个控制信号。这样FPGA端接收逻辑好写时序约束也清晰。如果图像分辨率超过1080p或者帧率超过60fps那就得考虑用高速串行接口了。接口设计时一定要留测试点方便用逻辑分析仪抓时序这个后面讲调试时会细说。3. 核心细节解析与实操要点3.1 图像数据流的完整路径拆解从红外探测器到最终显示输出数据要经过好几道手。我画不出图但可以用文字把路径说清楚。探测器输出原始模拟或数字信号经过前端调理后变成数字图像数据进入CH9251T。CH9251T做第一轮处理——通常是串并转换、帧同步、基础校正——然后通过并行接口把数据推给FPGA。FPGA收到数据后先写入DDR做帧缓存同时并行跑图像处理流水线。处理完的数据再从DDR读出按照输出接口的时序要求打包送给显示驱动或编码芯片。这条路径里最容易出问题的是三个地方一是CH9251T到FPGA的接口时序二是DDR读写带宽分配三是图像处理流水线的延迟。接口时序问题后面单独讲这里先说DDR。热成像常见的分辨率是640x512或者1280x1024帧率25到60fps。以1280x102460fps、16位灰度计算原始数据率大约是1.2Gbps。写入和读出各一次DDR的有效带宽至少要2.4Gbps再加上图像处理中间结果的缓存实际需要的带宽更高。所以DDR控制器的效率很关键不能只看理论峰值带宽。3.2 基于FPGA的多端口DDR读写设计多端口DDR读写是这套方案的核心技术点之一。FPGA内部通常有多个模块要访问DDR写入模块要把CH9251T送来的数据存进去读取模块要按显示时序把数据取出来图像处理模块可能还要读写中间帧。如果这些访问不做好仲裁就会出现某个模块饿死或者数据覆盖的问题。我的做法是在DDR控制器外面包一层仲裁逻辑用时分复用的方式分配带宽。具体来说给写入通道和读取通道分别设置优先级和突发长度。写入通道的优先级通常设高一些因为探测器数据是实时的丢了就补不回来。读取通道按显示时序走只要保证在行消隐期内把下一行数据准备好就行。图像处理模块的访问放在空闲周期里做。这里有个实操技巧DDR的突发长度不要设得太短否则命令开销会吃掉大量带宽。我一般用8或16的突发长度配合Bank交错访问实测下来带宽利用率能到70%以上。另外地址映射方式也很重要把图像的行地址映射到不同的Bank可以减少行切换带来的延迟。3.3 图像处理流水线的FPGA实现要点热成像的图像处理流水线通常包括非均匀性校正、坏点替换、时域降噪、图像增强和缩放。CH9251T可以承担前两项FPGA重点做后三项。时域降噪的经典做法是递归滤波把当前帧和上一帧按一定比例混合。这个算法在FPGA里实现时关键是要处理好帧缓存的读写冲突——上一帧的数据要从DDR读出来当前帧处理完要写回去同时还要输出给显示通道。我的经验是用乒乓缓存结构两块帧缓存交替读写避免同一块内存同时被读和写。递归系数用定点数表示通常取0.25到0.5之间具体值要根据场景调。系数太大降噪效果弱太小会有拖影。图像增强可以用直方图均衡或者自适应伽马校正直方图统计需要遍历整帧可以在写入DDR的同时顺便统计不额外占带宽。缩放用双线性插值FPGA实现时把权重计算做成查找表能省不少DSP资源。3.4 时钟域管理与时序约束这套方案里至少有三个时钟域探测器像素时钟、CH9251T的系统时钟、FPGA内部处理时钟可能还有DDR控制器时钟和输出接口时钟。跨时钟域的数据传递必须做同步处理否则亚稳态问题会让你调到头秃。我的做法是在CH9251T到FPGA的接口上用异步FIFO做缓冲FIFO的写时钟用像素时钟读时钟用FPGA处理时钟。FIFO深度要算够至少能缓冲两行图像数据防止时钟抖动导致溢出。DDR控制器和图像处理模块之间也用FIFO隔离因为DDR的访问延迟是不确定的。时序约束方面输入接口的建立保持时间要按芯片手册严格约束输出接口的时序也要根据后端器件的需求来设。我见过太多项目因为时序约束没做好功能仿真全过上板就花屏。注意跨时钟域信号一定要用两级触发器同步多比特信号要用格雷码或者握手协议不要直接打拍。4. 实操过程与核心环节实现4.1 硬件平台搭建与上电检查第一版硬件回来之后不要急着上电跑图像。先做电源检查确认各路电压正常特别是FPGA的内核电压和DDR的参考电压。然后用JTAG连接FPGA看能不能识别到器件。CH9251T那边先不跑程序确认晶振起振、复位信号正常。接下来是时钟检查。用示波器量像素时钟、系统时钟和DDR时钟的频率和抖动。我遇到过晶振负载电容选错导致频率偏了几百ppm的情况虽然能跑但长时间会出问题。DDR的时钟尤其要注意差分时钟的交叉点要落在合理范围否则读写会随机出错。电源和时钟都正常后先烧一个最简单的LED闪烁程序到FPGA确认配置电路没问题。然后再烧DDR测试程序跑MemTest确认DDR读写正常。这一步不能省DDR有问题后面所有图像处理都是白搭。4.2 CH9251T的配置与数据输出调试CH9251T的配置通常通过I2C或SPI接口完成上电后需要加载一组寄存器配置。这些配置值一般由厂家提供但你要理解每个关键寄存器的含义不然出了问题不知道怎么改。我重点关注的寄存器包括输入接口模式、数据位宽、帧同步极性、输出接口时序参数。配置完成后用逻辑分析仪抓CH9251T的输出接口。先看有没有像素时钟再看帧同步和行同步信号是否正常最后看数据线上的数据有没有在变化。如果数据线一直是固定值可能是探测器没接好或者CH9251T的输入配置不对。如果数据在变但图像不对可能是时序极性搞反了。这里有个实用技巧让CH9251T输出一个测试图案比如渐变灰度或者棋盘格这样你在FPGA端接收时就能直观判断数据对不对。很多厂家支持这个功能调试阶段一定要用起来。4.3 FPGA端图像接收与DDR缓存的联调FPGA端的图像接收模块核心是一个状态机加一个异步FIFO。状态机根据帧同步和行同步信号判断当前处于哪一行哪一列把有效数据写进FIFO。FIFO读出的数据再写入DDR。写入DDR时要注意地址生成每写完一行地址要跳转到下一行的起始地址每写完一帧要切换帧缓存的Bank。联调时我习惯先用一个简单的计数器代替真实图像数据往DDR里写固定图案然后读出来验证。确认读写通路没问题后再接入CH9251T的真实数据。这时候用FPGA的在线逻辑分析仪比如Xilinx的ILA抓几个关键信号FIFO的写使能、写数据、DDR的写地址、读地址、读数据。对比写入和读出的数据是否一致如果不一致检查FIFO是否溢出、DDR地址是否算错、时序是否满足。4.4 图像处理流水线的逐步验证图像处理流水线不要一次性全加上要一个模块一个模块验证。先做直通数据从DDR读出后直接送显示接口确认显示正常。然后加缩放用测试图案验证缩放后的图像比例和边缘是否正确。再加时域降噪观察静态场景下噪声是否降低、运动场景下是否有拖影。最后加图像增强看对比度和亮度是否合适。每个模块验证时都要用真实的红外图像不要只用测试图案。红外图像的动态范围和人眼习惯的可见光图像差别很大用测试图案调好的参数换到真实图像上可能完全不能用。我一般会准备几段不同场景的红外视频数据存在SD卡里调试时循环播放。4.5 系统联调与性能测试所有模块单独验证通过后做整机联调。联调的重点是看端到端延迟和长时间稳定性。端到端延迟的测量方法在探测器前面放一个快速变化的红外源比如用手快速划过用高速相机拍显示屏幕数一下从动作发生到屏幕变化之间的帧数。热成像机芯的延迟一般要求控制在3帧以内也就是50到100毫秒。长时间稳定性测试至少跑24小时观察有没有花屏、死机、图像漂移。我遇到过DDR温度升高后读写出错的案例后来在DDR控制器里加了温度补偿刷新才解决。还有一次是FPGA的电源纹波太大导致高速接口误码换了LDO就好了。这些坑只有实际跑过才会遇到。5. 常见问题与排查技巧实录5.1 图像花屏与数据错位的排查思路花屏是这套方案最常见的故障。排查时按数据流方向从后往前查。先看显示接口的输出时序对不对用示波器量行同步、场同步和像素时钟的相位关系。如果输出时序没问题再往上看DDR读出的数据对不对用ILA抓DDR读数据和写入的数据对比。如果DDR读写不一致检查DDR控制器的配置和时序约束。如果DDR没问题再看CH9251T到FPGA的接口重点查FIFO有没有溢出、跨时钟域同步有没有做好。我整理了一个速查表按现象分类现象可能原因排查方法整屏花DDR读写错误或时钟失锁跑MemTest查DDR时钟规律性条纹行地址计算错误或FIFO溢出查地址生成逻辑看FIFO满标志图像偏移帧同步极性反了或消隐期没对齐用逻辑分析仪抓同步信号随机噪点跨时钟域亚稳态或电源纹波查同步逻辑量电源纹波图像卡顿DDR带宽不足或仲裁不合理统计DDR带宽利用率调优先级5.2 DDR带宽不足的优化手段DDR带宽不够的表现是图像卡顿、掉帧或者处理延迟变大。优化手段有几个方向。第一提高突发长度减少命令开销。第二优化地址映射让连续访问落在同一个Bank的不同行减少行切换。第三压缩数据位宽比如把16位灰度压缩成12位存储读出后再扩展。第四降低帧率或分辨率这是最后的手段。我实测过一个案例1280x102460fps的16位图像原始DDR带宽需求约2.4Gbps用8突发长度和Bank交错后实际带宽利用率从50%提升到75%卡顿就消失了。如果还不够可以考虑用两块DDR做乒乓但成本会增加。5.3 跨时钟域导致的随机故障跨时钟域问题最恶心的地方是它随机出现可能跑几个小时才出一次。表现可能是偶尔一行数据错、偶尔一帧图像闪、或者DDR写入地址跳变。排查方法是把所有跨时钟域的信号列出来逐个检查同步逻辑。单比特信号用两级触发器多比特信号用格雷码或者异步FIFO。异步FIFO的深度要算够读写指针的同步也要做对。提示跨时钟域信号在综合后要做时序约束用set_false_path或者set_clock_groups告诉工具这些路径不需要时序分析否则工具会报一堆无法满足的时序违例。5.4 国产替代过程中的供应链与技术支持问题国产替代不只是技术问题还有供应链和技术支持。CH9251T的供货稳定性比进口芯片好很多但你要提前和厂家确认长期供货计划。技术支持方面国产芯片的原厂FAE响应速度通常更快但文档和参考设计可能不如进口芯片完善。我的建议是在项目初期就和原厂建立联系拿到最新的数据手册和参考设计遇到问题直接找FAE不要自己硬扛。另外FPGA的选型也要考虑供应链。Xilinx和Intel的FPGA交期在过去几年波动很大如果产品量大可以考虑国产FPGA做备份方案。但国产FPGA的IP核和开发工具还需要时间成熟第一版产品用成熟平台第二版再评估切换。5.5 成本核算与BOM优化经验标题说“成本直降”到底能降多少我算过一笔账进口SOC方案里那颗SOC加上配套的DDR和电源芯片BOM成本大概在某个数。CH9251T加FPGA方案里CH9251T价格有优势但FPGA和额外的DDR会增加成本。最终能不能降取决于你的FPGA选型和DDR容量。如果FPGA选得太大、DDR配得太足成本可能反而上去。我的经验是FPGA选刚好够用的型号DDR容量按最大分辨率和帧率算留20%余量就行。另外CH9251T和FPGA可以共用一路DDR省掉一颗内存芯片。电源设计也可以简化用多路输出的PMIC代替多颗LDO。这些细节加起来BOM成本能比进口方案低不少具体数字要看你的采购量和谈判能力。6. 方案扩展与个人实操体会这套CH9251T加FPGA的架构跑通之后可以扩展的方向不少。比如加一路MIPI输出直接驱动手机屏或者HDMI转换芯片比如在FPGA里加一个简单的目标检测算法做热点追踪比如把图像数据通过以太网或者USB传出去做远程测温。FPGA的灵活性就在这里你想加什么功能只要资源够改改逻辑就行。我个人在实际操作中的体会是这套方案的门槛不在单颗芯片而在系统联调。CH9251T和FPGA各自都能跑但把它们拼在一起接口时序、时钟域、DDR仲裁、图像流水线延迟每一个环节都可能出问题。我的建议是分阶段验证不要想着一次投板就成功。第一版硬件把接口和DDR跑通第二版再加图像处理第三版优化成本和功耗。这样虽然慢一点但每一步都踏实。最后分享一个小技巧调试图像系统时在FPGA里做一个“图像冻结”功能按一个按键就把当前帧锁住方便你用逻辑分析仪慢慢抓数据。这个功能花不了多少资源但能省你大量调试时间。另外ILA的采样深度要设够至少能抓一整行图像数据不然看不到完整的问题现场。
返回列表