跳转到主要内容

VS Code+Claude Code+Vivado MCP工具链搭建及使用Skill加速设计

作者:Max Cheng,文章来源:FPGA FAE技术分享选集

一、前言

AMD提供的Vivado MCP Server,依托AI Agent自然语言交互能力,实现Vivado工程无人化搭建、IP配置、编译、校验等功能,摆脱传统GUI手动操作,实现轻量化FPGA工程的敏捷开发。

之前试用了一段时间效果都不错,但在7系列FPGA中搭建XDMA+MIG DDR3高速传输工程时发现问题,生成的MIG IP持续报错,无法完成MIG IP初始化与工程编译。通过检查AI反馈的信息,Vivado MCP主要将自然语言生成为Tcl脚本、用set_property来配置参数。而7系列中的MIG通过GUI或.prj文件来实现,所以一直出错。本文介绍通过自研Skill脚本的方法,为7系列MIG IP自动化开发提供可复用的技术方案。

二、开发环境搭建

本方案使用的开发环境:

A. 代码编辑器:VS Code

  •   B. AI Agent工具:Claude Code for VS Code插件

C. 协议中间层:Vivado MCP Server

  •    D. FPGA开发工具:Vivado 2025.2

2.1 安装Claude Code插件

在VS Code的侧边栏,点击Extensions,在搜索栏里输入“Claude Code”,找到Claude Code for VS Code,点击Install即可。

2.2 安装Vivado AI插件

还是在VS Code的Extensions栏,点击右上角…,选择Install from VSIX,找到下载到本地的vivado-ai-extension-0.6.9.vsix,点击Install。

2.3 配置Vivado路径

打开VS Code的设置(快捷键Ctrl+,),搜索Vivado Path,填入Vivado工具所在的路径。或者在系统的PATH中添加Vivado路径,VS Code可以自行找到。

2.4 Claude Code工具适配对接

要让Claude Code能够关联Vivado MCP Server,还需要对Claude Code进行设置,打开C配置文件:C:\Users\Administrator\.claude.json添加:

2.5 验证配置

至此工具的配置完成,在VS Code的下边栏可以看到Vivado Connected和MCP: Running。在Claude Code中输入List the available MCP tools,如果显示出当前可用MCP工具,说明安装成功。

三、搭建工程应用与发现核心问题

3.1 自动化工程搭建

基于搭建完成的AI工具链,常规开发流程为:

1. 新建一个文件夹作为工程目录,新建一个文本文件,编辑需要完成的工作,比如创建Vivado工程,基于XC7K325T-2FFG676I。创建block design,添加IP XDMA和MIG。其中XDMA配置为Gen2 x4,AXI memory mapped接口。MIG配置为DDR3,memory类型为component,型号MT41J128M8XX-125,数据位宽16。添加必要的连线和IO,分配地址,验证block design并生成wrapper。

2. 在VS Code中File -> Open Folder,打开1)中创建的文件夹。

3. 点击Claude Code图标,会打开对话框,输入/init。Claude Code会读取文本中的信息,将我们的需求总结成一个CLAUDE.md的文件并依据此开始相应的开发工作。在Vivado AI Extension的Tasks中会看到类似下面的操作步骤。

3.2 发现问题

在大部分的测试中,以上的流程会自动生成一个可以使用的Vivado工程。但在7系列FPGA 中搭建XDMA+MIG工程时,发现工具无法用这个方法生成我们要求的MIG核,它给出了三个选项:

启动GUI向导那就失去使用AI工具的意义了,所以选择了自动生成.prj文件。随后工具开始执行vivado_doc_search来搜索mig.prj的相关信息:

但是工具生成的.prj文件在后续的编译中持续出错,即使它执行多个Web Fetch从网络上获取mig.prj文件来进行参考,依然没能修复错误。

3.3 报错原因分析

本次报错并非脚本语法错误,主要是因为Vivado MCP Server将自然语言生成为Tcl脚本、用set_property来配置参数。而7系列FPGA MIG IP的机制限制,仅支持Vivado GUI配置或者编写.prj文件提交给生成器。DDR 型号、位宽、时序、引脚 bank 全都不在参数表里,不支持set_property配置。

在Ultrascale/Ultrascale+器件上测试了生成MIG核,是没有问题的。

