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文件爲例,簡單分析一下:
首先使用了兩個庫以及執行了兩條指令:
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中定義的:
通過類似這種語句來驗證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] 的地方可以找到我們的指令:
可以看到這裏執行的指令可以和我們在反彙編文件中看到的一致。
[ 1 ]代表指令執行的週期,[ 0 ]代表等待?
[ 1 ]代表指令有效,[ 0 ]代表無效。
小注釋
上面提到了64-bit和32-bit, 如果想使用32-bit可以在~rocket-chip/emulator文件夾下的終端中中鍵入下述指令,然後就可以使用了。
make CONFIG=DefaultRV32Config
後記
真的要暴風感謝學長的幫助啊,都是二十多歲的人差距怎麼就這麼大呢…
如果不出意外後面應該還有一篇Emulator3來講講C Code使用Emulator, 除非和這一篇的內容差不多,那我到時候就直接並進來好了。
爲了截圖用Ubuntu寫Markdown是真的麻煩
最後恭喜下國代噢!