一套运行在安路 EG4S20BG256 上的纯硬件视觉伺服与 XY 光栅扫描闭环分拣系统。OV5640 图像经 FPGA 片内完成采集、缓存、灰度/二值化/Sobel、连通域目标提取、任务调度与步进电机脉冲输出;HDMI 本地显示,千兆 UDP 把实时画面回传上位机,串口负责指令与状态交互。
本项目将原始 Anlogic TD 工程整理为可直接打开、可复现构建的开源仓库,保留原工程目录结构,补充了架构、硬件引脚、构建步骤、通信协议和上位机说明。
- 纯硬件视觉链路:OV5640 DVP 8-bit → SDRAM 乒乓缓存 → RGB/灰度 → 3×3 中值/Sobel/二值化 → 行扫描连通域,最多同时维护 4 个目标。
- 多目标光栅扫描:动态中位数选择下一目标,蛇形遍历所有工件,支持 PASS/FAIL 缺陷判定。
- 两种运动模式:多目标定位/切割(Job FSM)与单目标动态追踪(Track FSM),通过串口指令互斥切换。
- 双显示/传输通路:HDMI 本地实时显示;UDP 旁路把画面打包回传 PC,不额外占用 SDRAM 带宽。
- 多时钟域设计:50 MHz 控制域、66.67 MHz 视频域、125 MHz 网络域;Toggle 三拍同步、异步 FIFO Gray 指针、异步复位同步释放。
- 完整上位机:Python + Tkinter + OpenCV,UDP 视频显示、串口指令、PASS/FAIL 日志。
.
├─ src/ # RTL 源码
│ ├─ top.v # 顶层:采集、缓存、视觉、任务、UDP、HDMI
│ ├─ simple_target_detector.v
│ ├─ hdmi_cam_crtl.v # 图像模式与预处理
│ ├─ job_dispatcher.v # 多目标任务状态机
│ ├─ track_dispatcher.v # 动态追踪
│ ├─ step_motor_axis.v # 步进电机脉冲/梯形加减速
│ ├─ ov5640/ # 摄像头配置与 DVP 采集
│ ├─ sdram_r/ # SDRAM 控制器
│ ├─ hdmi/ # HDMI/VGA 显示与测试图案
│ └─ sdram/enc_file/ # 厂商加密 IP(仅用于构建)
├─ al_ip/ # Anlogic IP Generator 生成文件(PLL/FIFO)
├─ docs/ # 架构、构建、硬件、协议与配图
├─ host/ # Python 上位机与依赖
├─ release/pic_sdram.bit # 预构建比特流(可选)
├─ pic_sdram.al # Anlogic TD 工程文件
├─ top.adc # 引脚约束
├─ top.sdc # 时序约束
├─ pll_gen.v / ODDR.v # 时钟与 DDR 输出原语
└─ THIRD_PARTY_NOTICES.md # 第三方/厂商 IP 说明
工程根目录保持 TD 原结构,直接打开
pic_sdram.al即可;不要把src/或al_ip/移到其它目录,否则工程文件中的相对路径会失效。
| 项目 | 配置 |
|---|---|
| FPGA | Anlogic EG4S20BG256 |
| 输入时钟 | 50 MHz |
| 图像传感器 | OV5640,DVP 8-bit,RGB565 |
| 本地显示 | HDMI(TMDS),1024×768 |
| 网络 | RGMII 千兆 PHY |
| 执行机构 | XY 两轴步进电机,PUL/DIR |
| 人机接口 | UART 115200、按键、蜂鸣器、激光使能 |
| 上位机 | PC 固定 IP 192.168.240.2,UDP 监听 6003 |
完整引脚表见 docs/HARDWARE.md。top.adc 是引脚的唯一权威来源。
- 安装 Anlogic TD 6.2.168116(或兼容版本)。
- 打开根目录
pic_sdram.al。 - 确认器件为
EG4S20BG256,综合、布局布线、生成比特流。 - 通过 JTAG 下载,或直接使用
release/pic_sdram.bit验证。
更完整的工具版本、IP 重建与常见问题见 docs/BUILD.md。
cd host
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
python host.py默认串口为 COM17、波特率 115200;如果实际串口号不同,请修改 host/host.py 中的 SERIAL_PORT。上位机默认按 640×480 RGB888 解析 UDP 视频,若修改 FPGA 输出分辨率,需要同步调整 IMG_WIDTH/IMG_HEIGHT。
- PC:
192.168.240.2 / 24 - FPGA:
192.168.240.1 - 上位机监听:
6003/UDP - FPGA 目标端口:
6003(16'h1773)
| 指令 | 功能 | 说明 |
|---|---|---|
123 |
多目标定位 | 进入 Job FSM,蛇形遍历目标 |
456 |
切割准备/定位 | 锁存坐标,进入切割流程 |
789 |
执行切割 | 沿闭合矩形轨迹输出激光使能 |
012 |
动态追踪 | 单目标平滑跟随,0 退出 |
0 |
软停 | 停止当前任务,进入等待 |
指令为 ASCII 字符串,无回车换行;详细状态机与回传说明见 docs/PROTOCOL.md。
| 多时钟域与 CDC | 视觉流水线与 UDP 旁路 |
|---|---|
![]() |
![]() |
| 任务状态机 |
|---|
![]() |
本仓库中由项目作者编写的 RTL、Python 上位机、文档与图片采用 MIT License,见 LICENSE。
al_ip/、src/hdmi/enc_file/、src/sdram/enc_file/、TEMAC_CORE*.v 等厂商生成/加密 IP 的版权归原厂商所有,不在 MIT 授权范围内,仅为构建复现而保留。使用、修改或再分发前请遵守安路及相关 IP 提供方的许可条款。详见 THIRD_PARTY_NOTICES.md。
- 安路科技 EG4 系列 FPGA 与 TD 工具链
- OV5640 DVP 采集、SDRAM 控制器、HDMI TMDS 等参考设计的原作者
- 所有为本项目提供测试、调试与建议的同学和老师
本项目为个人/团队作品,按“现状”提供,不保证在所有板卡、工具版本和外围硬件上直接可用。上电前请确认 IO 电平、电机电源与激光安全互锁。



