天天看點

RISC-V SoC生成器---Rocket Chip介紹

一、

Rocket Chip

基本結構

Rocket Chip

是基于Chisel開發的一款開源SoC生成器(Generator),也即它自己其實并不是一款處理器。它根據不同的配置參數可以産生不同的處理器的RTL代碼,當配置參數确定之後,生成的才是一個真正的“處理器”。

RISC-V SoC生成器---Rocket Chip介紹

從圖中可以看出,

Rocket Chip

有六個組成部分:

  • A為

    Core Generator

    ,用于生成處理器核,支援Rocket-core和BOOM兩種
  • B為

    Cache

    ,包括L1 Cache和L2 Cache
  • C為

    RoCC

    ,即Rocket的使用者自定義加速器接口,使用者可以使用Chisel自行編寫加速器挂載到Rocket-chip中
  • D為

    Tile

    ,一個處理器核和一個L1 Cache(包括指令Cache和資料Cache)構成一個Tile,在Rocket-chip中通過複用各種Tile建構一個多核(同構或異構)的體系
  • E為

    TileLink

    ,是UC Berkeley自己開發的片上總線,用于連接配接處理器、緩存和外設
  • F為

    Peripheral

    ,包括AMBA相容總線(AXI,AHB-Lite和APB)的發生器以及各種轉換器和控制器。

上圖的具體示例包括了兩個Tile,這些Tile連接配接到一個

4-bank L2 Cache

,該緩存本身通過

AXI

互連連接配接到外部I/O和存儲系統。

  • Tile 1

    内是一個亂序的

    BOOM

    核心,它具有

    FPU

    L1

    指令和資料緩存以及實作

    RoCC

    接口的加速器。
  • Tile 2

    Tile 1

    類似,但是它使用的是順序執行的

    Rocket-core

    核心,并且具有不同的

    L1

    資料緩存參數。

Rocket Chip

有兩個主要的用途:

  • 第一個是它可以用來生成

    RISC-V

    RTL

    實作,該實作具有順序執行的流水線,符合IEEE标準的浮點運算單元,多級cache,虛拟記憶體,以及其他相關子產品。
  • 另一個用途是把

    Rocket Chip

    當做**“函數庫”**來使用,隻複用其中的某個部分。例如伯克利的另一個項目

    BOOM

    (RISC-V的另一個亂序執行超标量實作)就把

    Rocket Chip

    當做子產品庫來使用,并隻重新實作了其中的

    core

    cache

    部分。

二、

Rocket Chip

工程目錄

  • bootrom —包含第一階段bootloader的源代碼。
  • docs —代碼庫特定部分的文檔、教程等。
  • emulator —編譯和運作Verilator仿真的目錄。
  • src\main\resources\csrc —用于Verilator仿真的C源代碼。
  • regression —定義連續內建和nightly regression套件。
  • scripts —用于解析模拟輸出或操作源檔案内容的實用程式。
  • vsim —編譯和運作Synopsys VCS仿真的目錄。
  • src\main\resources\vsrc —包含interfaces、harnesses 和 VPI的Verilog源。
1、

src\main\scala

目錄:該目錄包含兩種類型的子產品:

①一種是工具utility,類似helper性質,用來幫助代碼實作,并不直接生成硬體。如:

  • config —此實用程式包提供Scala接口,用于通過動态查找的參數化庫配置生成器。
  • diplomacy —此實用程式包通過允許

    two-phase hardware elaboration

    (雙相硬體精化)擴充了Chisel,其中某些參數在子產品之間動态協商。

    diplomacy

    是一種用于進階參數化的機制:它實作了子產品之間的參數協商,參數在子產品之間傳遞時可以根據需求協商與檢查,更加靈活且不容易出錯;還可以快速實作設計拓撲的參數化,使用verilog實作設計拓撲的參數化是非常困難的一件事,往往包含着大量的define,容易出錯,且寫起來困難。有關diplomacy的更多資訊,請參閱 這篇文章。
  • regmapper —該實用程式包生成具有标準化接口的從裝置,用于通路其記憶體映射寄存器。
  • system —調用其他各種子產品,構造可配置的系統。
  • unittest —可綜合的單元測試代碼的架構。注意,這與Chisel的tester架構完全不同。

②另一種是硬體子產品的生成器。如:

  • amba —這個RTL包使用diplomacy機制生成AMBA協定的總線實作,包括AXI4、AHB lite和APB。
  • devices —這個RTL包包含了各種外設的實作,它包括調試子產品和各種TL(UC Berkeley自己開發的片上總線協定)從機(外設做從機)。
  • groundtest —這個RTL包生成可綜合的硬體測試器,這些測試器發出随機記憶體通路流,以便對非核心記憶體層次結構進行壓力測試。
  • interrupts —使用diplomacy實作的中斷邏輯。
  • jtag —這個RTL包提供了生成JTAG總線接口的定義。
  • rocket —該RTL包生成Rocket的 in-order 流水線核心、L1指令和資料緩存、FPU、RoCC協處理器等。
  • scie —用于在core流水線裡面添加自定義指令的接口。
  • subsystem —公共總線架構的實作,包含master和slave接口。它包含了一些系統中經常需要添加的子產品,使用者自己建立系統時可以繼承該子系統實作複用,這樣隻需要再手動添加其他子產品即可。
  • tile —可以包含

    core,FPU,L1緩存,RoCC協處理器

    等的容器。在

    Rocket-chip

    中通過複用各種

    Tile

    建構一個多核(同構或異構)的系統。
  • tilelink —這個RTL包使用diplomacy機制生成TileLink協定的總線實作。它還包含各種擴充卡和協定轉換器。
  • util —此實用程式包提供了多種常見的Scala和Chisel編寫的程式,可在多個其他包中被重複使用。如一些常見邏輯,ECC,arbiter, mux,随機數生成器等。
2、

Rocket Chip

依賴的其他庫如下:
  • chisel3 —(https://github.com/ucb-bar/chisel3):Rocket Chip生成器使用 Chisel3 産生RTL代碼。
  • firrtl (https://github.com/ucb-bar/firrtl):Firrtl (Flexible Internal Representation for RTL) RTL的中間語言表示,進而生成Verilog代碼,C代碼等最終代碼。
  • hardfloat(https://github.com/ucb-bar/berkeley-hardfloat):包含有生成符合IEEE 754-2008标準的參數化浮點單元的chisel代碼,這些浮點單元用于融合乘加運算、整數和浮點數之間的轉換以及不同精度的浮點轉換。
  • rocket-tools(https://github.com/freechipsproject/rocket-tools):RISC-V軟體工具鍊,該工具與此存儲庫中送出的RTL一起工作。
  • torture(https://github.com/ucb-bar/riscv-torture):該子產品用于生成和執行受限制的随機指令流,該指令流可用于對設計的核心部分和非核心部分進行壓力測試。

未完待續…

參考連結:

  • https://github.com/freechipsproject/rocket-chip
  • https://zhuanlan.zhihu.com/p/140360043
  • https://www.chiselchina.com/2019/06/10/Rocket-Chip/

繼續閱讀