目录
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