--- name: gwin-skill description: >- Gowin (高云) ACG525 / GW5A-25A FPGA full toolchain: project layout, Verilog/CST/SDC design rules, gw_sh build, programmer_cli download, TFT RGB pin map. Use when the user mentions 高云, Gowin, GW5A, ACG525, .gprj, gw_sh, Programmer, TFT/LCD 刷屏, FPGA 综合下载, or asks an agent to build/flash Gowin board projects. --- # Gwin Skill — 高云 FPGA 全流程 **立即阅读本文件后按流程执行。** 细节按需打开同目录参考文档,不要凭记忆猜引脚或命令。 ## Agent 必做清单 ``` - [ ] 确认工作区含 tool-chain/Gowin 与目标工程(如 proj1) - [ ] 按 design-spec.md 组织/修改 RTL + .cst + .sdc + .gprj - [ ] 用 scripts 或 pipe 方式跑 gw_sh(禁止 BOM、禁止交互挂起) - [ ] 确认 impl/pnr/.fs 已生成 - [ ] 板子供电 + Type-C/下载线;programmer_cli SRAM 下载 - [ ] 向用户报告比特流路径与验证方式 ``` ## 环境路径(本机约定) 相对工作区根 `fpga/`(可按实际调整,改前先 `Test-Path`): | 用途 | 路径 | |------|------| | IDE / `gw_sh.exe` | `tool-chain/Gowin/Gowin_V1.9.11.03_Education_x64/IDE/bin` | | Programmer | `tool-chain/Gowin/Gowin_V1.9.11.03_Education_x64/Programmer/bin` | | ModelSim | `tool-chain/modelSim` | | 板卡引脚表 | `tool-chain/fpga/ACG525_EDA开发板引脚信息表.xlsx` | | 例程 | `tool-chain/fpga/gaoyun_fpga/` | **器件(ACG525):** - Series: `GW5A` / Package: `UBGA324` / Device: `GW5A-25` / Speed: `C2/I1` / Version: **A** - Part: `GW5A-LV25UG324C2/I1` - `.gprj` Device 节点示例:`name="GW5A-25A" pn="GW5A-LV25UG324C2/I1"` ## 工程怎么组织 ``` / ├── .gprj # 工程清单(必须) ├── build.tcl # CLI 构建(UTF-8 无 BOM) ├── build_and_download.bat └── src/ ├── .v # 顶层 ├── *.v # 子模块 ├── .cst # 管脚约束 └── .sdc # 时钟约束(建议) ``` 产物(勿手改):`impl/gwsynthesis/`、`impl/pnr/.fs` 新建工程:复制 [templates/](templates/) 或运行 `scripts/new_project.ps1`。 规范细节 → [design-spec.md](design-spec.md) 引脚与 TFT → [reference-pins.md](reference-pins.md) ## 怎么编译 **唯一推荐方式(Windows):** 在工程目录把 `build.tcl` **pipe** 给 `gw_sh`(避免 CLI 挂起、避免 UTF-8 BOM)。 ```powershell $gowin = "C:\Users\Administrator\Documents\fpga\tool-chain\Gowin\Gowin_V1.9.11.03_Education_x64" $env:PATH = "$gowin\IDE\bin;$gowin\Programmer\bin;" + $env:PATH Set-Location cmd /c "type build.tcl | gw_sh.exe" ``` 或直接:`scripts/build.ps1 -ProjectDir ` `build.tcl` 最小模板: ```tcl open_project .gprj set_option -output_base_name set_option -synthesis_tool gowinsynthesis set_option -top_module set_option -use_sspi_as_gpio 1 set_option -use_mspi_as_gpio 1 set_option -use_ready_as_gpio 1 set_option -use_done_as_gpio 1 set_option -use_cpu_as_gpio 1 run all exit ``` 成功标志:日志出现 `Bitstream generation completed`,且存在 `impl/pnr/.fs`。 ### 禁止事项 - 不要直接交互运行 `gw_sh.exe` 后空等(易挂起) - 不要写 `set_option -verilog_std vlg2001`(非法;用 `v2001` 或省略) - 不要用带 BOM 的 PowerShell here-string 写 tcl 再 pipe(`open_project` 会变非法命令) - 下载器不能给板子供电:必须 DC 或 Type-C 供电并拨电源开关 ## 怎么下载 ```powershell programmer_cli.exe -d GW5A-25A --fsFile "\impl\pnr\.fs" -r 2 ``` | `-r` | 含义 | |------|------| | 2 | SRAM Program(掉电丢失,调试用) | | 4 | SRAM Program and Verify | | 5/6 | embFlash 擦写(固化) | 先扫线:`programmer_cli.exe --scan` 应看到 `Gowin USB Cable` 与 `GW5A-25A`。 一键:`scripts/build_and_download.ps1 -ProjectDir ` ## 设计规范(摘要) 1. 顶层端口名与 `.cst` 中 `IO_LOC "name"` **完全一致** 2. 时钟默认 `clk` @ **T9** 50 MHz;复位 `rst_n` @ **H5**(KEY5,低有效) 3. IO 标准默认 `LVCMOS33`,`BANK_VCCIO=3.3` 4. 输入按键加 `PULL_MODE=UP`;LCD 数据/时钟 `DRIVE=8` 5. TFT 2×18 口用 **RGB565**:`R[7:3]/G[7:2]/B[7:3]`(见 reference-pins.md) 6. Verilog-2001;同步复位风格与现有例程一致(`posedge clk or negedge rst_n`) 7. 像素时钟:无 PLL 时可用 50 MHz 二分频 ≈25 MHz(800×480 约 45 Hz,可接受) 完整规范 → [design-spec.md](design-spec.md) ## 教其他 Agent 怎么用 1. **发现本 skill**:路径 `~/.cursor/skills/gwin-skill/SKILL.md` 或仓库根 `gwin-skill/SKILL.md` 2. **触发词**:高云 / Gowin / GW5A / ACG525 / 综合下载 / TFT 刷屏 / `.gprj` 3. **强制步骤**:先读本 `SKILL.md` → 改代码前读 `design-spec.md` → 碰 LCD/按键前读 `reference-pins.md` 4. **执行**:只用 `scripts/*.ps1` 或文档中的 `type build.tcl | gw_sh.exe`;下载用 `programmer_cli` 5. **验证**:`--scan` 有设备;下载 Finished;用户确认现象(LED/彩条等) 6. **扩展新板卡**:在 `reference-pins.md` 增表,勿改命令骨架 人类说明 → [README.md](README.md) Agent 协作约定 → [AGENTS.md](AGENTS.md) 端到端例子 → [examples.md](examples.md)