实验五-Extra AI-Coder:四位全加器
概述
本指导书以实验五 四位全加器为例,介绍如何借助 AI-Coder 插件完成从工程创建、代码编写、功能仿真到综合实现的完整 FPGA 开发流程。AI-Coder 是一个集成在 VS Code 网页版中的智能助手插件,它提供了:
- Vivado 操作按钮:一键执行创建工程、仿真、综合、实现、生成 bitstream 等常用操作
- AI 辅助功能:通过自然语言对话,让 AI 根据实验需求自动生成 RTL 代码、testbench
- 日志粘贴与纠错:将 Tcl Console 的最近日志粘贴到输入框,由 AI 分析错误并给出修复建议。
本次实验你将掌握:
- AI-Coder 插件的完整操作流程,能借助 AI 完成 FPGA 开发全链路
- 四位全加器的代码实现、仿真验证与硬件下板测试
- 用 AI 自动分析 Vivado 报错、快速定位问题的方法
前置准备与提醒
目前实验在VS Code网页端进行完成,每位同学都会分配独立的容器,按照网络学堂分发的网站进行登录测试,请制定好工作目录,确保Vivado正常运行。
点击左侧边栏的 AI-Coder 图标,打开插件面板,可以看到如下界面:

建议右键点击左侧边栏的AI-Coder图标,选择移动到右侧边栏,避免切换代码 / 波形页面时插件会话被自动回收。
碰到问题
这是我们首次引入AI辅助硬件实验,如果遇到问题,请查FAQ或联系解决,也欢迎积极提供新功能建议。
完整流程预览与速查
| 步骤 | 操作 | 使用的按钮 / 功能 | 注意事项 |
|---|---|---|---|
| 1 | 创建 / 打开工程 | 创建工程 + 工程名输入框 |
提前打开对应实验文件夹 |
| 2 | 确认实验需求与约束规则 | 打开实验文档 + 实验下拉 |
本次选择四位全加器 |
| 3 | 编写 RTL/Testbench | AI 编写代码 或自然语言对话 |
不要直接使用 AI 生成的约束文件 |
| 4 | 行为级仿真验证功能 | 仿真 + 时间输入框 |
Testbench 需符合命名规则 |
| 5 | 导入官方 XDC 约束 | 导入约束 + XDC 路径输入 |
使用实验文档提供的约束 |
| 6 | 综合 | 综合 |
耗时 1-3 分钟,勿重复点击 |
| 7 | 实现 | 实现 |
耗时 2-5 分钟,勿重复点击 |
| 8 | 生成 Bitstream | 生成 bit |
生成后核对文件存在 |
| 9 | 硬件烧写测试 | OpenOCD 命令 / 烧写工具 | 提前连接实验箱并上电 |
| — | 手动执行命令 | 执行 Tcl |
用于高级诊断 |
| — | 错误排查 | 粘贴日志 + 自然语言对话 |
补充问题描述再发送 |
实验步骤
第一步:创建 / 打开 Vivado 工程
插件默认在当前 VS Code 打开的工作区下创建工程,若需新建工程请确保当前目录不存在对应工程;若已存在同名工程,插件会直接打开旧工程,如需覆盖请先手动删除旧工程文件夹。
- 在 AI-Coder 面板顶部找到 “创建工程” 按钮,旁边有工程名输入框
- 将输入框改为你想要的工程名,例如
Lab5,注意所有工程目录、文件名、模块名、路径仅可使用英文、数字、下划线,不要出现中文、空格、特殊字符(如 @/ 中文括号 / 空格),否则会出现各类无法定位的编译 / 运行错误。 - 点击 “创建工程” 按钮。
如下,可以看到已经创建Lab5工程:

默认芯片型号
插件默认使用 xc7a35tfgg484-2,与实验箱 FPGA 型号一致。
持久化存储目录
只有在 ~/ 即 /home/coder/ 内的文件会被持久化存储,其他路径下的文件会随着 Docker 重启而消失。建议在 ~/VivadoProjects
下创建新工程。
第二步:切换到对应的工程目录并阅读实验文档
- 每个实验对应独立子文件夹(如Lab5),实验前需先打开对应子文件夹作为 VS Code 工作区,再进行后续操作。请在 VS code
菜单选择“文件 -> 打开文件夹...”,打开最新工程目录(例如下图打开了
Lab5)



