基于KV260的基础视频链路通路(MIPI+Demosaic+VDMA)

目录

1. 简介

1.1 要点

1.2 背景

1.2.1 Got stuck

1.2.2 Can't be Initialized

2. Overlay

2.1 参考 Overlay

2.1.1 KV260 Base

2.1.2 Pynq-CV-OV5640

2.2 自建 Overlay

2.2.1 IIC IP

2.2.2 MIPI CSI-2 Rx

2.2.3 AXI4-S Subset

2.2.4 Demosaic

2.2.5 Pixel Pack

2.2.6 AXI VDMA

2.3 构建 XSA

3. IP 详解

3.1 MIPI CSI-2 Rx Subsystem

3.1.1 IP 基本信息

3.1.2 Subsystem Options

3.1.3 DPHY Options 

3.1.4 CSI-2 Options

3.1.5 VFB Options

3.1.6 IP 地址空间

3.1.7 时钟域

3.1.8 video_aclk 计算

3.2 AXI4-Stream 基础设施

3.2.1 通用准则

3.2.2 时钟

3.3 Pixel Pack

3.3.1 HLS 代码

3.4 AXI VDMA

3.4.1 IP 基本信息

3.4.2 IP 地址空间

3.4.3 Fsync Options

3.4.4 GenLock Mode

3.4.5 Fsync vs Genlock

3.4.6 VMDA 的必要性

4. OV5640

4.1 基本架构

4.2 缺陷像素消除 (DPC)

4.3 颜色插值 (CIP)

4.4 Pixel 格式

4.5 Cam 复位

4.6 MIPI control

4.7 frame rate

4.8 时钟树

4.9 其他概念

5. iPython 代码

5.1 Cam_en

5.2 IIC SWITCH

5.3 扫描 IIC 设备

5.4 配置 Demosaic

5.5 配置 VDMA

5.5.1 最小配置步骤

5.5.2 关键代码

5.5.3 VideoMode 属性

5.5.4 PYNQ 驱动示例

5.6 OV5640 寄存器

5.6.1 cfg_init

5.6.2 cfg_720p_30fps

5.6.3 cfg_1080p_15fps

5.6.4 cfg_1080p_30fps

5.6.5 cfg_1080p_30fps_336M_mipi

5.6.6 cfg_1080p_30fps_336M_1lane_mipi

5.6.7 AWB

5.7 导入 py 文件

5.8 配置 OV5640

5.9 MMIO 调试

6. 调试 MIPI

6.1 抓取的信号

6.2 触发信号设置

6.2.1 创建用户探针

6.2.2 查看已有探针

6.2.3 使用用户探针

6.3 重要波形

6.3.1 整体波形

6.3.2 观察帧率

6.3.3 MIPI Link CLK

7. 总结与参考

7.1 总结

7.2 参考


1. 简介

1.1 要点

基于 KV260 + PCAM_5C 构建视频通路,通过 PYNQ 可视化图像,用以进一步处理图像数据,从 MIPI 至图像数据,包括如下要点:

  • 在 PYNQ 下通过 IIC 配置 OV5640
  • 配置 MIPI CSI-2 Rx subsystem 经验汇总
  • AXI4-Stream 基础设施
  • 配置 Sensor Demosaic 经验汇总
  • 配置 AXI VDMA 经验汇总
  • Sensor OV5640 时钟树
  • 图像数据流波形抓取

1.2 背景

直接使用 KV260 Base Overlay 构建视频通路,初始化 OV5640 时,会陷入了循环或者无法初始化。如下是官方论坛的问题汇总:

1.2.1 Got stuck

PCAM 5c with Kria KV260 - Support - PYNQHello everyone, I am new to the Pynq environment and would appreciate your help. I am trying to connect the Diligent PCam5C with my Kria KV260 board and use the supplied notebook mipi_to_displayport, but it seemed to ge…https://discuss.pynq.io/t/pcam-5c-with-kria-kv260/6869

I am trying to connect the Diligent PCam5C with my Kria KV260 board and use the supplied notebook mipi_to_displayport 4, but it seemed to get stuck in a loop at this point
“frame = mipi.readframe()”

1.2.2 Can't be Initialized

PCAM 5C cannot be Initialized - Support - PYNQHi @marioruiz, I think I have the same problem as: PCAM 5C failed initialize with custom overlay kv260. With exactly the same board set up and the Digilent PCam 5C, however, my MIPI related error persists even with the …https://discuss.pynq.io/t/pcam-5c-cannot-be-initialized/5412/1

