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環境でも使えるようにしていきたい。