2023-01-01から1ヶ月間の記事一覧
msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 前回までで、Spikeを解析した結果PLICのメモリマップを確保する必要があること、そして、PLICの簡単なデバイスを作成してSpikeに登録してやる必要があることが分かった。 と…
まあいつかの段階で自作CPUのスケジューラを変更しようと思っているのだが、これをどのようにしようかいろいろ思いを巡らせている。 アウトオブオーダのフロントエンドはあまり得意ではないので、どうやって作ればいいのか悩んでいる。 現在の実装 Issue Uni…
msyksphinz.hatenablog.com msyksphinz.hatenablog.com 前回まででPLICについては結構仕様を勉強して、じゃあ次にRTLを作ってみて、テストしてみようということになったのだが、 とりあえず簡単なテストを動かしてみたい。PLICのメモリマップは0xc00_0000な…
以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site Q: グレイコード11001をバイナリコードに変換してください。 やり方としては、まずMSBの1を保持し、上位ビットから順番に次のビットとのXORを取っていく。 4 3 2 1 0 // bit-po…
以下のデジタル回路の問題をやってみる。続き。 lancamentomerlo.my.canva.site パリティビットとはどのようなもので、どのように計算されるのか? パリティビットは、2進コードの文字列の末尾に付加されるビットで、文字列中の値「1」を持つビットの数が偶…
面白そうなので買ってみました。物理本は送料が意外と高かったので電子書籍版を買いました。 https://www.lambdanote.com/products/cpu プログラマーのためのCPU入門 ― CPUは如何にしてソフトウェアを高速に実行するかwww.lambdanote.com ざっくりと眺めまし…
サイクル精度シミュレータSniperでは、計測範囲を指定する用語としてROI(Region of Interest)というものがある。 通常、サイクル数などはこの範囲を計測するのだが、これを取得する方法はいくつかあって、Sniperは基本的にC言語用のマクロを用意している。 g…
以下のPLICのオープンソース実装を使って自作CPUに接続していたのだが、どうもメモリマップが違う気がする。 かなり古い実装なので、現在の仕様と違うのはやむなしか... github.com なんか結局は自分で実装しなければならないような気がしているので、一生懸…
以下のPLICのオープンソース実装を使って自作CPUに接続していたのだが、どうもメモリマップが違う気がする。 かなり古い実装なので、現在の仕様と違うのはやむなしか... github.com なんか結局は自分で実装しなければならないような気がしているので、一生懸…
PLICの接続について、ひたすらバスをつなげて実装している。とりあえずコンパイルが通るようになったが、 まだシミュレーションが止まってしまうので、波形を見て要解析だな... [serial2console] loaded (0x55e25615cef0) [gmii_ethernet] loaded (0x55e2561…
以下のデジタル回路の問題をやってみる。 あんまり時間がないので、DeepLで翻訳してメモしてみようかな。 lancamentomerlo.my.canva.site Q1. ある数体系から他の数体系への変換 16進数の0x3Aは10進数で何ですか? 10進数以外の数字から10進数への変換は、次…
シリアルコンソールが反応しない問題、FSTを吐いているときに、前回間違ってfstのdump()を入れてしまっており 処理が非常に遅くなってしまっていた。dump()を解除するとFSTを取得しながらキーボードを叩くことができるようになった。 interruptがかからない…
シリアルコンソールが反応しない問題、FSTを吐いているときに、前回間違ってfstのdump()を入れてしまっており 処理が非常に遅くなってしまっていた。dump()を解除するとFSTを取得しながらキーボードを叩くことができるようになった。 波形を取得すると、seri…
シリアルコンソールが反応しない問題、FSTを吐きながらキーボードを叩こうとするとかなり遅くなった挙句、キーボードが反応しない。 これはもうちょっとデバッグの方法を考えなければならない。 一つはVCD出力にして、波形の出力をしやすくしなければ。
まず、デザイン上にはシリアルコンソールとして以下のインタフェースが定義されている。 //------------------------------------------------------------------------------ // Module //---------------------------------------------------------------…
PLICの実装を試している。自作CPUのSoC環境にPLICをインスタンスして接続する。 PLICの実装は、どこからかオープンソースのものを取ってこようと思う。 github.com とりあえず以下のように接続する。 logic [ 7: 0] w_ie [1]; // Interrupt enable per sourc…
fprox.blogspot.com RVC命令に追加して、新たに定義されているZc*拡張について調査する。 RISC-V Zc*拡張には、6種類の拡張命令があるらしい。 Zca: Zcf / Zcd以外の既存のRVC命令 Zcf: 既存の単精度RVCメモリアクセス命令 Zcd: 既存の倍精度RVCメモリアクセ…
要するに、~/.ssh/configに以下を追加しておく。 Host msyksphinz-ext-server HostName アクセスしたいサーバ User msyksphinz ProxyCommand ssh <「アクセスしたいサーバにアクセスするためのログインサーバ」> -W %h:%p そして、以下のコマンドでアクセス…
LiteXの続き。LiteXでどうにかBIOSを立ち上げることができるようになったが、次はキーボードの入力が受け付けられない。 これはおそらく割込みをまじめに接続していないことだろう。LiteXのほかのデザインはどうだろうか? まずはRocketの実装とVexRiscVの実…
RISC-Vのベクトル実装の論文を読んでいる。 https://dl.acm.org/doi/abs/10.1145/3575861 Vitruvius+というのはバルセロナスーパーコンピューティングセンターの開発しているRISC-Vベクトル拡張の実装で、初代Vitruviusの後継となる実装である。 ポイントだ…
サイクル精度シミュレータSniperを魔改造したら大量にメモリリークするようになってしまったので、それを修正した備忘録。 問題は自分の修正した部分。ベクトル命令は1命令が複数の命令に分解される可能性がある。 これを単純に実装しようとすると、命令キャ…
LiteXの続き。SoC階層に書き込みができていない問題があったのだが、これはAXIを正しく接続していなかったせいだった。 AXIのArbitrationを修正して、どうにかBIOSの立ち上がりまで来ることができた。とりあえず目標としていたコンソールの出力まで来たぞ。 …
LiteXの続き。SoC階層に書き込みができていない問題があったのだが、これはAXIを正しく接続していなかったせいだった。 問題は、今のCPUインタフェースがAXIのようなAWとWの非同期動作をサポートしていないということ。SoC側が非同期にReadyを動かす場合、う…
RISC-Vのベクトル実装の論文を読んでいる。 https://dl.acm.org/doi/abs/10.1145/3575861 Vitruvius+というのはバルセロナスーパーコンピューティングセンターの開発しているRISC-Vベクトル拡張の実装で、初代Vitruviusの後継となる実装である。 ポイントだ…
RISC-Vのベクトル実装の論文を読んでいる。 https://dl.acm.org/doi/abs/10.1145/3575861 Vitruvius+というのはバルセロナスーパーコンピューティングセンターの開発しているRISC-Vベクトル拡張の実装で、初代Vitruviusの後継となる実装である。 ポイントだ…
LiteXの続き。 UARTのアドレスに対して正しくアクセスできていないように見える。まず、.dataセクションの場所を確認すると、 Disassembly of section .data: 10000000 <s_flush_cpu_dcache>: 10000000: 0d60 .2byte 0xd60 10000002: 0000 .2byte 0x0 10000004: 4580 .2byte 0x45</s_flush_cpu_dcache>…
前回までで、PLICはCPUのシステム内に置く必要があるということが分かり、サブシステムの再実装を進めている。 具体的には、これまではTileをそのままSoCのCPUサブシステムとして見せていたのだが、これをサブシステムとして新たにラップし、PLICのモジュー…
波形をチェックしながら途中でテストケースが死んでしまう原因を調べていたのだが、どうやら不正なメモリ領域にアクセスしていたらしい。 PLICの領域を0x0C00_0000に配置していたのだが、この領域を出るとバスが反応しなくなる(というか、その場合はエラーを…
ほかの波形と見比べながら、なんとなく何が必要なのか分かってきた。 次に必要なのはメモリマップだ。メモリマップを以下のように修正した。 [ { "base": "0x0000_0000", "size": "0x0002_0000", "attr": {"R": 1, "W": 0, "X": 1, "A": 1, "C": 0}, "commen…
ほかの波形と見比べながら、なんとなく何が必要なのか分かってきた。 現在自作CPUは簡易的なAXIで接続しているが、このためのコンフィグレーションが足りない。 いくつか修正して、AXIとしてちゃんと動作するようにした。要は、データサイズとかバーストサイ…