0%

开始做科研一直以来所有的心得,得到了很多人的帮助

阅读全文 »

To Do Lists

虚拟内存

为什么需要虚拟内存

  1. 对于 RAM 来说,应用太大(放不下):根据局部性原理,我们只把程序部分内容放入到 RAM 中就可以满足程序运行,具体实现有分段、分页两种手段
    • 分段:在 RAM 中为不同应用程序分配不同的连续内存空间,各个应用程序之间彼此互不干扰;缺点是会产生外部碎片
    • 分页:物理内存空间和虚拟内存空间都被分成很多页(比如 4kb)

TLB

Without TLB, we have to access the main memory twice to get the target content: the first access to get the target address, the second access to get the target content.

TLB Addressing

  1. Virtual Addressing: the CPU use the virtual address to access the data cache. Only when cache miss, the CPU access the TLB to try to get to missing data.
  2. Physical Addressing: each time, the CPU access the TLB first to get the data address, then use the data address to access the cache.

1 bit predictor
  • 分支预测器的作用
  • 主流的分支预测器
  • 开源项目中使用的分支预测器
阅读全文 »

RISC-V

Unix 环境下,RISC-V 工具链使用笔记,包括如下内容:

  1. RISC-V 编译工具:gcc, objdump, ...
  2. RISC-V 调试工具:spike, pk, openOCD, GDB, llvm
  3. RISC-V assemble
  4. Verilator: 编译工具,将 Verilog 编译成 C++文件和 Makefile, 结合 C++的 testbench,可以编译成可执行的测试文件
阅读全文 »

[TOC]

AXI 自定义指令

MCU配置ACC的两种方式

  1. 通过MCU直接配置加速器的配置寄存器:
    • MCU从Config Memory读取配置信息
    • MCU将配置信息写入到加速器内部的配置寄存器
  2. MCU通过自定义指令:
    • 自定义指令用于配置ACC的DMA控制器
      • 每一个ACC都有一个DMA
      • 从配置加速器寄存器的角度来看,DMA的效率更高、但是不够灵活
    • MCU用于配置ACC内部的DMA,增加DMA的灵活性
      • DMA搬运数据的起始地址
      • DMA搬运开始信号
    • 通过软件来执行自定义指令: 控制DMA -> 配置ACC
      • 对比LW指令没有明显的提升

加速器配置自定义指令集

硬件支持

  1. 修改MCU ID以译码该自定义指令
  2. 在MCU增加DMA模块(可以看作是MCU的协处理器)
    • DMA模块内部支持Operation FIFO用于存储所有的DMA操作(避免MCU Stall)
    • Operation Format
      • Length: 24 bits
      • Acc1: 4 bits
      • Acc2: 4 bits

软件支持

  1. 寻找可以自定义的编码空间

    • 上图展示了目前RISC-V的opcode字段的占用情况
    • custom-0, custom-1是官方推荐的自定义的编码空间,因此我们自定义执行的opcode采用custom-0编码,为0x0010111
  2. 自定义指令格式

    • 确定了opcode之后,还需要确定指令的编码格式,RISC-V一共有6种编码格式
    • 根据我们对该自定义指令的使用需求来确定编码格式:
      • U-Type是最适合的,但是U-Type在C程序里使用的时候不方便
      • R-Type在C程序里使用是最方便的
  3. 支持自定义指令集采用内联汇编的方法,具体有如下两种:

    • 利用.insn模板进行编程,该网页展示了各种类型的RISC-V指令的insn编码格式
    • 修改binutils让riscv gcc认识到这条指令
  4. 在c程序中使用该自定义令

AXI Master测试

写一次

image-20231229161242442

读一次

image-20231229230534620

读多次

image-20231229230044514

读写交织

image-20231229231439734

读写错误

image-20231230000039829

读写stall

image-20231230001138329

MCU未来工作计划

MCU本身

  1. 实现WFI
  2. 跟ACC集成测试(耗时较久):
    • 搭建SoC
    • 测试MCU跟ACC的交互

加速器控制通路(ACC control path)

  1. 实现自定义指令由MCU控制ACC的DMA控制器

加速器数据通路(ACC data path):

  • ACC之间存在数据依赖,ACC的输出会被别的ACC使用
  • 但是ACC之间彼此没有数据data path,体现为data path的不灵活
  • Q: MCU可以作为连接所有ACC的数据中枢?将ACC的输出搬运到另一个ACC的输入?

RV-32IM 每条指令的特性和功能, 寄存器的通用功能(register mapping)

阅读全文 »