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. 总结

相关推荐
whik119410 小时前
Xilinx Vivado环境下载bit后自动触发ILA采集
fpga开发
JoneMaster20 小时前
[读书日志]8051软核处理器设计实战(基于FPGA)第五篇:8051软核处理器主体框架搭建(verilog)
嵌入式硬件·fpga开发·硬件架构
楠了个难1 天前
以太网UDP协议栈实现(支持ARP、ICMP、UDP)--FPGA学习笔记26
学习·fpga开发·udp
AomanHao1 天前
【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现
图像处理·笔记·算法·fpga开发·插值·超分
简简单单做算法1 天前
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
fpga开发·verilog·snn·lif神经元
乌恩大侠1 天前
【USRP】教程:在Macos M1(Apple芯片)上安装UHD驱动(最正确的安装方法)
macos·fpga开发·usrp
简简单单做算法1 天前
基于FPGA的SNN脉冲神经网络之IM神经元verilog实现,包含testbench
fpga开发·脉冲神经网络·snn·im神经元
cucoder1 天前
Verilog语法之常用行为级语法
fpga开发
32码奴1 天前
FPGA基本语法与使用
fpga开发·fpga