卷积神经网络(CNN)电路设计规范(2026版)


1. 课程设计核心目标

面对不同的应用场景,基于提供的CNN网络架构、性能要求及芯片设计模板(含Verilog代码、逻辑综合和物理实现脚本),完成一款CNN加速器芯片全流程设计,覆盖架构设计、Verilog代码设计、逻辑仿真、性能分析、逻辑综合、时序分析与验证、物理设计全链路,并完成设计结果分析。

2. 设计核心指标与应用要求

2.1 基础功能要求

  1. 完整实现指定的CNN网络结构;
  2. 网络模型参数采用片上SRAM存储;
  3. 网络中间层计算结果可根据设计需求,采用片上SRAM或寄存器存储。
  4. 性能根据不同应用场景确定

2.2 通用评价指标

设计完成后,需从以下维度完成设计评估:
- 芯片功能完整性
- 芯片实时处理能力达标情况
- 乘累加电路的硬件利用率
- 芯片PPA指标(Performance or frequency, Power, Area)
- 芯片能效:每1W功耗可处理的输入特征图数量
- 芯片面效:每平方毫米面积可处理的输入特征图数量
- 输入/输出数据带宽及带宽利用效率

2.3 分场景设计要求与核心评价指标

本课程设计面向两种应用场景,自选一种实现。

场景一:边缘端应用场景

  1. 应用场景描述:面向边缘端硬件资源受限应用场景,基于现有芯片的设计模版,重复利用核心计算单元以降低计算单元数量,在牺牲一定延迟的情况下,实现硬件资源的压缩;
  2. 实时处理要求:每秒 100K 个输入特征图的处理能力(即 Speed = 100K,输入特征图尺寸\((1,30,10)\));
  3. 硬件压缩要求:芯片面积小于修改前芯片面积的 \(1/4\)
  4. 重点评价指标:芯片资源,\(\text{FoM} = 1/(\text{Power}\times \text{Area})\),单位\(1/(W\cdot \text{mm}^2)\)

场景二:高性能应用场景

  1. 应用场景描述:面向高实时性应用场景,基于现有芯片的设计模版,进一步提升芯片核心计算并行度,实现芯片性能的提升;
  2. 实时处理要求:每秒 1000K 个输入特征图的处理能力(即 Speed = 1000K,输入特征图尺寸\((1,30,10)\));
  3. 重点评价指标:芯片面效,\(\text{FoM} = \text{Speed}/\text{Area}\),单位\(1/\text{mm}^2\)

3. 目标CNN网络结构与层参数详解

3.1 网络整体说明

本次设计的 CNN 网络为语音关键词识别二分类网络,输入为语音 MFCC(Mel-Frequency Cepstral Coefficients) 特征图,输入尺寸为(1,30,10),三个维度分别对应通道数、特征图长度、特征图宽度
网络整体链路:
输入特征图 → Conv1 → Activation1(Relu) → Depthwise Conv → Activation2(Relu) → Pointwise Conv → Activation3(Relu) → Maxpool → Flatten → FC全连接层 → Sigmoid → 二分类输出

3.2 各网络层详细参数

(1) 第一卷积层 Conv(常规卷积)

  • 计算公式:
\[O[i][j][k]=\sum _{p=1}^{1}\sum _{m=1}^{11}\sum _{n=1}^{7}(I[p][j+m][k+n]\cdot W[i][p][m][n])+B[i]\]
  • 输入特征图I:尺寸(1,30,10),位宽INT8
  • 权重W:尺寸(32,1,11,7),位宽INT8
  • 偏置B:尺寸(32),位宽INT16
  • 输出特征图O:尺寸(32,20,4),输出图在计算过程
    中使用 INT32 保存,计算完成后重量化至 INT8,重量化过程见后文解释
  • 卷积参数:stride=1padding=0

(2) 激活层 Activation1(Relu)

  • 计算公式:
\[O[i][j][k]=Relu(I[i][j][k])=\max(I[i][j][k],0)\]
  • 输入特征图I:尺寸(32,20,4),位宽INT8
  • 输出特征图O:尺寸(32,20,4),位宽INT8

(3) 第二卷积层 Depthwise Conv(深度可分离卷积)

  • 计算公式:
\[O[i][j][k]=\sum _{m=1}^{3}\sum _{n=1}^{3}(I[i][j+m][k+n]\cdot W[i][1][m][n])+B[i]\]
  • 输入特征图I:尺寸(32,20,4),位宽INT8
  • 权重W:尺寸(32,1,3,3),位宽INT8
  • 偏置B:尺寸(32),位宽INT16
  • 输出特征图O:尺寸(32,18,2),输出图在计算过程
    中使用 INT32 保存,计算完成后重量化至 INT8,重量化过程见后文解释
  • 卷积参数:stride=1padding=0

