FPGA開発日記

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

2024-09-01から1ヶ月間の記事一覧

Interface 2024年11月号 「ゼロから作るマルチコアOS」を買った

特集の内容に興味があったのと、付録が気になったので買ってみた。 マルチコアOSを数千行で作れるのはとても面白そうだ。時間を取って触ってみたい。 もう一つの付録は、コンピュータ・アーキテクチャというよりも情報処理技術者試験の基本問題みたいな内容…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (Return Address Stackのソースコードを概観する1)

NaxRiscvのRAS(Return Address Stack)に関連するソースコードを読んでいきたいと思う。 基本的にはSpinal-HDLのブロックを引っ張り出してVerilogのモジュールでまとめ上げて、わかりにくい展開されたような論理をまとめていったうえで中身を解析する。 まず…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (GShareのソースコードを概観する1)

NaxRiscvのGShareに関連するソースコードを読んでいきたいと思う。 基本的にはSpinal-HDLのブロックを引っ張り出してVerilogのモジュールでまとめ上げて、わかりにくい展開されたような論理をまとめていったうえで中身を解析する。 まず、GShareのためのメモ…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (PLRUのソースコードを概観する3)

ChatGPTにSpinal-HDLのstageableについて聞いてみた。 stageableは、パイプラインの各ステージ間で扱うデータや信号を定義するクラスです。これにより、複数のステージで使用されるデータを統一的に扱うことができ、ステージ間でのデータ転送や遅延の処理を…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (PLRUのソースコードを概観する2)

PLRUについてだいぶ分かってきた。 このアルゴリズムはTree PLRUというものに基づいている。各ツリーにおける状態を保持するためにstateという変数が各ノードで定義されている。 このstate変数により、どのWayに最新でアクセスされたのかを記録するようにな…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (PLRUのソースコードを概観する)

NaxRiscvの実装を解析しながら、SystemVerilog化することで理解を深めていこうと思う。 FetchCachePluginには、どのWayを置き換えるのかを計算するPLRUのコードが示されている。 いろいろ解析するとこれはTree PLRUを実装しているコードのようだ。しかしSpin…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (15. FetchCachePluginをSystemVerilogに変換する)

