ふんがのブログ

SLMLET2のGitHubをダウンロードしてシミュレーション環境を作る

2026-02-17 18:12:40
2026-02-20 19:21:41
目次

実行環境の準備

SLMLET2の設計データは、https://github.com/hungalab/slmlet2/

にあるが、このリポジトリは、zipにまとめてダウンロードする手が通用しない。これは、Pulp projectのリポジトリを階層的に使っているからで、

git clone --recurse-submodules git@github.com:hungalab/slmlet2.git

でやらないとうまく行かない。ただしこれはあらかじめSSHキーを登録しておく必要がある。

次にSLMLET2のシミュレーション用のファイルでGit中にないものがあり、これは

https://drive.google.com/drive/folders/1HTac4OwyX4Mvbmj5i5vb6oQqKY18ezlS

から以下のをとって来てlibの下に置いてください。

シミュレーションを行うには、RISC-Vのプログラムを設定する必要がある。このためにはコンパイルが必要だが、東大のマシンではOSの関係でRISC-Vのクロスコンパイラが使えないため、先の記事に従ってWSL上で作ったelfファイル(axi_uart.elf)をsimディレクトリに置く。シミュレーション用のMakefileは、今までと同様に、Web上のをダウンロードして、simディレクトリにあるのと入れ替える。さらに、これは若干疑念があるのだが、Web上のaxi_lite_mux.svとaxi_lite_demux.svをrtl/axi/src上の同じ名前のファイルと入れ替える。これで準備は完了である。

シミュレーション

simディレクトリにおいて

python3 make_prog.py axi_uart.elf prog.hex

によりシミュレーションに入力するプログラムprog.hexを作る。この際、boot.vhがsimディレクトリに、boot.hexがbootディレクトリになければならないので、なければWeb上からダウンロードする。最後にsimディレクトリで

make xmverilog_sim

と打ち込むとxcelliumのシミュレーションを実行してくれる。最初に

------------------------------------------------------------

,------. ,--. ,--.

| .--. ' ,---. ,--,--. | | ,---. ,---. `--' ,---.

| '--'.'| .-. |' ,-. | | | | .-. | .-. |,--.| .--'

| |\ \ ' '-' '\ '-' | | '--.' '-' ' '-' || |\ `--.

--' '--' ---' ----' -----' ---' - /--' `---'

`---'

RISC-V Platform Level Interrupt Controller

- Configuration Report -------------------------------------

Sources | Targets | Priority-lvl | Threshold? | Event-Cnt

5 | 1 | 8 | YES | 8

- Register Map ---------------------------------------------

Address Function Mapping

0x0000 Configuration TARGETS,SOURCES

0x0004 Configuration 15'h0,TH,PRIORITIES

0x0008 Edge/Level 27'h0, EL[4:0]

0x000c Interrupt Priority 12'h0,1'b0,P[4][2:0],1'b0,P[3][2:0],1'b0,P[2][2:0],1'b0,P[1][2:0],1'b0,P[0][2:0]

0x0010 Interrupt Enable 27'h0, IE[0][4:0]

0x0014 Priority Threshold 29'h0, Th[0][2:0]

0x0018 ID 29'h0, ID[0][2:0]

- End Configuration Report ---------------------------------

が出てきて、それから初期化時におけるメモリ等のエラーが山ほどでる。これは無視してよい。そのうち

Initialize by HUNGA: 0000ffff 0000ffff

Start signal is asserted

Start sending program data via UART................................................................................................................................................................................................................Boot finished!

が出てくる。実はboot.hex中のプログラムをUARTを経由して転送しているのをそのままシミュレーションしているので非常に大きな時間がかかる。その後、

Hello,World byPuts

が出てくる。ちなみにシミュレーションはこれからも続くが、あとは空回りなので中断してもいい。

結果の確認

Web上からwavego.shをダウンロードしてsim上で、source ./wavego.shと実行する。Cadence simvisionが上がるので、データベースを読み込み、任意の信号を観測できる。今回のHelloWourldは、UARTを使うのでこの入出力を観測したのが添付の図である。前半の長い期間はプログラムのブート用であり、最後のちょっとした部分がメッセージの出力に相当する。

この記事を書いた人

ふんが