2. Overlay

2.1 参考 Overlay

2.1.1 KV260 Base

https://github.com/Xilinx/Kria-PYNQ/tree/main/kv260/basehttps://github.com/Xilinx/Kria-PYNQ/tree/main/kv260/base该 Overlay 支持 KV260 的 Raspberry Pi 摄像头和 PMOD 接口。可以将 Digilent Pcam 5C 摄像头连接到 KV260,并通过 Jupyter 笔记本进行控制。此外,PMOD 接口上支持多种 Grove 和 PMOD设备,所有这些设备都可以通过可编程逻辑中的 Xilinx Microblaze 处理器进行控制。

2.1.2 Pynq-CV-OV5640

https://github.com/xupsh/Pynq-CV-OV5640/tree/masterhttps://github.com/xupsh/Pynq-CV-OV5640/tree/master

在这个 Overlay 中,图像是从连接到 PL 侧的 OV5640 摄像头捕获的,并且该覆盖层包含了几种加速的图像处理算法,可以选择启用哪种算法,而无需下载新的比特流。在示例应用程序 Notebook 中,可以配置 OV5640 摄像头,获取捕获的图像并在笔记本上显示。处理后的视频流将显示在连接到 PL 侧的 HDMI 显示器上。 

这个 Overlay 包含以下加速的图像处理算法:

  • rgb2hsv(RGB 转 HSV)
  • subsample(子采样)
  • equalizehist(直方图均衡化)
  • gaussianBlur(高斯模糊)
  • sobel(Sobel 边缘检测)
  • canny(Canny 边缘检测)
  • dilation(膨胀)
  • erosion(腐蚀)

2.2 自建 Overlay

以上提到的两个 Overlay:

  • KV260 Base Overlay 无法使用 Pcam 5C(无法完成初始化)。
  • Pynq-CV-OV5640 仅支持 Pynq-Z2 板卡。

因此自建一个极简的 MIPI 调试平台如下:

2.2.1 IIC IP

在 Base 中,axi_iic 模块使用了 100kHz 的总线频率,需要修改至 400kHz,否则会导致初始化失败。

2.2.2 MIPI CSI-2 Rx

MIPI CSI-2 Rx Subsystem v5.1

MIPI CSI-2 RX Subsystem 通过 PPI(Pixel Parallel Interface)从 MIPI D-PHY 核心接收每个通道 8 位数据,支持最多 4 个通道。通过 PPI 接收到的字节数据随后由低级协议模块处理,以提取真实的图像信息。最终提取的图像通过使用 AXI4-Stream 协议,被提供给用户/处理器接口。无论通道数量如何,通道管理块始终处理从 PPI 接收的 32 位数据。

 

IP 的主要参数如下:

参数说明

  • Pixel Format,由 sensor 决定,参考 4.4 Pixel 格式。
  • 启用 CRC:当设置此选项时,将对数据包的有效载荷进行 CRC 校验。
  • 启用活动通道:当设置此选项时,内核支持动态配置活动通道的数量,该数量可从内核生成时选择的最大通道数中调整,使用参数 Serial Data Lanes。例如,当 Serial Data Lanes 设置为 3 时,可以通过协议配置寄存器将活动通道的数量设置为 1、2 或 3。当活动通道设置大于串行通道设置时,内核会通过中断状态寄存器的第 21 位报告错误。

2.2.3 AXI4-S Subset

AXI4-Stream Subset Converter v1.1

属于 AXI4-Stream Infrastructure IP Suite (PG085) 的一个子 IP。


 

1)AXI4-Stream Subset Converter 参数配置

一般情况下,选择自动就可以,工具会自动推断前后级是否需要该信号。例如 TSTRB,工具发现前级没有此信号,后级也不需要,因此属性都是“No”。

Extra Settings(重映射字符串)

