# A Low Power and Low Latency FPGA-Based Spiking Neural Network Accelerator

# 摘要

翻译自 ChatGPT:

脉冲神经网络(SNNs),被称为神经网络的第三代,因其生物合理性和类似大脑的特征而著名。最近的努力进一步展示了 SNN 在高速推断方面的潜力,通过设计具有时间或空间维度并行性的加速器。然而,由于硬件资源的限制,加速器设计必须利用片外内存来存储许多中间数据,这导致了高功耗和长延迟。本文侧重于层间数据流以提高算术效率。基于脉冲的离散特性,我们设计了一个卷积池化(CONVP)单元,将卷积层和池化层的处理合并,以减少延迟和资源利用率。此外,对于全连接层,我们应用了内部输出并行性和跨输出并行性来加速网络推理。我们通过在 Zynq XA7Z020 FPGA 上实现不同的 SNN 模型,并使用不同的数据集来展示我们提出的硬件架构的有效性。实验结果显示,我们的加速器在 MNIST 数据集上与 FPGA 实现相比,可以实现约 28 倍的推断速度提升,并在 DVSGesture 数据集上与 ASIC 设计相比,可以实现约 15 倍的推断速度提升,功耗较低。

# 相关工作

  1. 使用 rate codingIF 神经元模型,没给出具体的时间步是多少。

# 设计方法

  1. PC 端负责脉冲编码,通过 UART 协议输出给 PL 端;PL 端负责网络推理对输入脉冲做 Line Buffer 做卷积(Adder Tree),输出结果再传回 PC 端进行验证,系统框图如图:

  2. 所谓的 CONVP 就是把 Conv 和 MaxPooling 融合(呃呃不就是很常见的多加个 buffer 吗,而且作者所做的似乎是 Valid Conv ),然后做了 Intra-Row PoolingInter-Row Pooling,说白了就是比如做 MP2 的时候,第一行先做 Intra-Row Pooling,每两个做一次 OR 操作再写入 Buffer,在第二行的时候则作 Inter-Row Pooling,本来是应该读出第一行的 pooling 结果然后接着做 OR 操作的,但作者似乎是偷懒多开了一行 Buffer 再一一做 OR 操作,如图:

  3. 卷积过程也有 Inter-Output ParallelismIntra-Output Parallelism,其中 Intra-Output Parallelism 是把对某个神经元有贡献的权重(n bits)分成 k 个作为一组,即并行度为 k,经过 Ci /k 个 Clock 后就可以算完一个输出神经元的膜电势;Intra-Output Parallelism 没怎么理解,我估计是对上个 FC 层计算完的结果直接拿来做运算,而不需要存起来再被这层 FC 取出来作为 Input,如图:

# 实验与评估

  1. 在 Xilinx Zynq XA7Z020 FPGA 上进行了部署,Verilog 设计,8 bits 定点量化,100 MHz 时钟频率,性能对比如图:

  2. 其他也没啥好说的了,作者最后还对比了下 CONVPCONV-POOLING 以及有无 Inter-Output ParallelismIntra-Output Parallelism 的推理速率、资源使用率的差别,只能说增加了下工作量吧。