2022-01-01から1年間の記事一覧
自作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がつながっていないことによるらしい。 ここから先どうやって環境構築す…
RISC-VのOut-of-orderedコアであるBOOMの詳細を少し調べていたのだが、Chicken Bitというのがある。 どうもアウトオブオーダ実行を止めることができる機能らしい。 と思ったら、あれ?違うかな。完全にPipelineをクリアしながら進めるのか。じゃあInOrderよ…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 In-orderモードでパイプラインを解析す…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 特定の領域のみのサイクル情報を取得し…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 いろいろ設定を見てみると、In-orderモ…
まあ自分用のメモというか、失敗記録なのだけれども。 例えば、以下のfcvt命令が急に命令例外を出した。SpikeのConfigurationはRV64GCにしているので間違いない。どこを確認すべきか? core 0: 3 0x0000000080000e52 (0x20278bd3) f23 0xffffffff5f800000 co…
RiVec、つまりRISC-V Vectorized Bencmark SuiteはベンチマークスイートをRISC-Vベクトル向けに移植したベンチマークスイートだ。 メインリポジトリのRiVecはバージョンが古くてRVV1.0のintrinsicではコンパイルすることができない。 Pull Requsetを観察して…
AAPGを久しぶりに触っている。久しぶりにテストパタンを動かして問題ないことを確認したので、もうちょっと命令範囲を拡張することにした。 https://gitlab.com/shaktiproject/tools/aapg FPU系の命令でバグがちょいちょい見つかっている。riscv-testsでカバ…
AAPGを久しぶりに触っている。久しぶりにテストパタンを動かして問題ないことを確認したので、もうちょっと命令範囲を拡張することにした。 https://gitlab.com/shaktiproject/tools/aapg 現時点ではAAPGはFPU/RMW命令を生成するようになっていない。config.…
RISC-Vベクトル命令の自動生成がかなりサマになってきた、という話を聞いたので、GCCのAutoVectorizationを見てみることにした。 使用したのは、RVVに対応したRISC-V GCCだ。 $ riscv64-unknown-elf-gcc --version riscv64-unknown-elf-gcc () 12.0.1 202205…
RISC-V Vector Intrinsicのドキュメントでは、サンプルアプリケーションがいくつか格納されている。 https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/master/examples それぞれのアプリケーションにおいて、どのようにベクトル命令が使用されてい…
Googleのリリースしたセキュリティを重視したオペレーティングシステムのKataOS、RISC-Vも視野に入れているということで面白そうなのでチェックしてみることにした。 https://opensource.googleblog.com/2022/10/announcing-kataos-and-sparrow.html まず、K…