3. Platform Designer系统集成
在完成 Quartus 工程创建与器件选型之后,SoC 设计的核心工作就转移到 Platform Designer(旧称 Qsys)中完成。Platform Designer 的本质是一个“系统级连线与地址分配工具”:它把 HPS、PIO、片上存储器、JTAG UART 等独立 IP 通过互连结构(Interconnect)连接成一条 Avalon 总线系统,并自动生成地址映射、时钟与复位网络,最终输出可供 Quartus 综合的 HDL 与 QIP 文件。本节以“HPS + PIO + On-Chip Memory + JTAG UART”这一最小可用系统为例,完整走通从添加 IP 到生成 HDL 的流程。
一、系统组成与连接关系
本系统需要四类 IP,各自承担明确职责:
- HPS(Hard Processor System):集成 ARM Cortex-A9 双核、DDR 控制器、外设接口,是软硬件协同的“主控端”,通过 AXI/Avalon 桥接与 FPGA 侧逻辑通信。
- PIO(Parallel I/O):提供 FPGA 侧并行输入/输出端口,常用于按键、LED 等简单外设,是软硬件交互最直观的验证对象。
- On-Chip Memory:片上 RAM,可作为 HPS 启动前的暂存区、共享数据缓冲区或小型程序存储区。
- JTAG UART:通过 JTAG 链路实现 PC 与 FPGA 之间的串行字符通信,用于打印调试信息、接收命令,无需额外串口硬件。
四者通过 Avalon Memory-Mapped(Avalon-MM)互连结构连接,HPS 作为主设备(Master)发起读写,PIO、On-Chip Memory、JTAG UART 作为从设备(Slave)响应。时钟与复位由 HPS 输出的 h2f_user0_clock 与 h2f_reset 统一驱动,保证整个系统同步工作。
二、添加 IP 与关键参数配置
在 Quartus 中通过 Tools → Platform Designer 打开系统编辑界面,新建 system.qsys。在 IP Catalog 中依次搜索并添加以下 IP,双击进入参数配置:
HPS 配置:选择 Hard Processor System,在 FPGA Interfaces 中勾选 AXI Bridge 与 Lightweight HPS-to-FPGA Bridge,前者用于高带宽数据通路,后者用于寄存器级控制。在 Peripheral Pins 中按开发板原理图使能 UART、SD/MMC、Ethernet 等实际使用的外设。时钟页中设置 h2f_user0_clock 为 50 MHz(示例值,实际以板卡 PLL 与 HPS 时钟树为准)。
PIO 配置:选择 PIO (Parallel I/O),设置 Width 为 8(示例,对应 8 位 LED 或按键),Direction 设为 Output 用于 LED,若需按键则再添加一个 Input 方向的 PIO。勾选 Enable individual bit setting/clearing 便于软件按位操作。
On-Chip Memory 配置:选择 On-Chip Memory (RAM or ROM),Memory type 选 RAM,Data width 设为 32 位,Total memory size 设为 65536 bytes(64 KB,示例值)。若作为 HPS 启动暂存区,需勾选 Initialize memory content 并指定 .hex 文件。
JTAG UART 配置:选择 JTAG UART,保持默认即可,Write FIFO 与 Read FIFO 深度可设为 64。该 IP 会自动占用 JTAG 链路,无需额外引脚。
三、时钟、复位与地址分配
添加完成后进入 Connections 视图,将 HPS 的 h2f_user0_clock 输出连接到所有从设备的 clk 输入,将 h2f_reset 连接到所有从设备的 reset 输入。HPS 的 h2f_axi_master 连接到 Interconnect 的主端口,各从设备的 avalon_slave 连接到 Interconnect 的从端口。
切换到 Address Map 视图,为每个从设备分配基地址。Platform Designer 会自动计算地址范围,例如 PIO 占 16 字节、On-Chip Memory 占 64 KB、JTAG UART 占 16 字节。分配完成后点击 Assign Base Addresses 自动对齐,避免地址重叠。这些基地址将直接决定后续软件中 #define 的寄存器偏移量。
h2f_user0_clock,无需额外桥接。
四、生成 HDL 并集成到 Quartus 工程
点击 Generate → Generate HDL,在弹出窗口中确认输出路径为工程目录下的 system/,综合工具选择 Verilog 或 VHDL(与工程一致)。生成完成后会得到 system.qsys、system.sopcinfo、system/synthesis/system.qip 以及各 IP 的 HDL 文件。
回到 Quartus 工程,通过 Project → Add/Remove Files in Project 将 system/synthesis/system.qip 加入工程。QIP 文件会自动引用所有子模块,无需手动逐个添加。随后在顶层 Verilog 中实例化 system 模块,并将 PIO 端口引出到 FPGA 引脚:
system u0 (
.clk_clk (clk_50m),
.reset_reset_n (rst_n),
.pio_led_external_connection_export (led[7:0]),
.pio_key_external_connection_export (key[7:0])
);
引脚分配阶段,在 Pin Planner 中将 led[7:0] 与 key[7:0] 绑定到开发板实际引脚,并设置 I/O 标准(如 3.3-V LVTTL)。完成全编译后,Quartus 会生成 .sof 配置文件,通过 Programmer 下载到 FPGA。
五、验证系统是否集成成功
下载完成后,可通过两种方式快速验证:其一,在 Quartus 中打开 Tools → System Console,使用 Tcl 命令 master_write_32 向 PIO 基地址写入数据,观察 LED 是否按预期点亮;其二,在 Nios II 或 HPS 端运行一段简单程序,通过 JTAG UART 打印 “System Ready”,若 PC 端串口终端能收到该字符串,说明 HPS、JTAG UART 与互连结构均已正常工作。
若 LED 无响应,优先检查三项:地址映射是否与软件定义一致、PIO 方向是否配置正确、引脚是否绑定到实际物理引脚。若 JTAG UART 无输出,检查 HPS 是否已正确释放复位、时钟是否稳定。这些排查点正是后续软硬件协同调试的基础。