轉載地址: http://blog.csdn.net/leishangwen/article/details/46604819git
最近大概閱讀了一下UCB發佈的Rocket處理器的源碼,對源代碼各個文件的功能有了一些大體的瞭解,Mark一下。github
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 | 定義了一些對象,提供了一些工具函數,好比:類型轉換。 |
以上是我的的理解,歡迎你們提出異議,共同討論啊。工具