CIG4-8H 应用
工作原理:完整的视频注入流程

智能驾驶数据注入系统框图
数据准备
将预录制摄像头数据或仿真数据加载到主机 PC 内存中,用于算法验证
GMSL 信号生成
CIG4-8H 板卡生成与真实摄像头输出一致的 GMSL 信号,包括时序和电气特性
ECU 集成
目标 ECU 通过标准 GMSL 解串器接收视频数据,并像处理真实摄像头数据一样处理这些数据
系统架构
- IPC(工业计算机): 通过 PCIe Gen3 接口提供源视频数据。
- CIG4-8H 视频注入卡: 接收来自 IPC 的数据,基于时间戳进行处理,并输出同步视频流。
- ACU(自动驾驶控制单元): 接收注入的视频数据,用于测试和验证。
软件安装与配置
1. 安装依赖
系统要求与依赖:
sudo apt-get update
sudo apt-get install openssh-server
sudo apt-get install libtool
sudo apt-get install git vim sshpass
2. SDK 下载
请根据操作系统和 CIG4-8H 硬件版本选择合适的 SDK 软件包:
| 操作系统 | 硬件版本 | SDK 版本 | 下载链接 | 下载工具 |
|---|---|---|---|---|
| Ubuntu 18.04 LTS Ubuntu 20.04 LTS | CIG4-8H v1.0 | SDK v2.1.0 | 下载 | DownGit |
DownGit 可在不克隆整个仓库的情况下,从 GitHub 仓库下载指定文件夹或文件:
- 复制“下载链接”列中的 GitHub 仓库 URL
- 在浏览器中打开 DownGit
- 将仓库 URL 粘贴到输入框中
- 点击“下载”,获取包含 SDK 的 ZIP 文件
- 将 ZIP 文件解压到目标位置
当只需要 SDK 文件而不需要完整 Git 历史时,该方法尤其适用。
3. FFmpeg 环境配置
下载 FFmpeg: ffmpeg-4.4.4.tar.xz (9.12MB)
安装步骤:
-
解压软件包:
tar -xf ffmpeg-4.4.4.tar.xz -
安装开发库:
sudo apt-get install libsdl2-dev
sudo apt-get install libsdl1.2-dev
sudo apt-get install x264 libx264-dev -
配置并编译 FFmpeg:
sudo ./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-ffmpeg --enable-ffplay --enable-ffprobe --enable-gpl --enable-libx264 --enable-nonfree --disable-x86asm -
构建并安装:
make -j8
sudo make install -
配置环境变量:
vim ~/.bashrc添加以下行:
export PATH="$PATH:/usr/local/ffmpeg/bin"
export CPATH="$CPATH:/usr/local/ffmpeg/include"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib" -
应用配置:
sudo ldconfig
4. 软件架构概览

