FPGA開発日記

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

2021-06-01から1ヶ月間の記事一覧

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (13. ベクトルロード命令のバリエーション2)

RISC-Vベクトル拡張仕様書の読み直し。ベクトルロード命令の続き。 セグメントアクセスとかが増えてきてこの辺は非常にグロい部分。そもそもEEWとSEWでメモリアクセスは挙動が違うのに、非常に複雑になってしまっている... 他の算術演算と一緒でEEWとSEWを統…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (12. ベクトルロード命令のバリエーション1)

RISC-Vベクトル拡張仕様書の読み直し。次はベクトルロード命令。 github.com github.com 7.3. ベクトルロードストア幅のエンコーディング ベクトルのロードとストアは、命令に直接EEWがエンコードされています。 対応するEMULはEMUL = (EEW/SEW)*LMULとして…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (11. ベクトルロード命令)

RISC-Vベクトル拡張仕様書の読み直し。次はベクトルロード命令。 github.com github.com 7. ベクトルロード・ストア命令 ベクトルのロードとストアは、ベクトルレジスタとメモリの間で値を移動させます。 ベクトルロードとストアはマスクされ、非アクティブ…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (9. ベクトルの各要素の定義)

RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタの要素の定義 ベクトルレジスタはマスクしたりプリスタートで実行を省略したりと、さまざまなモードがある。 それらの要素の意味を厳密に定義するのが本章の目的。 github.com github.com 6. コンフィ…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (8. ベクトルの各要素の定義)

RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタの要素の定義 ベクトルレジスタはマスクしたりプリスタートで実行を省略したりと、さまざまなモードがある。 それらの要素の意味を厳密に定義するのが本章の目的。 github.com github.com 5.4. プリス…

SonicBOOMの分岐命令管理に関する調査

SonicBOOMに限らず、多くのOoOプロセッサには分岐命令管理用のタグが付いているという認識だ。brtagと一般的に呼ばれているこのタグは、分岐命令に対してそれぞれ付与されており、また分岐命令以外の命令にも一貫して付与されている。分岐タグは「この命令は…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (7. ベクトル命令のオペランドフォーマット)

RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタのオペランドフォーマット。 基本的にスカラレジスタとオーバラップすることはない。ただしベクトルレジスタの中でv0だけが特殊で、マスクレジスタとして扱われることに注意。 マスクレジスタはベクト…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (6. ベクトルレジスタのマッピング方法)

RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタのマッピング方法について。 これはかなり難しい。つまりLMUL、SEW、VLENを定義した状態で、「ベクトルレジスタ1つ」はどこまでを含むのかという問題になる。 Groupingによりベクトルレジスタを複数扱…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (5. その他のCSRレジスタ)

RISC-Vベクトル拡張仕様書の読み直し。その他のベクトルCSRレジスタについて。 github.com github.com 3.7. ベクトル固定小数点丸めモードレジスタ vxrm ベクトル固定小数点丸めモード・レジスタは、2ビットの読み書き可能な丸め込みモード・フィールドを保…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (4. vstartレジスタ)

RISC-Vベクトル拡張仕様書の読み直し、次はvstartについて。 これは単純。要するにベクトル要素のどこから演算を開始させるか、という話。 github.com github.com 3.6. ベクトルスタートインデックスCSR vstart 読み書き可能なCSRである vstart は、 Prestar…

SonicBOOMに関する調査 (8. Load-useに関する調査2)

SonicBOOMのロードユースについて調査したい。キャッシュヒットした場合、ロード命令からその次の依存命令まで何サイクル掛かるのか。 CoremarkのPointer Chase部分についてサイクル数を確認している。当該部分はここになる。 11996 3 0x000000008000122a c.…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (3. vta/vmaフィールド)

RISC-Vベクトル拡張仕様書の読み直し、次はvta / vmaについて。 これも理解するのは少し厄介。要するに無効な要素の扱いをどのようにするかということだが、 リネームするマシンとそうでないマシンで、効率よく実装するために色々と考え込まれている。 3.3.3…

CARRV 2021の発表論文概観 (2)

ISCA 2021と併設されているCARRV 2021の論文が公開されている。25本近くの論文が公開されているのですべてを読むことは出来ないので、とりあえずカテゴリ別にAbstractだけ読んで日本語にしてみることにした。 今回は後半。 carrv.github.io シミュレーション…

CARRV 2021の発表論文概観 (1)

ISCA 2021と併設されているCARRV 2021の論文が公開されている。25本近くの論文が公開されているのですべてを読むことは出来ないので、とりあえずカテゴリ別にAbstractだけ読んで日本語にしてみることにした。 これも量としてはかなりあるので、DeepLにお世話…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (2. vtypeレジスタ)

