RTL 设计:CNN 加速器
先学习卷积索引与整数数值约定,再学习流式窗口、PE 映射和分块。验证可运行参考及小型推理通路,同时区分数值、调度估计与流量。
你将学到什么
- 计算卷积形状与索引,包括步幅、填充、膨胀和通道
- 规定定点单位、比例、零点、累加器位宽、舍入和饱和
- 将直接卷积与 im2col 黄金模型比较
- 用行缓冲及传送接收生成窗口,并在暂停时保持状态
- 计算 PE 复用、分块存储、流量和调度假设
- 报告小型推理通路的数值结果与证据限制
开始之前
浏览器练习使用教学模型,不会编译或运行 HDL。如需单独运行提供的源代码,请遵循适用于您操作系统的 Digital Design Studio 指南,并在操作要求时登录。
安装与首次启动 ↗ · 下载 ↗课程大纲
- 推理约定
- 推理与训练概念
如果仅将输出通道从三个增加到六个,MAC 次数和已存储偏置的数量如何变化?
- 卷积与互相关概念
输入窗口 [1,2;4,5] 与卷积核 [1,0;0,-1] 的互相关结果和反转卷积核后的结果分别是多少?
- 形状、步幅、填充与膨胀概念
H=7、R=3、步幅 2、顶部填充 0、底部填充 1、膨胀率 2 时,计算 Ho 以及 h=1、r=2 对应的输入坐标。
- 检查:形状与 MAC 次数测验
N=1、C=2、H=W=5、M=3,使用 3×3 卷积核、步幅 2、四边填充均为一、膨胀率一。输出形状和 MAC 次数是多少?
- 数值约定
- 定点数据位与单位概念
在 F=4 下将 0.5 与 −1.25 相乘,再加入 F=8 下的偏置 0.25。累加器编码和真实值分别是多少?
- 比例因子与零点概念
sx=0.25、zx=128 时,填充编码和 q=132 的真实值是多少?sw=0.5 时,哪个偏置编码表示 0.75?
- 累加器位宽、舍入与饱和概念
十八位有符号数是否足以保存九个有符号 int8 乘积之和,且偏置为零?
- 实验:执行量化约定实验
使用相同的 uint8 设置量化 −40。编码和反量化值是多少?应添加哪项断言?
- 参考算子
- 直接卷积参考概念
输入 [2,3]、权重 [4,−1]、偏置为一时,如果每次输入通道迭代都加一次偏置,会得到什么错误结果?
- im2col 与矩阵乘法概念
H=W=4、C=1,使用无填充的 3×3 卷积核时,计算原始输入元素数、P、K 和展开窗口元素数。
- 连接 ReLU 与最大池化概念
uint8 输出零点为 100 时,对 [98,103;101,97] 应用 ReLU 和 2×2 最大池化。
- 检查:输出处理顺序测验
对累加器 [−1,2;3,−4] 依次应用乘数 0.5、zy=0、最近偶数舍入、int8 饱和、ReLU 和 2×2 最大池化。最终编码是多少?
- 流式窗口生成
- 行缓冲与 3×3 窗口概念
W=8、H=6 时,计算存储槽数、首个有效的已接收输入索引和窗口总数。
- Ready/valid 与停顿状态概念
输出级保持 A,out_ready=0,同时输入 B 有效。下一个时钟沿,该级和生产方必须怎样处理?
- 实验:暂停后仍保持正确的窗口实验
如果改为暂停周期零、一、二,且最终接收全部输入,窗口值或数量会改变吗?总周期数是多少?
- 检查:首个窗口时序测验
4×4、宽度四、无填充的 3×3 生成器在前四周期不接收输入,之后每周期接收一个像素。首个窗口的已接收输入索引和实际周期分别是多少?两者都从零计数。
- 映射到 PE 与存储器
- PE、数据流与 MAC 复用概念
将 P=3、M=2、K=8 映射到四个输出驻留型 PE。不计写入时,MAC 周期数和有效 MAC 槽利用率是多少?
- 分块、重叠边缘与部分和概念
Th=Tw=2、Tc=1、Tm=2,使用 3×3 卷积核、步幅二、膨胀率一时,计算单缓冲输入/权重/32 位和/偏置字节数。
- 带宽与计算界限概念
1152 次 MAC、224 字节,使用八个 PE,但带宽仍为 0.5 字节/周期。完全重叠时的下界是多少?
- 调度、尾部与双缓冲概念
K=10、四个输出、三个 PE,每个输出增加一个额外周期时,计算模型周期数和仅 MAC 的利用率。
- 验证与可测量的综合项目
- 黄金模型与故障分类概念
参考 [37,47;67,77] 与 [38,48;68,78] 不同。应先检查什么,记录什么?
- 实验:检验边界情况实验
在填充测试数据中,将所有卷积核权重替换为一。首个输出是多少?为什么只测试中心不够?
- 综合项目:小型推理通路与报告实验
保持 K=9、四个输出、每个输出一个额外周期,但使用三个 PE。模型总周期数和仅 MAC 槽利用率是多少?
- 最终检查:声明与证据测验
综合项目的 Node 运行验证了数值一致、36 次 MAC、24 周期调度模型和 90% 的 MAC 槽使用率。哪项完成声明准确?