<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>流水线 on TiJet</title><link>https://www.tainuohc.com/tags/%E6%B5%81%E6%B0%B4%E7%BA%BF/</link><description>Recent content in 流水线 on TiJet</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Mon, 20 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.tainuohc.com/tags/%E6%B5%81%E6%B0%B4%E7%BA%BF/index.xml" rel="self" type="application/rss+xml"/><item><title>FPGA 加速视觉检测：从 200ms 到 8µs 的延迟优化之路</title><link>https://www.tainuohc.com/blog/2026-07-20-fpga-acceleration/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tainuohc.com/blog/2026-07-20-fpga-acceleration/</guid><description>&lt;h2 id="1-问题的原点软件视觉检测撞上性能墙">1. 问题的原点：软件视觉检测撞上性能墙&lt;/h2>
&lt;p>在泰诺的 PCB 印刷产线中，锡膏检测（SPI）是核心品控环节。每一块经过产线的 PCB 仅有不到 50ms 的时间窗口用于缺陷检测——超出这个时间，整条产线就会产生背压。&lt;/p>
&lt;p>多年来，我们一直使用基于 GPU 加速的 OpenCV 流水线运行在 x86 边缘节点上。方案确实能用——但仅限低负载场景。当检测分辨率提升到 8K 级别后，单帧处理延迟偶尔飙升至 180~220ms。这 180ms 的抖动意味着漏检、误放行和产线拥塞。根本原因在于架构：通用 GPU 流水线无论怎样优化，都无法消除调度延迟和 PCIe 传输开销的不确定性。&lt;/p>
&lt;h2 id="2-为什么选择-fpga硬件流水线的不可替代性">2. 为什么选择 FPGA：硬件流水线的不可替代性&lt;/h2>
&lt;p>我们决定将整条检测流水线下沉到 FPGA，让芯片直接对接图像传感器的 MIPI 接口。核心理由有三：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>流式架构&lt;/strong>：像素从 ADC 输出的那一刻就开始逐级流过流水线，不存在帧缓存、DMA 传输和内核上下文切换。&lt;/li>
&lt;li>&lt;strong>确定性延迟&lt;/strong>：精心设计的流水线具有精确的 &lt;code>N&lt;/code> 个时钟周期的像素延迟，&lt;code>N&lt;/code> 即流水线总深度，不存在方差。&lt;/li>
&lt;li>&lt;strong>能效优势&lt;/strong>：FPGA 方案功耗约 4W，而同等工作负载在 GPU 边缘节点上需要 45W。&lt;/li>
&lt;/ul>
&lt;h2 id="3-架构设计">3. 架构设计&lt;/h2>
&lt;p>我们在 Xilinx Kintex-7 上实现了五级流水线：&lt;/p>
&lt;pre tabindex="0">&lt;code>Sensor → Bayer2RGB → 色彩校正 → 二值化/阈值 → 连通域检测 → 判定锁存
 ↓ ↓ ↓ ↓ ↓ ↓
 MIPI 第1级 第2级 第3级 第4级 第5级
 (原始) (3周期) (2周期) (1周期) (8周期) (1周期)
&lt;/code>&lt;/pre>&lt;p>总流水线深度：&lt;strong>15 个时钟周期&lt;/strong>。在 200MHz 时钟下，单个像素从进入到缺陷标志输出的延迟为 &lt;strong>75 纳秒&lt;/strong>。整帧图像以行速率流转，8K × 8K 的帧在传感器输出完成的同时即完成检测——&lt;strong>不引入任何额外延迟&lt;/strong>。&lt;/p></description></item></channel></rss>