FPGA 原理速成

FPGA Structure 结构

PL (Programmable Logic) 可编程部分

这个部分是一个 FPGA 开发板 “软” 的部分, 即可以通过 verilog 来控制硬件电路的部分. 要理清一下几个概念:

  • BLE (Basic Logic Element): 基本逻辑单元. LUT 和 FF 的「经典」的组合.
    • Figure fig-ble, 方框代表 LUT (Look up Table), 本质上就是一个 Mux (Multiplexer, 多路选择器).

    • 红色的位置将来的 bitstream 会写入 (用来配置这个 BLE 的功能), i0-i3 是这个 BLE 的输入, 右边是输出.

      Figure 1: 这个 BLE 由 LUT-4 和 D-FF 组成
  • CLB (Configurable Logic Block, Xilinx) 可配置逻辑块: 一个或者多个 BLE 的组合.
    • 也叫 Slice (Vivado HLS) 或 LAB (Logic Array Block) 或 ALM (Adaptive Logic Module, Intel).

由 1 个 BLE 构成的 CLB (e.g. Xilinx Spartan 6)

由 4 个 BLE 构成的 CLB
  • SB (SwitchBox): 连接不同 CLB 的开关盒.

    Figure 2: Slice (蓝色) 和其周围的 SB (SwitchBox) [1]

Figure fig-slice-sb 的放大结构

PS (Processing System) 处理器部分

不要认为一个开发板只有 “软” 部分, 有些经常用的模块会用硬件 “焊死” 在板子上 (Heterogenous 异构). 这些硬件通过 I/O 口与 PL 部分通信, 比如:

ZYNQ PS 和 PL 通过 AXI 通信

编译过程

Synthesis 综合

动机: FPGA 不懂 “行为”, 它需要的是 “你想用哪些门, 怎么连线”. 所以 Synthesis 是将你写的 .v 逻辑翻译成各种 Logic gates 应该如何连接 (门级网表) 的过程 (以 .json 格式输出).

1.
Kastner R, Matai J, Neuendorffer S (2018) Parallel Programming for FPGAs. ArXiv e-prints