基于高云 TangMega-138K FPGA 开发板的全景摄像头模块项目,实现三目摄像头的图像采集、处理和 HDMI 输出功能。本项目支持 OV5640 摄像头模组,通过 DDR3 内存进行帧缓冲处理,最终输出 1280x720@60Hz 的高清视频信号。
- 🎥 三目摄像头支持: 支持 3 路 OV5640 摄像头同时工作
- 🖥️ 高清输出: 1280x720@60Hz HDMI/DVI 输出
- 💾 大容量缓冲: 板载 DDR3 4Gbit 内存支持帧缓冲
- 🔧 灵活配置: 支持测试图案生成和摄像头实时采集切换
- 📊 状态指示: 5 位 LED 状态指示灯显示系统工作状态
- 🎛️ I²C 配置: 自动摄像头参数配置和初始化
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ OV5640 CAM │ │ TangMega-138K │ │ HDMI/DVI │
│ │ │ │ │ Output │
│ • 1280x720 │───▶│ • DDR3 Frame │───▶│ │
│ • 8-bit Data │ │ Buffer │ │ • TMDS Encoder │
│ • I²C Control │ │ • Video Timing │ │ • 720p60 │
└─────────────────┘ │ • PLL Clock │ │ │
│ • I²C Master │ └─────────────────┘
└──────────────────┘
- FPGA: 高云 TangMega-138K 开发板
- 摄像头: OV5640 摄像头模组 × 3
- 内存: DDR3 4Gbit (256M×16bit)
- 输出: HDMI/DVI 显示器
- 电源: 5V DC 供电
- 分辨率: 1280×720 (720p)
- 帧率: 60fps
- 色彩格式: RGB565
- 接口标准: HDMI 1.4 / DVI
- 逻辑单元: ~35K LUT4
- 块存储: ~120 BRAM
- DDR3 控制器: 400MHz
- 时钟域: 4 个独立时钟域
Panoramic_Camera_Module/
├── src/ # 源代码目录
│ ├── top.v # 顶层模块
│ ├── 138K_DOCK_cam0.cst # 摄像头0 约束文件
│ ├── 138K_DOCK_cam1.cst # 摄像头1 约束文件
│ ├── 138K_DOCK_cam2.cst # 摄像头2 约束文件
│ ├── cmos_8_16bit.v # 8转16位数据转换
│ ├── i2c_master/ # I²C 主控制器
│ ├── video_frame_buffer/ # 视频帧缓冲模块
│ ├── ddr3_memory_interface/ # DDR3 内存接口
│ ├── dvi_tx/ # DVI/HDMI 发送器
│ ├── gowin_pll/ # 高云 PLL 时钟模块
│ └── vga_timing.v # VGA 时序生成
├── img/ # 图片资源
├── impl/ # 实现文件
├── 测试说明.md # 中文测试说明
└── README.md # 项目说明文档
- 功能: 系统顶层集成和信号路由
- 参数:
USE_TPG
: 测试图案使能 ("true"/"false")DDR_BYPASS
: DDR3 旁路模式 ("true"/"false")
- 功能: 三帧缓冲读写控制
- 特性:
- 支持三帧缓冲机制
- 读写独立时钟域
- 自动 FIFO 管理
- 功能: DDR3 内存控制器
- 规格:
- 400MHz 操作频率
- 256-bit 数据宽度
- 自动初始化和校准
- 功能: TMDS 编码和发送
- 支持: HDMI/DVI 兼容输出
- 特性:
- 10:8 TMDS 编码
- 串行化输出
- 自动检测
- 安装高云 FPGA 开发环境 (Gowin Software)
- 准备 TangMega-138K 开发板和 OV5640 摄像头
- 连接 HDMI 显示器
-
选择摄像头配置
在工程中右键 enable 启用对应的约束文件: - 138K_DOCK_cam0.cst (摄像头0) - 138K_DOCK_cam1.cst (摄像头1) - 138K_DOCK_cam2.cst (摄像头2)
-
编译工程
双击 place & route 或单击编译图标 生成 fs 文件位于: impl/pnr/
-
烧录程序
1. 长按 2s 开关 (HDMI 接口旁) 2. 核心板指示灯点亮后 3. 使用 Gowin Programmer 烧录 fs 文件
摄像头接口定义:
Pin | Signal | Description
------|---------------|----------------
C18 | cmos_sda | I²C 数据线
E19 | cmos_scl | I²C 时钟线
E13 | cmos_db[7] | 数据位 7
C15 | cmos_db[6] | 数据位 6
C14 | cmos_db[5] | 数据位 5
B13 | cmos_db[4] | 数据位 4
C13 | cmos_db[3] | 数据位 3
A14 | cmos_db[2] | 数据位 2
A13 | cmos_db[1] | 数据位 1
B16 | cmos_db[0] | 数据位 0
E14 | cmos_pclk | 像素时钟
B15 | cmos_href | 水平参考信号
A15 | cmos_vsync | 垂直同步信号
HDMI 输出接口:
Pin | Signal | Description
----------|---------------|----------------
J14,H14 | tmds_d_p_0[0] | TMDS 数据 Blue
J15,H15 | tmds_d_p_0[1] | TMDS 数据 Green
K17,J17 | tmds_d_p_0[2] | TMDS 数据 Red
G15,G16 | tmds_clk_p_0 | TMDS 时钟
系统提供 5 位 LED 状态指示:
LED[4] | LED[3] | LED[2] | LED[1] | LED[0] | 状态
-------|--------|--------|--------|--------|----------------
❌ | ✅ | ✅ | ✅ | ✅ | I²C 配置未完成
✅ | ❌ | ✅ | ✅ | ✅ | 摄像头同步异常
✅ | ✅ | ❌ | ✅ | ✅ | TMDS PLL 未锁定
✅ | ✅ | ✅ | ❌ | ✅ | DDR3 PLL 未锁定
✅ | ✅ | ✅ | ✅ | ❌ | DDR3 初始化未完成
✅ | ✅ | ✅ | ✅ | ✅ | 系统正常工作
// OV5640 1280x720@60Hz 配置
parameter HActive = 12'd1280; // 水平有效像素
parameter VActive = 12'd720; // 垂直有效像素
parameter HTotal = 13'd1892; // 水平总像素
parameter VTotal = 13'd740; // 垂直总行数
// 1280x720@60Hz VGA 时序
H_ACTIVE(16'd1280), H_FP(16'd110), H_SYNC(16'd40), H_BP(16'd220)
V_ACTIVE(16'd720), V_FP(16'd5), V_SYNC(16'd5), V_BP(16'd20)
Q: 无 HDMI 输出 A: 检查以下项目:
- HDMI 线缆连接是否正常
- 显示器是否支持 720p60 输入
- LED[2] (TMDS PLL) 是否点亮
Q: 摄像头无图像 A: 检查以下项目:
- 摄像头连接是否正确
- I²C 配置是否完成 (LED[4] 状态)
- 摄像头同步是否正常 (LED[3] 状态)
Q: DDR3 初始化失败 A: 检查以下项目:
- DDR3 供电是否正常
- 时钟信号是否稳定
- 重新上电复位系统
- 使用测试图案: 设置
USE_TPG = "true"
验证视频输出链路 - 检查状态 LED: 通过 LED 状态快速定位问题模块
- I²C 重配置: 按下 KEY0 复位键重新配置摄像头
欢迎提交 Issue 和 Pull Request 来改进这个项目。
- 基于 Sipeed TangMega-138K 示例工程 修改
- OV5640 摄像头驱动参考开源社区实现
- 感谢高云半导体提供的 FPGA 开发工具支持
注意: 本项目为硬件开源项目,使用时请确保硬件连接正确,避免损坏设备。