-
在 Vivado 操作区点击 “打开实验文档”,在下拉框直接选择
四位全加器即可跳转对应实验说明。 -
从下拉框选择实验(点亮数码管 / 四位全加器 / 计数器 / 串行密码锁 / 静态存储器访问)
-
浏览器会打开对应实验页面
第三步:使用 AI 编写代码与testbench
方式一:一键生成(推荐)
- 在底部输入框中粘贴本次实验的设计需求以及 实验五 四位全加器 中给定的参考代码,例如以下需求与源码( 也可以直接粘贴需求):
实验五:四位全加器。
用元件例化的方式设计实现一个四位全加器。
先编写一位全加器 full_adder(输入 A、B、Cin,输出 F、Cout),
再用 4 个 full_adder 例化组成四位全加器 Adder(输入 A[3:0]、B[3:0]、Cin,输出 F[3:0]、Cout)。
同时编写 Testbench 进行功能验证。
管脚约束:A[3:0] 对应 IO1~IO4,B[3:0] 对应 IO6~IO9,Cin 对应 IO5,
F[3:0] 对应 IO17~IO20,Cout 对应 IO16。
此外,如果要检测代码是否生成正确可让AI生成testbench,可以通过第四步仿真生成的波形图或test cases检测其是否正确,
以下为生成代码后的示意图:

- 点击 "AI 编写代码" 按钮,或直接点击 "发送"。
AI 会根据你的描述,自动生成以下文件并写入工作目录:
| 文件 | 说明 |
|---|---|
full_adder.sv |
一位全加器模块 |
Adder.sv |
四位全加器顶层模块(例化 4 个 full_adder) |
Adder_tb.sv |
仿真测试文件 |
Adder.xdc |
管脚约束文件 |
testbench 名称限制
当前实现检测将 testbench 加入仿真 sim_1 有名称要求:前缀匹配 tb*.v 或后缀匹配 *_tb.v。建议让 AI 生成前先约定好文件名。
方式二:对话式逐步生成
你也可以通过多轮对话逐步完善设计:
- 先发送:
请帮我编写一位全加器 full_adder - 确认无误后,再发送:
用 4 个 full_adder 例化组成四位全加器 Adder - 接着发送:
为 Adder 编写 Testbench,覆盖多组输入组合 - 最后发送:
生成 XDC 约束文件,A[3:0] 对应 IO1~IO4,B[3:0] 对应 IO6~IO9……
AI 自动写文件
AI 回复中如果包含文件块,插件会自动将文件内容写入你的工作目录。你可以在 VS Code 的文件浏览器中看到新生成的文件。
补充:使用“设置顶层”按钮
为减少工程设置错误,第三步生成代码和 testbench 后,建议顺手设置一次顶层,而不要只依赖手动执行 Tcl。
“设置顶层”区域位于 “仿真” 按钮附近,包含:
- 顶层名输入框
fileset选择框(sources_1/sim_1)- “设置顶层” 按钮
使用方法如下:
- 在输入框填写模块名,不要填写文件名;例如填
tb_adder,不要填tb_adder.v - 若设置设计顶层,选择
sources_1;若设置仿真顶层,选择sim_1 - 点击 “设置顶层”,系统会自动执行设置并回读确认结果
输入框中已提供示例占位文案:例如 tb_adder(不带 .v)。
推荐用法
综合前可将 Adder 设为 sources_1 的顶层;仿真前可将 tb_adder 或 Adder_tb 设为 sim_1 的顶层。若仿真识别不到 testbench,可优先使用此按钮修正,而不是手动输入 Tcl。
第四步:功能仿真
- 在 “仿真” 按钮旁设置时间(默认
100,单位 us) - 点击 “仿真”。
当前仿真流程已升级,自动做以下事情:
- 确保工程已打开
- 扫描当前目录 Verilog 文件并分类加入
sources_1/sim_1 - 自动更新编译顺序
- 自动检查/尝试设置
sim_1 top - 执行仿真命令序列:
launch_simulation -> open_vcd -> restart -> log_vcd -> run xxxus -> close_vcd -> close_sim
仿真启动后,会生成dump.vcd文件,你可以利用VaporView插件打开,加入信号再在其中观察 A、B、Cin、F、Cout
各信号的变化,验证全加器的功能是否正确。标准的testbench应该还会有cases test,你也可以读取其在Vivado中的输出进行debug。
以下为仿真成功的提示。一是输出部分没有报Error,且testbench的cases均通过,二是Lab5_sim1目录下出现了dump.vcd波形图文件,我们可以借助
VaporView查看。

