ARTICLE DETAIL

资讯详情

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

基于Ti60 FPGA的低功耗工业相机硬件设计与MIPI调试实战

基于Ti60 FPGA的低功耗工业相机硬件设计与MIPI调试实战 1. 为什么偏偏是Ti60这颗小芯片1.1 工业相机对主控的真实需求做工业相机这行的人都知道方案选型阶段最纠结的从来不是能不能跑起来而是跑起来之后功耗和体积能不能压得住。一台典型的工业相机核心链路无非是图像传感器出数据、主控做预处理、接口把数据送到上位机。听起来简单但真正落到硬件上每个环节都在跟你抢功耗预算和PCB面积。我接触过不少用MCU做工业相机的方案STM32系列、GD32系列都试过做低帧率、低分辨率的场景勉强够用但一旦上到全局快门、100fps以上、或者需要多路LVDS并行接收MCU的算力和IO带宽就顶不住了。这时候就得上FPGA。但传统FPGA方案有个老问题大厂的中高端芯片功耗动辄一两瓦封装也大做出来的相机模组又热又占地方客户一看就摇头。易灵思的Ti60恰好卡在一个很微妙的位置上。它属于Trion系列主打的就是低功耗小封装同时又有足够的逻辑资源和硬核IP来应付工业相机的典型负载。我第一次拿到Ti60F225这颗芯片的datasheet时第一反应是这玩意儿真小——F225封装只有10x10mm引脚间距0.5mm放在工业相机那种紧凑的板子上几乎不占地方。但它的逻辑单元有将近6万个内置了MIPI硬核、LVDS接收器、DSP块这些恰好是工业相机最需要的。1.2 Ti60的核心资源拆解先把Ti60的关键资源列一下方便后面展开资源类型规格工业相机场景下的用途逻辑单元约60000 LE图像预处理、时序控制、接口协议嵌入式存储约1.8Mb行缓存、查找表、FIFODSP块约30个定点数运算、滤波、去马赛克MIPI硬核支持CSI-2直连MIPI图像传感器LVDS接收多通道接收LVDS接口传感器数据封装F225 (10x10mm)紧凑型相机模组功耗典型百毫瓦级低功耗工业相机这里要特别说一下MIPI硬核。很多FPGA做MIPI接收是靠软核SelectIO硬扛时序收敛困难不说功耗也下不来。Ti60内置了MIPI CSI-2的硬核控制器意味着你可以直接把图像传感器的MIPI差分对接到FPGA的专用引脚上省掉外部桥接芯片BOM成本和PCB面积都省了。这一点在做小型化工业相机时非常关键。1.3 和常见方案的横向对比有人会问为什么不用Lattice的CrossLink或者高云的GW1N系列这几个确实也是低功耗小封装路线。我的实际体验是CrossLink的MIPI硬核很强但逻辑资源偏少做复杂的图像预处理会吃力高云的GW1N性价比不错但开发工具链的成熟度还需要时间积累。Ti60在逻辑资源、硬核IP、工具链成熟度之间找到了一个比较平衡的点。至于Xilinx的Spartan或者Artix系列性能没得说但功耗和封装尺寸摆在那里做超小型低功耗相机模组时不太合适。Intel的Cyclone系列也是类似的情况。所以如果你的目标是一台功耗在几百毫瓦以内、体积控制在30x30mm以内的工业相机Ti60确实值得认真考虑。2. 硬件设计从传感器到接口的完整链路2.1 图像传感器选型与接口匹配工业相机的传感器选型决定了整个硬件架构。常见的接口类型有三种MIPI CSI-2、LVDS、并行DVP。Ti60对这三种都有支持但优先级不同。MIPI CSI-2是最省事的选择。Ti60的硬核直接支持你只需要把传感器的差分对按照正确的lane映射接到FPGA的MIPI专用bank上就行。注意MIPI的差分对要走等长阻抗控制在100欧姆这个在PCB叠层设计时就要规划好。我一般会在传感器和FPGA之间留一组串联电阻的位置方便后期调试时做阻抗匹配微调。LVDS接口在工业相机里也很常见尤其是Sony的IMX系列很多型号都提供LVDS输出。Ti60的LVDS接收器支持到比较高的速率但要注意LVDS的共模电压和MIPI不一样不能直接混接。如果你的传感器是LVDS输出需要在PCB上做好终端匹配通常是在差分对之间跨接100欧姆电阻。并行DVP接口是最传统的但引脚多、速率低现在新设计基本不推荐了。除非你用的是很老的传感器或者对成本极度敏感否则没必要走这条路。2.2 电源树设计与低功耗策略低功耗设计不是选一颗低功耗芯片就完事了电源树的规划同样重要。Ti60需要多路电源核心电压、IO电压、MIPI硬核电压、PLL电压等。每一路的电压值和上电时序都有要求搞错了轻则功能异常重则芯片损坏。我的做法是先用一颗低功耗的PMIC或者多路LDO来生成这些电压。LDO的效率虽然不如DCDC但纹波小、噪声低对图像质量有好处。如果功耗预算特别紧核心电压那一路可以用DCDC但要注意开关噪声对MIPI差分对的干扰布局时DCDC要远离模拟部分。上电时序方面Ti60要求核心电压先上IO电压后上具体的时间间隔参考datasheet里的Power-Up Sequence章节。我一般会在电源树上加一些RC延时或者用PMIC的时序控制引脚来保证顺序。这里踩过的坑是有一次IO电压比核心电压先上结果FPGA内部出现了闩锁芯片发烫但功能不正常换了时序之后就好了。低功耗策略还包括时钟管理。Ti60的PLL可以动态配置不需要高速时钟的时候把它降频或者关掉能省不少功耗。图像传感器的时钟也可以由FPGA输出根据帧率需求动态调整。这些在固件里都可以做。2.3 PCB布局布线的关键细节F225封装的引脚间距是0.5mm走线宽度和间距都要按这个来。我一般用4层板顶层走信号和元件第二层完整地平面第三层电源平面底层走低速信号和调试接口。如果信号速率比较高可以考虑6层板把高速信号单独一层。MIPI差分对的布线是重点。等长要求通常在5mil以内差分阻抗100欧姆尽量少打过孔。如果非要打过孔两个差分线要一起打保持对称。差分对之间要保持足够的间距一般建议3倍线宽以上减少串扰。晶振和PLL的滤波电路要靠近FPGA放置滤波电容的接地要短而粗。图像传感器的供电引脚旁边要放足够的去耦电容通常是一个大电容加几个小电容的组合。这些细节看起来琐碎但实际调试时图像上的噪声、条纹往往就是这些地方没做好导致的。3. FPGA内部逻辑设计从数据接收到图像输出3.1 MIPI CSI-2数据接收与解析Ti60的MIPI硬核配置好之后接收到的数据是CSI-2协议格式的。你需要自己写逻辑来解析协议层先检测帧起始FS、帧结束FE然后从数据包里提取有效像素数据。CSI-2有短包和长包之分短包用来传同步信息长包才是真正的图像数据。解析的时候要注意字节对齐和lane对齐。MIPI是多lane并行的如果lane之间的偏斜太大数据就会错位。Ti60的硬核有lane对齐的功能但需要你在配置时使能。我一般会在硬核输出后面加一个FIFO来做时钟域转换和缓冲然后再进协议解析模块。协议解析的状态机不算复杂但边界情况很多。比如帧起始包可能出现在任何时刻你要保证状态机能正确复位。还有ECC校验CSI-2的包头有ECC保护如果校验失败说明传输有误这时候要丢弃这一帧或者做重传处理。工业相机对图像完整性要求高我一般会选择丢弃错误帧而不是凑合用。3.2 图像预处理流水线设计图像预处理是FPGA在工业相机里最有价值的部分。常见的处理包括坏点校正、去马赛克、白平衡、Gamma校正、边缘增强等。这些算法在PC上跑很容易但在FPGA里要用定点数实现还要考虑流水线架构。去马赛克Demosaic是Bayer格式传感器的必备步骤。最简单的算法是双线性插值每个像素的颜色值由周围同色像素平均得到。这个算法在FPGA里实现需要行缓存通常缓存3行就够了。Ti60的嵌入式存储有1.8Mb做几行缓存绰绰有余。定点数运算要注意位宽和精度。比如白平衡的增益系数用8位整数部分加8位小数部分Q8.8格式通常够用。Gamma校正可以用查找表实现把256个输入值对应的输出值预先算好存在ROM里。Ti60的存储资源做这个很轻松。流水线的设计原则是每一级只做一件事级与级之间用寄存器隔开。这样虽然会增加一点延迟但能跑到很高的时钟频率。我一般会把预处理流水线跑到100MHz以上这样即使高分辨率高帧率也能实时处理。3.3 输出接口与上位机通信工业相机的输出接口常见的有USB3.0、GigE、CoaXPress等。Ti60本身不带这些高速接口的硬核所以需要外接桥接芯片。USB3.0可以用CYUSB3014GigE可以用一颗带MAC的MCU或者专用芯片。如果输出接口的带宽要求不高也可以考虑用LVDS或者并行接口直接输出到采集卡。这种方式在嵌入式视觉系统里很常见延迟低、确定性好。不管用哪种接口FPGA这边都要做一个输出控制器把预处理后的图像数据按照接口协议打包发送。如果是USB3.0通常用Slave FIFO模式FPGA把数据写进FX3的FIFOFX3负责USB协议和传输。这里要注意FIFO的满标志和空标志别写溢出或者读空。4. 低功耗实战从百毫瓦到更低的优化路径4.1 功耗构成分析与测量方法做低功耗设计第一步是搞清楚功耗花在哪里了。Ti60的功耗主要分三块静态功耗、动态功耗、IO功耗。静态功耗是芯片上电就有的跟工艺和温度有关动态功耗跟时钟频率和逻辑翻转率有关IO功耗跟接口速率和负载有关。测量方法上我一般会在电源树的每一路串一个精密电阻用示波器或者万用表测压降来算电流。更精细的做法是用功耗分析仪但那个设备比较贵。Ti60的开发工具里也有功耗估算工具可以根据你的设计给出一个预估值但实测才是王道。我实测过的一个典型配置Ti60跑100MHzMIPI接收1080p60fps预处理流水线全开核心电压1.2V总功耗大概在300mW左右。如果把帧率降到30fps时钟降到50MHz功耗能降到150mW以下。这个水平在工业相机里已经相当能打了。4.2 时钟与电源域的动态管理降低动态功耗最直接的办法就是降频。但工业相机有时候需要高帧率不能一直降。所以要做动态管理相机空闲的时候降频或者关时钟采集的时候再升上去。Ti60的PLL支持动态重配置你可以在运行时改变输出频率。具体做法是写PLL的配置寄存器然后等待锁定。这个过程需要几百微秒所以不能频繁切换。我一般会在帧间消隐期做这个操作不影响正常采集。电源域方面如果某些模块在特定模式下不需要工作可以把它的时钟关掉。Ti60的工具链支持时钟门控你可以在代码里用使能信号来控制。注意关时钟之前要确保模块处于空闲状态否则可能出现亚稳态或者数据丢失。4.3 逻辑优化降低翻转率动态功耗和逻辑翻转率成正比。同样的功能不同的写法功耗可能差很多。几个实用的优化技巧第一用使能信号控制计数器和大位宽寄存器的翻转。比如一个32位计数器如果只在特定条件下才需要计数就加一个使能不需要的时候让它保持。第二状态机用独热码还是二进制码要看情况。独热码翻转的位少但用的寄存器多二进制码用的寄存器少但翻转的位可能多。在低功耗场景下如果寄存器资源不紧张独热码往往更省功耗。第三存储器访问要优化。Block RAM的读写功耗比分布式RAM低大容量的缓存尽量用Block RAM。读写的时候用使能信号控制不需要的时候别让它一直读。这些优化单个看效果不大但累积起来能省20%到30%的动态功耗对于功耗敏感的应用很值得做。5. 调试过程中踩过的坑与排查经验5.1 MIPI接收不到数据的常见原因MIPI调试是工业相机硬件里最容易出问题的环节。我遇到过好几次传感器有输出但FPGA收不到的情况排查下来原因各不相同。最常见的是lane映射错了。MIPI的lane有正负之分PCB上如果P和N接反了数据肯定收不到。这时候要用示波器看差分信号确认极性。Ti60的MIPI硬核支持lane极性反转的配置如果PCB已经做错了可以在配置里改过来。第二个常见原因是时钟频率不匹配。MIPI的时钟是差分时钟频率由传感器决定。如果FPGA的MIPI硬核配置的时钟范围不对就锁不住。这个要仔细看传感器的datasheet确认时钟频率范围然后在Ti60的配置工具里设置正确的参数。第三个原因是初始化序列不对。很多MIPI传感器需要先通过I2C写一堆寄存器才能出图。如果I2C没通或者寄存器写错了传感器根本不出数据。我一般会先用逻辑分析仪抓I2C波形确认寄存器写入正确然后再看MIPI。5.2 图像出现条纹或噪声的排查思路图像上有条纹或者噪声原因可能来自电源、时钟、PCB布局或者逻辑设计。排查的时候要一步步排除。先看电源纹波。用示波器交流耦合测传感器和FPGA的电源引脚如果纹波超过几十毫伏就要加强滤波。我遇到过DCDC开关噪声通过电源平面耦合到MIPI差分对的情况后来在DCDC输出加了一级LC滤波就好了。再看时钟质量。MIPI的参考时钟如果有抖动会导致数据采样错误。用相位噪声分析仪或者高带宽示波器看时钟的抖动如果超标就要换晶振或者优化PLL配置。最后看逻辑设计。如果预处理流水线里有跨时钟域的信号没处理好也会导致图像异常。检查所有跨时钟域的地方确保用了正确的同步器或者异步FIFO。5.3 功耗异常升高的定位方法功耗突然升高一般是某个模块出现了异常翻转或者短路。我的排查步骤是第一步用热成像仪看FPGA表面温度分布。如果某个区域特别热说明那个区域的逻辑在疯狂翻转。第二步在电源线上串电流探头看电流波形。如果电流有周期性尖峰说明某个模块在周期性工作。第三步用工具链的在线逻辑分析仪抓内部信号。看看有没有信号在不应该翻转的时候翻转了。我遇到过一次功耗异常最后发现是一个状态机在某个边界条件下进入了死循环导致大量逻辑不停翻转。改了状态机的默认分支就好了。这种问题在仿真时不一定能发现因为仿真激励可能没覆盖到那个边界条件。6. 工业相机镜头选型与系统联调6.1 镜头选型的关键参数FPGA和硬件都调通之后镜头选型就是决定成像质量的关键了。工业相机的镜头选型主要看几个参数焦距、光圈、接口、分辨率匹配。焦距决定了视场角。计算公式是视场角 2 * arctan(传感器尺寸 / (2 * 焦距))。比如1/1.8英寸的传感器对角线约8.9mm如果用8mm焦距的镜头视场角大约是58度。这个要根据实际拍摄距离和视野需求来算。光圈影响进光量和景深。工业场景通常需要较大的景深所以光圈不能太大一般F4到F8比较常用。但光圈小了进光量就少需要加强照明或者提高传感器增益。接口常见的有C口、CS口、M12等。C口和CS口的区别是法兰距不同C口是17.526mmCS口是12.5mm。选错了装不上或者对不上焦。分辨率匹配是指镜头的解析力要跟传感器像素密度匹配。如果镜头解析力不够再高的传感器分辨率也白搭。一般要求镜头的MTF在传感器奈奎斯特频率处还有足够的对比度。6.2 系统联调与性能验证所有硬件和固件都就绪之后要做系统联调。我一般按这个顺序来先单独测试图像传感器确认能出图。用FPGA的在线逻辑分析仪抓MIPI数据看帧起始、帧结束、像素数据是否正确。然后测试预处理流水线把原始Bayer数据和处理后的RGB数据都抓出来对比确认去马赛克、白平衡等算法工作正常。接着测试输出接口把图像传到上位机用图像采集软件看实时画面。这时候要注意帧率是否稳定有没有丢帧。最后做性能验证测不同光照条件下的图像质量测长时间运行的稳定性测功耗和温度。工业相机通常要求7x24小时运行所以老化测试不能省。6.3 常见问题速查表现象可能原因排查方法解决措施无图像MIPI未锁定查MIPI状态寄存器检查lane映射和时钟配置图像有条纹电源纹波大示波器测电源加强滤波优化布局图像偏色白平衡未校准对比原始数据重新计算白平衡增益帧率不稳时钟抖动测时钟相位噪声换晶振或优化PLL功耗偏高逻辑异常翻转热成像电流探头优化代码加时钟门控长时间运行死机时序违例查时序报告降频或优化逻辑这张表是我自己调试时总结的基本上覆盖了80%的常见问题。实际遇到问题时按这个思路走能省不少时间。7. 一些实操心得和后续扩展方向做Ti60工业相机这个项目前后折腾了大概三个月从选型、画板、打样、调试到最终出图中间踩的坑比预想的多。最大的体会是低功耗设计是一个系统工程不是选一颗低功耗芯片就完事了。电源树、时钟、逻辑翻转率、PCB布局每一个环节都会影响最终功耗。我见过太多方案芯片选得很省但整体功耗下不来的情况问题往往出在系统级设计上。另一个体会是MIPI调试要有耐心。MIPI协议本身不复杂但物理层的信号完整性很讲究。PCB布局差一点眼图就闭合了数据就收不到。我现在的习惯是MIPI差分对一定走内层参考平面完整过孔尽量少终端匹配电阻靠近接收端放。后续如果要扩展有几个方向可以考虑一是加一路低功耗蓝牙用于相机的无线配置和状态监控二是把预处理算法升级比如加边缘检测或者简单的目标识别用Ti60的DSP块做定点数运算完全够用三是优化电源管理加入动态电压频率调节DVFS根据负载实时调整核心电压和频率进一步压低功耗。这个平台的可玩性其实挺高的Ti60的资源对于中等复杂度的工业视觉应用来说绰绰有余工具链也算好用。如果你也在做类似的项目希望这些经验能帮你少走点弯路。
返回列表