全文 - Vivado Design Suite User Guide: Designing IP Subsystems Using IP Integrator 05 06

发布时间:2026/7/24 16:09:25
全文 - Vivado Design Suite User Guide: Designing IP Subsystems Using IP Integrator 05 06 原文第 5 章IP Integrator 中的协同设计随着 AMD 硅片产品复杂度的提升利用这些先进特性的设计也往往规模更大、复杂度更高。此外随着不同领域设计能力的增加通常会有更多团队成员参与设计过程。为了提高设计周期的生产率软件设计工具必须具备支持协同设计、并尽可能缩短设计过程的能力这一点变得愈发重要。本章介绍 Vivado IP integrator 中的若干功能它们使设计团队能够以切实有效的方式实现以下目标通过块设计容器Block Design Container的模块化设计提升生产率。借助版本控制Revision Control实现设计源文件的高效维护。通过更便捷的设计迭代与复用改善性能和互操作性。使用块设计容器BDC的模块化设计IP integrator 支持模块化、层次化的系统设计方法允许设计人员组合模块化的构建块并在构建各种解决方案时有效地复用它们。这些块可以看作设计库中的可复用组件使设计团队在协作项目时更加高效。块设计容器简介块设计容器Block Design ContainerBDC扩展了 Vivado IP Integrator 中层次化块的能力。层次化块hierarchical block在块设计BD中创建一个新的层次级别其中可以包含任意数量的用户选定 IP 块。而 BDC 功能则将层次化块连同其内部内容一起转变为一个块设计BD本身。生成的 BD 被定义为一个.bd设计源文件也可以用作另一个块设计工程的一部分。此功能提供了诸多实用的好处包括将大型块设计划分为 BDC 子块每个块设计可以独立开发。在画布上复制 BDC 内容。在不同的 IP integrator 工程之间复用.bd设计源文件。创建块设计容器自顶向下设计流程Top Down Design Flow在此流程中首先创建顶层块设计的图面。然后设计人员或团队负责人在顶层块设计中创建适当的层次将一组 IP 块下推push到作为子块的块设计容器中。按顺序执行以下步骤在图面中创建块设计容器在顶层块设计中创建一个层次级别。如创建层次一节所述选中一个或多个 IP 块右键点击并选择Create Hierarchy在图面中创建一个层次化块。创建层次化块并将所需的 IP 块包含其中后运行Validate Design验证设计。设计验证成功后右键点击该层次化块选择Create Block Design Container如下图所示。图 133Create Block Design Container 命令图略见原文为该块设计容器指定名称。IP integrator 随后会为该层次级别创建一个新的块设计容器BDC其中包含所选的块。请注意以下几点上一步指定的 BDC 名称会被赋予该 BDC 的.bd源文件。例如在下图中BDC_0是为该 BDC 指定的名称因此BDC_0.bd就是所创建.bd源文件的名称。图 134块设计容器图略见原文BDC 的.bd源文件会被添加到工程源文件中如下图所示。图 135Sources 窗口中的 BDC图略见原文自底向上设计流程Bottom Up Design Flow在此流程中各子块设计是分别创建的然后你需要在顶层块设计中将这些子块例化为 BDC。设计人员或团队负责人可以按以下步骤完成全部集成按照添加已有块设计一节所述将现有子块的源文件添加到顶层 BD 工程中。将添加的 BD 从 Sources 窗口拖放到顶层 BD 图面上。或者在顶层 BD 图面上右键点击并选择Add Module。使用块设计容器在顶层 BD 内查看块设计容器的内容子块设计层次的内容可以从顶层块设计的图面直接查看。你可以以只读模式打开并查看子块设计中任何 IP 的配置 GUI但无法从顶层 BD 更改子块设计的内容。将更改应用到块设计容器将 BDC 添加到顶层块设计图面或在其中创建之后无法从顶层块设计图面直接编辑 BDC。对块设计容器内容的所有后续更改都必须在该 BDC 的源块设计中进行你必须打开 BDC 的.bd源文件进行更改如添加或移除 IP 块验证设计并保存该源块设计。注要修改某个 BDC在 Sources 窗口中双击其 BD 源文件或者在顶层 BD 图面中右键点击该 BDC 实例并选择Open Source。BDC 的更改同步完成后必须在顶层设计上生成输出产品而不是在源块 BD 上。在 BDC 与顶层 BD 之间同步更改将 BDC 添加到顶层块设计图面或在其中创建之后当 BDC 的源块设计保存了更改时工具会自动检测到。此时顶层块设计中会弹出Refresh Changed Modules刷新已更改模块横幅如下所示。你随后即可将 BDC 的更改同步到顶层块设计。图 136Refresh Changed Modules 横幅图略见原文注仅在同一个 Vivado 进程内支持 BDC 与顶层 BD 之间的更改同步。注当父 BD 选择了 Freeze boundary冻结边界时Refresh 对边界差异不起作用。顶层 BD 内 BDC 的地址分配BDC 源块设计中地址分配的任何更改都不会反映到顶层块设计中。由于子块设计会适配顶层块设计的地址分配规范源 BD 的本地地址分配对顶层块设计而言会失效。BDC 子块的所有地址分配都必须从顶层块设计进行。顶层块设计的地址编辑器如下所示提供了子块设计中所有 IP 的全部地址信息并允许你查看和更改子块设计的地址。图 137顶层 BD 内 BDC 的地址分配图略见原文除了查看和更改子块设计的地址之外你还可以在顶层块设计中将主设备映射到子块设计内部的从设备或反之。修改子块设计的地址分配使其适配顶层块设计的孔径aperture。查看同一源块设计的多个例化——它们各自的主、从设备具有不同的地址集合。从顶层 BD 配置块设计容器你可以通过打开 Customize Block Design Container 对话框访问 BDC 的若干设置。打开方式在顶层块设计图面中双击该 BDC或右键点击所需 BDC 并选择Customize Block。BDC 选项如下图所示。图 138BDC 的 Customize Block Design Container 对话框图略见原文Freeze the Boundary of this Container冻结此容器的边界此选项可阻止修改 BDC 边界的更改。边界包括 BDC 的端口、接口、端口映射port map、端口位宽和参数。选中此选项后BDC 边界上的任何内容都不会改变所有接口的端口映射都会保留端口位宽不会变化也没有参数clk_domain属性除外会在顶层块设计与 BDC 之间双向传递。Enable Dynamic Function eXchange on this container在此容器上启用 DFXBDC 在 IP integrator 中提供了一个以 IP 为中心、基于工程的环境用于在 Vivado 中创建 DFXDynamic Function eXchange动态功能交换设计。BDC 代表可重配置分区Reconfigurable PartitionRPEnable Dynamic Function eXchange on this container选项可将 BDC 转换为 RP。BDC 转换后其图标会变为显示 DFX 标签。你可以为该 RP 实例向 BDC 添加多个变体variant作为可重配置模块Reconfigurable ModuleRM。对于给定 RP 的每个 RM其端口列表必须完全一致——即使并非每个 RM 都使用全部端口。工程需要先通过选择Tools → Enable Dynamic Function eXchange转换为 DFX 工程才能在 Vivado IDE 中启用 DFX 功能。重要当对包含 DFX BDC 的设计运行Generate Block Design时此转换会自动发生且在这种情况下不会就这一单向转换给出任何警告。不过你仍然可以在生成块设计之前直接设置该 Tools 选项。关于 DFX 设计中 NoC INI 用法的常见场景列表以及更多细节与建议的修复方法请参见《Vivado Design Suite 用户指南Dynamic Function eXchangeUG909》。指定用于综合和/或仿真的 BDC 变体你可以为块设计容器指定不同的源文件。不同的源文件可以看作一个 BDC 的变体variant。BDC 的各变体在 BDC 既定边界之内的 IP 块上可以不同。添加了变体源块设计后你可以在这些源文件中为顶层 BD 选择活动变体active variant。此操作会实时更新 BDC显示新活动变体的内容。此外你还可以为 BDC 的综合和仿真分别指定不同的源文件。参见图 138 中的 Synthesis sources 和 Simulation sources。点击可添加 BDC 的变体。BDC 孔径BDC Apertures孔径是限制或界定地址分配的范围。地址分配必须落在寻址路径上的孔径之内。通常你只需指定分配而不需要指定孔径。但是在 DFX 或非 DFX 设计中BDC 孔径会像地址分配一样用于配置 SmartConnect 和 NoC 块。因此BDC 孔径在同一网络内不能相互重叠也不能与其他分配重叠。更改设计的 BDC 孔径会导致 SmartConnect 和/或 NoC 重新生成。一般建议非 DFX 设计将孔径设置保持为AutoDFX 设计使用Manual设置。Auto表示孔径被自动计算以覆盖所有 RM 地址分配之和。BDC 自动孔径不限制分配而是根据分配增大或缩小。自动孔径不保存到磁盘始终根据分配计算得出用户无法编辑。Manual表示由用户输入它会限制地址分配。手动孔径保存在 BD 文件中。在非 DFX 设计中Auto 设置对地址分配活动变体的和孔径使用相同的值。如有需要你仍然可以覆盖并指定手动值。在非 DFX 设计中SmartConnect 或 NoC 块不需要覆盖每个变体。在 DFX 设计中工具必须检查所有 RM 变体来计算孔径值因为 RP BDC 中每个 RM变体的地址分配可能不同。因此所有 RM 的边界地址分配都必须能容纳进顶层 BDTopBD。这意味着连接到每个 RM 边界的所有主设备和/或从设备都必须能被 TopBD 中与其相连的主/从设备寻址。否则可能在下游流程中引发问题。连接到 BDC 边界位于静态区的 SmartConnect 和 NoC 块始终按 DFX 块的边界孔径进行细化elaborate。例如如果在一个 DFX 设计中如下所示有两个偏移不同的 RMRM1分配0x0、范围 1MRM2分配0xC、范围 4M那么即使活动变体 RM1 只分配了0x0处的 1MSmartConnect 也必须配置为同时译码两个地址。这通过在 BDC 边界上添加孔径来实现。图 139DFX 模式下的孔径示例图略见原文图 140地址分配设置图略见原文在本例中BDC 边界RP的 S_AXI 上需要两个孔径因此建议手动添加这些孔径。有关 DFX 与 BDC 孔径的更多信息请参见《Vivado Design Suite 用户指南Dynamic Function eXchangeUG909》。观察在使用自动孔径与手动孔径时validate_bd期间 SmartConnect 的路由情况。图 141使用自动孔径验证 BD图略见原文图 142使用手动孔径验证 BD图略见原文块设计容器定制对话框的 Addressing 选项卡Addressing 选项卡显示接口列表孔径与接口显示在同一行。大多数接口只有一个孔径。如果某个接口有多个孔径附加行会显示在该接口下方。手动 BDC 孔径以黑色字体显示可编辑。自动 BDC 孔径以灰色字体显示不可编辑。提示如果一个接口有多个手动孔径只有带接口名称的那一行才有 Auto/Manual 滑块。在非 DFX 设计中自动孔径不显示任何值无孔径。如果在非 DFX 模式下切换到 Manual 模式初始孔径会显示所有变体孔径之和——这与 DFX 模式下相同。点击Show Detailed View按钮后你可以清楚地看到每个变体中的地址段以及它们能否容纳进设计所定义的孔径无法容纳进孔径的地址段会显示为红色。你可以通过以下步骤手动将所有变体的所有分配包含进孔径列表点击添加按钮。选择 BDC 接口。指定地址基址base和范围range值。图 143孔径添加弹窗图略见原文注在 IP integrator 中运行 DFX 设计规则检查DRC时可能产生一系列错误。这些是关于 DFX 设计中 NoC 用法的常见场景。更多细节和建议的修复方法列于《Vivado Design Suite 用户指南Dynamic Function eXchangeUG909》中IP integrator: Problems and Solutions一节的 NoC DFX DRCs 部分。对含多个 RM 的 DFX 设计的建议使用 DFX 时始终使用手动孔径以确保所有 RM 的地址分配都能容纳进 TopBD否则 AMD Vivado™ 会给出警告。在 IP integrator 中设计系统时始终将具有最大地址分配规格分配数量、主/从设备数量等的 RM 设为活动变体。这有助于 IP integrator 以该 RM 为参照为所有其他 RM 推定地址分配。在顶层上下文中依次将每个 RM 设为活动状态并重新分配更改地址使该 RM 适配顶层。手动孔径会指导工具如何更改 RM 地址。经过同一网络的接口上不允许孔径重叠。连接到这些接口的 SmartConnect 和 NoC 将无法细化elaborate。在切换源 BD 之前先保存块设计以确保任何地址编辑不会丢失。当某个 RM 仅包含直通桥接 IP例如 NoC、SmartConnect 等时你会看到一条 DRC。当某个 RM 仅包含直通桥接 IP例如 NoC、SmartConnect 等时你可能会看到一条 DRC。注设备树生成器device tree generator不支持未使用 DFX 流程的块设计容器。从顶层 BD 进行 BDC 的参数传递子块设计级别的参数无法在顶层块设计中配置。但是顶层块设计中各 IP 的所有参数会自动传递到子块设计 BDC 内与其相连的 IP。这也允许同一源块设计的多个例化各自接收不同的参数属性集合。重要工程模式的 OOC 综合 DCP 不包含 NoC 信息。当该 DCP 在非工程模式下使用时工具会选取新的 NoC 位置。如果你想在非工程模式下使用工程模式的 OOC 综合 DCP可以使用以下任一方法write_checkpoint与read_checkpoint打开顶层模块综合运行使用write_checkpoint -cell rm rm_ooc.dcp。此 DCP 包含 NoC 信息你可以在非工程模式下通过read_checkpoint -cell rm_ooc.dcp命令直接使用它。如果你想在非工程模式下使用工程模式生成的 RM OOC DCP应在脚本中同时添加.bd和.dcp文件并使用link_design命令。使用块设计容器进行设计复用在模块化、层次化的设计流程中BDC 使你能够独立于设计的其余部分开发并复用 IP 块设计。这些 IP 块设计可以作为.bd源文件在同一工程内或其他设计中复用。设计团队成员可以针对设计的特定部分迭代其 BD 工程以达成设计目标并复用结果。单一工程与多工程团队可以使用自顶向下和自底向上两种流程进行设计复用。在自顶向下流程中可以先构建并验证一个顶层 BD其中包含外部接口和特定功能块的细节。然后该顶层 BD 可被复用于设计团队成员的工程供他们开发各自的 BDC 部分。这可以在复制给所有团队成员的单一工程中完成也可以在面向同一器件的多个工程中完成。在自底向上的设计复用流程中团队成员各自的独立工程可以专注于开发所分配设计分区的 BD以便稍后作为 BDC 复用于顶层 BD 中或整体复用于另一个工程。在 BD 内复制子块借助 BDC设计的不同部分也可以在顶层块图的上下文中被多次复制。此功能使你只需一次性创建包含所需 IP 的块设计即可在多个不同上下文中使用同一个 BD。BDC 的限制如果你添加的 BDC 接口破坏了 AXI 互连级联cascading可能在验证期间导致参数传递错误。在创建 BDC 之前先在两个级联互连之间层次之外例化一个 AXI 时钟转换基础设施 IPAXI register slice、AXI Data Width Converter、AXI Clock Converter 等或者将互连配置为在面向 BDC 边界的一侧使用内部寄存器切片register slice。一旦你的 BDC 被锁定请勿更改任何源 BD 的边界以避免下游工具错误。连接 CIPS 与 AXI NoC或 AI Engine 与 NoC的硬化连接hardened connection必须位于同一层次。BDC 边界不能横跨这一组合。包含 BDC 的设计不支持 Global 综合模式。当在包含一个或多个 BDC 的设计中使用 Global 模式时工具会自动回退到 OOC-per-BD 模式。OOC-per-IP 则完全支持。块设计的版本控制Revision Control版本控制系统可以在工程模式和非工程模式下管理与 Vivado IP integrator BD 关联的各种源文件。随着 BD 的开发和复杂度提升跟踪设计的不同迭代、促进团队设计环境中的工程管理与协作变得至关重要。IP integrator 的目标是协助用户只签入check in重建工程所需的最少文件。IP 与 IP Integrator 的目录结构IP integrator 的新目录结构将 BD 中所有 IP 块的输出产品生成到单独的project_name.gen目录中。这将生成的输出产品与位于project_name.srcs目录中的当前源文件分离开来。下图展示了 IP integrator 中一个示例工程的新目录结构。图 144Generate Design 之前左与之后右工程 IP 和 BD 文件的目录结构图略见原文新的project_name.gen目录包含所有子核 IP 和有作用域的 BD 文件。执行 generate block design 步骤后生成的输出产品全部位于project_name.gen目录中。无论执行 generate block design 步骤之前还是之后IP 和 BD 源文件始终保留在project_name.srcs目录中。这种目录结构带来以下好处在大多数版本控制使用场景中将重建工程所需签入的文件数量降至最少。提供更清晰的目录结构以区分 BD/IP 源文件与输出产品。此外在许多版本控制场景中并不需要签入输出产品。版本控制方法论建议你使用write_project_tcl命令在最新版本中手动重建工程以迁移到新的目录结构。为更好地理解 BD 之间的差异你可以使用 Vivado 中的diffbd命令行实用程序以文本报告形式获得两个 BD 的比较结果。更多信息见在块设计中交叉探查差异一节。框架搭建完成后请遵循以下一般准则使用脚本化流程scripted flow进行版本控制。将工程外部的源文件保存在受版本控制的仓库中。创建一个用于重建工程的 Tcl 脚本并将该脚本纳入版本控制。有关将 Vivado Design Suite 与版本控制软件配合使用的更多信息请参见《Vivado Design Suite 用户指南设计流程概述UG892》。第 6 章交叉探查时序路径Cross-Probing Timing Paths很多时候你需要将实现implementation之后发现的时序问题追溯probe到 IP Integrator 设计中的源块。当你对从其他团队成员那里继承的设计不够熟悉时这一功能尤其有用。要将某条时序路径定位到特定块点击消息中的链接——它会指向块设计画布上相关时序问题的源块——以打开已实现的设计。下图为已实现设计中某个 IP 块上的警告示例。图 145方法学警告Methodology Warning图略见原文显示的消息如下CLKC #1 The MMCME3 cell config_mb_i/axi_ethernet_0/inst/pcs_pma/inst/ core_clocking_i/mmcme3_adv_inst has COMPENSATION value ZHOLD, but CLKOUT2 output drives sequential IO cells. In order to achieve insertion delay and phase-alignment for the IO sequential cells, CLKOUT0 must be used.译文MMCME3 单元config_mb_i/axi_ethernet_0/inst/pcs_pma/inst/core_clocking_i/mmcme3_adv_inst的 COMPENSATION 值为 ZHOLD但其 CLKOUT2 输出驱动的是时序 IO 单元。为了对 IO 时序单元实现插入延迟和相位对齐必须使用 CLKOUT0。如消息所示路径单元config_mb_i/axi_ethernet_0/inst/pcs_pma/inst/core_clocking_i/mmcme3_adv_inst带有一个链接。点击此链接会带你跳转到块设计画布并高亮显示与该时序消息相关的块设计单元。要在块设计画布上查看相关单元点击 Flow Navigator 中的IP INTEGRATOR将视图切换到块设计画布。图 146块设计画布上被消息高亮的单元图略见原文定位到有问题的单元或 IP 块之后你可以查看源代码或约束文件来排查问题。