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 | 行缓存、查找表、FIFO |
| DSP块 | 约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可以用CYUSB3014,GigE可以用一颗带MAC的MCU或者专用芯片。
如果输出接口的带宽要求不高,也可以考虑用LVDS或者并行接口直接输出到采集卡。这种方式在嵌入式视觉系统里很常见,延迟低、确定性好。
不管用哪种接口,FPGA这边都要做一个输出控制器,把预处理后的图像数据按照接口协议打包发送。如果是USB3.0,通常用Slave FIFO模式,FPGA把数据写进FX3的FIFO,FX3负责USB协议和传输。这里要注意FIFO的满标志和空标志,别写溢出或者读空。
4. 低功耗实战:从百毫瓦到更低的优化路径
4.1 功耗构成分析与测量方法
做低功耗设计,第一步是搞清楚功耗花在哪里了。Ti60的功耗主要分三块:静态功耗、动态功耗、IO功耗。静态功耗是芯片上电就有的,跟工艺和温度有关;动态功耗跟时钟频率和逻辑翻转率有关;IO功耗跟接口速率和负载有关。
测量方法上,我一般会在电源树的每一路串一个精密电阻,用示波器或者万用表测压降来算电流。更精细的做法是用功耗分析仪,但那个设备比较贵。Ti60的开发工具里也有功耗估算工具,可以根据你的设计给出一个预估值,但实测才是王道。
我实测过的一个典型配置:Ti60跑100MHz,MIPI接收1080p@60fps,预处理流水线全开,核心电压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.526mm,CS口是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的资源对于中等复杂度的工业视觉应用来说绰绰有余,工具链也算好用。如果你也在做类似的项目,希望这些经验能帮你少走点弯路。