FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

XmingよりもVCXsrvのほうが断然使いやすいので移行する

VirtualBoxなどで仮想マシンを作り、Puttyなどでコマンドラインから接続していてXを立ち上げる場合、Xサーバを立ち上げてWindowsGUIを転送する必要がある。

WindowsにおいてフリーのXサーバといえば、Xmingしか知らなかったが、ひょんなことからVCXSrvを見つけた。 VCXSrvのほうが断然使いやすいのでおススメしたい。

  • Xmingの欠点

    • ウィンドウを複数立ち上げた場合に、タスクバーに表示されるアイコンが全部同じなので分かりにくい。
    • Emacsなど、起動時間が遅い

例えば、EmacsとGeditを立ち上げた場合、

f:id:msyksphinz:20170523214018p:plain

f:id:msyksphinz:20170523214049p:plain

これらの欠点を、VCXSrvは全部解消してくれた。

sourceforge.net

f:id:msyksphinz:20170523214533p:plain

f:id:msyksphinz:20170523214636p:plain

ウィンドウの立ち上げ時間も早く、タスクバーも別々に表示してくれるので非常に便利だ。もう会社の環境も全部これにしよう。

RISC-V RocketコアとBOOMコアでサポートされているISAの違い

f:id:msyksphinz:20170325154038p:plain

msyksphinz.hatenablog.com

前回BOOMコアでRTLシミュレーションを行おうとしてRTLシミュレーションエラーになってしまっていたのだが、どうしてもエラーの理由が分からず、まさかと思いriscv-toolsをboomのブランチでリコンパイルして動作させてみた結果、動いてしまった。

つまり、現在私の環境には、

  • /home/msyksphinz/riscv : RocketChipシミュレーションプログラム・コンパイル用のgcc
  • /home/msyksphinz/riscv-boom : BOOMコアシミュレーションプログラム・コンパイル用のgcc

が存在していることになる。なんだこれは!

が、逆アセンブルしてみてすぐに分かった。そうか、BOOMプロセッサはCompressed ISAをサポートしていないんだ。

  • RocketChip用リポジトリgccでビルドした場合のdhrystoneスタートアップコード
セクション .text.init の逆アセンブル:

0000000080000000 <_start>:
    80000000:   4081                    li      ra,0
    80000002:   4101                    li      sp,0
    80000004:   4181                    li      gp,0
    80000006:   4201                    li      tp,0
    80000008:   4281                    li      t0,0
    8000000a:   4301                    li      t1,0
...
  • BOOM用リポジトリgccでビルドした場合のdhrystoneスタートアップコード
セクション .text.init の逆アセンブル:

0000000080000000 <_start>:
    80000000:   00000297                auipc   t0,0x0
    80000004:   0d828293                addi    t0,t0,216 # 800000d8 <trap_entry>
    80000008:   30529073                csrw    mtvec,t0
    8000000c:   00000093                li      ra,0
    80000010:   00000113                li      sp,0
    80000014:   00000193                li      gp,0
...

なるほど、RocketChipはRV64のCompressedまでサポートしているが、BOOMは4bype Instructionsに固定してあるのか。

RocketChipとBOOMの性能の違い

Coremarkのコンパイルまではまだ行っていないが、標準で添付されているベンチマークを使うとこれだけの差が現れた。

BOOM : matmul(cid, nc, 16, input1_data, input2_data, results_data); barrier(nc): 19292 cycles, 4.7 cycles/iter, 0.6 CPI
RocketChip matmul(cid, nc, 16, input1_data, input2_data, results_data); barrier(nc): 42136 cycles, 10.2 cycles/iter, 1.5 CPI

BOOMの性能はRocketChipの倍以上だな。

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #3)

前回の続き。

参考ページ。

yuki-sato.com

カスタムIPを接続する

作成したカスタムIPをインスタンスして、AXIポート、LED出力ポートと接続する。

myLEDカスタムIPにインスタンスとAXIポートの接続

まずはBlock Design上で作成したmyLEDIPを追加しよう。

f:id:msyksphinz:20170520020258p:plain

myLEDブロックがインスタンスされた。