重映射用户参数的格式遵循类似于 Verilog 向量连接的语法。

  • 直接传递:对于 TUSER,字符串 tuser[95:0] 表示将 SI 所有信号不加修改地传递给 MI。
  • 位切片元素:对于 TDATA,字符串 tdata[9:2] 表示将 SI 的数据(16位)截取其中 [9:2] 的8位传递给 MI。
  • 常量补充:如果 MI 的 TDATA 信号为24位而 SI 的 TDATA 信号为16位,重映射字符串8'b00000000,tdata[15:0] 将常量0分配给 MI 信号的高8位,并在低16位传递 SI 的 TDATA。
  • 重复补充:字符串 tdata[7:0], tdata[7:0] 将 SI 的 TDATA 最低有效字节在 MI 信号上重复两次。
  • 重映射字符串可以引用相应 SI 信号的位或其他可重映射SI信号的位。例如,TDATA 的重映射字符串可以引用 TUSER SI 信号的位。
  • 仅支持二进制格式的常量元素。不支持 h 格式。

2)AXI4-Stream 基础设施套件

AXI4-Stream Infrastructure IP Suite (PG085) 提供了如下 IP:

  • AXI4-Stream Broadcaster
  • AXI4-Stream Clock Converter
  • AXI4-Stream Combiner
  • AXI4-Stream Data FIFO
  • AXI4-Stream Data Width Converter
  • AXI4-Stream Register Slice
  • AXI4-Stream Subset Converter
  • AXI4-Stream Switch
  • AXI4-Stream Interconnect

这些集合能够执行数据切换/路由、数据宽度转换、流水线、时钟转换和数据缓冲。

2.2.4 Demosaic

Sensor Demosaic v1.1

  • 最大列/行数:指定 IP 核心在运行时可以处理的最大视频列/行数。任何小于该数值的视频宽度都可以通过 AXI4-Lite 控制接口进行配置,而无需重新生成 IP 核。 
  • 插值方法:
    • Fringe Tolerant Interpolation(边缘容忍插值):生成的图像较为柔和,并抑制边缘伪影。对于可能引入颜色边缘伪影的低成本光学器件,建议使用此选项。
    • High Resolution Interpolation(高分辨率插值):适用于高质量光学器件以及高分辨率的应用。此方法会使用更多的 BRAM 和 slice,并大约使 DSP48 的数量增加一倍。
  • Horizontal Zipper Artifact Removal(水平拉链伪影去除):此选项添加一个后处理平滑滤波器,以去除水平拉链伪影。后处理滤波器会使输出图像变得柔和,并消耗一些额外的 Slice 资源。
  • Use UltraRAM for Line Buffers(使用 UltraRAM 作为行缓冲):在 UltraScale+ 器件中,用于像素插值的行缓冲可以存储在 UltraRAM 中,而不是块 RAM。

1)基础地址空间

该 IP 核由 HLS 生成,所以其基础寄存器空间与 HLS IP 一致。 

// ==============================================================
// control
// 0x0 : Control signals
//       bit 0  - ap_start (Read/Write/COH)
//       bit 1  - ap_done (Read/COR)
//       bit 2  - ap_idle (Read)
//       bit 3  - ap_ready (Read/COR)
//       bit 7  - auto_restart (Read/Write)
//       bit 9  - interrupt (Read)
//       others - reserved
// 0x4 : Global Interrupt Enable Register
//       bit 0  - Global Interrupt Enable (Read/Write)
//       others - reserved
// 0x8 : IP Interrupt Enable Register (Read/Write)
//       bit 0 - enable ap_done interrupt (Read/Write)
//       bit 1 - enable ap_ready interrupt (Read/Write)
//       others - reserved
// 0xc : IP Interrupt Status Register (Read/COR)
//       bit 0 - ap_done (Read/COR)
//       bit 1 - ap_ready (Read/COR)
//       others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)

2)额外的寄存器

| Address  | Register Name | Access Type | Register Description                            |
|----------|---------------|-------------|-------------------------------------------------|
| 0x0010   | Active Width  | R/W         | Number of Active Pixels per Scanline            |
| 0x0018   | Active Height | R/W         | Number of Active Lines per Frame                |
| 0x0028   | Bayer Phase   | R/W         | Bits 1-0: Bayer sampling grid starting position |

3)Bayer Phase

Bayer Phase Register Combination Definitions

该 IP 核支持所有四种可能的拜耳相位(Bayer Phase)组合。

可以参照章节 4.4 Pixel 格式,对应关系如下:

IP   OV5640(0x4300[3:0])
--------------------
3 -> 0x0: BGBG...
          GRGR...
2 -> 0x1: GBGB...
          RGRG...
1 -> 0x2: GRGR...
          BGBG...
0 -> 0x3: RGRG...
          GBGB...

4)吞吐量

传感器去马赛克核心的像素吞吐量由 ap_clk 与 Sample per clock 设置的乘积定义。