previous response id
与 AI 交互时,系统会展示 prid,将其完整复制(连带prid前缀)到输入框中并发送,可以返回到以前对话的状态。
常见失败原因
如果提示 sim_1 top is empty,通常是 testbench 未识别或命名不匹配,请检查 tb 文件名与模块名。
第五步:导入约束文件到工程
- 在第二步打开的实验文档中,在页面中找到管脚约束(XDC)部分,复制并保存为本地目录
.xdc文件(例如lab5.xdc)。 - 在 “导入约束” 旁输入你的 XDC 文件路径(可直接用默认
labX.xdc) - 点击 “导入约束”。
插件会执行类似:
set xdc_path "lab5.xdc"
if {[file exists $xdc_path]} {
catch {remove_files [get_files $xdc_path]}
catch {add_files -fileset constrs_1 -norecurse $xdc_path}
update_compile_order -fileset constrs_1
}
若路径错误,会提示 xdc file not found。
以下展示了一个添加Adder.xdc的例子,可以看到输出端无Error且报INFO: constraint imported: Adder.xdc,则说明顺利添加约束。

务必核对管脚映射
如果让AI生成,其生成的管脚约束应与 实验五 四位全加器 中给出的约束及实际硬件接线一致,请仔细核对后再进行综合。AI 生成的约束很可能有错误,因此生成代码后,建议直接使用实验文档的官方版本覆盖 AI 生成的 xdc 文件。
第六步:综合
点击 “综合” 按钮,插件会在确保工程打开后执行:
reset_run synth_1
launch_runs synth_1
wait_on_run synth_1
等待 Tcl Console 中出现 synth_1 complete 字样,表示综合完成,这一步将Verilog代码转换成FPGA真正能实现的硬件逻辑结构。
以下为成功展示:

第七步:实现
点击 “实现” 按钮,执行:
reset_run impl_1
launch_runs impl_1
wait_on_run impl_1
等待 Tcl Console 显示 impl_1 complete,这一步将综合后的逻辑网表真正映射到FPGA芯片的物理资源。
以下为成功展示:

第八步:生成 Bitstream
点击 “生成bit” 按钮,执行:
open_run impl_1
write_bitstream -force [get_property DIRECTORY [current_run]]/[get_property TOP [current_fileset]].bit
生成完成后,.bit 文件会出现在工程目录的 impl_1 运行目录中,可用于下载到 FPGA。如下图所示:

若报 NSTD-1 / UCIO-1,说明约束未正确导入或端口名不匹配,请回到第二、五步检查。
烧板子
需要先安装 OpenOCD,参考 OpenOCD官网,例如 Mac 用户可以通过如下命令安装:
brew install openocd
WinUSB驱动
Windows 用户可能需要配置WinUSB驱动,步骤如下
1. 插入 FT2232HL 模块,打开 Zadig 软件,点击选项→ 勾选List All Devices。
2. 在设备列表中选择FT2232HL 的 Channel A(注意:仅替换 Channel A 驱动,保留 Channel B 的串口功能)。
3. 右侧驱动选择WinUSB,点击Replace Driver,等待驱动安装完成。
4. 验证:设备管理器中通用串行总线设备下能看到 WinUSB 设备,无黄色感叹号。
还需要一个对应于板子型号的配置文件:openocd_xc7a35t.cfg。
随后下载第八步生成的 .bit 文件,并将其与下载的 .cfg 文件放置在同一目录。之后在此目录下打开终端,运行以下命令即可烧板并进行硬件测试:
openocd -f openocd_xc7a35t.cfg -c "init; pld load 0 YOUR_DESIGN.bit; exit"
如图

