轉載地址: http://blog.csdn.net/leishangwen/article/details/46604819
最近大概閱讀了一下UCB發布的Rocket處理器的源碼,對源代碼各個文件的功能有了一些大致的了解,Mark一下。
Rocket是一款64bit的標量處理器,5級流水線,采用的是risc-v指令集,集成FPU,並有許多or1200沒有的特性,比如:無阻塞緩存、分支預測、返回地址堆棧、硬件頁表填充、cache支持ECC、支持多核等。
Rocket的源代碼是使用Chisel編寫的,Chisel是UCB發布的基於Scala的領域特定語言。可以在https://github.com/ucb-bar/rocket下載Rocket的全部源碼,共有20個文件,各個文件實現的功能大致如下:
arbiter.scala | 實現了一個固定優先級的仲裁器,編號越低,優先級越高 |
btb.scala | 實現了gshare,其中包含BTB(Branch Target Buffer)、BHT(Branch History Table),還實現了RAS(Return Address Stack) |
consts.scala | 定義了一些類似與宏定義的變臉 |
core.scala | 包含控制通路、數據通路,聯合起來為Core |
csr.scala | 實現了risc-v指令集中定義的Control Status Registers |
ctrl.scala | 實現了控制通路,其中就反映了5級流水線 |
decode.scala | 其中實現了對卡諾圖的化簡,在指令譯碼的時候會使用這里的功能 |
dpath.scala | 實現數據通路 |
depath_alu.scala | 實現了ALU |
fpu.scala | 實現了與第三方FPU的接口 |
icache.scala | 實現了指令一級緩存、取值,其中就使用了btb.scala中定義的分支預測技術 |
instructions.scala | 定義了Rocket處理器支持的所有指令 |
multiplier.scala | 實現了乘法、除法運算,其中乘法采用的是迭代法,除法采用的是試商法 |
nbdcache.scala | 實現了數據一級緩存,采用MSHR技術實現了無阻塞緩存 |
package.scala | 定義了復位地址、異常處理vector base address |
ptw.scala | 實現了硬件的page table walk,也就是硬件頁表填充 |
rocc.scala | 實現了一個加速協處理器,用來執行用戶自定義指令 |
tile.scala | Rocket處理器的頂層文件,其中連接Core、指令一級緩存、數據一級緩存、FPU等模塊 |
tlb.scala | 實現了傳輸后備緩沖器 |
util.scala | 定義了一些對象,提供了一些工具函數,比如:類型轉換。 |
以上是個人的理解,歡迎大家提出異議,共同討論啊。