Skip to content

理解 PCLK 和 HSYNC

复制本地路径 | 在线编辑

讲一下 PCLK

answer

👉 PCLK = 像素数据输出的时钟信号

你可以理解为:

👉 “我现在输出一个像素了,你赶紧读!”的节奏信号

👉 一个简单时序图(非常关键)

PCLK:   ↑   ↑   ↑   ↑   ↑   ↑
DATA:  D0  D1  D2  D3  D4  D5

👉 每一个 PCLK 上升沿:

  • 输出一个像素数据

为什么必须要 PCLK

因为数据是并行/串行输出的:

👉 接收端(FPGA / ISP)必须知道:

  • 什么时候采样数据
  • 哪个数据是有效的

否则会发生:

  • 读错位
  • 数据乱掉
  • 图像错行

我没太懂 PCLK,既然他是决定什么时候给我数据,那我越大不就越好吗

answer

你这个直觉“PCLK 越大越好”其实很常见,但结论是:

不一定,甚至很多时候更大反而更容易出问题

关键在于:
👉 PCLK 不是“性能开关”,而是“系统节奏”

我们把它讲透,你就会彻底明白。

你的误解

因为直觉是:

PCLK ↑ → 每秒像素 ↑ → 帧率 ↑ → 更好

这在理想数学世界是对的,但现实里有很多限制👇

真正的限制(核心)

1️⃣ 传输带宽限制

你可以把系统看成一条流水线:

Sensor → 接口 → 线缆 → 接收端(FPGA/PC)

👉 如果 PCLK 太大:

  • 数据来不及传
  • 会丢数据 / 错位

2️⃣ 接收端采样能力(很关键)

PCLK 越高:

👉 采样窗口越窄

低频:
   DATA  ────────稳定────────
   CLK    ↑        ↑

高频:
   DATA  ──抖动──
   CLK    ↑ ↑ ↑ ↑

👉 问题:

  • setup/hold time 不满足
  • 时序违例
  • 读错数据

3️⃣ 信号完整性(硬件层面)

高频信号会带来:

  • 反射
  • 串扰
  • 抖动(jitter)
  • EMI

👉 结果:

  • 图像出现:

  • 随机噪点

  • 条纹
  • 错列

4️⃣ Sensor 本身限制

PD → 电荷 → 电压 → ADC

这一套是有物理时间的

👉 如果 PCLK 太高:

  • ADC 来不及转换
  • 噪声上升
  • 精度下降

5️⃣ 功耗 & 发热

PCLK ↑ → 切换频率 ↑

👉 导致:

  • 功耗增加
  • 温度上升
  • 噪声变大(特别是你做 PRNU 会看到)

一个更正确的理解方式

你应该这样想:

👉 PCLK 必须“刚好匹配整个系统能力”

而不是越大越好。

真正决定帧率的不是 PCLK

很多人误解这一点!

帧率公式(核心)

FrameRate = PCLK / (HTOTAL × VTOTAL)
  • HTOTAL:一行总像素(含 blanking)
  • VTOTAL:总行数(含 blanking)

提高帧率有三种方式:

  1. 提高 PCLK ✅
  2. 减少 blanking ✅(更常用)
  3. 降低分辨率 ✅

👉 工业上通常是组合优化

对 blanking 的理解,可以看这篇文章

那么 HSYNC 和 VSYNC 是干什么的

answer

简单总结:

1. HSYNC (Horizontal Sync)

  • 每行同步信号
  • 表示一行数据开始/结束
  • 用于外部显示或采集设备识别行边界
  • 作用类似“行的分隔符”

2. VSYNC (Vertical Sync)

  • 每帧同步信号
  • 表示一帧图像开始/结束
  • 用于外部设备识别帧边界

一句话:

HSYNC 和 VSYNC 是行/帧的同步信号,告诉外部设备数据边界,保证图像正确显示或采集。

相当于先给 HSYNC,然后开始依次有序的 PCLK

answer

对,理解正确:

  • 每行 HSYNC 拉高 → 紧跟 N 个 PCLK 对应该行像素
  • 下一行 HSYNC → PCLK 继续输出下一行像素

简化图如下:

VSYNC ↑ --------- ↑
HSYNC ↑ ---- ↑ ---- ↑
PCLK  ↑↑↑↑↑↑↑↑↑↑