4.5 KiB
4x4 矩阵乘法加速器技术说明
1. 计算规格
matmul_axi_slave 计算两个 4x4 无符号整数矩阵的乘积。输入元素宽度为 32 bit,输出
元素满足
C[i][j] = sum(A[i][k] * B[k][j]), k=0..3。
单个乘积为 64 bit,四项相加的最坏情况需要 66 bit,因此结果存储宽度固定为 66 bit。 每个输出元素通过三个 32 位字传输:低 32 位、高 32 位以及最高 2 位。该布局使 AXI 和 DMA 数据宽度保持 32 bit,同时不截断数学结果。
2. 接口组成
模块同时提供完整 AXI4 从接口、本地 DMA endpoint 和矩阵序列器直连控制接口。AXI
接口支持 INCR burst,可由 CPU 或普通 DMA 访问控制寄存器及双 Bank 数据窗口。本地
endpoint 直接接收 A/B 字或输出 C 字,不经过 Crossbar 的矩阵从端。序列器通过
mat_start_valid、mat_start_bank、mat_done_clear 和 mat_crc_clear 完成批处理控制。
矩阵 AXI 从端、endpoint、乘法流水线和 CRC 均使用 sys_clk/sys_resetn。DMA 和序列器也
位于 SYS 域,三者之间没有 CDC。CPU 发起的矩阵访问在 Crossbar 之前已经跨入 SYS 域。
matmul_intr 产生于 SYS 域,接入 CPU 前的时钟边界见独立时钟域说明。
两个 endpoint ready 在当前实现中恒为 1,表示矩阵本地缓冲不施加反压。上游仍必须只在 目标 Bank 空闲时写入,Bank 所有权由批处理序列器保证,而不是由加速器内部检查。
3. 寄存器与双 Bank 布局
| 偏移 | 内容 | 说明 |
|---|---|---|
0x000 |
CTRL | bit 0 请求 Bank 0,bit 1 请求 Bank 1 |
0x004 |
STATUS | busy、done、error;done/error 支持 W1C |
0x010 |
CRC32 | 返回 crc_reg XOR 0xffff_ffff;写入用于清零 CRC |
0x100 |
Bank 0 A | 16 个 32 位元素 |
0x140 |
Bank 0 B | 16 个 32 位元素 |
0x180 |
Bank 0 C | 16 个 66 位元素,共 48 个 32 位字 |
0x300 |
Bank 1 A | 16 个 32 位元素 |
0x340 |
Bank 1 B | 16 个 32 位元素 |
0x380 |
Bank 1 C | 16 个 66 位元素,共 48 个 32 位字 |
A 和 B 均按行优先方式存储。endpoint 写地址 0--15 对应 A,16--31 对应 B;endpoint 读地址 0--47 对应 C 的三字布局。双 Bank 允许一组数据计算时准备另一组,但计算核心 本身一次只处理一个 Bank。
4. 乘法数据通路
核心包含四个 pipelined_mult_32x32 实例,并使用 use_dsp="no" 属性约束综合器将乘法
映射到 LUT 逻辑。每个乘法器包含输入寄存、乘积寄存和输出寄存三个流水级,吞吐率为
每周期一个乘积。
计算核心每周期选择一个输出元素 (i,j),同时向四个乘法器发出
A[i][0..3] 与 B[0..3][j]。流水线对齐后,四个 64 位乘积采用成对加法生成一个
66 位结果。16 个输出元素连续发射,索引和 Bank 标识经过四级有效流水线与乘积对齐。
因此稳态吞吐为每周期一个 C 元素,而不是逐项乘加的四周期结构。
当 Bank 0 完成且 Bank 1 已有待处理请求时,状态机可直接调用 start_calc_bank 切换
Bank,不必先返回空闲态。最后一个有效结果写回时产生 calc_done_pulse,置位 done 并
驱动电平型中断。
5. CRC32 数据通路
CRC 使用 IEEE 802.3 反射多项式 0xedb8_8320,初值为 0xffff_ffff,软件读取时执行
末尾异或。每个 66 位 C 元素按低 32 位、高 32 位、最高 2 位补零三个字依次进入
crc32_word_next。CRC 在计算结果有效时更新,与 CPU 或 DMA 是否读取 C 无关。
这一选择使快速评测可以关闭结果写回,只保留硬件计算与 CRC。CRC 顺序严格跟随输出 元素发射顺序;整批任务开始时由序列器清零,Bank 切换和单组完成不会清零。
6. AXI 协议处理
写通道分别处理 AW、W 和 B 阶段,锁存 ID、burst 类型和起始地址;INCR burst 每次有效 W 握手后地址增加 4。读通道锁存 AR 参数并连续产生 R beat,最后一拍置位 RLAST。 无效写地址置位 error,响应码当前始终为 OKAY。输出 C 的组合读选择在当前地址上解析 元素号和三字片段。
7. 验证要求
功能验证需要逐元素与 128 bit 或更宽的软件参考模型比较,覆盖全零、全 0xffff_ffff、
单位矩阵和随机矩阵。协议验证需覆盖 AW/W 分离、R/B 反压、单 beat 与 burst、两个 Bank
连续请求和非法地址。CRC 应独立比较完整 192 字节输出序列。当前官方板测只读取最终
CRC,证明了长批处理的端到端一致性,但不能替代逐元素和 AXI 边界测试。