2022-11-01から1ヶ月間の記事一覧
自作CPUの命令発行スケジューラをMatrix Schedulerに置き換えたくて、論文を読み直している。 Matrix Schedulerは行列のサイズが、命令ウィンドウの数だけ必要 (ROB 32エントリ x 5命令だと160x160くらいの行列が必要?) というのが基本だと思っていて、これ…
自作CPUの命令発行スケジューラをMatrix Schedulerに置き換えたくて、論文を読み直している。 Matrix Schedulerは行列のサイズが、命令ウィンドウの数だけ必要 (ROB 32エントリ x 5命令だと160x160くらいの行列が必要?) というのが基本だと思っていて、これ…
自作CPUの命令発行スケジューラをMatrix Schedulerに置き換えたくて、論文を読み直している。 Matrix Schedulerは行列のサイズが、命令ウィンドウの数だけ必要 (ROB 32エントリ x 5命令だと160x160くらいの行列が必要?) というのが基本だと思っていて、これ…
自作CPUで、いくつかのコンフィグレーションでVivadoの論理合成を試してみている。 コンフィグレーションの数自体は50種類くらいあるのだが、とりあえず論理合成の終わったものだけでグラフを作ってみた。 ちなみに、タイミングの設定方法は、なぜか制約が効…
自作CPUに対して割込みコントローラの実装をしているが、検証環境との調整でいくつか悩んでいる。 主に、CLINTなどの割込みコントローラの動作と、検証用シミュレータSpikeとのタイミングを合わせる方法だ。 何が問題か? CLINTが割り込みを挿入しても、次の…
自作CPUでのCLINTの実装をやりたくて、仕様を調査している。 とりえあずテストケースが完成したのでRTLシミュレーションで動かしてみているのだが、いくつか考えなければならないことがある。 まず、mtimeレジスタやメモリマップされた領域をアクセスしたと…
自作CPUでのCLINTの実装をやりたくて、仕様を調査している。 テストケースを動かしてみたくて、いくつか調査していた。 とりあえずこちらのテストケースを移植してみることにした。かなりの数のincludeファイルが必要で、必要な部分だけ切り出している。 git…
rv8はRISC-VのシミュレータやJITの機能を持つ豊富なツール群だ。命令デコーダも搭載されており、Sniperもrv8のデコーダ機能を使って命令デコードを行っている。 が、実はこの機能が少しややこしい。正しく命令追加をしようとすると、rv8の中に仕込まれている…
msyksphinz.hatenablog.com 前回のレジスタアクセスに応じてベクトル命令を分解する作業は、よく考えたら演算命令にも導入しなければならないのだった。 基本的には考え方は同じで、レジスタ書き込みを行った回数だけ命令を複製するので大丈夫だ。 std::vect…
必要に迫られてRISC-VのアウトオブオーダプロセッサBOOMのMSHR周りの動作を見ていたのだが、どうにもChiselは柔軟に書けすぎて何が起きているのかよく掴めない。 分かるのはMSHRは2エントリ用意されているということ。これで間に合う? あと、MSHRはミスが発…
Instruction情報について sniper/common/performance_model/instruction.h class Instruction { public: Instruction(InstructionType type, OperandList &operands); Instruction(InstructionType type); virtual ~Instruction() { }; virtual SubsecondTim…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。Linuxカーネルのブートはうまくいきそうなので、次にルートファイルシステムの読み込みに挑戦する。つまりrootfsの構築だ。 Initrdを導入して、ついにrootfsからファイルを取得す…
自作CPUでのCLINTの実装をやりたくて、仕様を調査している。 一つは以下のドキュメントを確認している。 chromitem-soc.readthedocs.io 定義しないといけないレジスタは、MSIP, MTIME, MTIMECMPだ。 まずはソフトウェア割込みに関するレジスタはMSIPで、 Mac…
SpikeでBuildbootで生成したLinuxをブートするにあたり、Spikeでシミュレーションして動作を確認している。 SpikeでLinuxのブートを再現するためにはどうすればよいのか、調査している。 基本的に、SpikeにOpenSBIでのブートローダ、カーネル、rootfsを指定…
自作CPUのリグレッションテストやCIをGitHub上で行いたくて、いくつか手法を調査している。 msyksphinz.hatenablog.com いくつかやり方を教えてもらって、結局以下のように落ち着いた。 .github/workflows/で記述しているrun-onはデフォルトで良い。containe…
どうも昔から疑問だったのが、WSL2上でdfコマンドで確認した空き容量と、Windowsのエクスプローラで確認するディスクの空き領域が異なっており、理由がわからんかった。 いよいよWindows側のディスク使用量が尽きてきたので、腰を据えて調べていたのだが、ど…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。Linuxカーネルのブートはうまくいきそうなので、次にルートファイルシステムの読み込みに挑戦する。つまりrootfsの構築だ。 まずはSpikeで同じことができる必要がある。Spikeでini…
div命令のトレースを表示させてみると、Issue後に時間がかかっているのではなくて、Dispatchをずっと待っているような状態に見えている。 divのレイテンシ計算部分、これがgetInstructionLatency(68) = 1になっているのがそもそもおかしい。 disassembly : d…
自作CPUのリグレッションテストやCIをGitHub上で行いたくて、いくつか手法を調査している。 1つの手法としては、Dockerfileを使ってリグレッション環境を構築する。Dockerイメージ上にRISC-VツールチェインとVerilatorをインストールしておく。これをDockerH…
Andesが発表したAX65 RISC-Vアウトオブオーダプロセッサについて。 https://www.andestech.com/en/2022/11/02/andes-technology-unveils-the-andescore-ax60-series-an-out-of-order-superscalar-multicore-risc-v-processor-family/ 4ウェイスーパスカラア…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 別のコンフィグレーションで実行するとLinuxのブート途中で止まってしまった。これはLR/SCの更新論理がLSUのパイプラインの別々のところにあることによるものだった。 LSU0のLR/S…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 いくつかデバッグして、最終的にLinuxブートに成功した。最終的にKernel Panicで終了したが、これはrootfsがつながっていないことによるらしい。 ここから先どうやって環境構築す…