f:id:msyksphinz:20170520020307p:plain

次にこのIPの接続を行う。”Run Connection Automation"を利用して接続しよう。特に設定は変えず、"OK"をクリックした。

f:id:msyksphinz:20170520020319p:plain

AXIポートに接続された。LED出力ポートの方は特に接続されていない。

f:id:msyksphinz:20170520020331p:plain

LED出力ポートを追加する

次にLED出力ポートを作成し、カスタムIPから接続する。

“Create Port"をクリックして、ウィンドウを出す。ポート名は”led”, 方向はもちろん"Output"、ビット幅は3:0とした。

f:id:msyksphinz:20170520020341p:plain

f:id:msyksphinz:20170520020401p:plain

これでled出力ポート(4bit)が作成された。後はmyLEDの出力から線をつなげる。

f:id:msyksphinz:20170520020411p:plain

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #2)

前回の続き。

参考サイト。

yuki-sato.com

IPに外部ポートと機能を追加する。

f:id:msyksphinz:20170520015313p:plain

AXIに接続されるIPは作成したが、まだ機能を追加していないのと、LEDと接続するポートが空いていないので、Verilogを記述してIPを改造する。

編集する必要のあるファイルは、

  • myLed_v1_0_S_AXI.v : 機能記述のVerilogファイル
  • myLED_V1.0.v : AXIラッパー

myLed_v1_0_S_AXI.v は、出力ポートの追加、

output wire [3:0] led,

と機能追加、

assign led = slv_reg0[3:0];

を記述した。

また、myLed_V1.0は、出力ポートの追加、

output [3:0]led,
...
.led(led),

を追加した。

Verilogファイルの修正が完了すると、"Merge changes from Customization Parameters Wizard"をクリックして、変更を反映させる。

f:id:msyksphinz:20170520015343p:plain

Packaging Stepsの欄から、”Ports and Interfaces"をクリックすると、追加したled[3:0]が追加されていることが分かる。

f:id:msyksphinz:20170520015351p:plain

最後に、"Review and Package"に移動して、”Re-Package IP"をクリックしてIPを再生成する。

f:id:msyksphinz:20170520015358p:plain

関連記事

msyksphinz.hatenablog.com

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #1)

ZedBoard上で動作するLinuxで、ZynqのPL部を制御する方法について調査していたところ、以下のページを発見した。

yuki-sato.com

Vivadoの立ち上げから、Linuxのビルド、そしてデバイスドライバの記述まで丁寧に解説してある。早速やってみよう。 このページでは対象としてZyboを使っているが、私はZyboを持っていないのでZedBoardに置き換えてやってみよう。

やりたいこと

  • ZedBoardのARM上でLinuxを動作させ、PL上に自分で作成したハードウェアを制御したい。
    • Vivadoでハードウェアプロジェクトの作成
    • カスタムハードウェアの追加
    • デバイスドライバの作成
    • ソフトウェアの記述

となるだろう。一つずつ、チュートリアルを見ながらやっていこう。

今回は、日記を執筆時点の最新ビルド環境であるVivado 2017.1を利用する。

Vivado 2017.1でZedBoardのハードウェアプロジェクトを作成する

まずはZedBoardで動作するハードウェアを作成しなければならないのだが、チュートリアルではZyboのプロジェクトを引っ張ってきている。

今回は、ZedBoardのプロジェクトが必要なので以下から取得してくる。

github.com

ただし、このプロジェクトはIPのバージョンなど2017.1には対応していないので、対応するバージョンに上げた手前味噌のリポジトリを利用しよう。

github.com

ビルドのVivado 2017.1でのプロジェクトのビルド方法は過去の日記を参照のこと。

adv7511のプロジェクトをビルドしてVivado 2017.1で開くと、以下のようになった。

f:id:msyksphinz:20170520014958p:plain

Project Settingから、IP Vendorの名前を"Digilent”に設定する。これは何の意味があるんだろう?

f:id:msyksphinz:20170520015014p:plain

Projectから、"Create and Package New IP" を選択する。

f:id:msyksphinz:20170520015026p:plain

