HARD 硬件构建与下载
2410 字约 8 分钟
2026-09-16
构建前
在 property.json 配置 toolChain、器件、工程目录和 srcTop。确认 XDC 约束与实际板卡一致,厂商工具和许可证可用。包含 PS 的设计应选择含处理器系统的实际 HDL wrapper 作为顶层;配置 soc 本身不会给纯 PL 顶层添加 PS。
Xilinx 工作流
| HARD 入口 | 作用 |
|---|---|
| Launch | 创建/打开工程并导入源码、约束、IP、BD 和库 |
| Refresh | 同步当前工程输入 |
| Build | 执行综合、实现与 bitstream 流程 |
| Synth / Impl / Generate BIT | 分步执行,便于定位失败阶段 |
| Simulate CLI / GUI | 在厂商工程中启动仿真 |
| Program / SRAM | 把匹配的 bitstream 下载到易失配置存储 |
| Flash | 根据配置存储器参数进行非易失固化 |
| GUI / Exit | 打开厂商界面/结束当前工程会话 |
先 Launch,再 Build。查看 Output → Digital-IDE Hardware 中每一步的状态及最早的错误。插件维护交互式 Vivado 会话;会话内 source Tcl 或 launch_runs 启动厂商脚本仍是正常执行方式,并不意味着每一步都重新启动一个独立工程。
在 Webview 中配置 Xilinx IP
property.json 的 toolChain 为 xilinx 时,HARD Options 显示 Configure Xilinx IP。也可从命令面板运行 Digital IDE: Configure Xilinx IP。需要先配置 device 和 VS Code 设置 digital-ide.prj.vivado.install.path;IP 查询支持安装根目录、bin 目录和可执行文件;为兼容 HARD 启动,推荐填写 bin 目录或程序完整路径。需要使用 PATH 时显式设为空字符串,避免历史默认路径生效,详见 工具链路径配置。
- 打开配置页,等待读取本机 Vivado IP Catalog。用名称或 VLNV 搜索并选择 IP。
IP_REPO中的自定义仓库也会加入目录。 - 填写模块名,编辑参数。下拉选项、布尔值和取值范围来自 IP 元数据;校验并更新参数会让 Vivado 检查组合是否合法,并返回联动后的参数值。ILA/VIO 默认隐藏超过当前探针数量的参数,修改数量后校验即可显示新增探针。
- 先在 HARD Options 执行 Launch 并等待 Ready,再选择输出父目录,点击 生成 IP。默认目录是
arch.hardware.src同级的ip,默认工程即user/ip。每个 IP 生成到输出父目录/模块名/,包括.xci、综合/仿真输出和实例化模板(取决于 IP 支持的目标)。这一步不运行整个工程综合。 - 生成后可打开 XCI,IP 已直接加入当前 Vivado 工程,无需另外 Refresh。当前 HARD 会话会保留这些 IP 的引用,包括用户选择的外部目录;要在重启插件后的重新 Launch 中继续通过配置发现外部 IP,仍需将其加入工程输入范围。
配置页跟随当前 VS Code 的亮色、深色及高对比度主题配色,打开期间切换主题立即生效,并保留已编辑的参数。表格、选项卡、复选框、单选按钮和 SVG 图表使用编辑器主题颜色;厂商图片保留原图内容。日志在 Digital-IDE Hardware 中显示;目录查询和参数预览复用独立的 Vivado 预览进程;实际生成由后端在已 Launch 的 HARD 会话内执行。未 Launch、会话忙碌、已退出或工程/器件不匹配时均拒绝生成,且不会自动再启动一个 Vivado。取消或关闭正在生成的配置页会停止共享 HARD 会话并清理未完成的 IP,因此需要重新 Launch;取消参数预览只停止临时预览进程。已有同名目录不会被覆盖,换一个模块名或输出目录后再生成。生成会修改当前 HARD 工程的 IP 成员,不改写 property.json。非法参数等普通生成失败会移除本次新增的 IP;已有 IP 不受影响。
配置页使用纯 HTML,不传输 Vivado 桌面画面,也不为 GUI 增加远程桌面端口。Vivado 在临时工程中运行本机 IP 的 XGUI Tcl,插件提取页面、分组、表格、控件属性及界面回调结果,由 Webview 重建。加密脚本交给已安装的 Vivado 正常执行,不解密或打包分发厂商脚本。参数的合法性和联动值仍由 Vivado 校验。
原生布局的重建范围
| 类型 | 当前支持 | 尚未等同原生界面的部分 |
|---|---|---|
| 通用 XGUI | 分页、分组、横纵布局、表格单元格、隐藏行、复选框、单选组、下拉选项、禁用状态、动态文字 | GUI-only 参数、未适配的私有操作会显示诊断 |
| ILA / VIO | 原生选项页、随探针数变化的分页和表格、位宽示意图 | 左侧图是参数示意,不是厂商综合端口图;校验后更新 |
| Binary Counter | 原生分页、可见性和禁用规则、位宽示意 | 不承诺与所有 Vivado 版本逐像素一致 |
| FFT | 执行加密 XGUI,读取原生分页和参数控件 | 原生资源估算需要额外 VIP 计算上下文,当前不能显示为成功估算 |
| Clocking Wizard | 旧版脚本的页面适配 | DLL 计算、部分动态标签和旧接口仍有缺项,以面板诊断为准 |
| PS7 ZynqPanel | HTML 功能分区、参数导航、54 路 MIO 电气参数矩阵 | 外设复用连线、DDR 专用向导、时钟布线图尚未复刻 |
| 图表、图片 | 有效 XGUI 数值序列的柱状/折线图;从当前 IP 目录读取图片 | 缺失数据不伪造为 0;未支持的图形控件显示占位和诊断 |
这仍不是所有 IP 原生 GUI 的完整复刻。 页面上方的“布局重建限制”会列出当前 IP 的具体缺项;未进入原生布局的参数可在折叠的高级区域查看。修改参数后点击“校验并更新参数”,重新执行界面回调并更新页面。预览进程在配置页中复用,连续校验无需反复启动 Vivado;每次请求仍使用独立的临时工程,避免不同 IP 或失败参数互相污染。IP 列表按工具、器件和自定义仓库缓存 5 分钟,点击“刷新目录”强制重新读取(修改自定义仓库后也应刷新)。关闭配置页、取消预览或空闲 2 分钟后释放预览进程;再次使用时按需启动。首次启动 Vivado、首次加载复杂 IP 的脚本仍需等待,实际耗时会记录在 Hardware 输出中。需要许可的 IP 仍受本机许可证限制。结构树中点击 IP 会打开对应 XCI 的配置页,读取现有参数;模块名与输出位置固定。修改后先校验,再点击“保存并重新生成”,在 Ready 的 HARD 会话中更新原 IP。校验使用临时副本,不改原文件;保存前检查 XCI 是否被外部修改。保存失败或取消会恢复原 XCI 并停止 HARD 会话,需要重新 Launch 并重新生成输出后再构建。锁定 IP 的版本升级仍需在 Vivado 中完成。
核对结果与硬件描述
将鼠标移到 HARD 的 Build(或 Synth / Impl)行,点击右侧图表图标 查看构建报告,可在 Webview 对比资源利用率、查看时序裕量、片上功耗和 DRC 违规数。页面读取当前 Vivado 工程的磁盘报告,打开期间自动刷新,也可手动刷新;展开“原始报告”可直接打开对应文件。
资源报告会注明阶段和时间。早于当前运行、顶层或器件不匹配的报告不计入图表;未生成的指标显示为缺失,时序 inf 显示为“无有限值”。Synth / Impl 的执行完成状态不代表 bitstream 已生成。此视图目前支持 Vivado 报告。
Build 成功后检查实际 bitstream 文件、设计顶层、DRC 和时序报告。当前 Xilinx 流程会导出硬件描述供 SDK 使用;含 PS 的工程还需确认交接内容包含处理器和初始化数据。默认交接目录是 user/sdk/data,以 Output 的实际路径为准。
当前流程使用 HDF/write_hwdef,Vivado 2022.2 会提示该接口已弃用。弃用提示本身不等于导出失败,但不能只看到路径就认定成功:检查文件是否存在、是否来自当前构建,并在 SDK Launch 中验证可读。
下载与固化
先确认板卡、电源和 JTAG 目标,再使用 Program。Flash 与易失下载不同,需要匹配的配置存储器型号和接口;在 property.json.flash 中配置后按实际板卡使用。不要用 SRAM 下载成功推断 Flash 启动已验证。
Efinity
使用 toolChain: "efinity",配置正确器件与 Efinity 安装位置,再通过 HARD 的对应操作构建/下载。Efinity 器件、封装和引脚数据库与 Vivado 不通用;Xilinx 的 XDC、BD、PS/SDK 流程不能直接套用。
常见失败
- UCIO-1:端口缺少引脚 LOC。按板卡原理图补齐约束,不要直接降低 DRC 严重级别。
- IP locked:检查工具版本、IP 升级和定制时使用的器件。
- Syntax error:先看首个相关源码错误,再判断是否属于实际顶层依赖。
- 日志打印产物路径但失败:以操作状态和实际产物为准,避免使用旧 bitstream。