软件框架架构
架构组件:
该软件架构由多个处理阶段组成,并针对高吞吐视频注入进行了优化:
- 视频输入处理: 处理 H.264、H.265、JPEG、YUV422 和 RAW 等多种输入格式
- GPU 加速: 利用 CUDA 实时进行格式转换与处理
- FPGA 接口: 与板载 FPGA 直接通信,实现低延迟视频流传输
- 多通道同步: 确保全部 8 路 GMSL 通道的精确时序
- 缓冲管理: 优化内存分配,以支持持续高带宽运行
5. SDK 使用指南
5.1 SDK 结构概览
SDK 提供完整的视频注入操作工具。解压 SDK 后进入工作目录:
~/pcie_xdma_transfer_sdk/xdma
目录结构:
| 目录/文件 | 说明 |
|---|---|
bash | 包含自动化测试脚本的 Shell 脚本目录 |
bash1 | 包含额外测试场景的备用 Shell 脚本目录 |
include | 头文件目录 |
xdma | 主 XDMA 驱动源代码目录 |
tools/pcie_reg_rw | PCIe 寄存器读写工具目录 |
tools/pcie_xdma_transfer | 主视频传输工具目录 |
Makefile | 用于 SDK 编译和工具目录管理的构建配置文件 |
5.2 SDK 编译
进入 SDK 目录并编译:
~/pcie_xdma_transfer_sdk/xdma
make
5.3 编译工具
在 tools 目录中执行以下命令:
~/pcie_xdma_transfer_sdk/tools
make clean
make
5.4 脚本修改
修改以下位置的传输脚本: ~/pcie_xdma_transfer_sdk/bash
编辑 transfer_run.sh 脚本以配置具体需求。
6. 视频传输配置
6.1 传输文件命名规则
视频源文件应放置在 /bash/data/yuv 目录中。传输卡要求按指定命名规则配置文件,以便映射到对应通道:
语法:
transfer_file_name[<n>]="<file name>"
参数:
transfer_file_name: 视频源文件名配置<n>: 目标卡通道号(0-7)<file name>: 视频源文件名
示例:
通道 0 使用名为 "input0.h264" 的视频文件时:
transfer_file_name[0]="input0.h264"
通道 0 使用名为 "picture19201080yuyv.yuv" 的视频文件时:
transfer_file_name[0]="picture19201080yuyv.yuv"
6.2 传输文件类型配置
指定视频文件类型以便正确处理:
语法:
transfer_file_type[<n>]="<file type>"
参数:
transfer_file_type: 视频文件类型配置<n>: 目标卡通道号(0-7)<file type>: 文件类型说明("Original" 或 "H264")
示例:
transfer_file_type[0]="Original"
文件类型说明:
- Original: 表示将未压缩视频文件直接传输到目标卡,再转换格式后发送到 ACU
- H264: 表示 H.264 格式传输,由 CPU 或 GPU 完成格式转换后发送到 ACU
6.3 传输重复次数配置
配置文件重复传输次数:
语法:
transfer_file_replay[<n>]=<n1>
参数:
transfer_file_replay: 文件重复次数配置<n>: 目标卡通道号(0-7)<n1>: 重复次数(0-1000000)
示例: 通道 0 重复传输 100 次时:
transfer_file_replay[0]=100
6.4 传输格式配置
配置目标卡支持的传输格式(YUV、RAW10、RAW12、RAW14):
语法:
transfer_type[<n>]="<model>"
参数:
transfer_type: 目标卡传输格式配置<n>: 目标卡通道号(0-7)<model>: 目标卡传输格式("YUV"、"RAW10"、"RAW12" 或 "RAW14")
示例: 通道 0 传输 YUV422 格式数据时:
transfer_type[0]="YUV"
6.5 传输分辨率配置
通过指定宽度和高度参数,为每个通道的视频流配置分辨率:
宽度配置:
transfer_resolution_width[<n>]=<n1>
高度配置:
transfer_resolution_height[<n>]=<n1>
参数:
transfer_resolution_width: 宽度分辨率配置transfer_resolution_height: 高度分辨率配置<n>: 目标卡通道号(0-7)<n1>: 图像分辨率值
示例: 通道 0 分辨率为 1920×1080 时:
transfer_resolution_width[0]=1920
transfer_resolution_height[0]=1920
- 通道 0 需要配置 1 路分辨率
- 通道 2 需要配置 3 路分辨率
- 通道 4 需要配置 5 路分辨率
- 通道 6 需要配置 7 路分辨率
6.6 内部与外部触发配置
内部触发配置:
../tools/reg_rw /dev/xdma0_user 0x30020 w <n1>
参数:
<n1>: 0x22222222 表示内部触发,0x11111111 表示外部触发
示例: 通道 0 工作在内部触发模式时:
../tools/reg_rw /dev/xdma0_user 0x30020 w 0x22222222
6.7 内部频率配置
配置视频传输的内部频率:
../tools/reg_rw /dev/xdma0_user <n> w <n1>
参数:
<n>: 目标卡通道号<n1>: 频率值,实际频率 = 200M/配置频率值
通道映射:
0x30024→ 通道 00x30028→ 通道 10x3002c→ 通道 20x30030→ 通道 30x30034→ 通道 40x30038→ 通道 50x3003c→ 通道 60x30040→ 通道 7
示例:
将通道 0-7 设置为 30fps 传输:
#1fps
#30fps: 6666666
#20fps: 10000000
#15fps: 13333333
#10fps: 20000000
../tools/reg_rw /dev/xdma0_user 0x30024 w 6666666
../tools/reg_rw /dev/xdma0_user 0x30028 w 6666666
../tools/reg_rw /dev/xdma0_user 0x3002c w 6666666
../tools/reg_rw /dev/xdma0_user 0x30030 w 6666666
../tools/reg_rw /dev/xdma0_user 0x30034 w 6666666
../tools/reg_rw /dev/xdma0_user 0x3003c w 6666666
../tools/reg_rw /dev/xdma0_user 0x30040 w 6666666
7. 驱动加载与系统启动
7.1 驱动加载
进入 /pcie_xdma_transfer_sdk/bash 目录并执行驱动加载脚本:
sudo ./load_driver.sh
预期输出:
interrupt_injection: 0
Loading driver: insmod xdma.ko interrupt_mode=1 ...
The kernel module installed correctly and the xdma devices were recognized.
DONE
加载成功后,应能看到以下设备文件创建于 /dev/:
xdma0_h2c_0,xdma0_h2c_1,xdma0_h2c_2,xdma0_h2c_3- 主机到板卡传输设备xdma0_c2h_0,xdma0_c2h_1,xdma0_c2h_2,xdma0_c2h_3- 板卡到主机传输设备xdma0_user- 用于寄存器访问的用户控制接口
7.2 目标卡数据传输配置
7.2.1 启动配置
进入: ~/pcie_xdma_transfer_sdk/bash 并执行传输脚本:
sudo ./transfer_run.sh
7.2.2 停止配置
如需停止数据传输,请进入: ~/pcie_xdma_transfer_sdk/bash 并执行:
sudo ./stop.sh