FPGA開発日記

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

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コマンドを送り、そのブロックを持っているキャッシュに対してそのブロックを取得するためのコ…

TileLinkのCache Coherencyプロトコル (6. DualCore環境でのメモリを取り合うプログラムを試す)

msyksphinz.hatenablog.com 前回のコードは、ブートローダの動きを観察するにCRTに多少の改造を加えなければならないことが分かった。 crt.S # get core id csrr a0, mhartid # 最大4コアまでを仮定する li a1, 4 1:bgeu a0, a1, 1b main()関数の中の動きは…

Verilator勉強会の資料を公開しました

2021/05/29(土)に実施されたVerilator勉強会の発表資料を公開しました。 msyksphinz.github.io 私はVerilatorで何かを作り上げたわけではないので、いろいろとソースコードを読んで試行錯誤した結果を資料としてまとめ上げたものだった。 急ピッチで作ったの…

TileLinkのCache Coherencyプロトコル (5. DualCore環境でのメモリを取り合うプログラムを試す)

DualCoreでL2キャッシュの同じラインを取り合うようなプログラムを作ってみることにする。 試してみるのはFalse Sharingのテストで、同じキャッシュラインで別の場所に別のコアが値を書き込み続け、そのキャッシュラインを複数のコアが取り合うようなコード…

TileLinkのCache Coherencyプロトコル (4. SiFive Inclusive Cache の動作を観察する)

SiFive Inclusive Cacheは複数コアからのリクエストを処理しコヒーレントを取ることのできるL2キャッシュであるが、その内部構成を見ていこうと思う。 GTKWaveで見たところ、ざっくりと以下のような階層構成になっていた。 InclusiveCacheのインタフェースと…

BOOMのTLBに関する調査 (8. TLBのSFENCE.VMA命令の取り扱い)

SonicBOOM(というかRocket-Chip全体)のTLBにおけるSFENCE.VMA命令の取り扱いについて調査した。SFENCE.VMA命令はTLBなどのアドレストランスレーションに対してフェンスを作るための命令で、命令仕様的に、SFENCE.VMA命令は指定されたレジスタオペランドに…

TileLinkのCache Coherencyプロトコル (3. TileLinkコヒーレンスプロトコルテスト用のDualCore構成生成)

Chipyardにはマルチコア構成環境が搭載されており、Rocket-Chipではマルチコア構成環境が作られている。同様にBOOMでもマルチコア構成環境を試行してみる。 BOOMのコンフィグレーションは以下のファイルに定義されている。以下のようににしてDualMediumBoomC…

TileLinkのCache Coherencyプロトコル (3. TileLinkコヒーレンスプロトコルテスト用のDualCore構成生成)

Chipyardにはマルチコア構成環境が搭載されており、Rocket-Chipではマルチコア構成環境が作られている。同様にBOOMでもマルチコア構成環境を試行してみる。 BOOMのコンフィグレーションは以下のファイルに定義されている。以下のようににしてDualMediumBoomC…

TileLinkのCache Coherencyプロトコル (2. TileLinkのコヒーレンシフロー)

TileLinkプロトコルの続き。 まず、以下のような構成にてどのようにキャッシュブロックが移るのかを見ていく。キャッシュを含めてそれぞれのノードにはブロックのコピーが置かれるわけだが、それぞれについて許可できる操作が異なる。 None:コピーを持って…

TileLinkのCache Coherencyプロトコル (1. TileLinkの定義チャネル)

TileLinkはAMBA、OCP(Open Core Protocol)のような共通バスプロトコルとしてSiFive社により定義されたプロトコルである。SiFive社が公開しているRocket-Chip、BOOM、ChipyardやDiplomacyを理解するときには必ず通らなければならない仕様だ。 このプロトコ…

BOOM (Berkeley Out-of-Order Machine) のマイクロアーキテクチャドキュメントを読む (13)

RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org GShare分岐予測器 GShare はシンプルですが非常に効果的な分岐予測…