FPGA開発日記

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

FPGA開発日記 カテゴリ別インデックス

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…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (4. Microarchitecture Design and Implementation)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。続き。 xiangshan-…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (3. Microarchitecture Design and Implemenation)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 次は、マイクロアーキテクチャのトピックについて。 xiangshan-doc.re…

Vivado Simulatorを用いてUVMに入門する (3. テストベンチの解析)

UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 次にMonitorとScoreboardについてみていこうと思う。 monitorについては…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (2. XiangShanのAgile Development)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 xiangshan-doc.readthedocs.io https://github.com/OpenXiangShan/Xia…

Vivado Simulatorを用いてUVMに入門する (2. テストベンチの解析)

UVMに入門したくて、簡単な例を用いて試してみることにした。以下のようなシンプルなデザインをテストしたい。 vlsiverify.com adderとのインタフェースとして、以下を定義する。これによりテストベンチとDUTを接続する。 verify/addr_if.sv interface add_i…

Vivado Simulatorを用いてUVMに入門する (1. adderを用いたシンプルな例)

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]…

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (1. 概要)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。 xiangshan-doc.readthedocs.io https://github.com/OpenXiangShan/Xia…

SystemVerilogにおけるInterface内の関数を使うときのセンシティビティ・リストの考慮事項

SystemVerilogで回路記述をしていて、引っかかったところのメモ: www.edaplayground.com SystemVerilogのInterface内でFunctionを定義した場合、これを使う場合には注意が必要だ。 interface interface_counter; logic valid; logic [ 3: 0] counter; funct…

自作CPUの回路面積削減検討 (ROBの面積削減検討)

自作CPUの回路面積削減の続き。次はROBの面積削減を検討する。 ROBもCAMで構成する要素と、RAMで構成する要素がある。 これまですべてCAMで構成する要素を、RAMに変更して構成する。 // Instruction's static information from decoder typedef struct packe…

自作CPUの回路面積削減検討 (ストアバッファの面積削減検討)

自作CPUの回路面積削減の続き。ストアバッファの面積が結構大きいので、削減を検討する。 ストアバッファが大きくなっている原因は、直接的なものはよくわからないのだが、Atomic命令を処理するフィールドが少なくともかなり面積を使用しているので、これを…

自作CPUの回路面積削減検討 (命令発行条件の緩和検討)

自作CPUのいくつかの面積最適化を行っていたら、またバグが出てきた。今度はデッドロック系だ。 問題は、LSUの命令発行キューに対してリプレイキューが小さく設計してあることにある。 例えば、リプレイキューのエントリ数がNであり、リプレイキューまでのパ…

自作CPUの回路面積削減検討 (STQのフォワード論理削減検討2.)

現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。 LDQと異なり、各エントリはアドレスとデータの両方を管理す…

自作CPUの回路面積削減検討 (STQのフォワード論理削減検討)

現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。 LDQと異なり、各エントリはアドレスとデータの両方を管理す…

自作CPUの回路面積削減検討 (STQの面積削減検討)

現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。 LDQと異なり、各エントリはアドレスとデータの両方を管理す…

マルチポートRAMを使用するためのXOR Multiport RAMの実装

前のブログの記事では、LVTを用いたSingle Port RAMをMulti Portに複製するための方法について調査した。 msyksphinz.hatenablog.com LVT(Live Value Table)を用いた手法では、各RAMインデックスについて、どのバンクRAMに最新の値が書き込まれているかを示…

キャッシュのコヒーレンス・プロトコルについてまとめる (MOESIプロトコル)

