# huge_acc4dfx **Repository Path**: DG_TG/huge_acc4dfx ## Basic Information - **Project Name**: huge_acc4dfx - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-28 - **Last Updated**: 2026-09-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 后端 DFX 工具流样例 本项目是一个面向 Vivado 后端动态功能交换(Dynamic Function eXchange,DFX)的 工具使用样例。重点是展示从工程创建、DFX 配置、静态区和 RM 综合,到父子配置 实现、bitstream 生成、`pr_verify` 和 JTAG 下载的完整流程。 加法器和减法器只是用于验证同一个 RP 可替换性的示例 RM,不是本项目要推广的 通用算术 IP。系统的正式要求、目标依赖和接口定义以 [Spec](spec.md) 为准; 当前工程的实现、操作、验证和排查信息见 [Wiki](wiki/README.md)。 ## 文档入口 | 内容 | 入口 | | --- | --- | | 当前有效要求、Make 目标和配置接口 | [Spec](spec.md) | | Wiki 首页 | [Wiki](wiki/README.md) | | DFX 阶段关系和重跑边界 | [Tool Flow](wiki/tool-flow.md) | | 当前静态区、RP 和 RM 结构 | [Architecture](wiki/architecture.md) | | 首次构建和 JTAG 下载 | [Getting Started](wiki/getting-started.md) | | 日常修改和开发约定 | [Development](wiki/development.md) | | 验证方法和当前结果 | [Verification](wiki/verification.md) | | 常见错误和排查入口 | [Debugging](wiki/debugging.md) | | 已确认的设计取舍 | [Design Decisions](wiki/decisions.md) | | 阶段性正式设计文档 | [DFX Tool-Flow Design](design/dfx-tool-flow.md) | ## DFX 流程概览 ```text project | v dfx-prepare | +--> synth-static --------+ +--> synth-rm-add --------+--> impl-add --> bitstream-add --+ +--> synth-rm-sub --------------------------+ | v | impl-sub --> bitstream-sub | v pr-verify | v bitstream-all | v dfx-build ``` 本样例包含一个 RP 和两个兼容 RM。`impl-add` 是父/基准配置,同时建立固定区、 RP 边界和 partition pin 的物理基准;`impl-sub` 继承该父配置的静态物理结果, 只替换并实现减法 RM。Pblock、RM 映射和父子 run 的正式约束见 [Spec 的 DFX 结构要求](spec.md#42-dfx-结构和物理兼容性要求)。 ## 示例算核 两个 RM 使用相同的启动、完成、busy、状态和结果接口,由静态 AXI4-Lite 控制面 访问。当前示例使用 256 位操作数和 258 位结果: - `huge_add_rm` 计算 `((INA + INB) + INC) + IND`; - `huge_sub_rm` 计算 `((INA - INB) - INC) - IND`,结果按 258 位二进制补码解释。 每个算核将运算拆成 `AB`、`C`、`D` 三个顺序阶段,底层算术单元完成后才进入 下一阶段;控制器在计算期间拒绝修改操作数和重复启动。AXI 地址、状态编码、 溢出和边界行为只在 [Spec 的示例载荷接口](spec.md#54-示例载荷接口) 中正式定义。 ## Makefile 使用 ### 环境要求 - `make`; - 运行示例仿真需要 `iverilog` 和 `vvp`; - DFX 构建需要已安装并可调用的 Vivado;也可以通过 `VIVADO_ROOT` 指定安装目录; - JTAG 下载需要目标器件和 Vivado Hardware Manager,下载脚本不属于 Make 构建阶段。 ### 仿真和普通 Vivado 流程 ```bash # 运行加法核心、减法核心和 AXI-Lite 的自检仿真 make sim # 创建/更新工程,执行普通综合和完整 bitstream 流程 make project make synth make build ``` 普通 `synth`/`build` 仅用于对照或基础工程检查;后端 DFX 流程使用下面的分阶段 目标。 ### DFX 分阶段构建 ```bash # 只准备 DFX 工程元数据 make dfx-prepare # 完成静态区和两个 RM 的综合 make synth-all # 依次完成父配置、子配置、bitstream 和兼容性验证 make impl-add make impl-sub make bitstream-add make bitstream-sub make pr-verify ``` 需要按依赖一次完成整个流程时执行: ```bash make dfx-build ``` 需要单独重跑某个综合阶段时,可以直接调用: ```bash make synth-static make synth-rm-add make synth-rm-sub ``` `make dfx` 是 `make dfx-prepare` 的短别名;`make synth-rm` 聚合两个 RM 的 独立综合。实现和 bitstream 阶段也可以按 `add`、`sub` 分别执行,以便定位失败 或复用已经成功的 run。 常用别名和聚合目标如下: | 目标 | 作用 | | --- | --- | | `impl-base` | `impl-add` 的别名,不创建新的 Vivado run。 | | `impl-all` | 在 `impl-sub` 完成后结束两个配置的物理实现。 | | `bitstream-base` | `bitstream-add` 的别名,不重复生成。 | | `bitstream-all` | 在 `pr-verify` 成功后汇总 bitstream 和验证结果。 | 目标的完整依赖关系和每阶段成功条件见 [Spec 的 Make 目标接口](spec.md#51-make-目标接口)。 只要输入发生变化,就从 [Tool Flow 的重跑边界](wiki/tool-flow.md#改变输入后的重跑边界) 指定的最早阶段重新执行;不要用旧目录或旧 checkpoint 代替阶段成功状态。 ### Vivado 路径、并行度和强制重建 ```bash # 指定 Vivado 安装目录 make VIVADO_ROOT=/opt/Xilinx/Vivado/2025.2 dfx-build # 设置并行任务数 make JOBS=12 synth-all # 有意重置并重建相关已完成/失败 run make FORCE=1 impl-add ``` 默认情况下,已完成的 Vivado run 会被复用;`FORCE=1` 只应在确认旧 checkpoint 不再需要时使用,活动 run 不会被强制终止。 ### 配置 Pblock 和 RM Pblock、RP、RM、RM 到 Pblock 的映射、基准 RM 以及 configuration/run 名都可以 通过 Make 变量覆盖。例如: ```bash make dfx-prepare \ PBLOCK_NAME=pblock_huge_math \ PBLOCK_SLICE_RANGE='SLICE_X0Y0:SLICE_X39Y49|DSP48_X0Y0:DSP48_X0Y19' \ BASE_RM=huge_add_rm ``` 覆盖后先检查生成的 `.gen/dfx_pblock.xdc`,再从 `synth-static`、受影响的 RM 综合和 `impl-add` 开始执行。变量格式、所有可覆盖的 `DFX_*` 配置项及约束见 [Spec 的 Make 配置接口](spec.md#52-make-配置接口)。 ### 清理 ```bash make clean ``` 该目标会删除 Vivado 缓存、生成目录、run、仿真目录和日志,也会删除当前 `hd_visual/` 目录。`hd_visual/` 含有受版本控制的可视化 Tcl 文件,执行前请先 确认这些文件已提交或另行保存;详细说明见 [Debugging](wiki/debugging.md#make-clean-后可视化脚本消失)。 ## 结果与对比 ### 物理实现截图 下图用于直观看两个 RM 在同一 DFX 物理框架中的实现差异。图中固定区以蓝色 表示,加法 RM 以红色表示,减法 RM 以绿色表示。 | 加法配置 | 减法配置 | | --- | --- | | ![加法配置物理实现](加法实现.png) | ![减法配置物理实现](减法实现.png) | 判断两个配置是否真正兼容,应检查父子 routed checkpoint、partition pin、Pblock 和 `pr_verify` 结果。检查方法和证据要求见 [Verification](wiki/verification.md)。 ### 当前验证摘要 | 检查项 | 当前状态 | 说明 | | --- | --- | --- | | 示例 RM RTL 和 AXI-Lite 仿真 | 已验证 | `make sim` 的三个自检均报告 `PASS`。 | | Make 目标依赖展开 | 已验证 | `make -n synth-all impl-all bitstream-all dfx-build` 展开到预期阶段。 | | DFX 综合、实现和 bitstream | 待最终 run 证据 | 以对应 Vivado run 的最终状态、报告和 checkpoint 为准。 | | `pr_verify` | 待完成 | 需要两个有效 routed 配置的兼容性验证报告。 | | JTAG 下载和 RM 热替换 | 未记录硬件实测 | 需要 Hardware Manager/JTAG 日志和结果读回记录。 | 以上是当前 Wiki 记录的摘要,不是新的验收定义;最新记录见 [Verification](wiki/verification.md)。 ## JTAG 下载入口 完整和 partial bitstream 通过 JTAG 下载。完成对应的 `bitstream-*` 目标后,在 Vivado Hardware Manager 中连接目标器件并执行: ```tcl source scripts/program_dfx_huge_add.tcl ``` 脚本默认加载加法完整 bitstream,再加载减法 partial bitstream;设置 `::dfx_target add` 可执行反向替换。partial 下载前必须确认当前 RM 的 `busy` 为 0,下载完成并报告成功后才能发起新的计算请求。具体步骤和失败排查见 [Getting Started](wiki/getting-started.md#jtag-下载和运行) 与 [Debugging](wiki/debugging.md#jtag-下载失败)。 ## 当前限制 - Pblock 默认资源范围在当前 Makefile 与 Tcl 回退值之间仍存在待确认冲突,见 [Spec Open Issues](spec.md#10-open-issues)。 - 当前 Windows PowerShell 入口尚未覆盖 Spec 要求的全部 DFX 分阶段目标;Linux Make 入口可按上文分阶段调用,差异记录见 [Getting Started](wiki/getting-started.md#windows-入口)。 - DFX 物理实现和 JTAG 硬件验证的通过状态必须以新的、可定位的 run/log 证据确认。 ## Windows 入口 Windows 可使用 [`scripts/vivado_win.ps1`](scripts/vivado_win.ps1) 调用公共 Tcl 流程。当前已实现的聚合入口为: ```powershell .\scripts\vivado_win.ps1 sim .\scripts\vivado_win.ps1 project .\scripts\vivado_win.ps1 synth .\scripts\vivado_win.ps1 build .\scripts\vivado_win.ps1 dfx .\scripts\vivado_win.ps1 dfx-build .\scripts\vivado_win.ps1 gui ``` 可用 `-VivadoRoot` 指定 Vivado 安装目录,`-Jobs` 设置并行度。Windows 分阶段 入口的要求和当前实现差异以 [Spec](spec.md#52-make-配置接口) 和 [Development](wiki/development.md#windows-入口) 为准。