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,按以下步骤完成初始配置:
- Project Name:建议使用有意义的名称,例如
axi_timing_demo。 - Project Type:选择 RTL Project,并勾选 Do not specify sources at this time(后续通过 IP Integrator 添加)。
- Target Language:选择 Verilog 或 VHDL,根据团队规范决定。
- Part Selection:选择目标器件。本课程以 xc7z020clg400-1(Zynq-7020)为例。
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 外设的系统:
- 在 Flow Navigator 中点击 Create Block Design,命名为
system。 - 在 Diagram 窗口中右键选择 Add IP,搜索并添加 Zynq7 Processing System。
- 双击 Zynq PS 模块,在 PS-PL Configuration 中使能 AXI HP0 和 AXI GP0 接口。
- 再次 Add IP,添加 AXI Interconnect,将 GP0 接口连接到 Interconnect 的 S00_AXI 端口。
- 添加自定义 AXI 外设(见 4.4 节)或标准 IP(如 AXI GPIO),连接到 Interconnect 的 M00_AXI 端口。
- 点击 Run Connection Automation,Vivado 会自动完成时钟、复位和地址映射的连接。
下图展示了典型的 Block Design 结构:
4.4 自定义 AXI 外设流程
Vivado 提供了 Create and Package New IP 向导,可快速生成带有标准 AXI 接口的 RTL 模板。操作步骤如下:
- 选择菜单 Tools → Create and Package New IP。
- 选择 Create a new AXI4 peripheral,点击 Next。
- 填写 IP 名称、版本、显示名称(如
my_axi_slave_v1_0)。 - 在 Add Interfaces 页面,选择接口类型:
- AXI4-Lite:适用于控制寄存器,数据宽度通常为 32 位。
- AXI4-Stream:适用于高速数据流。
- AXI4-Full:适用于突发传输,数据宽度可配置。
- 设置寄存器数量(默认 4 个),点击 Next。
- 选择 Edit IP 或 Add IP to Repository。选择 Edit IP 会打开一个独立的 Vivado 工程,允许修改 RTL 代码。
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 集成的完整流程:
4.7 本章小结
通过本章的学习,您应掌握以下关键技能:
- 在 Vivado 中创建工程并调用 IP Catalog 中的标准 AXI IP。
- 使用 Block Design 搭建包含 Zynq PS 和 AXI 外设的系统。
- 通过向导创建自定义 AXI4-Lite 外设,并理解其 RTL 结构。
- 完成地址映射、设计验证与输出产品生成。