This repository has been archived on 2026-08-21. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ciciec2026/doc/reports/system/modules/04_matmul_accelerator.md

4.5 KiB
Raw Blame History

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 边界测试。