【Code with SOLO】用 SOLO MTC 开发一款 FPGA 可视化模块拖拽拼装工具,让硬件设计告别繁琐连线

【Code with SOLO】用 SOLO MTC 开发一款 FPGA 可视化模块拖拽拼装工具,让硬件设计告别繁琐连线

一、摘要

我是一名 FPGA 开发工程师,日常工作中需要大量编写 Verilog 模块实例化和端口连线代码——这类工作繁琐但设计价值低。我使用 TRAE SOLO MTC 从零开发了一款 FPGA 模块拖拽拼装工具,通过可视化拖拽操作自动生成规范的 Verilog 代码,将原本 2-3 小时的连线编写工作缩短到 10-15 分钟,并内置 80+ 常用模块库,支持嵌套层级设计。

值得一提的是,SOLO MTC 参与了这款软件产品从构思到交付的完整生命周期——从早期的架构设计与技术选型,到核心功能开发、性能优化、Bug 修复,再到打包发布、使用说明书与推广文案的编写,乃至开发过程中技术经验的技能化沉淀,每一个环节都有 SOLO MTC 的深度参与。甚至这篇参赛帖子本身,也是由 SOLO MTC 协助撰写的——某种意义上,我提交了我自己

二、背景

在 FPGA/数字电路开发中,一个包含 15-20 个模块的中等规模系统,仅模块实例化和端口连线代码就需要编写 200+ 行 Verilog。这些代码结构高度重复、容易出错,但对系统功能设计本身贡献甚微。尤其是对于技术积累丰富的企业或团队,拥有大量可复用的 IP 模块,但每次搭建系统时仍需手动编写大量"胶水代码"。

我希望开发一款可视化工具,让开发者通过拖拽模块、点击端口的方式完成系统搭建,自动生成规范的 Verilog 代码,从而将精力集中在核心功能设计上。

三、实践过程

3.1 任务拆解

我将整个项目拆解为以下核心模块,逐步交给 SOLO MTC 实现:

  1. 数据模型层:定义 FPGAModule、Port、Connection、Project 等数据结构
  2. Verilog 解析器:基于 PLY 解析 .v 文件,提取模块端口信息
  3. 图形化画布:基于 Qt Graphics View 实现拖拽、连线、缩放
  4. 代码生成器:基于 Jinja2 模板自动生成 Verilog 代码
  5. 项目管理:设计文件的保存、加载、嵌套层级管理
  6. 性能优化:网格绘制重构、视口优化、批量加载、索引加速等

3.2 SOLO MTC 在开发中的关键作用

(1)软件架构设计阶段

在项目启动的架构设计阶段,我仅向 SOLO 描述了需求:“基于 PySide6 开发一个 FPGA 模块可视化拖拽拼装工具”。SOLO 立即为我提供了完整的架构方案:

  • 技术栈选型:为什么选择 PySide6 而非 PyQt5、为什么选择 QGraphicsView 而非 QWidget 直接绘制
  • 三层架构设计:QGraphicsView(视图)/ QGraphicsScene(场景)/ QGraphicsItem(图形项)的分层职责
  • 数据模型设计:使用 Python dataclass 定义 FPGAModule、Port、Connection 等核心数据结构
  • 信号槽机制:模块间通信方案、回调函数设计模式
  • 项目目录结构:core/、models/、ui/、parser/ 等目录的划分依据

(2)核心功能开发

Verilog 解析器开发:我提供了 Verilog 模块的语法样本,SOLO 基于 PLY(Python Lex-Yacc)生成了完整的词法分析器和语法分析器,能够自动解析模块名、端口方向、位宽、参数等信息。后续遇到解析边界情况(如多行参数声明),通过补充样本让 SOLO 迭代修复。

图形化画布实现:画布是整个项目最复杂的部分。SOLO 实现了:

  • 模块图形项(ModuleItem)的绘制、端口布局、拖拽交互
  • 贝塞尔曲线连线(WireItem)和箭头绘制
  • 端口点击拖拽创建连线
  • 画布缩放、平移、自适应扩展
  • Ctrl+拖拽复制模块

性能优化:当模块数量增多后出现卡顿,我让 SOLO 进行了系统性的性能分析和优化:

  • 将网格从 1200+ 个独立 QGraphicsLineItem 改为 drawBackground() 直接绘制
  • 视口更新模式从 FullViewportUpdate 改为 SmartViewportUpdate
  • 批量加载时阻塞信号、统一更新
  • 连线按 module_id 建立索引字典,查找从 O(N) 降为 O(K)
  • 为 ModuleItem 和 WireItem 启用 DeviceCoordinateCache 消除拖拽残影
  • 模块库从同步加载改为 QThread 异步加载

Bug 修复与功能迭代:开发过程中遇到的各种问题,SOLO 都能快速定位并修复:

  • 常量连接保存后重新打开不显示 → 加载逻辑缺少对 CONSTANT_MODULE_ID 的特殊处理
  • 保存后关闭仍提示未保存 → _dirty 标志未重置
  • 放大后拖拽残影 → 启用图形缓存模式
  • 启动时解析 80 个 Verilog 文件阻塞界面 → 改为后台线程异步加载