IP作成ウィザードの開始

ここから、ZedBoardに接続されているLEDを制御するためのIPを作成する。

f:id:msyksphinz:20170520015036p:plain

AXI4のPeripheral Interfaceを作成するので、「Create AXI4 Peripheral」を選択する。

f:id:msyksphinz:20170520015046p:plain

IPの名前は適当に決めた。

f:id:msyksphinz:20170520015057p:plain

ポートの名前はS_AXI、TypeはAXI-Liteを利用することにする。データ幅は32bitだ。

f:id:msyksphinz:20170520015106p:plain

次のステップとして、「Edit IP」を選択し、ウィザードを終了する。

f:id:msyksphinz:20170520015116p:plain

関連記事

msyksphinz.hatenablog.com

64bit BOOMプロセッサでCoremarkを動作させたい

RISC-V環境であるE51プロセッサを動作させたときに、Coremarkの公称値と実際の値が少し違っているのを見つけた。

msyksphinz.hatenablog.com

はてさて、実際にはどっちが正しいのだろう?RTLでCoremarkをシミュレーションすることはできないだろうか?Coremarkをrocket-chipの環境で動作させるためにはどのようにしたらよいのだろう。

このエントリの情報は古い。以下の記事にてRTLシミュレーションでCoremarkを計測した。

msyksphinz.hatenablog.com

64bit版Coremarkバイナリの生成

BOOMのRTLで実行できるためのバイナリを生成するためには、ちょっとした手順が必要だ。

普段はどのようにリグレッションを行っているかというと、riscv-testsにベンチマークテストパタンとコンパイル方法が記述されており、

github.com

riscv64-unknown-elf-gcc \
    -T ./common/test.ld 
    -I ./../env -I./common -I./median -I./qsort -I./rsort -I./towers -I./vvadd -I./multiply -I./mm -I./dhrystone -I./spmv -I./mt-vvadd -I./mt-matmul  
    dhrystone_main.o  dhrystone.o  syscalls.o  crt.o \
    -o dhrystone.riscv \
    -nostdlib -nostartfiles -ffast-math -lgcc

riscv64-unknown-elf-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.text.startup --section=.data dhrystone.riscv > dhrystone.riscv.dump

ということで、リンカスクリプトとしてtest.ldシステムコール系としてsyscalls.oを使っている。

同じ要領でCoremarkもコンパイルできるだろうか。

Coremarkをriscv-testsの環境でコンパイルしてみる

freedom-e-sdkのCoremarkコンパイル用のディレクトリに移動して、以下のようにしてコマンドを叩いてみた。

 /home/msyksphinz/work/freedom-e-sdk/work/build/riscv-gnu-toolchain/riscv64-unknown-elf/prefix/bin/riscv64-unknown-elf-gcc -O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 -falign-functions=4 -falign-jumps=4 -falign-loops=4 -DFLAGS_STR=\""-O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 -falign-functions=4 -falign-jumps=4 -falign-loops=4"\" -DITERATIONS=1 -DPERFORMANCE_RUN=1 -g -march=rv64imac -mabi=lp64 -mcmodel=medany -I/home/msyksphinz/work/freedom-e-sdk/bsp/include -I/home/msyksphinz/work/freedom-e-sdk/bsp/drivers/ -I/home/msyksphinz/work/freedom-e-sdk/bsp/env -I/home/msyksphinz/work/freedom-e-sdk/bsp/env/coreplexip-e51-arty /home/msyksphinz/work/freedom-e-sdk/bsp/env/entry.o core_list_join.o core_main.o core_matrix.o core_state.o core_util.o core_portme.o -L/home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/ /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/syscalls.o   -o coremark -Wl,--wrap=malloc -Wl,--wrap=free -Wl,--wrap=open -Wl,--wrap=lseek -Wl,--wrap=read -Wl,--wrap=write -Wl,--wrap=fstat -Wl,--wrap=stat -Wl,--wrap=close -Wl,--wrap=link -Wl,--wrap=unlink -Wl,--wrap=execve -Wl,--wrap=fork -Wl,--wrap=getpid -Wl,--wrap=kill -Wl,--wrap=wait -Wl,--wrap=isatty -Wl,--wrap=times -Wl,--wrap=sbrk -Wl,--wrap=_exit -L. -Wl,--start-group -lwrap -lc -Wl,--end-group -T /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/common/test.ld -nostartfiles -L/home/msyksphinz/work/freedom-e-sdk/bsp/env

