FPGA開発日記

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

2024-01-01から1年間の記事一覧

自作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…

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

LiteXのLiteScopeではどうにも細かい信号を取得することができないので、Xilinxの純正の波形のデバッグツールであるILA(Integrated Logic Analyzer)を使って内部の信号を観察する方法を見てみる。 一応、一歩ずつ問題を特定しているが、まだまだ動いていない…

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

LiteXのLiteScopeではどうにも細かい信号を取得することができないので、Xilinxの純正の波形のデバッグツールであるILA(Integrated Logic Analyzer)を使って内部の信号を観察する方法を見てみる。 一応、一歩ずつ問題を特定しているが、まだまだ動いていない…

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

LiteXのLiteScopeではどうにも細かい信号を取得することができないので、Xilinxの純正の波形のデバッグツールであるILA(Integrated Logic Analyzer)を使って内部の信号を観察する方法を見てみる。 もうちょっと細かい信号を取得するために、tclでILAを挿入す…

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

LiteXのLiteScopeではどうにも細かい信号を取得することができないので、Xilinxの純正の波形のデバッグツールであるILA(Integrated Logic Analyzer)を使って内部の信号を観察する方法を見てみる。 ある程度信号波形を取れてきたので、必要な個所にデバッグ信…

LiteXによるSoC環境構築を試行する (17. LiteXデザインにILAを挿入する方法の調査)

LiteXのLiteScopeではどうにも細かい信号を取得することができないので、Xilinxの純正の波形のデバッグツールであるILA(Integrated Logic Analyzer)を使って内部の信号を観察する方法を見てみる。 まず、ILA無しでLiteXでFPGAをビット・ストリームファイルを…

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

LiteXでどのように波形をダンプしてデバッグすればよいかを調査していたのだが、LiteXはブリッジを通じてホストに対して情報をダンプする機能が多く備わっているらしい。 これは便利だ。 ChipScopeのように内部の信号まで取り出したいのだが、このためにはデ…

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

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

LiteXによるSoC環境構築を試行する (14. 自作CPUのLiteXのインテグレーション試行)

LiteXはオープンソースのSoC構成環境なのだが、これに対して自作CPUのインテグレーションを試行してみる。 既存のシミュレーション環境に対して、以下の定義を追加して、LiteX用に改造してみる。 CLINT / PLICのメモリマップを定義する。 { "base": "0x0200_…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (7. KunmingHuのビルドと試行)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 実際のGitHubリポジトリをダウンロードして、いろいろ試してみようと…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (6. Kuminghuのマイクロアーキテクチャ続き)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。続き。 xiangshan-…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (5. Kuminghuのマイクロアーキテクチャ)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。続き。 xiangshan-…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (4. Microarchitecture Design and Implementation)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。続き。 xiangshan-…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (3. Microarchitecture Design and Implemenation)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。 xiangshan-doc.re…

Vivado Simulatorを用いてUVMに入門する (3. テストベンチの解析)

UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 次にMonitorとScoreboardについてみていこうと思う。 monitorについては…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (2. XiangShanのAgile Development)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 xiangshan-doc.readthedocs.io https://github.com/OpenXiangShan/Xia…

Vivado Simulatorを用いてUVMに入門する (2. テストベンチの解析)

UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com adderとのインタフェースとして、以下を定義する。これによりテストベンチとDUTを接続する。 verify/addr_if.sv interface add_i…

Vivado Simulatorを用いてUVMに入門する (1. adderを用いたシンプルな例)

UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com module adder (input logic clk, input logic reset, input logic [ 7: 0] in1, input logic [ 7: 0] in2, output logic [ 8: 0]…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (1. 概要)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 xiangshan-doc.readthedocs.io https://github.com/OpenXiangShan/Xia…

SystemVerilogにおけるInterface内の関数を使うときのセンシティビティ・リストの考慮事項

SystemVerilogで回路記述をしていて、引っかかったところのメモ: www.edaplayground.com SystemVerilogのInterface内でFunctionを定義した場合、これを使う場合には注意が必要だ。 interface interface_counter; logic valid; logic [ 3: 0] counter; funct…

自作CPUの回路面積削減検討 (ROBの面積削減検討)

自作CPUの回路面積削減の続き。次はROBの面積削減を検討する。 ROBもCAMで構成する要素と、RAMで構成する要素がある。 これまですべてCAMで構成する要素を、RAMに変更して構成する。 // Instruction's static information from decoder typedef struct packe…

自作CPUの回路面積削減検討 (ストアバッファの面積削減検討)

自作CPUの回路面積削減の続き。ストアバッファの面積が結構大きいので、削減を検討する。 ストアバッファが大きくなっている原因は、直接的なものはよくわからないのだが、Atomic命令を処理するフィールドが少なくともかなり面積を使用しているので、これを…