概述
AXI Firewall 专为保护 AXI 内存映射接口设计,旨在防止下游网络(Master Interface,MI)的协议违规或超时挂起(Timeout Hangs)对上游网络(Slave Interface,SI)造成影响,避免主机系统崩溃。它在 FPGA 和 SoC 系统设计中广泛应用,特别是在需要高可靠性和容错能力的场景,如 PCIe 通信、DMA 传输和复杂多核系统。
AXI Firewall 的核心功能是通过实时监控 AXI 接口的事务,检测协议违规、超时或用户触发的软阻塞(Soft Block),并在必要时阻断进一步的事务传输,同时为未完成的事务生成协议合规的响应。它通过 AXI4-Lite 控制接口提供灵活的配置和状态监控,适用于 AXI3、AXI4 和 AXI4-Lite 协议。
该 IP 核的主要功能包括:
- 协议保护:检测下游 AXI 接口的协议违规(如非法响应、信号不稳定)并阻断事务。
- 超时保护:监控响应超时,防止系统挂起。
- 事务隔离:在下游故障时保护上游网络,生成合规响应以维持系统稳定性。
- 灵活控制:通过 AXI4-Lite 接口配置阻塞/解锁条件和超时参数。
主要特性
AXI Firewall IP 具有以下关键特性:
-
协议支持:
- 支持 AMBA AXI3、AXI4 和 AXI4-Lite 协议的内存映射接口(参考 ARM AMBA AXI 规范,IHI0022)。
- 通过单一 IP 核适配不同协议,简化设计集成。
- 不支持 AXI4-Stream 协议(需使用其他 IP,如 AXI4-Stream Interconnect)。
-
保护机制:
- 协议违规检测:
- 监控下游接口(MI)的读响应(
RRESP
)和写响应(BRESP
),检测非法响应(如 SLVERR、DECERR)。 - 检查信号稳定性(如
RVALID
、WVALID
在READY
低电平时是否保持稳定)。
- 监控下游接口(MI)的读响应(
- 超时保护:
- 检测响应超时(默认 1024 个时钟周期,可配置)。
- 支持用户定义的超时周期,通过 AXI4-Lite 寄存器设置。
- 软阻塞:
- 允许通过 AXI4-Lite 控制接口触发软阻塞(Soft Block),用于调试或故障隔离。
- 自动响应生成:
- 在阻断状态下,为未完成的事务生成协议合规的响应(读响应返回全 1 数据,
RRESP
和BRESP
设置为 SLVERR)。
- 在阻断状态下,为未完成的事务生成协议合规的响应(读响应返回全 1 数据,
- 协议违规检测:
-
阻塞与解锁:
- 阻塞触发条件:
- 下游接口(MI)检测到致命协议违规(如非法
RRESP
)。 - 响应超时(Timeout)。
- 用户通过 AXI4-Lite 接口触发软阻塞。
- 下游接口(MI)检测到致命协议违规(如非法
- 解锁触发条件:
- 用户通过 AXI4-Lite 接口请求解锁。
- 全局复位(
aresetn
低电平有效)。
- 阻塞期间,上游接口(SI)继续接收命令,存储在内部命令队列中,并在解锁后按序处理。
- 阻塞触发条件:
-
控制与状态:
- 通过 AXI4-Lite 控制接口配置超时周期、触发软阻塞和解锁操作。
- 提供故障状态寄存器(Fault Status Register),记录阻塞原因(协议违规、超时等)。
- 支持中断信号(
mi_r_error
、mi_w_error
),通知读/写通道的阻塞状态。
-
时钟与复位:
- 使用单一时钟(
aclk
)驱动所有接口,支持同步设计。 - 支持低电平有效复位(
aresetn
),与 AXI 接口同步。 - 最大频率:250 MHz(7 系列,-1 速度等级),更高频率支持 UltraScale+ 设备。
- 使用单一时钟(
-
工具与设备支持:
- 设计工具:Vivado Design Suite。
- 支持设备:Artix-7、Kintex-7、Virtex-7、Zynq-7000、Kintex UltraScale、Virtex UltraScale、Zynq UltraScale+ MPSoC、Versal AI Core、Versal Premium、Versal Prime。
功能模块
AXI Firewall IP 的功能模块围绕事务监控、阻塞管理和响应生成设计,核心包括协议检查、命令队列和控制逻辑。以下是主要模块及其功能:
1. 协议检查模块
- 功能:监控下游接口(MI)的 AXI 事务,检测协议违规和超时。
- 机制:
- 检查读通道(
M_AXI_RVALID
、RRESP
)和写通道(M_AXI_BVALID
、BRESP
)的信号行为。 - 验证信号稳定性(如
RDATA
在RVALID
高且RREADY
低时是否保持)。 - 监控响应超时,使用内部计数器比较实际响应时间与配置的超时周期。
- 检测非法响应(如
RRESP
或BRESP
为 SLVERR 或 DECERR)。
- 检查读通道(
- 应用:识别下游网络的故障,触发阻塞保护。
2. 命令队列模块
- 功能:存储上游接口(SI)接收的命令,管理阻塞期间的事务。
- 机制:
- 在正常状态下,命令直接从 SI 传递到 MI。
- 在阻塞状态下,SI 的新命令(
S_AXI_ARADDR
、S_AXI_AWADDR
)存储在内部 FIFO 队列中。 - 解锁后,按序处理队列中的命令,确保协议合规性。
- 应用:维持事务顺序,防止数据丢失或乱序。
3. 响应生成模块
- 功能:为阻塞期间的未完成事务生成协议合规的响应。
- 机制:
- 读事务:生成全 1 数据(
S_AXI_RDATA
= 0xFF…FF),S_AXI_RRESP
设置为 SLVERR。 - 写事务:生成
S_AXI_BRESP
为 SLVERR。 - 确保响应顺序符合 AXI 协议(同一线程内事务顺序保持一致,多线程间顺序非确定性)。
- 在阻塞期间,持续置位 MI 侧的
M_AXI_RREADY
和M_AXI_BREADY
,以接收下游响应。
- 读事务:生成全 1 数据(
- 应用:保护上游网络,防止事务挂起。
4. 控制与状态模块
- 功能:通过 AXI4-Lite 接口配置和监控 Firewall 状态。
- 机制:
- 配置寄存器:
- 设置超时周期(Timeout Limit)。
- 触发软阻塞(Soft Block Request)。
- 请求读/写通道解锁(Unblock Request)。
- 状态寄存器:
- 记录阻塞状态(读/写通道是否阻塞)。
- 提供故障原因(协议违规、超时、软阻塞)。
- 中断信号:
mi_r_error
:读通道阻塞中断。mi_w_error
:写通道阻塞中断。
- 配置寄存器:
- 应用:支持动态配置和故障诊断。
5. 时钟与复位模块
- 功能:管理时钟和复位信号。
- 机制:
- 时钟:
aclk
,驱动所有逻辑,与 SI 和 MI 接口同步。 - 复位:
aresetn
,低电平有效,复位整个 IP 至非阻塞状态。 - 支持单一时钟域设计,简化时序管理。
- 时钟:
- 应用:确保与 AXI 系统时钟和复位一致。
接口信号
以下是 AXI Firewall IP 的主要接口信号及其功能:
-
AXI 从接口(S_AXI):
- 类型:AXI3、AXI4 或 AXI4-Lite 从接口,接收主设备的请求。
- 信号(以 AXI4 为例,AXI3 和 AXI4-Lite 为子集):
- 读地址通道:
S_AXI_ARADDR[C_ADDR_WIDTH-1:0]
:读地址(32 或 64 位)。S_AXI_ARVALID
、ARREADY
:读地址握手。S_AXI_ARLEN[7:0]
:突发长度(AXI4:0-255;AXI3:0-15)。S_AXI_ARSIZE[2:0]
:传输大小。S_AXI_ARBURST[1:0]
:突发类型(INCR、WRAP、FIXED)。S_AXI_ARID[C_ID_WIDTH-1:0]
:事务 ID。
- 读数据通道:
S_AXI_RDATA[C_DATA_WIDTH-1:0]
:读数据(32-1024 位)。S_AXI_RRESP[1:0]
:读响应(OKAY、SLVERR、DECERR)。S_AXI_RVALID
、RREADY
:读数据握手。S_AXI_RID[C_ID_WIDTH-1:0]
:读事务 ID。
- 写地址通道:
S_AXI_AWADDR
、AWVALID
、AWREADY
、AWLEN
、AWSIZE
、AWBURST
、AWID
:写地址参数。
- 写数据通道:
S_AXI_WDATA
、WVALID
、WREADY
:写数据握手。S_AXI_WSTRB[C_DATA_WIDTH/8-1:0]
:写选通。S_AXI_WLAST
:突发最后一拍。
- 写响应通道:
S_AXI_BRESP
、BVALID
、BREADY
:写响应。S_AXI_BID
:写事务 ID。
- 读地址通道:
- 功能:接收主设备(如 AXI DMA)的事务请求。
- 参数:
C_S_AXI_PROTOCOL
:协议类型(0=AXI4,1=AXI3,2=AXI4-Lite)。C_ADDR_WIDTH
:地址宽度。C_DATA_WIDTH
:数据宽度。C_ID_WIDTH
:事务 ID 宽度。
-
AXI 主接口(M_AXI):
- 类型:AXI3、AXI4 或 AXI4-Lite 主接口,输出事务到从设备。
- 信号:与
S_AXI
类似,但方向相反。 - 功能:将事务传递到下游网络(如 AXI Interconnect、外设)。
- 参数:同
S_AXI
。
-
AXI4-Lite 控制接口(S_AXI_CTL):
- 类型:AXI4-Lite 从接口,用于配置和状态监控。
- 信号:
S_AXI_CTL_ARADDR[31:0]
:读地址。S_AXI_CTL_ARVALID
、ARREADY
:读地址握手。S_AXI_CTL_RDATA[31:0]
:读数据(固定 32 位)。S_AXI_CTL_RVALID
、RREADY
:读数据握手。S_AXI_CTL_AWADDR
、AWVALID
、AWREADY
:写地址通道。S_AXI_CTL_WDATA
、WVALID
、WREADY
:写数据通道。S_AXI_CTL_BRESP
、BVALID
、BREADY
:写响应通道。
- 功能:配置超时、触发阻塞/解锁、读取故障状态。
- 时钟:
aclk
。
-
中断接口:
mi_r_error
:读通道阻塞中断。mi_w_error
:写通道阻塞中断。- 功能:通知处理器或调试工具阻塞事件。
-
时钟与复位接口:
aclk
:全局时钟,驱动所有接口。aresetn
:低电平有效复位,复位 IP 至非阻塞状态。- 功能:提供时钟和复位控制。
配置方法
1. 在 Vivado 中添加 IP
- 添加 AXI Firewall:
- 在 Vivado IP Catalog 中搜索 AXI Firewall,添加到设计。
- 双击 IP 核,打开定制化对话框。
- 配置参数:
- 协议类型:
C_S_AXI_PROTOCOL
:主接口协议(AXI4、AXI3、AXI4-Lite)。C_M_AXI_PROTOCOL
:从接口协议(通常与主接口相同)。
- 接口参数:
C_DATA_WIDTH
:数据宽度(32、64、128、256、512、1024 位)。C_ADDR_WIDTH
:地址宽度(默认 32 或 64 位)。C_ID_WIDTH
:事务 ID 宽度(默认 4 位)。
- 超时设置:
C_TIMEOUT_CYCLES
:超时周期(默认 1024 周期,可配置 1-65535)。
- 控制接口:
C_S_AXI_CTL_BASEADDR
:AXI4-Lite 控制接口基地址。
- 阻塞选项:
- 启用/禁用协议违规检测。
- 启用/禁用超时检测。
- 协议类型:
- RTL 生成:
- Vivado 生成 SystemVerilog 代码,实例化协议检查和阻塞逻辑。
- 输出文件位于项目目录(如
project_name.srcs/sources_1/ip/axi_firewall
)。
2. 连接与驱动
- 硬件连接:
- S_AXI:
- 连接到 AXI 主设备(如 AXI DMA、Zynq PS)。
- M_AXI:
- 连接到 AXI 从设备(如 AXI Interconnect、DDR 控制器)。
- S_AXI_CTL:
- 连接到处理器(如 Zynq PS、MicroBlaze)通过 AXI Interconnect。
- 中断:
- 连接
mi_r_error
和mi_w_error
到中断控制器(如 Zynq GIC)。
- 连接
- 分配时钟和复位:
aclk
:连接到主从接口的时钟源。aresetn
:连接到主从接口的复位信号。
- 使用 Vivado 地址编辑器为
M_AXI
和S_AXI_CTL
分配地址空间。
- S_AXI:
- 驱动程序:
- 裸机驱动:
- 通过 AXI4-Lite 接口访问控制寄存器,配置超时、触发阻塞/解锁。
- Xilinx 提供示例代码(
embeddedsw/XilinxProcessorIPLib/drivers
)。
- Linux 驱动:
- 通常通过
devmem
或用户态程序访问 AXI4-Lite 寄存器。 - 可参考 Xilinx Linux 文档配置 Device Tree。
- 通常通过
- 调试支持:
- 使用 Vivado ILA(集成逻辑分析仪)捕获
S_AXI
、M_AXI
和mi_r_error
/mi_w_error
信号,分析阻塞事件。 - 读取故障状态寄存器,定位阻塞原因。
- 使用 Vivado ILA(集成逻辑分析仪)捕获
- 裸机驱动:
3. 仿真与验证
- 仿真环境:
- 使用 Vivado Simulator 或 ModelSim 进行 RTL 仿真。
- 编写 SystemVerilog 测试平台,驱动
S_AXI
信号,模拟下游故障(如超时、非法RRESP
)。 - 使用 AXI Verification IP(PG267)生成激励,验证协议合规性。
- 验证内容:
- 模拟协议违规(如
M_AXI_RRESP
= SLVERR),检查mi_r_error
触发和阻塞状态。 - 测试超时检测,验证阻塞后
S_AXI_RDATA
返回全 1 和RRESP
= SLVERR。 - 验证软阻塞和解锁功能,通过 AXI4-Lite 接口触发。
- 确保命令队列按序处理阻塞期间的命令。
- 检查响应顺序符合 AXI 协议(同一线程内一致)。
- 模拟协议违规(如
- 波形分析:
- 使用 Vivado 波形查看器分析
S_AXI
和M_AXI
信号。 - 确认阻塞期间
M_AXI_RREADY
和M_AXI_BREADY
持续置位。 - 检查中断信号(
mi_r_error
、mi_w_error
)的触发时序。
- 使用 Vivado 波形查看器分析
资源利用情况
AXI Firewall 的资源占用取决于协议类型、数据宽度和超时周期配置。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 2018.3 综合):
- 资源类型:
- LUT(查找表):500-3000,取决于数据宽度和协议复杂性。
- FF(触发器):700-4000,与 LUT 占用相关。
- BRAM:0(无需 BRAM)。
- DSP 切片:0(不使用)。
- 配置示例:
- AXI4,64 位数据宽度,超时周期 1024:约 800 LUT、1000 FF。
- AXI3,128 位数据宽度,超时周期 4096:约 1200 LUT、1500 FF。
- AXI4-Lite,32 位数据宽度,超时周期 1024:约 500 LUT、700 FF。
- 最大频率:
- 7 系列(-1 速度等级):250 MHz。
- UltraScale+:350 MHz 或更高。
具体资源利用需参考 Vivado 综合报告,建议根据目标设备和配置验证资源占用。
应用场景
AXI Firewall IP 适用于以下场景:
-
PCIe 通信保护:
- 在 Zynq SoC 或 Versal 设计中,放置于 PCIe 通道的 DMA 控制器与可编程逻辑(PL)之间,防止下游故障导致主机崩溃。
- 检测 PL 侧外设的协议违规或超时,保护 PCIe 通信。
-
DMA 传输保护:
- 保护 AXI DMA 或 MCDMA 免受下游外设(如 AXI Interconnect、内存控制器)的协议错误影响。
- 确保 DMA 事务在下游故障时安全终止。
-
复杂 SoC 系统:
- 在多核处理器或多外设系统中,隔离故障区域,防止单一外设故障影响整个系统。
- 支持高可靠性设计,如汽车电子和工业控制。
-
调试与验证:
- 在开发阶段,通过软阻塞功能模拟下游故障,验证系统容错能力。
- 配合 Vivado ILA 捕获故障状态,定位协议问题。
-
高可用性系统:
- 在需要容错的嵌入式系统中(如航空航天、医疗设备),提供事务隔离和故障恢复机制。
注意事项
-
协议配置:
- 确保
C_S_AXI_PROTOCOL
和C_M_AXI_PROTOCOL
与主从设备匹配。 - AXI4-Lite 不支持突发,勿配置突发相关参数(如
ARLEN
、AWLEN
)。
- 确保
-
超时设置:
- 超时周期(
C_TIMEOUT_CYCLES
)需根据下游设备的响应时间合理配置,过短可能导致误阻塞,过长可能延迟故障检测。 - 推荐值:1024-4096 周期,具体需根据系统时钟频率调整)。
- 超时周期(
-
阻塞管理:
- 阻塞期间,上游主设备应暂停新事务或正确处理 SLVERR 响应。
- 解锁前,需确保下游网络已通过局部复位恢复正常)。
-
时钟与复位:
- 确保
aclk
与主从接口时钟同步,避免采样错误。 aresetn
需保持至少 16 个时钟周期,同步释放以防亚稳态。
- 确保
-
中断处理:
- 配置中断控制器正确响应
mi_r_error
和mi_w_error
,避免漏报阻塞事件。 - 定期读取故障状态寄存器,分析阻塞原因。
- 配置中断控制器正确响应
总结
AXI Firewall IP是一款高可靠性 AXI 保护软核,支持 AXI3、AXI4 和 AXI4-Lite 协议,通过协议违规检测、超时保护和事务隔离,防止下游故障影响上游网络。其灵活的 AXI4-Lite 控制接口、低资源占用和高性能设计使其成为 PCIe 通信、DMA 传输和复杂 SoC 系统中的关键组件,广泛应用于高可用性嵌入式系统。
用户在配置时需注意协议类型、超时周期和中断设置,合理连接主从接口,并通过仿真验证阻塞和响应生成功能。结合 Vivado 工具、Vitis 驱动和 ILA 调试,AXI Firewall 可显著提升系统可靠性和容错能力。
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC