FPGA開発日記

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

DIGITAL ELECTRONICS NOTESをやってみる (7. 組み合わせ回路)

以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site Q: エンコーダとマルチプレクサの違いは何ですか A: エンコーダはマルチプレクサと似ているが、マルチプレクサはN個の入力に対して1ビットの出力を生成する。一方でエンコーダ…

Chipyard 1.8.1のインストール方法がかなり変わっていた

久しぶりにChipyardでChiselのデザインを生成しようとしたら、Version 1.8.1から随分と環境が変わっていた。 chipyard.readthedocs.io Dockerfileも動かなくなっていてびっくりしたのだが、どうやらパッケージマネージャについては、Condaというものをインス…

Chipyardにおけるコンフィグレーション毎のPLICのインタフェースの違い

PLICの実装をいろいろチェックしたくて、Chipyardで生成される構成をチェックしている。 RocketChipのシングルコア構成。割込み挿入インタフェース auto_int_in_0は1ビットのみ。出力はauto_int_out_1_0 / auto_int_out_0_0の2ビット。 module TLPLIC( input…

DIGITAL ELECTRONICS NOTESをやってみる (6. 組み合わせ回路)

以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site Q: 組合せ回路と順序回路の違いは何ですか? A: 任意の瞬間の出力が、その瞬間の入力にのみ依存する回路を組合せ回路と呼ぶ。したがって、これらの回路には記憶素子がない。半…

DIGITAL ELECTRONICS NOTESをやってみる (5. ゲート)

以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site A B R 0 0 0 0 1 1 1 0 1 1 1 0 Q: データ通信におけるXORゲートの典型的な役割は何か? A: XORゲートにより、パリティの検出やCRC、ECCなどに使われる。また、疑似乱数生成に…

RISC-VのPLICのためのテストケースを作って、Spikeとの一致検証環境を構築する

msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com PLICの実装で、一致比較環境が完成したのでテストを作って修正している。 まずはレジスタアクセスの部分から。とりあえず波形を見ながら修正して…

DIGITAL ELECTRONICS NOTESをやってみる (4. AND / OR 論理)

msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site Q: 次のゲートのうち、ユニバーサルゲートと呼ばれるものはどれか、またその理由は? AND / …

RISC-VのPLICのためのテストケースを作って、Spikeとの一致検証環境を構築する

msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 前回までで、Spikeを解析した結果PLICのメモリマップを確保する必要があること、そして、PLICの簡単なデバイスを作成してSpikeに登録してやる必要があることが分かった。 と…

自作CPUにMatrix Schedulerを導入した場合の変更量について考える

まあいつかの段階で自作CPUのスケジューラを変更しようと思っているのだが、これをどのようにしようかいろいろ思いを巡らせている。 アウトオブオーダのフロントエンドはあまり得意ではないので、どうやって作ればいいのか悩んでいる。 現在の実装 Issue Uni…

RISC-VのPLICのためのテストケースを作って、Spikeの挙動を解析する

msyksphinz.hatenablog.com msyksphinz.hatenablog.com 前回まででPLICについては結構仕様を勉強して、じゃあ次にRTLを作ってみて、テストしてみようということになったのだが、 とりあえず簡単なテストを動かしてみたい。PLICのメモリマップは0xc00_0000な…

DIGITAL ELECTRONICS NOTESをやってみる (3. グレイコード)

以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site Q: グレイコード11001をバイナリコードに変換してください。 やり方としては、まずMSBの1を保持し、上位ビットから順番に次のビットとのXORを取っていく。 4 3 2 1 0 // bit-po…

DIGITAL ELECTRONICS NOTESをやってみる (2. 符号に関するクイズ)

以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site パリティビットとはどのようなもので、どのように計算されるのか? パリティビットは、2進コードの文字列の末尾に付加されるビットで、文字列中の値「1」を持つビットの数が偶…

「プログラマーのためのCPU入門」を買いました

面白そうなので買ってみました。物理本は送料が意外と高かったので電子書籍版を買いました。 https://www.lambdanote.com/products/cpu プログラマーのためのCPU入門 ― CPUは如何にしてソフトウェアを高速に実行するかwww.lambdanote.com ざっくりと眺めまし…

サイクル精度シミュレータSniperでRegion of Interest(ROI)を設定するための手法の調査

サイクル精度シミュレータSniperでは、計測範囲を指定する用語としてROI(Region of Interest)というものがある。 通常、サイクル数などはこの範囲を計測するのだが、これを取得する方法はいくつかあって、Sniperは基本的にC言語用のマクロを用意している。 g…

RISC-VのPlatform Level Interrupt Controller(PLIC)の構造について (2. 仕様書を読み解く)

以下のPLICのオープンソース実装を使って自作CPUに接続していたのだが、どうもメモリマップが違う気がする。 かなり古い実装なので、現在の仕様と違うのはやむなしか... github.com なんか結局は自分で実装しなければならないような気がしているので、一生懸…

RISC-VのPlatform Level Interrupt Controller(PLIC)の構造について (1. 仕様書を読み解く)

以下のPLICのオープンソース実装を使って自作CPUに接続していたのだが、どうもメモリマップが違う気がする。 かなり古い実装なので、現在の仕様と違うのはやむなしか... github.com なんか結局は自分で実装しなければならないような気がしているので、一生懸…

LiteXによるSoC環境構築を試行する (PLICの接続作業)

PLICの接続について、ひたすらバスをつなげて実装している。とりあえずコンパイルが通るようになったが、 まだシミュレーションが止まってしまうので、波形を見て要解析だな... [serial2console] loaded (0x55e25615cef0) [gmii_ethernet] loaded (0x55e2561…

DIGITAL ELECTRONICS NOTESをやってみる

以下のデジタル回路の問題をやってみる。 あんまり時間がないので、DeepLで翻訳してメモしてみようかな。 lancamentomerlo.my.canva.site Q1. ある数体系から他の数体系への変換 16進数の0x3Aは10進数で何ですか? 10進数以外の数字から10進数への変換は、次…

LiteXによるSoC環境構築を試行する (シリアルコンソールの解析)

シリアルコンソールが反応しない問題、FSTを吐いているときに、前回間違ってfstのdump()を入れてしまっており 処理が非常に遅くなってしまっていた。dump()を解除するとFSTを取得しながらキーボードを叩くことができるようになった。 interruptがかからない…

LiteXによるSoC環境構築を試行する (シリアルコンソールの解析)

シリアルコンソールが反応しない問題、FSTを吐いているときに、前回間違ってfstのdump()を入れてしまっており 処理が非常に遅くなってしまっていた。dump()を解除するとFSTを取得しながらキーボードを叩くことができるようになった。 波形を取得すると、seri…

LiteXによるSoC環境構築を試行する (シリアルコンソールの解析)

シリアルコンソールが反応しない問題、FSTを吐きながらキーボードを叩こうとするとかなり遅くなった挙句、キーボードが反応しない。 これはもうちょっとデバッグの方法を考えなければならない。 一つはVCD出力にして、波形の出力をしやすくしなければ。

LiteXによるSoC環境構築を試行する (シリアルコンソールの解析)

まず、デザイン上にはシリアルコンソールとして以下のインタフェースが定義されている。 //------------------------------------------------------------------------------ // Module //---------------------------------------------------------------…

LiteXによるSoC環境構築を試行する (割込みの接続)

PLICの実装を試している。自作CPUのSoC環境にPLICをインスタンスして接続する。 PLICの実装は、どこからかオープンソースのものを取ってこようと思う。 github.com とりあえず以下のように接続する。 logic [ 7: 0] w_ie [1]; // Interrupt enable per sourc…

RISC-Vの圧縮拡張命令Zc*拡張について

fprox.blogspot.com RVC命令に追加して、新たに定義されているZc*拡張について調査する。 RISC-V Zc*拡張には、6種類の拡張命令があるらしい。 Zca: Zcf / Zcd以外の既存のRVC命令 Zcf: 既存の単精度RVCメモリアクセス命令 Zcd: 既存の倍精度RVCメモリアクセ…

sshfsにより2段階先のサーバのディスクを見る方法

要するに、~/.ssh/configに以下を追加しておく。 Host msyksphinz-ext-server HostName アクセスしたいサーバ User kimura ProxyCommand ssh <「アクセスしたいサーバにアクセスするためのログインサーバ」> -W %h:%p そして、以下のコマンドでアクセスした…

LiteXによるSoC環境構築を試行する (割込み挿入方法)

LiteXの続き。LiteXでどうにかBIOSを立ち上げることができるようになったが、次はキーボードの入力が受け付けられない。 これはおそらく割込みをまじめに接続していないことだろう。LiteXのほかのデザインはどうだろうか? まずはRocketの実装とVexRiscVの実…

RISC-V ベクトルプロセッサの実装論文Vitruvius+の論文を読む

RISC-Vのベクトル実装の論文を読んでいる。 https://dl.acm.org/doi/abs/10.1145/3575861 Vitruvius+というのはバルセロナスーパーコンピューティングセンターの開発しているRISC-Vベクトル拡張の実装で、初代Vitruviusの後継となる実装である。 ポイントだ…

サイクル精度シミュレータSniperのメモリリーク解析備忘録

サイクル精度シミュレータSniperを魔改造したら大量にメモリリークするようになってしまったので、それを修正した備忘録。 問題は自分の修正した部分。ベクトル命令は1命令が複数の命令に分解される可能性がある。 これを単純に実装しようとすると、命令キャ…

LiteXによるSoC環境構築を試行する (15. AXI Wrapper階層の作り直しとBIOSブート)

LiteXの続き。SoC階層に書き込みができていない問題があったのだが、これはAXIを正しく接続していなかったせいだった。 AXIのArbitrationを修正して、どうにかBIOSの立ち上がりまで来ることができた。とりあえず目標としていたコンソールの出力まで来たぞ。 …

LiteXによるSoC環境構築を試行する (14. AXI Wrapper階層の作り直し)

LiteXの続き。SoC階層に書き込みができていない問題があったのだが、これはAXIを正しく接続していなかったせいだった。 問題は、今のCPUインタフェースがAXIのようなAWとWの非同期動作をサポートしていないということ。SoC側が非同期にReadyを動かす場合、う…