当前位置: 首页 > article >正文

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

目录

1. 简介

2. 创建 Platform

2.1 Block Design

2.1.1 DPU PFM Lite

2.1.2 DPU prj

2.1.3 DPU + MIPI Platform

2.2 pin 约束

2.2.1 GPIO 约束

2.2.2 IIC 约束

2.1.3 DPHY 约束

3. 报错总结

3.1 AXI_M 必须顺序引用

3.2 DPU 地址分配错误

4. Design Example

4.1 MIPI Core 示例

4.1.1 新建任意工程

4.1.2 video_out 位宽变化

4.1.3 video_aclk 时钟连接

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


http://www.kler.cn/a/467955.html

相关文章:

  • 每日一题:BM1 反转链表
  • 移动硬盘无法访问:全面解析、恢复方案与预防策略
  • 华为数通考试模拟真题(附带答案解析)题库领取
  • 数据挖掘——概论
  • PWN 的知识之如何利用栈溢出利用后门函数
  • Python入门系列之九-数据分析与可视化进阶
  • Django Admin中实现字段自动提交功能
  • 文献分享:跨模态的最邻近查询RoarGraph
  • BGP的基本配置
  • OC中isa指针
  • LeetCode-有效的括号(020)
  • CES Asia 2025:科技企业的全球发展引擎
  • 《解锁PyTorch潜能:探索强大的辅助库》
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之9 重新开始 之2 “三端架构”各自的“中间区”:三支决策的肯定/待定/否定
  • 从零开始开发纯血鸿蒙应用之实现起始页
  • 【方案设计】针对监控服务-功能时长统计的几个实现方案
  • 云备份项目--服务端编写
  • Oracle 11g rac + Dataguard 环境调整 redo log 大小
  • React虚拟DOM:理解和应用
  • torch.reciprocal介绍
  • 游戏引擎学习第70天
  • 面试题解,Java中的“对象”剖析
  • 【js引擎】quickjs 中的两个 proto
  • 5 Linux 网络编程基础 API
  • 家教老师预约平台小程序系统开发方案
  • 数据结构-顺序表及其应用