【Rocket-chip 4】Emulator的使用 2

前言

上一節的內容只是跑了個流程,其中每一步到底是在幹什麼當時我也不是很明白。
稍微研究了一下Assembly Source Code,在此做個記錄。還有些問題沒解決就先記下來。

Assembly Source Code

存儲位置

首先按順序來看我們之前跑過的指令:

make -jN run-asm-tests

這條是在跑Assembly Source Code, 它們的文件存儲在~/rocket-tools/riscv-tests/isa內,這些文件的通過文件名按下表分類:

TVM Name Description
rv32ui RV32 user-level, integer only
rv32si RV32 supervisor-level, integer only
rv64ui RV64 user-level, integer only
rv64uf RV64 user-level, integer and floating-point
rv64uv RV64 user-level, integer, floating-point, and vector
rv64si RV64 supervisor-level, integer only
rv64sv RV64 supervisor-level, integer and vector

彙編代碼文件分析

點進去能看到一些add, addi等彙編文件,我們以~/rv64ui/add.S文件爲例,簡單分析一下:
首先使用了兩個庫以及執行了兩條指令:
add.S
RVTEST_RV64U和RVTEST_CODE_BEGIN指令是在依賴的~/rocket-chip/rocket-tools/riscv-tests/env/h/riscv_test.h庫中定義的,前者進行簡單的初始化,後者在進行reset vector等等操作。

緊接着的測試語句:
在這裏插入圖片描述
是在~/rocket-chip/rocket-tools/riscv-tests/isa/macros/scalar/test_macros.h中定義的:
TEST_RR_OP
通過類似這種語句來驗證add指令的正確性。

反彙編文件&日誌文件

當然我們也可以不直接跑完~/rocket-tools/riscv-tests/isa文件夾內所有的彙編程序,通過下述指令可以只跑我們剛纔所提到的add指令的測試。

./emulator-freechips.rocketchip.system-DefaultConfig $RISCV/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-p-add

在~/riscv-tools/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-p-add.dump
查看反彙編文件。下圖是文件的初始指令,它存儲在pc=[8000000]的地方,然後跳轉至下一條指令在pc=[8000004c]…
反彙編文件
同時我們還可以通過下述指令查看詳細日誌文件,就像上一節對hello world程序所做的那樣:

#64-bit
./emulator-freechips.rocketchip.system-DefaultConfig +verbose $RISCV/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-p-add 2>&1 | spike-dasm > add.log  
#32-bit
./emulator-freechips.rocketchip.system-DefaultRV32Config +verbose $RISCV/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-p-add 2>&1 | spike-dasm > add.log  

其中一開始先進行~/rocket-chip/bootrom/bootrom.S中的初始化指令,緊接是debug地址的指令,然後纔在 pc=[0000000080000000] 進行我們自己的程序.如果使用的是32-bit的指令,則在pc=[80000000] 的地方可以找到我們的指令:
log
可以看到這裏執行的指令可以和我們在反彙編文件中看到的一致。
[ 1 ]代表指令執行的週期,[ 0 ]代表等待?
[ 1 ]代表指令有效,[ 0 ]代表無效。

小注釋

上面提到了64-bit和32-bit, 如果想使用32-bit可以在~rocket-chip/emulator文件夾下的終端中中鍵入下述指令,然後就可以使用了。

make CONFIG=DefaultRV32Config

後記

真的要暴風感謝學長的幫助啊,都是二十多歲的人差距怎麼就這麼大呢…
如果不出意外後面應該還有一篇Emulator3來講講C Code使用Emulator, 除非和這一篇的內容差不多,那我到時候就直接並進來好了。

爲了截圖用Ubuntu寫Markdown是真的麻煩

最後恭喜下國代噢!

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 831
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章