MIPI_DPU 综合(DPU+MIPI+Demosaic+VDMA 通路)

目录

[1. 简介](#1. 简介)

[2. 创建 Platform](#2. 创建 Platform)

[2.1 Block Design](#2.1 Block Design)

[2.1.1 DPU PFM Lite](#2.1.1 DPU PFM Lite)

[2.1.2 DPU prj](#2.1.2 DPU prj)

[2.1.3 DPU + MIPI Platform](#2.1.3 DPU + MIPI Platform)

[2.2 pin 约束](#2.2 pin 约束)

[2.2.1 GPIO 约束](#2.2.1 GPIO 约束)

[2.2.2 IIC 约束](#2.2.2 IIC 约束)

[2.1.3 DPHY 约束](#2.1.3 DPHY 约束)

[3. 报错总结](#3. 报错总结)

[3.1 AXI_M 必须顺序引用](#3.1 AXI_M 必须顺序引用)

[3.2 DPU 地址分配错误](#3.2 DPU 地址分配错误)

[4. Design Example](#4. Design Example)

[4.1 MIPI Core 示例](#4.1 MIPI Core 示例)

[4.1.1 新建任意工程](#4.1.1 新建任意工程)

[4.1.2 video_out 位宽变化](#4.1.2 video_out 位宽变化)

[4.1.3 video_aclk 时钟连接](#4.1.3 video_aclk 时钟连接)

[5. 总结](#5. 总结)


1. 简介

  • 构建一个极简的 DPU Platform
  • 添加 MIPI+Demosaic+VDMA 通路

2. 创建 Platform

2.1 Block Design

2.1.1 DPU PFM Lite

2.1.2 DPU prj

在执行完毕 v++ 链接命令后,可以在如下路径中打开:

复制代码
<PYNQ>/boards/kv260_v1/binary_container_1/link/vivado/vpl/prj/prj.xpr

直接使用 DPU prj 导出的 xsa 平台文件,用以下命令,也可以直接得到 xclbin 文件:

复制代码
v++ --link --target hw \
    --save-temps       \
    --package.no_image \
    --platform *.xsa

2.1.3 DPU + MIPI Platform

1)时钟域说明:摄像头数据链路全部使用 200MHz 时钟。

2)修改 Zynq MPSoC 的 S_AXI_HP3_FPD 位宽为64位,可以直接连接 VDMA。

2.2 pin 约束

2.2.1 GPIO 约束

复制代码
set_property PACKAGE_PIN F11     [get_ports {rpi_cam_en_tri_io[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {rpi_cam_en_tri_io[0]}]

set_property PACKAGE_PIN A12     [get_ports {fan_en_b[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {fan_en_b[0]}]

2.2.2 IIC 约束

在 Block Design 中,选择 axi_iic 属性:

选择 Board Interface 中,选择 som240_1_connector_hda_iic_switch:

2.1.3 DPHY 约束

在 Block Design 中,选择 axi_iic 属性:

3. 报错总结

3.1 AXI_M 必须顺序引用

1)在 Block Design 设计中,可以看到此 AXI Interconnet 使用了两个 M_AXI:

2)在 Platform Setup 中, 跳过 M02 至 M06,选择 M07 至 M09 对外显现:

3)在导出 Platform 时不会出错,但在 v++ 进行链接时,将会报错如下:

复制代码
INFO: [VPL 60-839] Read in kernel information from file '/home/dd/Documents/DPU-PYNQ-2.5.0/boards/kv260_v2/binary_container_1/link/int/kernel_info.dat'.
INFO: [VPL 60-423]   Target device: dd_kv260_preset_v2_1_0
INFO: [VPL 60-1032] Extracting hardware platform to /home/dd/Documents/DPU-PYNQ-2.5.0/boards/kv260_v2/binary_container_1/link/vivado/vpl/.local/hw_platform
[23:54:02] Run vpl: Step create_project: Started
Creating Vivado project.
[23:54:06] Run vpl: Step create_project: Completed
[23:54:06] Run vpl: Step create_bd: Started
[23:54:09] Run vpl: Step create_bd: Failed
[23:54:10] Run vpl: FINISHED. Run Status: create_bd ERROR

===>The following messages were generated while  creating FPGA bitstream. Log file: /home/dd/Documents/DPU-PYNQ-2.5.0/boards/kv260_v2/binary_container_1/link/vivado/vpl/runme.log :
ERROR: [VPL 5-106] Arguments to the connect_bd_intf_net command cannot be empty.
ERROR: [VPL 60-773] In '/home/dd/Documents/DPU-PYNQ-2.5.0/boards/kv260_v2/binary_container_1/link/vivado/vpl/runme.log', caught Tcl error:  ERROR: [Common 17-39] 'connect_bd_intf_net' failed due to earlier errors.
ERROR: [VPL 60-704] Integration error, Failed to update block diagram in project required for hardware synthesis.The project is 'prj'. The block diagram update script is '.local/dr.bd.tcl'. The block diagram update script was generated by system linker. An error stack with function names and arguments may be available in the 'vivado.log'.
ERROR: [VPL 60-1328] Vpl run 'vpl' failed
WARNING: [VPL 60-1142] Unable to read data from '/home/dd/Documents/DPU-PYNQ-2.5.0/boards/kv260_v2/binary_container_1/link/vivado/vpl/output/generated_reports.log', generated reports will not be copied.
ERROR: [VPL 60-806] Failed to finish platform linker
INFO: [v++ 60-1442] [23:54:10] Run run_link: Step vpl: Failed
Time (s): cpu = 00:00:03 ; elapsed = 00:00:12 . Memory (MB): peak = 2188.492 ; gain = 0.000 ; free physical = 16738 ; free virtual = 22387
ERROR: [v++ 60-661] v++ link run 'run_link' failed
ERROR: [v++ 60-626] Kernel link failed to complete
ERROR: [v++ 60-703] Failed to finish linking
INFO: [v++ 60-1653] Closing dispatch client.
make: *** [Makefile:47: dpu.xclbin] Error 1

4)结论:AXI_M 必须顺序引用。

3.2 DPU 地址分配错误

1)在 Block Design 中包含 DPU IP:

2) 自动设置地址后,点击 Validate Design,将会得到如下错误提示:

复制代码
[Common 17-55] 'get_property' expects at least one object.
Resolution: If [get_<value>] was used to populate the object, check to make sure this command returns at least one valid object.

[BD 41-1273] Error running post_propagate TCL procedure: ERROR: [Common 17-55] 'get_property' expects at least one object.
    bip_set_base_addr Line 4

3)原因分析:dpuczdx8g_0/S_AXI 这一列被排除,即 DPU 的 S_AXI 接口没有被分配地址

4)手动分配 dpuczdx8g_0/S_AXI 地址

5)重新 Validate Design,错误消失。

4. Design Example

4.1 MIPI Core 示例

4.1.1 新建任意工程

1)新建任意工程,并添加 MIPI CSI-2 Rx Subsystem IP Core,右键选择 Open IP Example Design 即可:

2)该示例以 ZCU102 板为目标板卡,据悉信息如下:

  • 目标板:ZCU102
  • FMC 型号:LI-IMX274MIPI-FMC V1.0 Single Sensor
  • 设计拓扑:MIPI Video Pipe Camera to Display

3)示例功能

基于 MIPI CSI-2 Rx(摄像头)和 MIPI DSI Tx(显示)的参考设计:

  • 来自IMX274传感器的图像数据通过 MIPI CSI-2 接收子系统处理。
  • 进一步由视频 IP 处理,如去马赛克、伽马 LUT 等。
  • 然后将图像显示在 HDMI 显示器或 MIPI DSI 显示面板上。

4)IP 配置

  • MIPI CSI-2 Rx:通道=4,线速率=1440Mbps,数据类型=RAW10,像素模式=Dual
  • MIPI DSI Tx:通道=4,线速率=1000Mbps,数据类型=RGB888,像素模式=Dual

4.1.2 video_out 位宽变化

切换 Diagram 中的 Interfaces View,观察 MIPI 输出之后的位宽变化:

  • MIPI CSI-2 Rx Subsystem 的格式是 RAW10, Pixels_Per_Clock=2,实际输出为 24 bit
  • Sensor Demosaic 的格式是 Data_Width=8, Samples_Per_Clock=2,实际输入为 16 bit

其中 AXI4-Stream Subset Converter 的设置中,TDATA 做了重映射:

复制代码
Extra Settings
---
TDATA Remap String: tdata[19:12],tdata[9:2]

MIPI CSI-2 Rx 输出数据排列是:

复制代码
mipi_video_out      [------------------signle pixel-----------------] [------------signle pixel-------------]
[23],[22],[21],[20],[19],[18],[17],[16],[15],[14],[13],[12],[11],[10],[9],[8],[7],[6],[5],[4],[3],[2],[1],[0]
demosaic_in         [-------------signle pixel------------]           [--------signle pixel---------]

4.1.3 video_aclk 时钟连接

1)video_aclk 时钟域解释

2)示例工程中的连接

3)MIPI CSI-2 数据链路全都使用了该时钟

从左到右,依次为:

  • MIPI CSI-2 Subsystem
  • AXI4-Stream Subset Converter
  • Sensor Demosaic
  • Gamma LUT
  • Video Processing Subsystem
  • Video Frame Buffer Write
  • AXI Interconnection
  • Zynq UltraScale+ MPSoC

5. 总结

相关推荐
仲南音15 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议