付杰周报-20231028
[TOC]
AXI 自定义指令
MCU配置ACC的两种方式
- 通过MCU直接配置加速器的配置寄存器:
- MCU从Config Memory读取配置信息
- MCU将配置信息写入到加速器内部的配置寄存器
- MCU通过自定义指令:
- 自定义指令用于配置ACC的DMA控制器
- 每一个ACC都有一个DMA
- 从配置加速器寄存器的角度来看,DMA的效率更高、但是不够灵活
- MCU用于配置ACC内部的DMA,增加DMA的灵活性
- DMA搬运数据的起始地址
- DMA搬运开始信号
- 通过软件来执行自定义指令: 控制DMA -> 配置ACC
- 对比LW指令没有明显的提升
- 自定义指令用于配置ACC的DMA控制器
加速器配置自定义指令集
硬件支持
- 修改MCU ID以译码该自定义指令
- 在MCU增加DMA模块(可以看作是MCU的协处理器)
- DMA模块内部支持Operation FIFO用于存储所有的DMA操作(避免MCU Stall)
- Operation Format
- Length: 24 bits
- Acc1: 4 bits
- Acc2: 4 bits
软件支持
寻找可以自定义的编码空间
- 上图展示了目前RISC-V的opcode字段的占用情况
- custom-0,
custom-1是官方推荐的自定义的编码空间,因此我们自定义执行的opcode采用custom-0编码,为
0x0010111
自定义指令格式
- 确定了opcode之后,还需要确定指令的编码格式,RISC-V一共有6种编码格式
- 根据我们对该自定义指令的使用需求来确定编码格式:
U-Type
是最适合的,但是U-Type
在C程序里使用的时候不方便R-Type
在C程序里使用是最方便的
支持自定义指令集采用内联汇编的方法,具体有如下两种:
- 利用.insn模板进行编程,该网页展示了各种类型的RISC-V指令的insn编码格式
- 修改
binutils
让riscv gcc认识到这条指令
在c程序中使用该自定义令
AXI Master测试
写一次
读一次
读多次
读写交织
读写错误
读写stall
MCU未来工作计划
MCU本身
- 实现WFI
- 跟ACC集成测试(耗时较久):
- 搭建SoC
- 测试MCU跟ACC的交互
加速器控制通路(ACC control path)
- 实现自定义指令由MCU控制ACC的DMA控制器
加速器数据通路(ACC data path):
- ACC之间存在数据依赖,ACC的输出会被别的ACC使用
- 但是ACC之间彼此没有数据data path,体现为data path的不灵活
- Q: MCU可以作为连接所有ACC的数据中枢?将ACC的输出搬运到另一个ACC的输入?