以下のようなエラーが出た。どうやらターゲットの種類が少し違っているようだ。

/home/msyksphinz/work/freedom-e-sdk/work/build/riscv-gnu-toolchain/riscv64-unknown-elf/prefix/lib/gcc/riscv64-unknown-elf/7.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/syscalls.o: can't link hard-float modules with soft-float modules
/home/msyksphinz/work/freedom-e-sdk/work/build/riscv-gnu-toolchain/riscv64-unknown-elf/prefix/lib/gcc/riscv64-unknown-elf/7.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/syscalls.o のターゲット特有データの併合に失敗しました
/home/msyksphinz/work/freedom-e-sdk/work/build/riscv-gnu-toolchain/riscv64-unknown-elf/prefix/lib/gcc/riscv64-unknown-elf/7.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks//crt.o: can't link hard-float modules with soft-float modules
/home/msyksphinz/work/freedom-e-sdk/work/build/riscv-gnu-toolchain/riscv64-unknown-elf/prefix/lib/gcc/riscv64-unknown-elf/7.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks//crt.o のターゲット特有データの併合に失敗しました
collect2: error: ld returned 1 exit status

おそらく syscalls.o のターゲットが異なっていると思うので、以下のようにriscv-tests内のベンチマークコンパイルMakefileを修正してみる。

diff --git a/benchmarks/Makefile b/benchmarks/Makefile
index bc17927..04878d4 100644
--- a/benchmarks/Makefile
+++ b/benchmarks/Makefile
@@ -50,7 +50,7 @@ HOST_COMP = gcc $(HOST_OPTS)

 RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
 RISCV_GCC ?= $(RISCV_PREFIX)gcc
-RISCV_GCC_OPTS ?= -mcmodel=medany -static -std=gnu99 -O2 -ffast-math -fno-common -fno-builtin-printf
+RISCV_GCC_OPTS ?= -mcmodel=medany -static -std=gnu99 -O2 -ffast-math -fno-common -fno-builtin-printf -march=rv64imac -mabi=lp64
 RISCV_LINK ?= $(RISCV_GCC) -T $(src_dir)/common/test.ld $(incs)
 RISCV_LINK_MT ?= $(RISCV_GCC) -T $(src_dir)/common/test-mt.ld
 RISCV_LINK_OPTS ?= -nostdlib -nostartfiles -ffast-math -lgcc

これで再度コンパイルすると、エラーは発生するが syscalls.o は作成されているようだ。

/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(adddf3.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(adddf3.o) のターゲット特有データの併合に失敗しました
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(gedf2.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(gedf2.o) のターゲット特有データの併合に失敗しました
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(muldf3.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(muldf3.o) のターゲット特有データの併合に失敗しました
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(subdf3.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(subdf3.o) のターゲット特有データの併合に失敗しました
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(floatundidf.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(floatundidf.o) のターゲット特有データの併合に失敗しました
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(_clzsi2.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(_clzsi2.o) のターゲット特有データの併合に失敗しました
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(_clz.o): can't link hard-float modules with soft-float modules
/home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/../../../../riscv64-unknown-elf/bin/ld: ファイル /home/msyksphinz/riscv/lib/gcc/riscv64-unknown-elf/6.1.0/libgcc.a(_clz.o) のターゲット特有データの併合に失敗しました

以下のようにして再度Coremarkをコンパイルしてみると、エラー無くコンパイルできた。

${REPO_FREEDOM}/work/build/riscv-gnu-toolchain/riscv64-unknown-elf/prefix/bin/riscv64-unknown-elf-gcc \
    -O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 \
    -falign-functions=4 -falign-jumps=4 -falign-loops=4 \
    -DFLAGS_STR=\""-O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 -falign-functions=4 -falign-jumps=4 -falign-loops=4"\" \
    -DITERATIONS=1 -DPERFORMANCE_RUN=1 -g -march=rv64imac -mabi=lp64 -mcmodel=medany \
    -I${REPO_FREEDOM}/bsp/include -I${REPO_FREEDOM}/bsp/drivers/ -I${REPO_FREEDOM}/bsp/env -I${REPO_FREEDOM}/bsp/env/coreplexip-e51-arty \
    ${REPO_FREEDOM}/bsp/env/entry.o \
    core_list_join.o core_main.o core_matrix.o core_state.o core_util.o core_portme.o \
    -L/home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/ \
    /home/msyksphinz/work/riscv-tools/riscv-tests/benchmarks/syscalls.o \
    -o coremark \
    -Wl,--wrap=malloc -Wl,--wrap=free -Wl,--wrap=open -Wl,--wrap=lseek -Wl,--wrap=read -Wl,--wrap=write \
    -Wl,--wrap=fstat -Wl,--wrap=stat -Wl,--wrap=close -Wl,--wrap=link -Wl,--wrap=unlink -Wl,--wrap=execve \
    -Wl,--wrap=fork -Wl,--wrap=getpid -Wl,--wrap=kill -Wl,--wrap=wait -Wl,--wrap=isatty -Wl,--wrap=times \
    -Wl,--wrap=sbrk -Wl,--wrap=_exit -L. -Wl,--start-group -lwrap -lc -Wl,--end-group \
    -T ${REPO_RISCV_TESTS}/benchmarks/common/test.ld -nostartfiles -L${REPO_FREEDOM}/bsp/env

RISC-V ISS Spikeでシミュレーション

RISC-VのISSであるSpikeでシミュレーションを行ってみると、以下のようにして実行されていることが分かる。 最後まで到達したから間違いはなさそうかな。

spike -l output/coremark.riscv &> output/coremark.riscv.spike.log

BOOMコアでRTLシミュレーション

同様にBOOMコアで実行してみたのだが、途中でPipelineがHungしてしまった。 メモリストアのところで落ちてしまった。何が悪いのだろうか?

$ make output/coremark.riscv.out CONFIG=BOOMConfig
Assertion failed: Pipeline has hung.
    at core.scala:833 assert (!(idle_cycles.value(13)), "Pipeline has hung.")

$ ../boom/util/pipeview-helper.py -f output/coremark.riscv.out > cleaned_trace.out && ~/work/gem5/util/o3-pipeview.py -o pipeview.out --color cleaned_trace.out

2017/05/23追記:RocketChipとBOOMではソフトウェアのバイナリが異なる。BOOMはCompressedISAをサポートしていないようだ。

msyksphinz.hatenablog.com

2017/05/20追記、よく見てみたらRocketを作成する際にメモリマップなどのコンフィグレーションが表示されていた。

ram {
  0 {
  addr 0x80000000;
  size 0x10000000;
  };
};
plic {
  priority 0xc000000;
  pending 0xc001000;
  ndevs 2;
};
rtc {
  addr 0x200bff8;
};
core {
  0 {
    0 {
      isa rv64imafds;
      timecmp 0x2004000;
      ipi 0x2000000;
      plic {
        m {
         ie 0xc002000;
         thresh 0xc200000;
         claim 0xc200004;
        };
        s {
         ie 0xc002080;
         thresh 0xc201000;
         claim 0xc201004;
        };
      };
    };
  };
};
plic {
  addr 0xc000000;
  size 0x4000000;
}
ExampleRocketTop {
  addr 0x60000000;
  size 0x20000000;
}
debug {
  addr 0x0;
  size 0x1000;
}
ExampleRocketTop {
  addr 0x80000000;
  size 0x10000000;
}
zeros_0 {
  addr 0xa000000;
  size 0x2000000;
}
clint {
  addr 0x2000000;
  size 0x10000;
}
bootrom {
  addr 0x1000;
  size 0x1000;
}

関連記事

以下の記事にてCoremarkの動作に成功した。

msyksphinz.hatenablog.com