NaxRiscvの実装を解析しながら、SystemVerilog化することで理解を深めていこうと思う。 FetchCachePluginには、いくつかのRAMが定義されている。 reg [63:0] FetchCachePlugin_logic_banks_0_mem [0:511]; reg [63:0] FetchCachePlugin_logic_banks_1_mem [0…

SiFive Intelligence XM seriesのMatrix Engineについて

SiFiveが新しいRISC-Vプロセッサの系列としてIntelligence XMを発表した。 www.sifive.com XMのXはIntelligenceシリーズのXシリーズから来ていて、MはMatrix拡張のことと考えて間違いない。 ただ、Matrix Engineの命令に何を使っているのかここでははっきり…

「PCI Express設計の基礎と応用」を買った

PCI Express設計の基礎と応用―プロトコルの基本から基板設計、機能実装まで (インターフェース・デザイン・シリーズ)作者:畑山 仁ほかCQ出版Amazon 今までなるべく避けていた、PCI Expressについていよいよ勉強しなければならないので買った。 基本的な用語…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (14. FetchPluginをSystemVerilogに変換する)

NaxRiscvの実装を解析しながら、SystemVerilog化することで理解を深めていこうと思う。 FetchPluginは、PCPluginから渡されたPCをもとに命令フェッチを行うモジュールのように思われる。 module NaxRiscv_FetchPlugin ( input logic i_clk, input logic i_re…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (13. PCPluginをSystemVerilogに変換する)

NaxRiscvの実装を解析しながら、SystemVerilog化することで理解を深めていこうと思う。 まずはPCPluginから。このモジュールの役目は、PCの保持とアップデート、各種ハザードに応じてPCを更新することだ。 module NaxRiscv_PcPlugin ( input logic i_clk, in…

オープンソース・アウトオブオーダCPU NaxRiscvのドキュメントを読んでいく (5. 分岐予測ユニット)

NaxRiscvのドキュメントを、改めて位置から読んでみることにしたいと思う。 spinalhdl.github.io msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 分岐予測 現在、分岐予測はパイプライン内の二…

オープンソース・アウトオブオーダCPU NaxRiscvのドキュメントを読んでいく (4. メモリアクセスユニットについて)

NaxRiscvのドキュメントを、改めて位置から読んでみることにしたいと思う。 spinalhdl.github.io msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com メモリ・システム ロードストアの統合 LSUの実装の特徴は以下の通りである…

オープンソース・アウトオブオーダCPU NaxRiscvのドキュメントを読んでいく (3. 実行ユニットについて)

NaxRiscvのドキュメントを、改めて位置から読んでみることにしたいと思う。 spinalhdl.github.io msyksphinz.hatenablog.com msyksphinz.hatenablog.com 実行ユニット 実行ユニットの主な特徴は、それに依存する命令をウェイクアップする方法である。 静的ウ…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (12. PcPluginの実装解析)

PcPluginの実装の解析 github.com とりあえずまずはChatGPTにこのソースコードを解説してもらおうと思う。 - ジャンプロジックの設定: ジャンプロジックでは、登録されたジャンプ要求を優先度に応じてソートし、優先度が高いものから順に評価します。 ジャン…

オープンソース・アウトオブオーダCPU NaxRiscvのドキュメントを読んでいく (2. )

NaxRiscvのドキュメントを、改めて位置から読んでみることにしたいと思う。 spinalhdl.github.io msyksphinz.hatenablog.com Frontend デコーダ 特になし。 物理レジスタ割り当て 物理レジスタ割り当ては、割り当てられていない物理レジスタのインデックスを…

オープンソース・アウトオブオーダCPU NaxRiscvのドキュメントを読んでいく (1. イントロダクション)

NaxRiscvのドキュメントを、改めて位置から読んでみることにしたいと思う。 spinalhdl.github.io イントロダクション NaxRiscv NaxRiscv は現在、以下の特徴を持つコアである。 レジスタ・リネーミング付きアウト・オブ・オーダ実行 スーパースカラ(例:2デコ…

RISC-Vのメモリプロテクション機構のおさらい(PMP: Physical Memory Protection)

結構昔にRISC-VのPMP機構(Physical Memory Protection)について調査したのだった。 msyksphinz.hatenablog.com 改めて復習しているが、PMPのNAPOTについてあまり明確に理解していなかった。 PMPのアドレス範囲選択については、3つのモードがある: pmpcfg[*]…

Binary Hacks Rebootedを購入しました

Binary Hacks Rebooted —低レイヤの世界を探検するテクニック89選作者:河田 旺,小池 悠生,渡邉 慶一,佐伯 学哉,荒田 実樹オーム社Amazon 結構昔のBinary Hacksがまだ本棚に残っているかどうか不明だけど、Rebootedということで買いました。 自分はハードウェ…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (11. NaxRiscvで生成されるデザインの比較)

NaxRiscvの様々なコンフィグレーションでのVivado論理合成結果を見て比較してみる。 次はRV64の構成で試してみた。 Slice LUT Slice Registers WNS (ns) rv32ima 13478 7899 3.408 rv32imaf 18071 10655 3.150 rv32imafd 17669 9786 2.708 rv32imac 13702 81…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (10. NaxRiscvで生成されるデザインの比較)

NaxRiscvの様々なコンフィグレーションでのVivado論理合成結果を見て比較してみる。 riscv32での構成で試してみた。 普通は浮動小数点演算器をつけると周波数が落ちそうなものだが、そうはなっていない。ここには誤差が載っていそうな気がする。 rv32imafとr…

オープンソース・アウトオブオーダCPU NaxRiscvを概観する (8. オプションで生成されるVerilogデザインを制御できるか?)

msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com もうちょっとまともに読めるSyste…

RISC-V Advanced Platform Interrupt Controller (APLIC) の概観 (3. RTL実装の概観)

RISC-VのAdvanced Platform Interrupt Controller (APLIC) について勉強してみようと思う。 以下においてある実装をチェックしてみることにした。 github.com APLICはいくつかのモードによって実装が切り替わるようになっているらしい。 MSI_MODE=true AIA_E…