RISC-Vベクトル拡張仕様書の読み直し、次はvtypeについて。 ここがRISC-Vベクトル拡張の一番難しいところ。vlmulに応じてベクトルの長さとグルーピングが変わる。やっかいなところ。 結構昔に翻訳したバージョンだと、LMULは整数しか取れないようになってい…

SonicBOOMに関する調査 (7. Load-useに関する調査)

SonicBOOMのロードユースについて調査したい。キャッシュヒットした場合、ロード命令からその次の依存命令まで何サイクル掛かるのか。 以下のようなテストプログラムを作成した。ロードした命令を次にadd命令で使用する。ヒットしたときとそうでないときでレ…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す

RISC-Vベクトル拡張が V1.0のためのRC1になったので、改めて読み直してみることにした。 数年前にベクトル拡張の仕様書0.8あたりを日本語に翻訳したのだが、同じように日本語に変えながら理解していく。 この翻訳の成果は、以下に格納している。 github.com …

VerilogのメモリをVerilatorではどのように処理するのか

Verilogでは以下のように、いくつかの書き方でメモリを作ることができる。memory1は通常のは配列の構造、memory2は連想配列となっている。SystemVerilogの仕様的に通常の配列はそのまま利領域がメモリに確保され、連想配列は動的に配列の要素が確保される仕…

SonicBOOMに関する調査 (6. BOOMの自己書き換えコードについての確認)

自作CPUで仮想アドレスのコードを流していると、TLBエラー発生時にユーザコードをコピーしてユーザ領域に移すコードが存在している。このコピー作業を終えた後にユーザモードに戻ってプログラムの実行を再開する。 この時に、コピーしたプログラムは当然L1D…

RISC-V "V" Vector Extension の仕様が 1.0 Release Candidate-1となった

RISC-V Vector Extensionの仕様はv0.9からまさかのv0.10となり、いつになれば正式版になるのかと思っていたが、やっと1.0のRC1が公開されたようだ。といってもTagが打たれただけで、今度はRISC-V Internationalによる承認フローに入るものと思われる。 v0.10…

SonicBOOMに関する調査 (5. BranchTagの構成 2)

BOOMのBranchTagについての解析の続き。分岐命令の予測が外れて、分岐がジャンプする方向に分岐が飛んだものとする。これがこの波形。 この部分のようだ。ずっとBEQでループを繰り返していたが、ループの終了で予測が外れている。 121368 3 0x00000000800015…

SonicBOOMに関する調査 (4. BranchTagの構成)

BOOMにはBranch Tag(brtag)というのが採用されており、これが一般的なのかは分からないが、どういう機構で動いているのか調査することにした。 Branch Tagはその名の通り分岐命令に対して付与されるタグで、このタグに応じてRenameMapのスナップショットが取…

SonicBOOMに関する調査 (3. FPUの構成)

次はBOOMのFPUについて解析する。BOOMのFPUパイプラインは以下のファイルで定義されている。 src/main/scala/exu/fp-pipeline.scala //********************************** // construct all of the modules val exe_units = new boom.exu.ExecutionUnits(fp…

経産省の「半導体・デジタル産業戦略」の資料を読んでみた

経済産業省がまとめた「半導体・デジタル産業戦略」の資料が公開されていたので読んでみた。いわゆる「半導体の国家戦略」と元となる資料で、どういう施策を計画しているのか興味があるので読んでみることにした。 www.meti.go.jp 資料は4種類用意されている…

SonicBOOMに関する調査 (2. リネームマップの調査)

SonicBOOMのロールバックについてもう少し。 よく考えてみると、物理レジスタIDは新しい命令から順にロールバックして行かないと確定した最も古い命令まで戻ってくることができないので、ROBエントリを逆順に戻してくるはずだ(まさに「ロールバック」なので…

SonicBOOMに関する調査 (リネームマップの調査)

SonicBOOMのリネームマップについてその構造を調査した。リネームマップは、論理レジスタから物理レジスタIDへの変換を行うことで仮想的に論理レジスタよりも多くのレジスタを扱うことができるような機能で、アウトオブオーダ実行を行うCPUではほぼ必須の機…

TileLinkのCache Coherencyプロトコル (8. TileLink-Cの動きを把握する)

TileLinkによるTL-Cによるコヒーレントプロトコルの確認、もう少し波形を読み解いていく。 まず、アドレス0x80002540に対するメモリアクセスが発生し、Core0がL2キャッシュにたいしてそのキャッシュラインのアクセスリクエスト(AcquireBlock)を出す。 それに…

TileLinkのCache Coherencyプロトコル (7. TileLinkのプロトコル確認)

前回のプログラムにおいて、TileLinkがどのような動きをしているのか確認してみる。 あるキャッシュブロックを取得する際、L2キャッシュはBチャネルを使ってProbeコマンドを送り、そのブロックを持っているキャッシュに対してそのブロックを取得するためのコ…