マルチコアにおいて、キャッシュ・コヒーレンス・プロトコルというのは切っても切り離せない問題だ。 幾つかのプロトコルについてメモを書いたので、一応ここに残しておく。 MOESIプロトコル 前回まとめたMESIプロトコルに対して、O(Owned)状態を加える。 O(…

キャッシュのコヒーレンス・プロトコルについてまとめる (MSI/MESIプロトコル)

マルチコアにおいて、キャッシュ・コヒーレンス・プロトコルというのは切っても切り離せない問題だ。 幾つかのプロトコルについてメモを書いたので、一応ここに残しておく。 MSIプロトコル MESIプロトコル MOESIプロトコル MSIプロトコル キャッシュ内のブロ…

自作CPUのフロントエンドデータ幅とバックエンドデータ幅の分離検討

現在の自作CPUは、簡易的にフロントエンドとバックエンドのデータ幅を一致させている。 例えば、バックエンドのキャッシュラインの幅が64Bであれば、フロントエンドも64Bにしている。 しかし、さすがにフロントエンドのデコードラインで64Bを一気にデコード…

"Constructing a Weak Memory Model" を読む (4. GAMのOOOMPへの拡張)

Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…

"Constructing a Weak Memory Model" を読む (3. モデルの構築)

Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…

"Constructing a Weak Memory Model" を読む (2. 背景と形式的定義)

Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…

"Constructing a Weak Memory Model" を読む (1. 概要 / Introduction)

Weak Memory Modelについてもう少し知識をつけたかったので、論文を読んでみることにした。 arxiv.org 基本的にDeepLに翻訳してもらったものを、自分で読み直しながら直しているだけなので、自分でまとめているわけではない。 冗長なのは無編集でブログに貼…

自作CPUとサイクルモデルシミュレータのサイクル性能比較

自作CPUとサイクル精度シミュレータのサイクル比較を行っている。 モデルのパラメータが違っているので、いろいろと調整が必要だが、おおむね大きな流れとしては間違っていないように見える。 あとは分岐予測だな。RTL側の分岐予測がやはりうまく動いていな…

自作CPUの命令発行ポリシの最適化検討 (1. 初期改良とその評価)

現在、自作CPUにおけるLSUのIQ(命令発行キュー)は、LSUパイプライン毎に分割されている。 これ自体を修正することも考えられるのだが、問題はIQへのディスパッチが偏りすぎていることだ。 現在の実装は非常にサボっていて、一度に発行できるメモリアクセス命…

自作CPUの面積削減検討 (7. 再現パタンによる性能デグレードの解決策の考察)

前回の解析で、なんとなく要因が分かってきたので、とりあえずの解決策を適用する。 つまり、ALUからのフォワーディングは直接データを受け取るように部分的に変更を加える。 それ以外のフォワーディング(LSUから、CSUから)などはフォワーディングを受け取ら…

自作CPUの面積削減検討 (6. 再現パタンによる性能デグレードの解析)

自作CPUの面積削減の試行をしている間、どこかの段階でサイクル性能がデグレードしてしまった。 デグレードする前のリビジョンを特定したので、デグレード前とデグレード後の実行ログは取得できたのだが、Dhrystoneの実行ログは非常に長いので、どこが原因な…

RISC-VにおけるAcquire・ReleaseアノテーションとSpinlockの実現方法について

前回、FENCE命令における命令の順序について紹介したが、メモリアクセスにおいてより厳密な定義がある: Acquire アノテーション:ある命令に対してこのアノテーションが付属していると、この命令以降がクリティカルセクションであることを意味し、この命令…

RISC-VにおけるFENCE命令の詳細について

RISC-Vにおけるメモリアクセスのフェンス命令は、以下のFENCE命令が定義されている。 基本的には、FENCE命令の前後におけるメモリアクセスの順序を強制するというのがこの命令の目的なのだが、オプションを見てわかる通りもう少し細かな制御ができる。 prede…

自作CPUの面積削減検討 (5. リプレイの要因解析)

自作CPUの面積削減の試行をしている間、どこかの段階でサイクル性能がデグレードしてしまった。 デグレードする前のリビジョンを特定したので、デグレード前とデグレード後の実行ログは取得できたのだが、Dhrystoneの実行ログは非常に長いので、どこが原因な…