因此,纯Tcl自动化方案不适用于7系列MIG IP开发,必须另寻他法。

四、解决思路

既然是在生成.prj文件时出错,给AI工具一个已经验证过的.prj文件参考是否可以解决问题呢?

提供了一个XC7K160T上的mig.prj文件作为参考之后,工具生成的.prj文件格式上是没有错误了,但是由于是不同的器件和封装,文件内容跟器件无法匹配。

提醒工具TargetFPGA必须与工程使用的器件型号一致,IO的分配必须与封装匹配。(这里封装文件可以用官方提供的txt文件,也可以让工具从网上自行获取)

DDR颗粒的不同,位宽的不同,也会有不同的mem_size和addr_width,需要根据实际情况设置。如果使用的不是默认型号,还需要提供Timing parameters。

随后编译发现在implement阶段IO的分配出现问题,于是将DDR分配管脚的规则告诉AI工具。

最终MIG IP按照我们的要求生成无误,block design验证通过,工程编译完成。

五、利用Skill打造可以复用的技能

问题虽然得到解决,但是耗费了大量的时间和Token,那有没有办法让之后工作中再碰到需要例化MIG核的时候顺利、快捷的实现呢?答案就是Skill。

Skills 是智能体可执行的具体功能模块,相当于智能体的“技能清单”,用于将重复性或专业流程固化并按需调用。

5.1 Skills 的作用

模块化能力:将重复性、专业化的流程打包封装,避免每次都重新培训 AI。

按需调用:智能体可以根据任务自动选择合适的 Skill。

经验沉淀:把专家级的方法写进 SKILL.md 文件,让智能体在执行任务时遵循固定流程。

提高效率:相比传统的手动提示或RAG检索,Skills 可以快速调用外部知识和工具,减少重复操作。

5.2 Claude Code可用Skill的结构

5.2.1 Claude Code 的 Skill 核心规则

每个 Skill 是独立文件夹,文件夹名就是调用命令 `/skill-name`;唯一强制文件:`SKILL.md`,支持全局/项目级两套存放位置。

全局:对本机所有工程生效(C:\Users\Administrator\.claude\skills\my-fpga-skill1\SKILL.md)

项目级:只对当前工程有效。(~\.claude\skills\my-fpga-skill1\SKILL.md)

5.2.2 Skill目录树

5.2.3 SKILL.md结构

文件分为两部分:顶部 YAML frontmatter(元数据)+ Markdown 指令正文,用`---`分隔上下两块。

Frontmatter 字段:

Markdown 指令正文描述该Skill的任务指令,领域知识和约束规则等。

5.3 编写Skill

上面介绍了Skill的目录树和文件结构,但是实际上并不需要记得这些知识点,而是可以让AI工具自己来编写。我这里让Claude Code自行总结之前碰到MIG问题及解决的步骤,并生成一个SKILL。

该Skill包含了:

1. 规则:

A. TargetFPGA必须与工程器件一致;

B. ModuleName必须等于CONFIG.Component_Name。

C. 工程XDC比MIG自带XDC优先级更高

2. DDR IO分配规则,时钟分配规则

3. 器件字符串 → TargetFPGA 的转换

4. 完整 prj 生成 proc(参数化)

5. 示例

六、验证Skill

将自研Skill脚本放在新工程的目录下,按照3.1的步骤新建一个Vivado工程,可以看到当AI工具发现需要添加MIG IP时,自动引用了Skill。

如果没有自动引用,我们可以在对话框中手动输入/mig-7series-skill 来调用Skill。

最终顺利生成block design,并validate通过。

七、Skill脚本拓展能力

既然此Skill已经集成了DDR的IO分配规则,我们又经常碰到客户在原理图设计阶段担心管脚分配有误,是否可以用Skill来检查IO分配呢?

我故意修改了工程里DDR的几个管脚,保存成phys_io.xdc用来测试:

以上可以看到利用Skill可以准确找到所有问题。

八、结论

结合AMD最新的Vivado MCP Server,可以利用我们的知识,制作成Skill来加速设计。还可以将其他系列,其他IP的IO规则制作成不同的Skill,在设计过程中帮助我们提早发现问题,提高效率。

如果您在Vivado MCP、AI开发FPGA方面有问题,欢迎联系:

simonyang@comtech.cn

charlesxu@comtech.cn