一、 Rocket Chip
基本結構
Rocket Chip
Rocket Chip
是基于Chisel開發的一款開源SoC生成器(Generator),也即它自己其實并不是一款處理器。它根據不同的配置參數可以産生不同的處理器的RTL代碼,當配置參數确定之後,生成的才是一個真正的“處理器”。
從圖中可以看出,
Rocket Chip
有六個組成部分:
- A為
,用于生成處理器核,支援Rocket-core和BOOM兩種Core Generator
- B為
,包括L1 Cache和L2 CacheCache
- C為
,即Rocket的使用者自定義加速器接口,使用者可以使用Chisel自行編寫加速器挂載到Rocket-chip中RoCC
- D為
,一個處理器核和一個L1 Cache(包括指令Cache和資料Cache)構成一個Tile,在Rocket-chip中通過複用各種Tile建構一個多核(同構或異構)的體系Tile
- E為
,是UC Berkeley自己開發的片上總線,用于連接配接處理器、緩存和外設TileLink
- F為
,包括AMBA相容總線(AXI,AHB-Lite和APB)的發生器以及各種轉換器和控制器。Peripheral
上圖的具體示例包括了兩個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
實作,該實作具有順序執行的流水線,符合IEEE标準的浮點運算單元,多級cache,虛拟記憶體,以及其他相關子產品。RTL
- 另一個用途是把
當做**“函數庫”**來使用,隻複用其中的某個部分。例如伯克利的另一個項目Rocket Chip
(RISC-V的另一個亂序執行超标量實作)就把BOOM
當做子產品庫來使用,并隻重新實作了其中的Rocket Chip
和core
部分。cache
二、 Rocket Chip
工程目錄
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
目錄:該目錄包含兩種類型的子產品:
src\main\scala
①一種是工具utility,類似helper性質,用來幫助代碼實作,并不直接生成硬體。如:
- config —此實用程式包提供Scala接口,用于通過動态查找的參數化庫配置生成器。
- diplomacy —此實用程式包通過允許
(雙相硬體精化)擴充了Chisel,其中某些參數在子產品之間動态協商。two-phase hardware elaboration
是一種用于進階參數化的機制:它實作了子產品之間的參數協商,參數在子產品之間傳遞時可以根據需求協商與檢查,更加靈活且不容易出錯;還可以快速實作設計拓撲的參數化,使用verilog實作設計拓撲的參數化是非常困難的一件事,往往包含着大量的define,容易出錯,且寫起來困難。有關diplomacy的更多資訊,請參閱 這篇文章。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
依賴的其他庫如下:
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/