Rocket——外设扩展

发布时间 2023-04-28 00:54:13作者: Haowen_Zhao

之前曾分享过如何基于cake pattern在chipyard中添加自定义MMIO外设和ROCC加速器,那么如何在Rocket上添加GPIO,SPI,UART,I2C这些常规外设呢?用chipyard和rocket-chip哪个更方便呢?是时候做个总结了。

一,Rocket-chip 扩展外设

1,首先简单介绍下rocket架构

  •  Tile:一个单核系统,内部包含Rocket core,PTW,L1D,L1l,也可以包含自定义ROCC模块
  • L2bank:接收一级缓存数据和指令,介于一级缓存和主存之间
  • systembus:tilelink系统总线
  • memorybus:连接多个L2bank和TL2AXI接口
  • controlbus:用于连接bootrom,plic等控制模块
  • peripheryBus:连接其他通用外设
  • frontbus:用于连接DMA设备

rocket仓库下没有自带外设,需要重新写外设config在顶层继承。那么rocket中如何扩展外设呢?

2,rocket扩展外设

参照sifive/freedom: Source files for SiFive's Freedom platforms (github.com)

ucb-bar/chipyard at a3684d01dd57b871dc8f98e8f51e1907339bc179 (github.com)

搭建sifive+rocket-chip的外设扩展平台(待做)

 

 

 

二,利用chipyard扩展外设

可以看到chipyard/generator中包含rocket-chip和sifive-blocks,在/root/chipyard/generators/chipyard/src/main/scala/config/fragment中有外设模块接口

 在RocketConfigs.scala中有对应的config:

 sifive支持的外设有: