4. Vivado 工程创建与 AXI IP 集成:Block Design、IP Catalog、自定义 AXI 外设流程

本章聚焦于 Vivado 中基于 AXI 总线接口的 IP 集成方法。我们将从创建一个空工程开始,逐步演示如何通过 IP Catalog 调用标准 IP、在 Block Design 中完成互联,并最终通过 Create and Package New IP 向导生成一个带有 AXI-Lite 接口的自定义外设。这一流程是后续进行时序分析与收敛调试的基础工程环境。

4.1 工程创建与基本设置

启动 Vivado 后,选择 Create Project,按以下步骤完成初始配置:

  1. Project Name:建议使用有意义的名称,例如 axi_timing_demo。
  2. Project Type:选择 RTL Project,并勾选 Do not specify sources at this time(后续通过 IP Integrator 添加)。
  3. Target Language:选择 Verilog 或 VHDL,根据团队规范决定。
  4. Part Selection:选择目标器件。本课程以 xc7z020clg400-1(Zynq-7020)为例。
器件选择提示: 对于时序收敛调试,建议选择 速度等级较高(如 -2 或 -3)的器件,以便在早期阶段获得更宽松的时序余量。若使用 -1 等级,需更早关注时序约束。

4.2 IP Catalog 与标准 AXI IP 调用

Vivado 的 IP Catalog 提供了丰富的预验证 AXI 接口 IP。在 Flow Navigator 中点击 IP Catalog,在搜索栏输入 axi 即可列出所有相关 IP。

常用 AXI IP 及其用途如下表所示:

IP 名称 接口类型 典型用途
AXI Interconnect AXI4 / AXI3 多主多从互联,自动地址译码与仲裁
AXI SmartConnect AXI4 / AXI4-Lite 高性能、低延迟的互联结构,支持时钟域交叉
AXI GPIO AXI4-Lite 通用输入输出,用于调试与状态指示
AXI BRAM Controller AXI4 片内 BRAM 的 AXI 接口封装
AXI UART Lite AXI4-Lite 轻量级串口通信

在 IP Catalog 中双击所需 IP,即可将其添加到当前工程。Vivado 会自动处理 IP 的生成与综合选项。

4.3 Block Design 集成流程

Block Design 是 Vivado IP Integrator 的核心设计环境。以下步骤演示如何搭建一个包含 Zynq PS 和自定义 AXI 外设的系统:

  1. 在 Flow Navigator 中点击 Create Block Design,命名为 system。
  2. 在 Diagram 窗口中右键选择 Add IP,搜索并添加 Zynq7 Processing System。
  3. 双击 Zynq PS 模块,在 PS-PL Configuration 中使能 AXI HP0 和 AXI GP0 接口。
  4. 再次 Add IP,添加 AXI Interconnect,将 GP0 接口连接到 Interconnect 的 S00_AXI 端口。
  5. 添加自定义 AXI 外设(见 4.4 节)或标准 IP(如 AXI GPIO),连接到 Interconnect 的 M00_AXI 端口。
  6. 点击 Run Connection Automation,Vivado 会自动完成时钟、复位和地址映射的连接。
关键操作: 在 Block Design 中,务必检查 Address Editor 选项卡,确认每个从设备的地址范围不重叠。地址冲突会导致综合后的逻辑错误。

下图展示了典型的 Block Design 结构:

Block Design 典型结构 Zynq PS ARM Cortex-A9 AXI GP0 / HP0 AXI Interconnect 地址译码 / 仲裁 时钟域交叉 自定义 AXI 外设 AXI4-Lite 从接口 用户逻辑 AXI4 AXI4-Lite 时钟 / 复位 FCLK / FCLK_RESET

4.4 自定义 AXI 外设流程

