FPGA開発日記

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

LiteXによるSoC環境構築を試行する (15. Litescopeによるデバッグを試行する)

LiteXでどのように波形をダンプしてデバッグすればよいかを調査していたのだが、LiteXはブリッジを通じてホストに対して情報をダンプする機能が多く備わっているらしい。 これは便利だ。 まずは、RTLシミュレーション環境:litex_simで試してみる。

各種情報を出力するために、litex_simに以下のオプションをつけてシミュレーションを開始する。

litex_sim --with-etherbone --with-analyzer --sim-debug --csr-csv csr.csv

--with-ethrboneはEthernet経由でのデバッグ用ブリッジを設定する。 --with-analyzerによって、ILA(Integrated Logic Analyzer)のような指定の波形を取得できるようになる。 --sim-debugはILA向けのCSV情報を出力するのに必要。 --csr-csvは、取得可能なCSRレジスタの一覧を出力する。

これにより、シミュレーションを行っているディレクトリに、`analyzer

次に、DUTとホストを接続するためのlitex_serverを立ち上げる。

litex_server --udp --udp-ip=192.168.1.51 --debug
[CommUDP] ip: 192.168.1.51 / port: 1234 / tcp port: 1234

--udp-ipは正直よくわからない。とりあえずマニュアルに書いてあったのでこれをつかう。

では、まずはレジスタダンプをしてみよう。litex_cliコマンドで、レジスタをダンプしてみよう。

$ litex_cli --regs
0xf0000000 : 0x00000000 analyzer_mux_value
0xf0000004 : 0x00000000 analyzer_trigger_enable
...
0xf000400c : 0x00000001 uart_ev_status
0xf0004010 : 0x00000000 uart_ev_pending
0xf0004014 : 0x00000003 uart_ev_enable
0xf0004018 : 0x00000001 uart_txempty
0xf000401c : 0x00000000 uart_rxfull

波形を取得することもできる。litescope_cliを使用してみよう。

$ litescope_cli
No trigger, immediate capture.
[running]...
[uploading]...
[====================>] 100%
[writing to dump.vcd]...

一応これでVCDファイルが取得できる。GTKWaveにインポートすれば、こんな感じで、波形として表示できる。

トリガもできるようなので、cycにトリガをかけて波形を取得してみたいと思う。

$ litescope_cli -r simsoc_ibus_cyc # Rising Edge のCYC信号をトリガにして波形を取得する。

LiteXコンソール側で、何か文字を打ち込むと波形取得が始まる。

Exact: simsoc_ibus_cyc
Rising edge: simsoc_ibus_cyc
[running]...
[uploading]...
[====================>] 100%
[writing to dump.vcd]...

これはなかなか便利だ。自作CPU環境でも使えるようにしていきたい。