Skip to content

AZsnake/sensor-test-framework-pure-rtl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MIPI 测试框架

面向 Xilinx VU13P + IMX298 的 MIPI CSI-2 相机采集与验证框架:传感器 I2C 配置、2-Lane RAW10 接收、URAM 帧缓冲、纯 RTL 系统控制与 PySide6 上位机联调。

Vivado Block Design: mipi_platform · 系统控制: mipi_sys_ctrl(RTL,无 MicroBlaze/Vitis)

本仓库为开源 FPGA 验证参考实现。不含板级原理图或未公开的硬件资料。引脚约束需结合具体板卡自行准备(参考 fpga/constraints/vu13p_pins.template.xdc),clone 后不能直接综合上板。

许可证:MIT(第三方模块见 THIRD_PARTY_NOTICES.md

姊妹项目

同一 VU13P + IMX298 MIPI CSI-2 验证平台的两套实现,共享 Vivado Block Design(mipi_platform)与 PySide6 上位机(tools/ UART 协议兼容):

仓库 说明
sensor-test-framework-soft-core 姊妹项目 — MicroBlaze 固件 + Vitis;D-PHY / Lane 深度联调、HS_SETTLE 扫描
sensor-test-framework-pure-rtl 本仓库 — 纯 RTL mipi_sys_ctrl,无 MicroBlaze / Vitis;init mem BRAM 上电初始化

功能亮点

方向 内容
端到端采集 init mem BRAM 初始化 → CSI-2 RAW10 接收 → URAM 缓存 → UART 回传 → PC 解码显示
CSI-2 / D-PHY 2 数据 Lane + 1 时钟 Lane,800 Mbps/Lane;ECC/CRC 链路状态可读
纯 RTL 控制 UART 921600 协议、mipi_sys_ctrl 硬件 I2C/CSI/抓图,无软核
init mem 上电从 BRAM 预载 IMX298 默认表(1076 条);主机可 UART 覆写(CMD_MEM_*
主机工具 PySide6 GUI 串口联调 + download_regs.py 寄存器批量下发
工程化 create_project.tcl 一键重建 BD;build_all.tcl 综合→实现→bitstream

传感器输出: 2016×1512 RAW10 @ ~21 fps(2-Lane)。
UART 抓图: 支持 2016×128 快速条带、2016×512、2016×1512 全幅(高度可截断以缩短传输)。


仓库结构

sensor-test-framework-pure-rtl/
├── fpga/
│   ├── rtl/                  # 纯 RTL(mipi_sys_ctrl、axis_uram_framebuf 等)
│   ├── data/                 # imx298_init.mem / .coe / .h
│   ├── constraints/          # vu13p_pins.template.xdc(需复制为 vu13p_pins.xdc)
│   ├── scripts/              # create_project.tcl、build_all.tcl、gen_init_coe.py
│   ├── sim/                  # 模块级 testbench + run_sims.ps1
│   └── vivado/               # 生成工程目录(.gitignore,本地构建产物)
├── tools/                    # PySide6 上位机 + UART 协议库 + CLI
├── docs/
│   ├── mipi_platform_v0.0.1.png
│   ├── python_gui.png
│   └── bd_design/            # Block Design PDF
└── README.md

架构总览

mipi_platform Block Design v0.0.1

传感器 (I2C)     MIPI CSI-2 RX      URAM 帧缓冲       UART 921600     上位机
───────────  →  D-PHY + 协议解析  →  AXIS 写缓存  →  分块传输  →  RAW10 解码 / GUI
mipi_platform (BD)
├── clk_wiz_0          19.2 MHz → 100 MHz AXI + 200 MHz D-PHY ref
├── u_sys_ctrl         mipi_sys_ctrl(UART / I2C / AXI master / init mem)
├── mipi_csi2_rx_0     MIPI CSI-2 RX Subsystem(2-Lane RAW10, Bank 62)
├── u_framebuf         axis_uram_framebuf(4 MiB,容纳全幅单帧)
├── axi_ic             sys_ctrl → CSI RX + framebuf 寄存器访问
├── u_cam_gpio         相机 GPIO 三态缓冲(XCLR / PWDN / I2C)
├── u_vsync_probe      VSYNC 同步探针
└── system_ila_0       联调 ILA(AXIS / AXI / 状态探针)

RTL 模块(fpga/rtl/): mipi_sys_ctrl · uart_921600 · protocol_parser · i2c_master · sensor_sequencer · init_mem_bram · axi_lite_master · axis_uram_framebuf · cam_gpio_iobuf · sync_probe · led_heartbeat


上位机工具

MIPI VU13P 相机验证平台 GUI

PySide6 图形界面提供串口连接、链路状态(速率 / ECC / CRC)、多档抓图分辨率、RAW10 解码预览,以及 PNG / RAW 保存。详见 tools/README.md

功能 说明
串口 921600 8N1,自动枚举 COM 口
读状态 0x03 MIPI 端口、速率、ECC/CRC 计数、链路状态
抓图 0x04 指定宽×高,512 B/chunk + 信用窗口流控回传
暗黑模式 亮色 / 暗色主题切换

快速上手

环境: Vivado 2024.2 · Python 3.10+

  1. 复制引脚模板,按实际原理图填写 PIN_* 变量:

    cp fpga/constraints/vu13p_pins.template.xdc fpga/constraints/vu13p_pins.xdc

    Windows CMD:copy fpga\constraints\vu13p_pins.template.xdc fpga\constraints\vu13p_pins.xdc

  2. 生成 init mem(可选,仓库已含预生成文件):

    python fpga/scripts/gen_init_coe.py
  3. 生成 Vivado 工程:

    vivado -mode batch -source fpga/scripts/create_project.tcl

    或一键综合到 bitstream:

    vivado -mode batch -notrace -source fpga/scripts/build_all.tcl
  4. Vivado 中(或 batch 完成后)下载比特流至板卡。

  5. 安装主机工具并启动 GUI:

    cd tools
    pip install -r config/requirements.txt
    ./run_gui.sh          # Linux / macOS
    run_gui.bat           # Windows
  6. 连接串口 → 读状态 确认链路已建立 → 抓图 验证出图。


文档索引

文档 说明
tools/README.md Python 上位机、CLI 与单元测试
fpga/scripts/create_project.tcl Vivado 工程 / BD 一键生成
fpga/scripts/build_all.tcl 综合 + 实现 + bitstream
fpga/rtl/mipi_sys_ctrl.v 纯 RTL 系统控制器顶层
fpga/rtl/hw_defs.vh 协议常量、地址映射(与 Python 同步)
tools/lib/protocol.py UART 协议实现
docs/bd_design/mipi_platform_v0.0.1.pdf Block Design 导出 PDF

传感器数据手册请从厂商官网获取:

器件 官网
IMX298 sony-semicon.com

UART 命令摘要

帧格式:AA 55 | CMD | LEN[15:8] | LEN[7:0] | PAYLOAD | XOR 校验

命令 用途
写寄存器 0x01 单条 I2C 写(16-bit 地址 + 8-bit 数据)
读寄存器 0x02 单条 I2C 读
读状态 0x03 链路速率 / ECC / CRC / link_up
抓图 0x04 ARM 帧缓冲 + UART 分包回传
MEM 写入 0x10 写入 init mem 条目
MEM 执行 0x11 从 mem 完整初始化传感器
ACK 0x80 命令成功
ERR 0x81 错误码(I2C NACK、忙、校验失败等)

图像流:BB 66 数据块(512 B + XOR)→ 主机回 A5 ACK → BB 99 EOT。完整定义见 tools/lib/protocol.pyfpga/rtl/hw_defs.vh


备注

  • 目标器件:xcvu13p-fhga2104-2-i(请按实际板卡调整)。
  • 系统时钟:板载 19.2 MHz 单端输入(pad_clk_19m2)。
  • UART 速率:921600 8N1(FPGA 与上位机须一致)。
  • 帧缓冲:4 MiB URAM(2016×1512 RAW10 ≈ 3.81 MB)。
  • 传感器初始化表见 fpga/data/imx298_init_regs.h,仅为参考配置。
  • RTL 仿真:fpga/sim/run_sims.ps1(需本地 Vivado simulator)。
  • 不含板级原理图、真实管脚约束或未公开的硬件资料。
  • 芯片厂商寄存器表、数据手册等受版权约束的文件未包含或未跟踪;初始化表仅为参考配置,不代表厂商推荐设置。