FPGA開発日記

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

2024-04-01から1ヶ月間の記事一覧

LiteXのUARTハードウェアの確認 (Migenのソースコードを読む)

LiteXのUARTデバイスの挙動を確認したくて、Migenのソースコードをチェックしている: UARTのデバイスは、Wishboneを経由して接続されている。 litex/litex/soc/cores/uart.py class UARTWishboneBridge(UARTBone): def __init__(self, pads, clk_freq, baud…

自作CPUのSpikeモデルシミュレータ環境の変更 (4. LiteX BIOSのブート)

自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。 LiteXとSpikeの設定を変更できるようにして、とりあえずLiteXモードで動作するようにした。 Spike側のBootROMを削除する必要がある。…

自作CPUのSpikeモデルシミュレータ環境の変更 (3. Spikeの設定変更)

自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。 前回、モデルシミュレータが途中でハングしてしまっていたのだが、一度全部Cleanしてやり直すと多分ちゃんと動いている。 LiteXとSpi…

RISC-VのRVA/RVBプロファイルについての調査

RISC-Vのプロファイルについて、RVAに続いてRVBという謎のプロファイルが追加されていたので調査することにした。 RVAというのはRISC-Vのプロファイルのうちアプリケーション・プロセッサ向けのものである。 一方で、RVBというのもアプリケーション・プロセ…

自作CPUのSpikeモデルシミュレータ環境の変更 (2. Spikeの設定変更)

自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。 前回、モデルシミュレータが途中でハングしてしまっていたのだが、一度全部Cleanしてやり直すと多分ちゃんと動いている。 ただ、それ…

自作CPUのSpikeモデルシミュレータアップデート

自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。 一応すべてのコンパイルエラーを直して動かしてみたが、どうも途中でエラーが発生する。 argv[7] = --log-commits argv[8] = --dtb=.…

LiteXのBIOSソフトウェアを独自に構築する方法調査 (2. SpikeのCLINTの動作確認)

CLINT : 0x02000000 PLIC : 0x0c000000 MIEを設定すると、タイマ割り込みがかかる。 core 0: 3 0x0000000000001760 (0x09313c23) mem 0x0000000010001fd8 0x0000000000000000 core 0: 0x0000000000001764 (0x0c0027b7) lui a5, 0xc002 core 0: 3 0x000000000…

SpikeのPLICとCLINTの実装を確認する

最新のSpikeの実装にアップデートして、PLICとCLINTを動かすためにいろいろやってみる。 LiteXのBIOSを動かしたくて、いろいろやっている。 ../spike_dpi/riscv-isa-sim/spike -l --log-commits --dtb=../dts/rv64imafdc.dtb --pc=0 -m0x0:0x100000,0x100000…

SpikeのPLICとCLINTの実装を確認する

前回の続き。exception interrupt #7というのは例外かと思っていたら割り込みだった。 つまり、この割り込みが入った時点でタイマ割り込みが掛かっていたことがわかる。 タイマ割り込みはCLINTが行うはずなので、その辺を確認してみる。 core 0: 3 0x0000000…

riscv-isa-simをPC=0x0から起動するためには?

ちょっと自作CPUの検証環境を調整したくて、リセット時のPC=0として実行して検証を走らせたいのだが、どうにもSpikeがエラーを出してしまう。 0x0にブートコードを含んでいるELFをロードすると、invalid write to 0のような感じでエラーが出力して実行できな…

LiteXのBIOSソフトウェアを独自に構築する方法調査

LiteXのBIOS立ち上げ環境を、独自のRTLシミュレーション環境に移植したくて、メモしておく。 基本的に、LiteXをダウンロードしたときに登場するlitex/litex/soc/software/を丸ごと別ディレクトリに移動することになる。 さらに、ライブラリを作成するの、pyt…

LiteXによるSoC環境構築を試行する (21. ILAを使ったデバッグ)

0x28付近でループしている。これは例外処理の部分。 0000000000000020 <trap_entry>: 20: fe113c23 sd ra,-8(sp) 24: fe513823 sd t0,-16(sp) 28: fe613423 sd t1,-24(sp) 2c: fe713023 sd t2,-32(sp) 30: fca13c23 sd a0,-40(sp) 34: fcb13823 sd a1,-48(sp) 38: fcc134</trap_entry>…

オープンソースの波形ビューワSurferを試す

少し前に話題になっていたけれども、Rustで記述されたオープンソースの波形ビューワのSurferについていろいろ試行していた。 surfer-project / surfer · GitLab これまでは基本的に波形ビューワとしてGTKwaveを使っていたのだけれども、どうにもGTKwaveも使…

LiteXのUART書き込みのフローについて

LiteXにおけるUARTの書き込みについて、そのフローを確認しておく。 litex/litex/soc/software/libc/stdio.c static int litex_putc(char c, FILE *file) { (void) file; /* Not used in this function */ #ifdef CSR_UART_BASE uart_write(c); if (c == '\n…