(3)软件发布与打包

SOLO 协助完成了软件的打包发布工作:

  • PyInstaller 配置:创建 .spec 文件,配置隐藏导入、资源文件收集、图标设置
  • 打包问题解决:诊断并修复 Python 环境与 PySide6 安装路径不一致导致的 DLL 缺失问题
  • 独立可执行程序:生成无需 Python 环境即可运行的 exe 文件,总大小约 114MB

(4)配套文档编写

SOLO 帮助编写了完整的软件配套文档:

  • 使用说明书:8 章完整文档,涵盖软件概述、系统要求、安装启动、界面介绍、基本操作、高级功能、快捷键、常见问题
  • 推广文案:突出产品核心价值(告别繁琐连线、提升模块复用效率、可视化设计思路清晰),包含效率对比数据表
  • 技术技能文档:将开发过程中的关键技术提炼为 4 个技能文档——Verilog 解析与代码生成、图形化设计画布、撤销/重做系统、嵌套层级设计

(5)作品提交帖子

本帖子本身也是由 SOLO 协助完成的——我提供了项目背景和开发过程的关键信息,SOLO 按照 SOLO 挑战赛的作品提交指南格式,生成了结构完整的参赛帖子,包括摘要、背景、实践过程、成果展示、效果总结等章节。

四、成果展示

应用功能

  • 可视化拖拽设计:从模块库拖拽模块到画布,点击端口创建连线
  • 智能连线:自动生成连线名称,位宽匹配检查
  • 常量连接:右键端口直接设置常量值(如 8’d255)
  • 代码自动生成:一键生成完整的 Verilog 模块实例化和连线代码
  • 嵌套层级设计:将设计封装为自定义模块,支持多层级系统搭建
  • 模块库管理:内置 80+ 常用模块,支持导入自定义 .v 文件
  • 撤销/重做:完整的操作历史记录
  • 独立可执行程序:PyInstaller 打包,无需 Python 环境

技术栈

层级 技术
UI 框架 PySide6 (Qt for Python)
图形视图 QGraphicsView / QGraphicsScene / QGraphicsItem
Verilog 解析 PLY (Python Lex-Yacc)
代码生成 Jinja2 模板引擎
数据模型 Python dataclass + JSON 序列化
打包发布 PyInstaller

项目结构

fpga_module_builder/
├── main.py                 # 入口文件
├── core/                   # 核心逻辑
│   ├── module_manager.py   # 模块管理
│   ├── undo_manager.py     # 撤销/重做
│   └── validator.py        # 设计验证
├── models/                 # 数据模型
│   ├── fpga_module.py      # 模块模型
│   ├── port.py             # 端口模型
│   ├── connection.py       # 连接模型
│   └── project.py          # 项目模型
├── parser/                 # Verilog 解析器
├── generator/              # 代码生成器
├── ui/                     # 界面组件(13个文件)
│   ├── main_window.py      # 主窗口
│   ├── canvas_scene.py     # 设计画布
│   ├── module_item.py      # 模块图形项
│   ├── wire_item.py        # 连线图形项
│   └── port_item.py        # 端口图形项
└── resources/              # 资源文件
    └── default_module_lib/ # 默认模块库(80+ .v 文件)

配套文档

使用说明书

推广PPT

SKILLS总结


五、效果与总结

提效数据

指标 传统手写 使用本工具
搭建时间(15模块系统) 2-3 小时 10-15 分钟
连线代码量 200+ 行 自动生成
出错风险 较高 极低(自动位宽检查)

SOLO MTC 在开发中的价值

  1. 大幅降低开发门槛:作为硬件工程师,我对 Python/Qt 的图形编程经验有限,SOLO 帮我完成了从架构设计到代码实现的全流程,让我能专注于 FPGA 领域的业务逻辑。
  2. 全流程深度参与:SOLO 不仅参与了软件本体的开发,还覆盖了架构设计、性能优化、打包发布、文档编写、技能提炼等软件产品的完整生命周期,甚至包括本参赛帖子的撰写。
  3. 快速迭代:遇到 bug 或需要新功能时,描述问题即可获得修复方案,平均每个问题从提出到解决不超过 3 轮对话。
  4. 性能优化专业到位:SOLO 主动进行了系统性的性能分析,提出了 24 个优化点并逐一实现,包括网格绘制重构、索引优化、异步加载等,这些都是我作为非专业 Python 开发者难以想到的。
  5. 知识沉淀:SOLO 帮助将开发过程中的关键技术提炼为可复用的技能文档,形成技术资产。

可复用经验

  • 将复杂项目拆分为独立模块,每个模块交给 SOLO 单独实现,降低单次任务的复杂度
  • 遇到性能问题时,先让 SOLO 做系统性分析,再针对性优化
  • 打包发布等非核心开发工作也可以交给 SOLO 处理,节省大量时间

cool :grinning_face:

1 个赞