(4) 激活层 Activation2(Relu)

  • 计算公式:
\[O[i][j][k]=Relu(I[i][j][k])=\max(I[i][j][k],0)\]
  • 输入特征图I:尺寸(32,18,2),位宽INT8
  • 输出特征图O:尺寸(32,18,2),位宽INT8

(5) 第三卷积层 Pointwise Conv(逐点卷积)

  • 计算公式:
\[O[i][j][k]=\sum _{p=1}^{32}(W[i][p][1][1]\cdot I[p][j][k])+B[i]\]
  • 输入特征图I:尺寸(32,18,2),位宽INT8
  • 权重W:尺寸(32,32,1,1),位宽INT8
  • 偏置B:尺寸(32),位宽INT16
  • 输出特征图O:尺寸(32,18,2),输出图在计算过程
    中使用 INT32 保存,计算完成后重量化至 INT8,重量化过程见后文解释
  • 卷积参数:stride=1padding=0

(6) 激活层 Activation3(Relu)

  • 计算公式:
\[O[i][j][k]=Relu(I[i][j][k])=\max(I[i][j][k],0)\]
  • 输入特征图I:尺寸(32,18,2),位宽INT8
  • 输出特征图O:尺寸(32,18,2),位宽INT8

(7) 池化层 Maxpool(最大值池化)

  • 计算公式:
\[O[i][j][k]=\max\left\{ I[i][2j][2k],I[i][2j-1][2k],I[i][2j][2k-1],I[i][2j-1][2k-1]\right\}\]
  • 输入特征图I:尺寸(32,18,2),位宽INT8
  • 输出特征图O:尺寸(32,9,1),位宽INT8
  • 池化参数:核尺寸(2,2)stride=2padding=0

(8) 展平层 Flatten

  • 计算公式:
\[O[32 \times (i-1)+j]=I[i][j][1]\]
  • 输入特征图I:尺寸(32,9,1),位宽INT8
  • 输出一维向量O:尺寸(288),位宽INT8

(9) 全连接层 FC

  • 计算公式:
\[O=W \cdot I+B\]
  • 输入向量I:尺寸(288,1),位宽INT8
  • 权重W:尺寸(2,288),位宽INT8
  • 偏置B:尺寸(2,1),位宽INT16
  • 输出向量O:尺寸(2,1),输出图在计算过程中使用 INT32 保存,计算完成后重量化至 INT8,重量化过程见后文解释

(10) 输出层 Sigmoid

  • 计算公式:
\[O[i]=1 /\left(1+e^{-(I[i] \cdot scale )}\right)\]
  • 输入向量I:尺寸(2),位宽INT8
  • 输出向量O:尺寸(2),位宽FP32
  • 参数说明:scale为FP32固定值,用于INT8输入反量化至FP32范围,固定网络下scale值固定;助教提供scale数值及\(I[i]\)\(O[i]\)的映射关系,可自主选择Sigmoid电路实现方式。

4. 核心算子与计算规范

4.1 常规卷积(Conv)

卷积核在特征图上滑动,完成卷积核与对应输入特征图数据的乘累加运算;卷积核通道数与输入特征图通道数一致,卷积核个数与输出特征图通道数一致。

4.2 深度可分离卷积(Depthwise Conv)

每个卷积核仅包含1个通道,卷积核个数与输入、输出特征图通道数一致;单通道内完成卷积计算,无跨通道信息融合,可大幅减少卷积核参数量。

4.3 逐点卷积(Pointwise Conv)

卷积核尺寸固定为1×1,卷积核通道数与输入特征图通道数一致,卷积核个数与输出特征图通道数一致;用于完成特征图跨通道的信息融合,通常与深度可分离卷积配合使用。

4.4 重量化操作规范

卷积层与全连接层输入、输出均为INT8位宽,计算中间值采用INT32位宽存储以避免精度损失,计算完成后需通过重量化将INT32结果转换为INT8输出。
1. 基础重量化公式:\(O_{INT8}=M \times I_{INT32}\)
其中,M为0~1之间的浮点数。
2. 定点化实现公式:\(M=2^{-n} \times M_0\)
其中,\(M_0\)为INT16定点数,\(2^{-n}\)可通过移位运算实现;每一层网络的重量化参数n与\(M_0\)固定,具体数值由助教提供。

5. 电路验证要求

  1. 需自主设计Testbench完成电路全功能验证;
  2. 助教提供网络所有权重、偏置参数;
  3. 助教提供指定输入下,网络每一层的参考输出结果,用于功能正确性对比验证。

6. 设计评价指标补充说明

  • 电路处理能力:定义为电路每秒钟能够处理的(1,30,10)规格输入特征图的个数;
  • 电路时钟频率、面积、功耗:均以物理设计完成后的最终结果为准。



Enjoy Reading This Article?

Here are some more articles you might like to read next: