Glossary 名词解释

Glossary is important and irrelevant at the same time.

NOTE: 以下概念是我学习过程中遇到并且你需要掌握的, 其它文章中我将不会对以下名词进行解释.

General Terms

  • CFU: Custom Function Unit (自定义功能单元). 为 ML 某些耗时的计算 (如卷积、矩阵乘法、位操作等) 定制的指令加速硬件模块.
    • 一旦主处理器执行到特定的 CFU 指令,就会将数据发送给 CFU 处理,然后 CFU 返回结果.
    • FPU: Floating Point Unit (浮点运算单元), 是 CPU 中专门处理浮点数运算的硬件组件.

FPGA Terms

General

  • TfLM: TensorFlow Lite for Microcontrollers.

    • PDTI8: Person DeTection Int 8
  • Gateware: 用软件编写的硬件电路. (既不是 Software, 也不是 Hardware).

  • HPS: High Performance System.

    • PLATFORMS=common_soc sim hps, 三个平台. common_soc 指标准的 FPGA 开发平台; sim 指用 Verilator 进行软件仿真.
  • SoC (System on Chip) 片上系统: 比如 ZYNQ, 一块硅芯片 就可以实现整个系统的功能 (而不是要组合多个芯片).

Interface

  • PMOD (Peripheral Module) 接口: 一组 2*6 排针的引脚 PMOD. 定义了电源、地线、以及最多 8 条可用于通信的信号线. PMOD模块通常通过 SPI、I2C 或 GPIO (通用数字输入输出) 与主控通信. 你可以买到很多支持 PMOD 的模块, 如传感器、显示屏、存储器等.

  • JTAG 接口: 一种用于调试和编程的标准接口.

  • AXI (Advanced eXtensible Interface) 接口: CPU 与外设 (内存控制器, DMA, CFU, IP 核) 之间的通信协议.

    • 比如 ZYNQ 的 PS (Processing System)PL (Programmable Logic) 之间的通信就是通过 AXI 接口 (见 FPGA 原理速成).

File formats

  • .pcf 文件: Physical Constraints File. .pcf 文件告诉工具:Verilog 中的某个逻辑信号,物理上应该接到 FPGA 的哪个 pin. 比如:

    set_io D1 B5

    表示把 D1 (在 .v 文件中定义的) 信号连接到 FPGA 的 B5 引脚.

    • .xdc 文件: Xilinx Design Constraints File. Vivado 工具使用的约束文件.

HDL

  • HLS: High-Level Synthesis. 用 C/C++ 等高级语言来写硬件电路设计.

    • SpinalHDL: 一种 Hardware Description Language (HDL, scala 的一种 DSL (Domain Specific Language)). 可用来生成更底层的 Verilog 代码.
      • Scala: 其实这才是 SpinalHDL 的语言. SpinalHDL 只是用 scala 来构建了一个电路.
        • Scalac: Scala 编译器.
        • sbt: Scala Build Tool. 配置依赖、插件和调用 Scalac.
        • Mill: 跟 sbt 类似, 但更轻量.
      • VexRiscv Soft CPU: 用 SpinalHDL 写的一个 高度可配置的 RISC-V soft CPU 内核 (soft 的意思就是 CPU 不是硬件焊死的 (“hard CPU”) , 而是部署在 FPGA 上可以改变结构的).
      • IP Core: Intellectual Property Core. 由一方 (开发者或公司) 设计,并通过许可授权给其他设计者使用。常见的 IP 核包括 CPU 内核、以太网控制器、内存控制器等.
        • Soft IP: 软核
        • Hard IP: 硬核
    • Amaranth: 一个 Python 库, 也是用于硬件描述和设计. 可生成 Verilog 代码.
  • RTL: Register Transfer Level. 通俗说就是 verilog 代码的抽象程度水平.

FPGA Principles

  • PAR: Place and Route. 布局布线.

FPGA Structure 结构

Submodules 项目中用到的核心子模块

该项目重度使用了以下开源项目, FPGA 开源是一个很大的工程, 感谢所有开源者!

  • verilator: 将 verilog 代码变成 C++ 代码, 然后编译并运行在 CPU 上进行仿真, 模拟出时钟、寄存器逻辑、外设交互等行为.

  • iverilog (Icarus Verilog): 也是仿真 (但不输出 C 代码):

    iverilog -o blink.vvp blink.v blink_tb.v
    # 生成 vcd 文件可配合 GTKWave 查看波形
    vvp blink.vvp
  • openFPGALoader: 用于将比特流烧录到 FPGA (但不能调试).

    # 示例:
    openFPGALoader -b arty arty_bitstream.bit      # SRAM 加载
    openFPGALoader -b arty -f arty_bitstream.bit   # 写入 flash
  • openocd: Open On-Chip Debugger. 用于调试 FPGA 的工具. 支持 JTAG 接口.

  • 三个端到端的工具链:

    • Vivado: IDE, 闭源.

    • yosysHQ (Yosys Open SYnthesis Suite Headquarters): yyds!! 一个开源的 EDA 工具链. 子项目包括:

      • icestorm: 用于针对 Lattice iCE40 FPGA 实现完全的端到端开源流程, 从 Verilog 到 bitstream, 再烧写到 FPGA 板卡上. 以下每一个命令都是一个单独的 repo!!

        # yosys 综合 (将 verilog 转换为网表 .json)
        yosys -p 'synth_ice40 -top blink -json blink.json' blink.v
        # nextpnr 布局布线 (生成 bitstream 的中间文件 .asc)
        nextpnr-ice40 --up5k --json blink.json --pcf blink.pcf --asc blink.asc
        # icepack 打包 (生成 bitstream .bin)
        icepack blink.asc blink.bin
        # icesprog 烧写 (将 bitstream 写入 FPGA)
        sudo icesprog blink.bin
    • F4PGA: 以前叫 Symbiflow, 旨在为多家 FPGA 供应商 (Xilinx 7 系列、Lattice iCE40/ECP5、QuickLogic EOS S3 等) 提供统一、功能完备、可扩展且无需专有软件的端到端开发流程.

      • 里面大量使用了 YosysHQ 的工具.
  • SpinalHDL: 一个基于 Scala 的硬件描述语言 (HDL), 用于生成 Verilog 代码. SpinalHDL 提供了更高级的抽象和更强大的功能, 使得硬件设计更加灵活和可扩展.

  • Litex: 支持用 Python 脚本拼装出完整的 SoC.