例如,在 ap_clk 时钟频率为 300 MHz 且 Sample per clock = 2 的情况下,传感器去马赛克能够实现600万像素的吞吐率,可以以处理 60Hz 的 4K 分辨率。

2.2.5 Pixel Pack

输入 Demosaic 为 8bit RGB RAW,输出为 RGB888 24bit 数据,这正是 pixcel_pack 模块输入端接收的数据。

pixel_pack kernel,从一个输入流 stream_in_24 读取24位像素数据,并根据给定的模式 mode 将这些数据转换和打包成32位的数据,然后将转换后的数据写入到输出流 stream_out_32 中。

Kernel 中定义了五种模式:V_24, V_32, V_8, V_16, V_16C,每种模式都有其特定的处理逻辑。 

2.2.6 AXI VDMA

AXI Video Direct Memory Access v6.3

1)Basic Options

  • Address Width,MAXI 总线的地址位宽,即 VDMA 的寻址范围。
  • Frame Buffers,缓存帧的数量。
  • Enable Channel,可以单独启用读/写通道。

2)Advanced Options

  • Enable Asynchronous Mode,启用异步模式,

此设置允许 m_axi_mm2s_aclk、m_axi_s2mm_aclk、s_axi_lite_aclk、m_axis_mm2s_aclk 和 s_axis_s2mm_aclk 互相异步。当禁用异步时钟时,所有时钟必须频率相同且来自同一源头。

  • 启用垂直翻转

当选择此选项时,在启用 S2MM 的情况下将图像垂直翻转。

  • Fsync 与 Genlock,请参见 IP 详解部分。

2.3 构建 XSA

<ov5640>/Pynq-CV-OV5640-master/boards/Pynq-Z2/ov5640/bitstream
---
build_bitstream.tcl
check_cv_ov5640.tcl
cv_ov5640.bit
cv_ov5640.hwh
cv_ov5640.tcl
cv_ov5640.xdc
__init__.py
makefile

3. IP 详解

3.1 MIPI CSI-2 Rx Subsystem

3.1.1 IP 基本信息

IP 版本:MIPI CSI-2 Rx Subsystem v5.1

  • dphy_clk_200M:Used for control logic and input to MMCM
  • video_aclk:视频处理时钟域
  • video_aresetn:视频处理时钟域复位
  • rxbyteclkhs:PPI high-speed receive byte clock

3.1.2 Subsystem Options

  • Pixel Format

由传感器设置决定的。以 OV5640 为例, 由以下3个寄存器决定:

[0x3034, 0x1A], #[6:4]=001 PLL charge pump, [3:0]=1010 MIPI 10-bit mode
[0x4300, 0x00], #[7:4]=0x0 Formatter RAW, [3:0]=0x0 BGBG/GRGR
[0x501f, 0x03], #[2:0]=0x3 Format select ISP RAW (DPC)
  • VFB(Video Format Bridge)

视频格式桥接器,当此选项被禁用时,子系统将不考虑像素格式选择,可以自定义配置流数据宽度 (TDATA)。

  • Support CSI Spec V2_0

支持 CSI V2.0 功能(RAW16, RAW20 支持和 VCX 功能支持)。

  • Support VCX Feature

MIPI CSI-2 标准的 v2.0 版本中特定的 VCX 支持功能用于将可用虚拟通道的最大数量扩展到 16 个。默认不启用,支持4个 VC。

3.1.3 DPHY Options 

线速率(Line Rate)要与摄像头 MIPI 输出速率匹配。简易原则如下:

  • 1500 Mbps:IP 可以从 TX 接收 600-1500Mbps 的数据速率。
  • 599 Mbps:IP 可以从 TX 接收 300-599Mbps 的数据速率。
  • 299 Mbps:IP 可以从 TX 接收 150-299Mbps 的数据速率。
  • 149 Mbps:IP 可以从 TX 接收 80-149Mbps 的数据速率。

MIPI D-PHY RX (Slave) Core Architecture for UltraScale+ Families

  • HS Timeout Counter:用于高速模式下的超时计数。当数据在高速模式下传输时,如果数据在预定时间内没有正确接收,核心会生成超时并进入停止状态。
  • ESC Timeout Counter:用于逃逸模式下的超时计数。在逃逸模式下,如果数据在预定时间内没有正确接收,核心会生成超时并进入停止状态。