Vivado 提供了 Create and Package New IP 向导,可快速生成带有标准 AXI 接口的 RTL 模板。操作步骤如下:

  1. 选择菜单 Tools → Create and Package New IP。
  2. 选择 Create a new AXI4 peripheral,点击 Next。
  3. 填写 IP 名称、版本、显示名称(如 my_axi_slave_v1_0)。
  4. 在 Add Interfaces 页面,选择接口类型:
    • AXI4-Lite:适用于控制寄存器,数据宽度通常为 32 位。
    • AXI4-Stream:适用于高速数据流。
    • AXI4-Full:适用于突发传输,数据宽度可配置。
  5. 设置寄存器数量(默认 4 个),点击 Next。
  6. 选择 Edit IP 或 Add IP to Repository。选择 Edit IP 会打开一个独立的 Vivado 工程,允许修改 RTL 代码。
时序收敛注意事项: 向导生成的 AXI 接口代码中,寄存器读写逻辑通常位于一个大的 always 块内。对于高速设计,建议将 地址译码 与 数据通路 分离,减少组合逻辑深度,避免 setup time 违例。

4.5 自定义 AXI 外设的 RTL 结构

向导生成的 AXI4-Lite 从设备模板包含以下关键模块:

模块名称 功能描述 时序关键点
my_axi_slave_v1_0 顶层模块,实例化 AXI 接口与用户逻辑 顶层连线延迟
my_axi_slave_v1_0_S00_AXI AXI4-Lite 从接口实现,包含地址译码、读写控制 组合逻辑路径(地址→数据输出)
my_axi_slave_v1_0_user_logic 用户自定义功能逻辑(可选) 用户逻辑的时序约束

以下是一个简化的 AXI4-Lite 读操作 Verilog 代码片段,展示了寄存器读取的典型实现:

// AXI4-Lite 读操作示例
always @(posedge S_AXI_ACLK)
begin
  if (!S_ARESETN)
    begin
      axi_rdata <= 32'h0;
      axi_rvalid <= 1'b0;
    end
  else
    begin
      if (S_ARVALID && axi_rready && !axi_rvalid)
        begin
          axi_rvalid <= 1'b1;
          case (S_ARADDR[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB])
            2'h0 : axi_rdata <= reg0;
            2'h1 : axi_rdata <= reg1;
            2'h2 : axi_rdata <= reg2;
            2'h3 : axi_rdata <= reg3;
            default : axi_rdata <= 32'h0;
          endcase
        end
      else if (axi_rvalid && S_RREADY)
        axi_rvalid <= 1'b0;
    end
end
优化建议: 上述代码中,axi_rdata 的赋值依赖于 S_ARADDR 的组合译码。若寄存器数量较多(如 64 个),建议使用 分布式 RAM 或 BRAM 实现寄存器文件,以减少 LUT 级联深度。

4.6 地址映射与验证

完成 Block Design 后,在 Address Editor 中确认每个 AXI 从设备的地址范围。对于 Zynq 系统,PS 端默认的 AXI GP0 地址空间为 0x4000_0000 ~ 0x7FFF_FFFF。自定义外设通常分配在 0x43C0_0000 开始的区域。

验证流程包括:

  • Validate Design:在 Block Design 中点击 Validate Design(绿色对勾图标),检查连接完整性与地址冲突。
  • Generate Output Products:右键 Block Design 源文件,选择 Generate Output Products,生成综合与实现所需的网表和约束文件。
  • Create HDL Wrapper:在 Sources 窗口中右键 Block Design,选择 Create HDL Wrapper,生成顶层 Verilog/VHDL 文件。

下图展示了从 IP 创建到 Block Design 集成的完整流程:

自定义 AXI 外设集成流程 1. 创建 IP 向导生成模板 2. 编辑 RTL 添加用户逻辑 3. 打包 IP 加入 IP Repository 4. Block Design 添加并互联 5. 验证与生成 Validate Design → Generate Output → Create Wrapper

4.7 本章小结

通过本章的学习,您应掌握以下关键技能:

  • 在 Vivado 中创建工程并调用 IP Catalog 中的标准 AXI IP。
  • 使用 Block Design 搭建包含 Zynq PS 和 AXI 外设的系统。
  • 通过向导创建自定义 AXI4-Lite 外设,并理解其 RTL 结构。
  • 完成地址映射、设计验证与输出产品生成。