FPGA開発日記

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

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

RISC-Vコアの検証インタフェースRVVIについて調べる (2. トレースインタフェースRVVI-TRACE)

RISC-Vコアの検証環境RVVIについて調査している。 まずはDUTからのトレースデータの情報RVVI-TRACEについて調査する。 実際のインタフェースは、当該GitHubのrvvi-trace.svに定義されている。 github.com これはVerilatorでも食えるのかな? このVerilogファ…

2023/04/23週のRISC-Vニュース

ニュースと言いつつ、自分の気になったRISC-Vの記事のメモです。 RISC-V SoCを搭載したタブレットの発表 2023年4月11日、PINE64はシングルボードコンピュータ(SBC)を開発しているメーカー。今回、PINE64は2種類のタブレット型PCを発表した。 PineTab2 PineTa…

RISC-Vコアの検証インタフェースRVVIについて調べる (1. RVVIの種類について)

自作RISC-Vコアを各種SoC環境で使いたい。 ただし自分のコアの動作にまだ自信がないので検証インタフェースを持って、どんなSoC環境でも一応形として一致検証ができるようにしたい。 インタフェースを統一していた方がいい気がするので、RISC-V Verification…

LiteXによるSoC環境構築を試行する (10. 自作CPUにdemoアプリを適用してみる)

前回、VexRiscvに対してでもアプリを適用し、donutプログラムを動作させたのであった。今度は、自作CPUに対して適用させたいと思う。 まずいろいろ調査したのだが、VexRiscvと自作CPUはメモリマップが違うので、プログラムの再コンパイルを行う必要がある。 …

LiteX実験用のDocker環境を作る

ちょっと自分の環境にLiteXの環境が乱立しすぎて、どれがどれだかわからなくなってきたので、Docker環境を構築して中に押し込んでみようと思う。 まずはDockerfileの記述から。基本的にRISC-Vのツールと必要なパッケージのインストール。 Dockerの外からLite…

LiteXによるSoC環境構築を試行する (9. VexRiscvにて、BIOS以外のdemoアプリをロードしてシミュレーションするためには)

LiteX実行時に自分の好きなプログラムをロードして実行するためには何をすればよいかというのを調査していた。 とりあえず、Demoファイルがあったので、これを試してみたいと思う。 github.com まず、単純にVexRiscvのビルドを行う。これには以下のコマンド…

LiteXによるSoC環境構築を試行する (8. シミュレーション時にプログラムをロードするためには)

LiteX実行時に自分の好きなプログラムをロードして実行するためには何をすればよいかというのを調査していた。 Linux-on-Litex-Vexriscv を見ていると、どこかにロードして動かすのがよさそうな気がしている。 litex_sim --help | grep init [--rom-init ROM…

LLVM16でRISC-V Vector Supportはどのように変わったのか (3. Scalable Vectorizationとは)

LLVM16になって、RISC-VのVectorizationの状態について確認していきたい。 muxup.com Scalable Vectorizationの機能について、テストプログラムを動かしながら動作確認をしていきたい。 以下のような、簡単なプログラムを作ってどのようにコンパイルされるの…

LiteXによるSoC環境構築を試行する (7. FPGAの論理合成確認)

LiteXでの論理合成にて、ターゲットのFPGAボードに入りきらないので、面積の解析を行った。 以下のグラフは、問題となっているLUTの面積だけ取り出したものになっている。 かなり面積大きめになっているのはLSUとBRU。BRUがなぜ大きくなっているのかはよくわ…

入門モダンLinux読書メモ (2. 3章:シェル)

読みながら、良く知らなかった項目をメモ。知らないことばっかりだ... 入門 モダンLinux ―オンプレミスからクラウドまで、幅広い知識を会得する作者:Michael HausenblasオライリージャパンAmazon シェルの章は、モダンな代替ツールが面白かった。 github.com…

LiteXによるSoC環境構築を試行する (6. FPGAの論理合成確認)

LiteXのシミュレーション環境がかなり整ってきたので、実機での動作確認のための環境を確認している。 一つは、litex-bordsリポジトリを使用する方法だが、これは今のところ自作CPUでは使用できていない。 github.com # python3 -m litex_boards.targets.<board> --</board>…

LiteXによるSoC環境構築を試行する (6. UC Read / Write解析)

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 一応かろうじてLiteXのキーボード…

LiteXによるSoC環境構築を試行する (5. LiteXでのPLICによるキーボードが動いた)

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 かなり作業が進んできて、PLICの…

入門モダンLinux読書メモ (1. 2章:Linuxカーネル)

読みながら、良く知らなかった項目をメモ。知らないことばっかりだ... 入門 モダンLinux ―オンプレミスからクラウドまで、幅広い知識を会得する作者:Michael HausenblasオライリージャパンAmazon 2. Linuxカーネル 2.1 Linuxアーキテクチャ 大きく、ハードウ…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (7. 最新版でのテストベンチ試行)

github.com msyksphinz.hatenablog.com 久しぶりにTenstorrentのOcelotの最新版を試行してみることにした。 OcelotはBOOMをベースとした、RISC-V Vectorの実装で、Tenstorrentがオープンソースとして公開している。 +SIM_CXXFLAGS += -DVL_DEBUG 3 0x0000000…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (6. 最新版でのテストベンチ試行)

github.com msyksphinz.hatenablog.com 久しぶりにTenstorrentのOcelotの最新版を試行してみることにした。 OcelotはBOOMをベースとした、RISC-V Vectorの実装で、Tenstorrentがオープンソースとして公開している。 一応テストケースはPASSできるみたいだ。…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (5. 最新版を再試行する)

github.com 久しぶりにTenstorrentのOcelotの最新版を試行してみることにした。 OcelotはBOOMをベースとした、RISC-V Vectorの実装で、Tenstorrentがオープンソースとして公開している。 前回数か月前に試したときは、ビルドはうまくできたもののテストが上…

RISC-VのPlatform Level Interrupt Controller (PLIC)について (2. 割り込みが挿入されてから通知、処理までの流れ)

前回の続き。 msyksphinz.hatenablog.com ここでは、以下のPLICの図を参考にしながらPLIC経由で割り込みが挿入されたときの流れを説明する。 ここでの要点は以下の3つにまとめられる。 複数の割込み信号が挿入された場合、どのような基準で選択されるのか HA…

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

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 最終的にはキーボードからの入力…

RISC-VのPlatform Level Interrupt Controller (PLIC)について (1. 動作概要とレジスタ定義)

Platform Level Interrupt Controllerといい、コア外部から挿入される割り込みを処理するためのモジュールと考えてよい。当初PLICの仕様はRISC-Vの命令仕様と同様のグループで定義されていたが、命令仕様とは関係ないので分離して別ページで管理されている。…

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

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 最終的にはキーボードからの入力…

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

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 最終的にはキーボードからの入力…

LLVM16でRISC-V Vector Supportはどのように変わったのか (2. Auto Vectorizationの確認)

LLVM16になって、RISC-VのVectorizationの状態について確認していきたい。 muxup.com Scalable Vectorizationの機能について、テストプログラムを動かしながら動作確認をしていきたい。 以下のような、簡単なプログラムを作ってどのようにコンパイルされるの…

LLVM16でRISC-V Vector Supportはどのように変わったのか (1. Vector Intrinsicの確認)

LLVM16になって、RISC-VのVectorizationの状態について確認していきたい。 muxup.com まずはIntrinsicのサポートについてだが、LLVM15と比較してAPIが変わったようだ。 これは、RISC-V VectorのIntrinsicの公式フォーマットに完全に基づいているようだ。 git…

LiteXによるSoC環境構築を試行する (2. LiteXのブートシーケンスデバッグ)

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 いろいろデバッグして、とりあえ…

LiteXによるSoC環境構築を試行する (久々の環境更新)

久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。 いろいろ変更しないといけない部…

自作CPUの動作周波数向上対策 (2. TLBのコンフィグレーション更新部分にFF挿入)

これは単純なメモだが、自作CPUのLiteXでの動作周波数を上げるために、いろいろと修正する部分があり作業をしている。 次にクリティカルパスは、CSRレジスタからTLBアクセスへのパスだ。これはCSRのアップデートがそのままTLBのコンフィグレーションにつなが…

"RISC-V Instruction Set Architecture Extension: A Survey"を読む (4. 特定用途向けのRISC-V拡張の研究)

ieeexplore.ieee.org IEEE Explorerにて、上記の論文が公開されていた。最近の命令拡張の動向についてあまりよく知らなかったので、せっかくなので読んでみることにした。 続き。 Post Quantum Cryptography (ポスト量子暗号) 量子コンピュータに耐えるため…

自作CPUの動作周波数向上対策 (1. 命令バッファにFF挿入)

これは単純なメモだが、自作CPUのLiteXでの動作周波数を上げるために、いろいろと修正する部分があり作業をしている。 まず、動作周波数を上げるために、必要な部分にレジスタを挿入している。今最も大きな遅延が発生しているのがフロントエンド周りなので、…