2. SoC架构与HPS-FPGA桥接

Cyclone V SoC 与 Arria 10 SoC 都属于“双世界”芯片:一侧是硬核处理器系统 HPS(Hard Processor System),另一侧是可编程逻辑 FPGA。两者不是简单拼接,而是通过一组专用桥接通道连接,使 HPS 能像访问普通外设一样访问 FPGA 中的寄存器与存储器,FPGA 也能反向访问 HPS 的 DDR 与片上 RAM。理解这套桥接结构,是后续用 Platform Designer 搭建互联系统的前提。

一、HPS 内部结构与 FPGA 的角色

HPS 内部集成了 ARM Cortex-A9(Cyclone V)或 Cortex-A10(Arria 10)双核、L2 Cache、DDR 控制器、片上 RAM、SD/MMC、USB、以太网、UART、I2C、SPI 等硬核外设,以及一个轻量级 FPGA 接口。FPGA 侧则由逻辑单元、DSP、Block RAM、PLL 和大量可配置 I/O 组成。二者共享同一封装,但供电域、时钟域和复位域相互独立,因此桥接设计必须处理跨时钟域与地址映射问题。

从软件视角看,HPS 把 FPGA 当作一段可读写的地址空间;从硬件视角看,FPGA 把 HPS 当作一个 AXI/Avalon 主机或从机。这种“双向主从”关系,正是 SoC 桥接的核心。

二、三类桥接通道

HPS 与 FPGA 之间通常有三类桥:

  • HPS-to-FPGA 桥:HPS 作为主机,访问 FPGA 中的 Avalon-MM 从机(如自定义寄存器、DMA 描述符、片上 RAM)。
  • FPGA-to-HPS 桥:FPGA 作为主机,访问 HPS 的 DDR、片上 RAM 或外设寄存器,常用于 DMA 搬运和硬件加速器回写结果。
  • 轻量级 HPS-to-FPGA 桥:带宽较低、延迟较小,适合访问控制寄存器、状态寄存器等小数据量场景。

在 Cyclone V 中,HPS-to-FPGA 桥通常映射到 0xC0000000 起始的地址段,FPGA-to-HPS 桥则映射到 HPS 侧 0xC0000000 附近的不同窗口。具体基地址由 Quartus 的 HPS 配置决定,必须在 Platform Designer 中与软件头文件保持一致。

三、AXI、Avalon-MM 与 Avalon-ST

三种协议各有分工:

  • AXI:ARM 生态标准,支持突发传输、读写通道分离、多主机多从机互联,适合高带宽 DDR 访问与复杂 SoC 互联。
  • Avalon-MM:Intel FPGA 传统存储器映射总线,信号简单,适合寄存器读写和轻量级外设,Platform Designer 中大量 IP 默认使用它。
  • Avalon-ST:面向流数据,带 valid、ready、data、empty、error 等信号,适合视频、ADC、DMA 等连续数据通路。

桥接时,Platform Designer 会自动插入协议转换器,例如把 HPS 的 AXI 主机转换为 Avalon-MM 从机,或把 Avalon-ST 流接入 DMA。设计者需要关注的是位宽、突发长度、时钟域和地址对齐,而不是手动编写转换逻辑。

Cyclone V / Arria 10 SoC 桥接结构示意 HPS 硬核处理器系统 ARM Cortex-A9 / A10 双核 L1/L2 Cache · MMU · NEON DDR 控制器 + 片上 RAM HPS 侧主存与共享缓冲区 硬核外设 UART · I2C · SPI · SD/MMC · USB · EMAC HPS 互连矩阵 AXI 主/从端口 · 地址译码 桥接控制器 HPS-to-FPGA · FPGA-to-HPS 轻量级桥 · 时钟/复位跨域 FPGA 可编程逻辑 自定义 IP / 硬件加速器 Avalon-MM 从机 · 寄存器组 DMA 控制器 Avalon-MM 主机 · 描述符搬运 流接口 IP Avalon-ST · 视频/ADC 数据流 片上存储器 Block RAM · 共享缓冲区 FPGA 互连 Avalon-MM / Avalon-ST / AXI PLL · 时钟域交叉 HPS-to-FPGA AXI → Avalon-MM FPGA-to-HPS Avalon-MM → AXI 轻量级桥 控制/状态寄存器 地址映射示例:HPS-to-FPGA 基地址 0xC0000000;FPGA-to-HPS 窗口由 HPS 配置决定,需与软件头文件一致

四、用 Platform Designer 搭建互联系统

Platform Designer(旧称 Qsys)是 Intel 的 SoC 集成工具。典型流程如下:

  1. 新建系统,添加 HPS 组件,配置 DDR 时序、外设引脚、时钟与复位。
  2. 在 HPS 的 FPGA Interfaces 页中使能所需桥:HPS-to-FPGA、FPGA-to-HPS、Lightweight HPS-to-FPGA,并设置数据位宽(如 64 位或 128 位)。
  3. 添加自定义 Avalon-MM 从机 IP,将其 avalon_slave 接口连接到 HPS-to-FPGA 桥的主端口。
  4. 若需要 FPGA 主动搬运数据,添加 DMA 或 Avalon-MM Master IP,连接到 FPGA-to-HPS 桥的从端口。
  5. 为每个 IP 分配基地址,确保地址区间不重叠,并生成 .qsys 与 .sopcinfo 文件。
  6. 在 Quartus 中综合、布局布线,生成 .sof;在 SoC EDS 或 Linux 中根据 .sopcinfo 生成头文件,供驱动使用。

一个常见的教学示例是:HPS 通过 HPS-to-FPGA 桥向 FPGA 中的 0x0000_0000 偏移写入控制字,启动 FPGA 侧的流式处理;处理完成后,FPGA 通过 FPGA-to-HPS 桥把结果写入 HPS DDR 的 0x3F00_0000 缓冲区,并触发中断。软件读取该缓冲区即可验证结果。这里的地址、位宽和中断号都必须在 Platform Designer 与软件中保持一致,否则会出现“写进去读不出”或“DMA 不搬数”的典型问题。

提示:桥接地址不是随意指定的。HPS-to-FPGA 桥的基地址通常由 HPS 配置决定,而 FPGA 内部 IP 的偏移地址由 Platform Designer 分配。软件访问时使用“桥基地址 + IP 偏移地址”,两者必须来自同一份 .sopcinfo。

五、协议选择与常见排障

选择协议时,可以遵循以下判断:控制寄存器用 Avalon-MM;高带宽 DDR 访问用 AXI;连续数据流用 Avalon-ST。若 IP 只支持 Avalon-MM,而 HPS 侧是 AXI,Platform Designer 会自动插入 AXI to Avalon-MM 转换器,但会引入额外延迟,必要时可手动优化突发长度。

常见问题包括:地址映射错误导致访问越界;时钟域未正确约束导致亚稳态;位宽不匹配导致数据截断;DMA 描述符未对齐导致传输失败。排查时先用 System Console 读取桥接状态寄存器,确认桥是否使能、地址是否命中,再检查时序约束与复位释放顺序。

注意:FPGA-to-HPS 桥的带宽受 HPS 侧互连矩阵和 DDR 控制器限制。若 DMA 吞吐低于预期,应检查突发长度、位宽和 DDR 访问模式,而不是只调整 FPGA 逻辑。