riscv co-sim:riscv內核開發集成simulator仿真

riscv co-sim:riscv內核開發集成simulator仿真

1. 原理

a. 確定對比粒度

仿真對比的粒度需要simulator(eg.dromajo、spike)與RTL內核共同狀態確定

simulator與RTL存在的相同狀態(simulator維護的變量與RTL的寄存器狀態)越多,對比相可以越多,也越精細,同樣代價越更大

一般而言,我們維護程序在提交指令後可見的架構寄存器相同(僅在指令提交時進行對比),即可保證simulator與RTL內核行爲一致

如果simulator更加精細,流水線與RTL一致,每級流水線內都有相對應的狀態,我們可以做到每個週期都進行對比,比較對應流水線的狀態

RTL trace interface

將RTL內部需要跟蹤對比的信號拽到testbench中

關鍵信號 含義
valid 指令提交,架構寄存器已經更新
core input signals 輸入到core內進行計算處理的數據,即影響架構寄存器變化的信號
core state signals 架構寄存器或者其他需要與simulator對比的信號

simulator step interface

提取simulator中單步執行的核心函數,包括輸入的形式參數,返回的結果

DPI interface & TestBench

將simulator的單步執行接口使用DPI接口封裝,使TestBench可見

在TestBench中調度。監控valid信號,有效啓動捕獲RTL接口上的信號,並將信息通過DPI接口注入到simulator 單步執行接口中

simulator執行後將返回結果與RTL的結果進行對比,結果一致即可確認RTL與simulator行爲一致,如此循環往復對比

另外,一般而言,simulator與RTL是螺旋更迭的,可以不斷增加simulator與RTL對比的狀態,以使兩者有更多checkpoint,這樣在simulator上跑的所有case能快速在RTL環境移植與debug

b. 系統構建

simulator編譯生成共享庫文件

編譯simulator,獲得靜態鏈接庫(linux上一般以.a爲後綴)

emulator編譯

使用RTL仿真工具(如vcs、verilator、xrun等)將riscv內核、simulator編譯得到的靜態鏈接庫以及帶有對比的TestBench進行編譯,得到可執行的emulator

c. run tests

使用生成的emulator加載二進制文件進行RTL仿真與關鍵狀態對比

2. 案例:ibex

3. 案例:cva6

4. 案例:chipyard

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章