注意在命令中使用你生成的 .bit 文件。
手动在命令行输入 Tcl 执行
由于Vivado输出和终端不是同一个Vivado,无法在终端直接输入命令。在 Vivado 操作区最后有 “执行 Tcl” 输入框与按钮:
- 输入一条 Tcl 指令(例如
report_timing_summary) - 点击 “执行 Tcl”,命令会直接发送到 Vivado Tcl Console。
适用于临时诊断、手动修复和高级操作。
错误排查与纠正
出现错误时可用 “粘贴日志”:
- 点击 “粘贴日志”,自动把最近 Tcl Console 输出放入输入框
- 在日志前/后补一句问题描述(如“实现失败,帮我定位”)
- 点击 “发送” 让 AI 分析。
FAQ
-
Q:AI-Coder插件在侧边栏找不到了/打开后空白怎么办?\ A:① 快捷键快速唤醒:Windows/Linux按
Ctrl+Alt+B,Mac按Command+Option+B;② 若仍空白,刷新网页等待1-2分钟让容器和Vivado后台进程加载完成,不要反复点击按钮导致进程卡死。 -
Q:关闭页面重进后,AI的对话历史不见了怎么办?\ A:目前插件暂不支持会话持久化,建议提前右键点击左侧边栏的AI-Coder图标→选择「移动到右侧边栏」,避免切换代码/波形页面时会话被自动回收;若会话丢失,可重新描述需求或粘贴 prid 继续交互即可。
-
Q:重启容器后之前写的代码/工程不见了怎么办?\ A:仅
~/(即/home/coder/)目录下的文件会持久化存储,其他路径(如/opt、/tmp等)的文件会随容器重启丢失。建议所有实验统一存放在~/VivadoProjects/[实验名]路径下,例如本次实验为~/VivadoProjects/Lab5。 -
Q:刷新页面后需要重新创建工程吗?\ A:不需要,只要工程存放在持久化存储目录下,重进后打开对应实验文件夹,插件会自动打开已有工程,不会覆盖原有代码。
-
Q:登录后卡顿/操作无响应怎么办?\ A:登录后等待5-10秒钟让Vivado后台进程启动完成再操作;若仍卡顿可刷新页面,或联系助教重置容器。
-
Q:为什么创建完工程,AI生成的文件找不到/插件识别不到工程?\ A:创建完工程后,必须打开工作文件夹:① 先在
~/VivadoProjects下创建Lab5工程;② 菜单选「文件→打开文件夹」选中Lab5作为当前工作区。 -
Q:路径/文件名带中文/空格,编译报错怎么办?\ A:所有工程目录、文件名、模块名仅可使用英文、数字、下划线,禁止出现中文、空格、特殊字符(如@、中文括号等),否则会出现不可定位的编译错误。请将路径中的中文/特殊字符修改为英文后重试。
-
Q:想重新做实验,怎么删除旧工程?\ A:在左侧文件浏览器找到旧工程文件夹,右键删除即可,再输入新的工程名点击「创建工程」即可创建全新工程。
-
Q:怎么让AI生成的代码更符合要求?\ A:提需求时明确约束即可,比如本次实验可以直接说:\ 用元件例化方式实现四位全加器,要求:① 一位全加器模块名为full_adder;② 四位顶层模块名为Adder;③ Testbench文件名为Adder_tb.sv,符合*_tb命名规则,覆盖进位为0、进位为1、溢出等边界用例。\ 若AI生成的代码有错误,直接指出问题即可修改,无需重发全部需求,比如“刚才生成的全加器进位逻辑错误,应改为(A&B)|(A&Cin)|(B&Cin),请修正”。
-
Q:可以手动修改AI生成的代码吗?还是必须用AI生成的内容?\ A:完全可以手动修改,AI仅作为辅助工具,你可以根据设计需求任意调整代码,修改后保存再重新执行仿真/综合即可。
-
Q:AI回复了代码,但没有自动写入到文件里怎么办?\ A:① 确认你已经打开了实验文件夹作为工作区,文件有写入权限;② 可以手动复制AI输出的代码块,新建对应名称的文件粘贴保存即可。
-
Q:testbench命名符合要求,但还是识别不到怎么办?\ A:testbench需要同时满足两个规则:① 文件名符合
tb_*.v/*_tb.v/tb_*.sv/*_tb.sv规则;② 文件内的模块名和文件名完全一致(Linux大小写敏感,比如adder_tb和Adder_tb会被识别为不同文件)。若仍识别不到,可手动执行Tcl命令指定仿真顶层(替换为你的testbench模块名):\set_property top Adder_tb [get_filesets sim_1] -
Q:仿真报错
sim_1 top is empty怎么办?\ A:① 先检查testbench文件名和模块名是否符合命名规则;② 若符合仍报错,执行问题12中的Tcl命令手动指定仿真顶层,再重新点击仿真。 -
Q:仿真生成的波形全是X/没有信号变化怎么办?\ A:① 检查testbench是否对输入信号进行了初始化(比如在initial块中给A、B、Cin赋初值);② 确认仿真时间足够长(默认100us不够可调整为200us或1ms);③ 检查RTL代码是否存在位宽不匹配、信号未赋值等逻辑错误。
-
Q:找不到仿真生成的
dump.vcd文件怎么办?\ A:仿真成功后dump.vcd会生成在lab5.sim/sim_1/behav/xsim/dump.vcd下(以lab5为例),若没有则说明仿真失败,可查看AI-Coder输出的报错日志排查问题。 -
Q:怎么查看仿真波形?\ A:打开
dump.vcd文件→点击Netlist View,在VaporView左侧信号栏选中需要观察的信号(如A[3:0]、F[3:0]、Cout),拖拽到波形区即可查看时序。testbench的打印信息会直接显示在AI-Coder输出日志中,可直接查看测试用例是否全部通过。 -
Q:点击综合/实现后卡住不动,长时间没有输出怎么办?\ A:综合通常耗时1-3分钟,实现耗时2-5分钟,若超过10分钟仍无输出,可能是Vivado出错,可刷新页面重进后重试。
-
Q:生成Bitstream时报
NSTD-1/UCIO-1错误怎么办?\ A:这是约束不匹配导致的,按以下步骤排查:① 执行Tcl命令get_ports *,查看输出是否包含顶层模块的所有端口,若没有则重新导入约束文件;② 对比XDC文件中get_ports后的端口名与get_ports *的输出是否完全一致(大小写、下划线均需匹配);③ 确认你使用的是实验文档提供的官方约束,而非AI生成的错误约束;④ 执行Tcl命令get_files -fileset constrs_1确认约束文件已被正确加入工程。 -
Q:生成完Bitstream找不到.bit文件怎么办?\ A:生成的bit文件默认路径为
./Lab5.runs/impl_1/Adder.bit(对应你的工程名和顶层模块名),也可执行Tcl命令get_property DIRECTORY [current_run]查看输出目录。 -
Q:综合/实现失败了怎么办?\ A:直接点击AI-Coder的「粘贴日志」按钮,补充问题描述(如“综合失败,帮我定位原因”)发送给AI即可自动分析报错,无需手动翻日志。
-
Q:烧写命令里的
YOUR_DESIGN.bit要怎么改?\ A:替换为你实际生成的bit文件名,例如本次实验生成的顶层模块是Adder,则bit文件名为Adder.bit,修改后的命令为:openocd -f openocd_xc7a35t.cfg -c "init; pld load 0 Adder.bit; exit" -
Q:烧写时报错
Error: libusb_open() failed with LIBUSB_ERROR_ACCESS怎么办?\ A:① Linux/Mac系统:在烧写命令前加sudo执行,或执行sudo usermod -aG dialout $USER将用户加入串口组,重启终端后即可无需sudo烧写;② Windows系统:确认已按照指导书要求安装了WinUSB驱动,且选择的是FT2232HL的Channel A(不要选错Channel B,否则串口功能会失效)。 -
Q:烧写成功后,实验箱没有输出/功能不对怎么办?\ A:可排查:① 确认仿真时功能完全正确;② 核对XDC约束的端口名、管脚号与实验文档要求完全一致,确认没有错误约束;③ 确认实验箱已上电,拨码开关、LED等外设接线正确;④ 重新生成Bitstream后再次烧写。
-
Q:Windows系统安装WinUSB驱动后仍识别不到设备怎么办?\ A:① 打开设备管理器,确认FT2232HL Channel A 无黄色感叹号;② 若仍有感叹号,重启电脑后重新用Zadig替换驱动,注意不要选错Channel B。
-
Q:怎么手动执行Vivado命令?\ A:在AI-Coder面板的「执行Tcl」输入框输入需要执行的命令(如
report_timing_summary),点击按钮即可直接发送到Vivado Tcl Console执行,适用于高级诊断和手动修复。 -
Q:遇到报错怎么高效反馈给助教?\ A:请提供以下信息:① 你操作到哪一步出现的问题;② 完整的报错日志;③ 你已经尝试过哪些解决方法,助教可以更快帮你定位问题。