1. Agilex SoC 硬件架构总览

Agilex SoC 是 Altera(原 Intel FPGA)面向中高端嵌入式与边缘计算场景推出的异构 SoC 平台。理解它的第一步,不是去背寄存器手册,而是先建立一张"硬件地图":哪些部分是可编程逻辑,哪些部分是固定功能的硬核处理器,它们各自通过什么总线互联,软件运行时看到的地址空间又是怎样划分的。只有把这张地图建立起来,后面做 U-Boot 移植、设备树编写、驱动开发时,才知道自己改的到底是哪一块硬件。

一、Agilex SoC 的三层硬件构成

从最粗的粒度看,一颗 Agilex SoC 器件可以拆成三个层次:HPS(Hard Processor System,硬核处理器子系统)、FPGA 可编程逻辑(Core Fabric),以及连接两者的互联与桥接结构。

HPS 是芯片内固化的、与 FPGA 逻辑相对独立的处理子系统。以 Agilex 系列常见的 HPS 配置为例,它通常包含:

  • 一个或两个 Arm Cortex-A53 应用处理器核,带各自的一级缓存和共享的二级缓存(L2 Cache);
  • 一组 Cortex-A53 之外的管理/实时核(部分型号带 Cortex-M 类协处理器或专用安全核);
  • 内存控制器(DDR4/LPDDR4/LPDDR5 等,视具体型号),直接挂在 HPS 侧;
  • 一组硬核外设控制器:以太网 MAC、USB、SD/eMMC、UART、SPI、I²C、GPIO、定时器等;
  • 片上互联(NoC / 总线矩阵)与到 FPGA 逻辑的桥接口。

FPGA 逻辑部分则是可编程的 Core Fabric,由 ALM(Adaptive Logic Module)、DSP 块、M20K 存储块、时钟网络和 I/O 单元组成。它本身不是"处理器",但可以例化软核(如 Nios V)、实现自定义加速器、协议控制器或高速接口。

两者之间的连接不是简单的"一根线",而是由多条桥组成的层次化互联:HPS-to-FPGA 桥、FPGA-to-HPS 桥、轻量级 HPS-to-FPGA 桥(Lightweight Bridge),以及可选的 FPGA-to-SDRAM 桥。这些桥决定了"谁能访问谁、以什么位宽和延迟访问"。

Agilex SoC 硬件架构总览 HPS 硬核处理器子系统 Arm Cortex-A53 ×2 L1 I/D Cache + 共享 L2 Cache DDR 控制器 LPDDR4/5 · DDR4 硬核外设 EMAC·USB·SD·UART·I²C HPS 片上互联 / NoC 桥接接口 HPS→FPGA · FPGA→HPS Lightweight · FPGA→SDRAM 统一内存映射地址空间 HPS 外设区 · FPGA 轻量区 · SDRAM 区 FPGA 可编程逻辑 Core Fabric ALM 自适应逻辑模块阵列 组合/时序逻辑 · 寄存器 DSP 块 乘加运算 M20K 存储块 片上 RAM 软核 / 自定义加速器 / 协议控制器 Nios V · 图像处理 · 高速接口 桥接从端接口 Avalon-MM / AXI 从端 接收 HPS 访问请求 I/O 单元与高速收发器 LVDS · Transceiver · 外部器件 桥接互联 HPS 与 FPGA 通过多条桥互联,软件通过统一地址空间访问两侧资源

二、内存映射:软件眼中的硬件

对 Linux 来说,硬件最终表现为一张地址表。Agilex SoC 采用统一内存映射(Unified Memory Map),HPS 侧的处理器核可以访问三类地址区域:

  • HPS 外设区:UART、I²C、GPIO、定时器、DMA 控制器等硬核外设寄存器,通常位于较低的物理地址段;
  • FPGA 轻量级区域(Lightweight HPS-to-FPGA):用于访问 FPGA 逻辑中映射的控制/状态寄存器,位宽较窄、延迟较低,适合寄存器型访问;
  • FPGA 数据区域(HPS-to-FPGA):用于大块数据传输,位宽更宽,适合 DMA 或批量读写;
  • SDRAM 区域:DDR 内存,Linux 内核、用户空间和 FPGA 侧 DMA 共享的物理内存。

在设备树中,这些区域通过 reg 属性描述。例如一个挂在轻量级桥上的自定义寄存器模块,可能写成:

my_accel: my-accel@ff200000 {
    compatible = "demo,my-accel-1.0";
    reg = <0xff200000 0x1000>;
    interrupt-parent = <&intc>;
    interrupts = <0 12 4>;
};

这里的 0xff200000 就是 FPGA 轻量级桥映射到 HPS 地址空间后的基地址,0x1000 是长度。驱动里用 ioremap 或 devm_ioremap_resource 拿到虚拟地址后,就能像访问内存一样读写 FPGA 里的寄存器。

三、外设互联与数据通路

Agilex SoC 的互联可以按"谁发起、谁响应"来理解。HPS 侧的 Cortex-A53 是主要发起者,它可以访问 DDR、HPS 外设、FPGA 从端。FPGA 逻辑也可以作为发起者,通过 FPGA-to-HPS 桥访问 HPS 的 DDR 或外设,这在 FPGA 做 DMA 时非常关键。

实际工程中,最常见的三条数据通路是:

  1. CPU → FPGA 寄存器:走轻量级桥,用于配置加速器、读取状态;
  2. FPGA → DDR:走 FPGA-to-SDRAM 桥,用于把采集数据直接写入内存,避免 CPU 搬运;
  3. CPU → DDR → FPGA:CPU 准备好数据后,FPGA 通过 AXI/Avalon 主端读取,适合图像、视频等大块数据。

这三条通路的带宽和延迟差异很大。轻量级桥适合小数据量、低延迟的控制访问;FPGA-to-SDRAM 桥则追求高吞吐。设计时如果搞反了——比如用轻量级桥传视频帧——系统性能会立刻暴露问题。

四、典型应用场景

Agilex SoC 的典型用法,可以归纳为"CPU 做控制、FPGA 做加速"的分工模式。几个常见场景:

  • 工业视觉:FPGA 侧接 Camera Link / MIPI 接收图像,做预处理后写入 DDR,Cortex-A53 运行 Linux 做上层算法和网络通信;
  • 边缘 AI 推理:FPGA 实现卷积加速器,HPS 负责模型调度、结果后处理和云端上报;
  • 高速数据采集:FPGA 通过 Transceiver 接收高速串行数据,经 DMA 写入 DDR,HPS 侧用 UIO 或字符设备读取;
  • 通信网关:HPS 跑协议栈和 Linux 网络,FPGA 做时间敏感网络(TSN)或自定义协议卸载。
理解 Agilex SoC 的关键,是始终问自己三个问题:这个功能由 HPS 还是 FPGA 实现?两者之间走哪条桥?软件通过哪个地址访问它?把这三个问题回答清楚,硬件架构就不再是一堆名词,而是一张可以指导移植和调试的地图。

本章后续内容会围绕这张地图逐步展开:先看 HPS 内部各模块的细节,再看 FPGA 侧的资源与接口,最后落到设备树和驱动如何把这张硬件地图翻译成 Linux 能识别的软件结构。