ResearchNote icon indicating copy to clipboard operation
ResearchNote copied to clipboard

rocketchip学习笔记3:如何添加设备(加速器),挂载流程:cake pattern 解析

Open meton-robean opened this issue 5 years ago • 7 comments

概述

拓展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,值得参考学习

meton-robean avatar Nov 30 '19 10:11 meton-robean

1.module的编写

image

  • 将我们实现的PWMModule(这里没展示实现代码)用TLRegisterRouter封装起来,这样PWMTL就相当于一个外设模块(自动实现了tilelink,并且是作为client node)

meton-robean avatar Nov 30 '19 10:11 meton-robean

2.module封装成trait

Selection_004 Selection_005

  • trait一般成对实现,命名上很有规律。

  • 其中HasPeripheryPWMTL将我们的外设module和pbus连接了

  • HasPeripheryPWMTLModuleImp定义了外设的一个输出(具体做什么要看你设备的需要了)

meton-robean avatar Nov 30 '19 10:11 meton-robean

3.将我们的traits混入rocket system变成一个整体

Selection_006

  • 也是成对出现

  • 前一步的trait混入这两个类

  • 其实是编写module层面的TopWIthModule的配置class,实例化后是一个封装了的lazy module

meton-robean avatar Nov 30 '19 10:11 meton-robean

4.进一步生成rocket层面的顶层配置类

Selection_007

  • 这次是rocket层面的配置类编写(封装累加了上一步的东西,像蛋糕一样)

  • 这里利用case模板匹配,这里的case本质上是偏函数(scala语法),这样做是为了在最顶层,也就是下一步可以自由的进行参数化配置(改一次参数配置,就可以通过隐式参数的方式传给下一级,直到最底层module,而不用到处改参数)

meton-robean avatar Nov 30 '19 10:11 meton-robean

5.将配置class实例化后添加到rocket的默认配置之上

Selection_008

  • 这是cake中的最顶层配置了

  • 当然这里没有在最顶层进行参数话设置,这个例子简单不需要。另一个例子,DMA例子:【链接】里面就在最顶层进行了参数配置: image

meton-robean avatar Nov 30 '19 10:11 meton-robean

更多例子也是遵循cake pattern这个模式

  • 添加DMA https://chipyard.readthedocs.io/en/dev/Customization/Adding-An-Accelerator.html#adding-a-dma-port

  • 添加rocc 加速器 https://chipyard.readthedocs.io/en/dev/Customization/Adding-An-Accelerator.html#adding-a-rocc-accelerator

meton-robean avatar Nov 30 '19 10:11 meton-robean

cake pattern更多资料

wiki:https://github.com/Intensivate/learning-journey/wiki/Cake-Pattern

meton-robean avatar Dec 03 '19 12:12 meton-robean