展开 MIPI CSI-2 Rx Subsystem 可以看到其中包含的 MIPI D-PHY 子模块,也可以查看 PPI 包含的信号,非常多。

3.1.4 CSI-2 Options

  • CSI2 Controller Register Interface:AXI4-lite 寄存器接口。禁用此选项可以减少资源使用。
  • Embedded non-image Interface:选择此选项以通过单独的 AXI4-Stream 接口处理和卸载嵌入式非图像 CSI-2 数据包(数据类型代码为 0x12)。如果未选择此选项,则此类数据包将不被处理,并被 CSI-2 RX 控制器忽略。
  • Filter User Defined data types:选择此选项以过滤用户定义的数据类型(0x30 到 0x37),并且不在图像接口上输出(即使启用了过滤,未支持的 ErrId ISR[8] 也不会被设置)。如果未选择此选项,则此类数据包会被处理并在图像接口上显示。
  • Line Buffer Depth:用于适应输出视频接口节流的内部 RAM 深度。可选值为 128、256、512、1024、2048、4096、8192 或 16384。用户可以将其设置为不会导致行缓冲区满状态的最低值。

Data Type Classes:

3.1.5 VFB Options

1)Video Format Bridge (VFB) 的主要作用:

  • 数据过滤:处理并过滤来自 CSI-2 RX
### 回答1: MIPI CSI-2 RX子系统是一种用于接收MIPI CSI-2协议视频数据的子系统。它可以将从摄像头或其他视频源发送的数据流转换为可用于处理和显示的数字信号。该子系统通常用于嵌入式系统和移动设备中,以实现高质量的视频捕捉和处理。 ### 回答2: MIPI CSI-2 RX子系统是一种可以接收MIPI CSI-2协议视频数据的系统。MIPI CSI-2协议通常用于连接摄像头和处理器之间的视频信息传输。由于MIPI CSI-2协议具有高带宽、低功耗和可靠性等优点,因此它被广泛应用于移动设备、智能家居、汽车、医疗设备等领域。 MIPI CSI-2 RX子系统主要由两个部分组成:硬件和软件。硬件部分包括CSI-2接收器、像素处理模块、数据转换器、DMA控制器等。它们协同工作,完成对MIPI CSI-2数据的接收、解析、转换和存储等功能。而软件部分则由驱动程序和应用程序组成,它们充当了控制和管理硬件部件的角色。 MIPI CSI-2 RX子系统的优势在于它可以实现高清晰度的视频传输,并且消耗极少的电力。它还支持并行传输,可以同时传输多个数据流,从而提高了数据传输的效率。此外,它还可以通过软件控制来调整和优化像素处理等功能,以适应不同场景下的应用需求。 需要注意的是,MIPI CSI-2 RX子系统虽然可以接收MIPI CSI-2协议的视频数据,但是它并不具备对视频数据进行编码和解码的能力。如果需要对视频数据进行编码和解码,需要额外添加相应的模块或设备。 总之,MIPI CSI-2 RX子系统作为连接摄像头和处理器之间的重要接口,具有方便、高效、低功耗、高网络带宽等优势,将成为未来智能设备的重要技术支撑。 ### 回答3: MIPI CSI-2 RX子系统是一种数据传输接口,被广泛应用于移动设备、工业相机和医疗设备等领域。这种子系统主要是指在芯片上实现接收MIPI Camera Serial Interface 2 (CSI-2)协议的模块,它可以接收来自相机或其它视频设备的数据,然后将这些数据传递给后续的图像处理部分进行处理和分析。 MIPI CSI-2 RX子系统的主要功能是处理和解压缩从相机或其它视频设备传输过来的视频流数据。它可以接收来自相机的原始视频数据,通过内部的解码器和视频处理器对其进行分析和处理,然后转换成计算机可以理解的数码信号。这些数码信号可以被用于实现多种功能,例如图像处理、分析和计算机视觉。 在MIPI CSI-2 RX子系统中,还包括一个数据通道,用于传输通过MIPI CSI-2协议传输的相关数据,例如图像的分辨率和格式。这些数据可以被用于配置后续的图像处理器,以确保它们能够正确地处理和分析来自相机或其它视频设备的数据流。 总之,MIPI CSI-2 RX子系统是一种重要的数据传输接口,它能够接收和处理从相机或其它视频设备传输过来的数据流,为后续的图像处理和计算机视觉提供数据支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值