1

サイクル精度の高い RISC-V Rocket-chip C++ エミュレーターを使用して、小さなバイナリ ファイル (16 進数に変換) をシミュレートしようとしています。エミュレーターのビルド プロセスは成功し、make runは正しいテスト/ベンチマーク結果を生成します。

ただし、カスタム ソース コードをコンパイルしてシミュレートすると、ログ ファイルに大量の 000000... が出力されました。確かに、十分なサイクル カウントでこれらのログを確認しましたが、実行中に変更はありませんでした。シミュレーションを停止することなく、オペランド番号、inst、DASM などに 0000.. を出力し続けました。一部の例外は最初の数行です。以下を参照してください。

C0:          0 [0] pc=[00000002000] W[r 0=0000000000000048][0] R[r13=00000000003741c8] R[r28=36f000000000006c] inst=[a3c6f23b] DASM(a3c6f23b)
C0:          1 [0] pc=[00000002000] W[r 0=0000000000000048][0] R[r13=00000000003741c8] R[r28=36f000000000006c] inst=[a3c6f23b] DASM(a3c6f23b)
C0:          2 [0] pc=[00000002000] W[r 0=0000000000000048][0] R[r13=00000000003741c8] R[r28=36f000000000006c] inst=[a3c6f23b] DASM(a3c6f23b)
C0:          3 [0] pc=[00000002000] W[r 0=0000000000000048][0] R[r13=00000000003741c8] R[r28=36f000000000006c] inst=[a3c6f23b] DASM(a3c6f23b)
C0:          4 [0] pc=[00000002000] W[r 0=0000000000000048][0] R[r13=00000000003741c8] R[r28=36f000000000006c] inst=[a3c6f23b] DASM(a3c6f23b)
C0:          5 [0] pc=[00000002000] W[r 0=0000000000000000][0] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00000000] DASM(00000000)
repeating the last line 0000....

シミュレーションの途中で、pc は最終的に増加しますが、それでも 0000 を出力します.. 何度も何度も停止しませんでした。これが私が試したCソースコードとプロセスです。(また、他の多くのソースを試しました。)

int main(){
    int a=0, i;
    for (i=0; i<100; i++){
        a += 1;
    }
    return 0;
}

そして、コマンドリスト。

riscv-unknown-elf-gcc hello.c -o hello
elf2hex 16 16384 hello > hello.hex
emulator-DefaultCPPConfig +dramsim +max-cycles=100000000 +verbose +loadmem=hello.hex none 2> hello.out

シミュレーターは、変換された 16 進形式を正しく認識していないと思います。そのため、正しい命令ストリームをトリガーできません。誰でも助けることができますか?

ありがとう、

4

1 に答える 1