RISC-VにおけるRVWMOの仕様について読み直す 1. RVWMOの概要 (24/02/01) 2. 構文依存性の定義 (24/02/02) 3. Preserved Program Order / Memory Model Axioms (24/02/04) RISC-V仕様書 : Appendix A. RVWMO Explanatory Material, Version 0.1 (24/02/05) RI…
HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。続き。 xiangshan-…
HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。 xiangshan-doc.re…
UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 次にMonitorとScoreboardについてみていこうと思う。 monitorについては…
HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 xiangshan-doc.readthedocs.io https://github.com/OpenXiangShan/Xia…
UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com adderとのインタフェースとして、以下を定義する。これによりテストベンチとDUTを接続する。 verify/addr_if.sv interface add_i…
UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com module adder (input logic clk, input logic reset, input logic [ 7: 0] in1, input logic [ 7: 0] in2, output logic [ 8: 0]…
HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 xiangshan-doc.readthedocs.io https://github.com/OpenXiangShan/Xia…
SystemVerilogで回路記述をしていて、引っかかったところのメモ: www.edaplayground.com SystemVerilogのInterface内でFunctionを定義した場合、これを使う場合には注意が必要だ。 interface interface_counter; logic valid; logic [ 3: 0] counter; funct…
自作CPUの回路面積削減の続き。次はROBの面積削減を検討する。 ROBもCAMで構成する要素と、RAMで構成する要素がある。 これまですべてCAMで構成する要素を、RAMに変更して構成する。 // Instruction's static information from decoder typedef struct packe…
自作CPUの回路面積削減の続き。ストアバッファの面積が結構大きいので、削減を検討する。 ストアバッファが大きくなっている原因は、直接的なものはよくわからないのだが、Atomic命令を処理するフィールドが少なくともかなり面積を使用しているので、これを…
自作CPUのいくつかの面積最適化を行っていたら、またバグが出てきた。今度はデッドロック系だ。 問題は、LSUの命令発行キューに対してリプレイキューが小さく設計してあることにある。 例えば、リプレイキューのエントリ数がNであり、リプレイキューまでのパ…
現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。 LDQと異なり、各エントリはアドレスとデータの両方を管理す…
現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。 LDQと異なり、各エントリはアドレスとデータの両方を管理す…
現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。 LDQと異なり、各エントリはアドレスとデータの両方を管理す…
前のブログの記事では、LVTを用いたSingle Port RAMをMulti Portに複製するための方法について調査した。 msyksphinz.hatenablog.com LVT(Live Value Table)を用いた手法では、各RAMインデックスについて、どのバンクRAMに最新の値が書き込まれているかを示…
マルチコアにおいて、キャッシュ・コヒーレンス・プロトコルというのは切っても切り離せない問題だ。 幾つかのプロトコルについてメモを書いたので、一応ここに残しておく。 MOESIプロトコル 前回まとめたMESIプロトコルに対して、O(Owned)状態を加える。 O(…
マルチコアにおいて、キャッシュ・コヒーレンス・プロトコルというのは切っても切り離せない問題だ。 幾つかのプロトコルについてメモを書いたので、一応ここに残しておく。 MSIプロトコル MESIプロトコル MOESIプロトコル MSIプロトコル キャッシュ内のブロ…
現在の自作CPUは、簡易的にフロントエンドとバックエンドのデータ幅を一致させている。 例えば、バックエンドのキャッシュラインの幅が64Bであれば、フロントエンドも64Bにしている。 しかし、さすがにフロントエンドのデコードラインで64Bを一気にデコード…
Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…
Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…
Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…
Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…
自作CPUとサイクル精度シミュレータのサイクル比較を行っている。 モデルのパラメータが違っているので、いろいろと調整が必要だが、おおむね大きな流れとしては間違っていないように見える。 あとは分岐予測だな。RTL側の分岐予測がやはりうまく動いていな…
現在、自作CPUにおけるLSUのIQ(命令発行キュー)は、LSUパイプライン毎に分割されている。 これ自体を修正することも考えられるのだが、問題はIQへのディスパッチが偏りすぎていることだ。 現在の実装は非常にサボっていて、一度に発行できるメモリアクセス命…
前回の解析で、なんとなく要因が分かってきたので、とりあえずの解決策を適用する。 つまり、ALUからのフォワーディングは直接データを受け取るように部分的に変更を加える。 それ以外のフォワーディング(LSUから、CSUから)などはフォワーディングを受け取ら…
自作CPUの面積削減の試行をしている間、どこかの段階でサイクル性能がデグレードしてしまった。 デグレードする前のリビジョンを特定したので、デグレード前とデグレード後の実行ログは取得できたのだが、Dhrystoneの実行ログは非常に長いので、どこが原因な…
前回、FENCE命令における命令の順序について紹介したが、メモリアクセスにおいてより厳密な定義がある: Acquire アノテーション:ある命令に対してこのアノテーションが付属していると、この命令以降がクリティカルセクションであることを意味し、この命令…
RISC-Vにおけるメモリアクセスのフェンス命令は、以下のFENCE命令が定義されている。 基本的には、FENCE命令の前後におけるメモリアクセスの順序を強制するというのがこの命令の目的なのだが、オプションを見てわかる通りもう少し細かな制御ができる。 prede…
自作CPUの面積削減の試行をしている間、どこかの段階でサイクル性能がデグレードしてしまった。 デグレードする前のリビジョンを特定したので、デグレード前とデグレード後の実行ログは取得できたのだが、Dhrystoneの実行ログは非常に長いので、どこが原因な…