在 AMD (Xilinx) 最新的 Vitis 统一软件平台架构下,FPGA 的开发被清晰地划分为两个世界。理解这两个世界的区别,是看懂现代 FPGA 论文和技术文档的关键。
逻辑一:自底向上的'硬件构建'逻辑 (Vivado Flow)
——'我是芯片设计师,我在造一台电脑。'
这是经典的、传统的 FPGA 开发方式。
1. 核心思维
- 关注点:时钟周期、复位信号、状态机翻转、AXI 总线位宽、时序收敛 (Timing Closure)。
- 目标:生成一个
.bit文件(Bitstream),控制 FPGA 上的每一个查找表 (LUT) 和触发器 (FF)。 - 角色:你是上帝。你需要亲自搭建 CPU(MicroBlaze)或配置硬核(ARM),你需要亲自连线内存控制器 (DDR Controller),你需要亲自处理 PCIe 的物理层接口。
2. HLS 在这里的角色 (Vivado HLS / Vitis HLS)
在这种逻辑下,HLS (High-Level Synthesis) 只是一个**'零件加工厂'**。
- 你用 C++ 写一个算法。
- HLS 把它综合成一个 RTL IP 核(带 AXI 接口的黑盒子)。
- 关键步骤:你必须手动打开 Vivado 的 IP Integrator (Block Design),把这个 HLS 生成的 IP 拖进去,画线连接到总线上,分配地址空间。
- 局限:如果你想修改算法的并行度(比如从 1 路并行改成 4 路),你可能需要重新导出 IP,回到 Vivado 更新连线,重新综合整个工程。这很难自动化。
逻辑二:自顶向下的'软件加速'逻辑 (Vitis Flow)
——'我是系统架构师,我在写一个异构程序。'
这是 OpenCL 所在的领域,也是那篇论文使用的逻辑,更是 AMD 目前大力推崇的 Vitis 加速流。
1. 核心思维
- 关注点:数据吞吐量、内核 (Kernel) 延迟、主机 - 设备 (Host-Device) 带宽、异构调度。
- 目标:生成一个
.xclbin文件(二进制容器)和一个主机可执行文件 (Host Exe)。 - 角色:你是应用开发者。底层的 PCIe 接口、DDR 控制器、DMA 搬运引擎,你不关心,也不需要写。这些由 Xilinx 提供的(或板卡厂商提供的)'Shell' (Target Platform) 自动完成。
2. 这种逻辑下的开发架构 (Host + Kernel)
在这种模式下,FPGA 不再被视为'电路板',而被视为一个**'可编程的函数库'**。
- Host (主机):CPU 运行的代码。负责读取文件、预处理数据、通过 API 指挥 FPGA 干活。
- Kernel (内核):FPGA 内部的加速逻辑。
3. OpenCL 在这里的角色
OpenCL 是这一逻辑的'鼻祖'和'标准'。
- 它规定了 CPU 怎么给 FPGA 发数据(
clEnqueueWriteBuffer)。 - 它规定了 FPGA 里的代码该长什么样(
__kernel void ...)。 - 最重要的是:它实现了软硬件的解耦。你改了 FPGA 里的算法(Kernel),只要接口没变,CPU 的代码甚至不需要重新编译。

