meton-robean
meton-robean
[slides链接](http://117.128.6.21/cache/eyeriss.mit.edu/2019_neurips_tutorial.pdf?ich_args2=526-06113205060278_e0b61138dc2d908aa0766d50302e6d8a_10001002_9c896324d5cbf0d49239518939a83798_92e0a859ed6aa28355c3deea32562911) [知乎介绍](https://zhuanlan.zhihu.com/p/96807270)
### 概述: - rocket流水线分为5个阶段:IF, ID,EX, MEM, WB.五级顺序流水 - 控制流水线stall的有几个控制信号,take_pc_mem, take_pc_wb, killd, killx, killm等 - rocket处理stall的方式比较简单,主要通过replay方式重执行这种比较粗暴的方法
### rocket生成器内部结构简介 (这个gitbook还涉及其他方面,可以翻阅参考) https://chipyard.readthedocs.io/en/dev/Generators/Rocket-Chip.html 
这个在我的一个项目demo里面详细提到了整个流程,总的来说包括三步: - 使用chisel编写自己的加速器模块,进行单元测试 - 将加速器配置进rocket,这个在前面的**学习笔记3**有介绍,就是熟悉cake pattern - 使用c example跑测试例子 详细情况移步 https://github.com/meton-robean/Vector_MulAdd_Accelerator 这个项目demo实现了几个基于Rocc的加速器demo。
### 概述 拓展rocketchip时,经常需要将我们编写的设备或者加速器挂载到rocket的总线上,这个过程包含了: - **module的编写** - **module封装成trait** - **将我们的traits混入rocket system变成一个整体(其实是编写module层面的TopWIthModule的配置class)** - **进一步生成rocket层面的顶层配置类** - **将配置class实例化后添加到rocket的默认配置之上** 这就是rocket的一种可拓展的模块化配置 编程模式,叫做**cake pattern** - 下面以挂载一个pwm外设模块为例: https://chipyard.readthedocs.io/en/dev/Customization/Adding-An-Accelerator.html#mmio-peripheral 这个例子详细讲解了cake pattern,值得参考学习
### Celerity core 大规模 risc-v cores集成 https://cseweb.ucsd.edu/~mbtaylor/papers/Celerity_CARRV_2017_slides.pdf 
**通过issue和README来记录日常学习研究笔记** 关注 机器学习系统,深度学习, LLVM,性能剖视, Linux操作系统内核 话题 关注 C/C++. JAVA. Python. Golang. Chisel. 编程语言话题
### 如何挂外设 https://chipyard.readthedocs.io/en/dev/Customization/Adding-An-Accelerator.html#mmio-peripheral  1.利用了regmap来进行外设的内存映射,外设这边的信息是存在寄存器的。 关于MMIO: > mmio设备就是指内存映射设备,例如网卡,cpu想配置网卡工作的话 首先需要往网卡的配置寄存器写入操作指示, 那cpu怎么访问网卡的寄存器呢? 方法就是mmio, 将寄存器映射成( mem addr-> reg field)的形式,之后 cpu就通过mem addr去访问网卡对应寄存器了 2. 这个例子详细的介绍一个设备如何实现, 包装, 挂载到相关总线,如何利用rocket的cake pattern编程模型来将你的模块挂载到rocketchip(从配置层面), 涉及trait的层层封装,以及顶层top文件的confg, 从这个例子可以类比出 其他加速器的实现-封装-配置的流程和原理,很有参考价值
一个简单示例: https://chipyard.readthedocs.io/en/dev/Customization/Adding-An-Accelerator.html#adding-a-dma-port