FPGA開発日記

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

2021-01-01から1年間の記事一覧

年末なので今年のまとめをしよう2021

FPGA開発日記は2015年1月4日開始から、おおよそ7年が経過しました。 年末年始なので、2021年をいろいろと振り返っていこうと思う。 今年の最初には、以下のような目標を設定していました。あんまり見直したくねえなあ... 引き続きRISC-Vをベースとしたエコシ…

自作RISC-V CPUコア実装(RASの動作確認2)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードのボトルネックを解決した。 そうこうしているうちにいつの間にかRET命令のRAS予測が怪しくなってきているので修正しておきたい。 RASの修正を行って、簡単なテストケースならば…

自作RISC-V CPUコア実装(RASの動作確認)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードのボトルネックを解決した。 そうこうしているうちにいつの間にかRET命令のRAS予測が怪しくなってきているので修正しておきたい。 RASの実装を確認するために、とりあえず以下の…

自作RISC-V CPUコア実装(LDQ/STQ間のフラッシュインタフェースの性能確認)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。Dhrystoneの実行に当たりしばらくデバッグしていたのだが、いろいろ試行錯誤してようやくまともに動作するようになってきた気がする。 …

LLVMベースの難読化ツールoLLVMの調査 (2. 生成CFGの調査)

LLVMをベースにしたコードの難読化ツールとしてoLLVMというのがあるというのを知った。どういうものなのか少し見てみようと思う。 github.com 論文は以下で取得可能だ。 ieeexplore.ieee.org Obfuscator-LLVM: Software Protection for the Masses https://c…

LLVMベースの難読化ツールoLLVMの調査

LLVMをベースにしたコードの難読化ツールとしてoLLVMというのがあるというのを知った。どういうものなのか少し見てみようと思う。 github.com 論文は以下で取得可能だ。 ieeexplore.ieee.org Obfuscator-LLVM: Software Protection for the Masses https://c…

自作RISC-V CPUコア実装(RET命令の再考)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードのボトルネックを解決した。 そうこうしているうちにいつの間にかRET命令のRAS予測が怪しくなってきているので修正しておきたい。 フロントエンドのパイプラインステージをs0, s1…

自作RISC-V CPUコア実装(LDQ/STQ間のフラッシュインタフェースの実装 3)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。 一応、簡単なベンチマークでこの問題が解決できることを見たので、次にDhrystoneを流してどれくらい実行速度が向上するのか見てみよう…

Chipyard v1.5.0のコンパイル手順メモ

ちょっと訳あってChipyardのバージョンアップ試行した。これまではv1.3.0を使っていたのだがあまりにも古いのでv1.5.0に切り替えてみる。 github.com Chipyardの何が面倒くさいかって、GNUツールチェインもついているのでそれのビルドに時間がかかる。バイナ…

RISC-V Summit 2021の資料が(一部)公開されている

https://events.linuxfoundation.org/riscv-summit/ RISC-V Summitは去年は完全にオンラインで実施していたようだけど、今年はハイブリッドでの開催となっているようだ。 RISC-V Summitの発表資料の一部が公開されていた。全部を見るのは厳しいけど、興味の…

自作RISC-V CPUコア実装(LDQ/STQ間のフラッシュインタフェースの実装 2)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。 一応、簡単なベンチマークでこの問題が解決できることを見たので、次にDhrystoneを流してどれくらい実行速度が向上するのか見てみよう…

自作RISC-V CPUコア実装(LDQ/STQ間のフラッシュインタフェースの実装)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。 ずいぶんと時間が空いてしまったが実装のデバッグを行う。以下のようなプログラムを作成して検証する。 loop: div x3, x3, x4 sd x10,…

RISC-Vの新拡張仕様概観1

2021年11月に新拡張仕様がかなりの数Ratifiedされた。その情報自体については知っていたけれども、あまり詳細を調査していなかったので見てみることにする。 RISC-Vの拡張仕様は通常MISAレジスタによってA-Zに対応付けて表記されるが、拡張が増えすぎてしま…

「Chiselで始めるデジタル回路設計」を献本いただきました

RISC-V Day Tokyo 2021 Autumnで配布されたChisel本、「Chiselで始めるデジタル回路設計」を献本いただきました。 RISC-V Day Tokyo幹事団の皆様、ありがとうございます。 本書の翻訳の進捗については私は全く関わっていないのですが、Slack上で議論が行われ…

自作RISC-V CPUコア実装(LDQ/STQ間のフラッシュインタフェースの確認)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。 次に検討するのは、LDQ/STQの最適化だ。以前の記事で説明したとおり、LDQとSTQの間でインタフェースを作成し、STQからのパイプライン…

自作RISC-V CPUコア実装(LDQ/STQ間のフラッシュインタフェースの実装)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。 次に検討するのは、LDQ/STQの最適化だ。以前の記事で説明したとおり、LDQとSTQの間でインタフェースを作成し、STQからのパイプライン…

「はてなブロガーに10の質問」で振り返る「FPGA開発日記」の6年間

はてなブログ10周年特別お題「はてなブロガーに10の質問」 これははてなブログの企画です。別に記念日でも何でもありませんが、せっかくなので乗っかることにしました。 FPGA開発日記は2015年からおおよそ6年間続いています。10の質問に答えることでこの6年…

RISC-VのePMP(PMP Enhancements)仕様について概観する

RISC-VのPrivileged仕様Version 1.12 ではePMPレジスタ群(PMP Enhancements)についての仕様が検討されている。 これについて調査してみよう。 仕様書は以下に置いてある。誰でもダウンロードできる。 https://raw.githubusercontent.com/riscv/riscv-tee/mai…

RISC-VのCMO(Cache Management Operation) 仕様について概観する

RISC-VのPrivileged仕様Version 1.12 ではCMO命令群(Cache Management Operation)についての仕様が検討されている。 これについて調査してみよう。 仕様書は以下に置いてある。誰でもダウンロードできる。 github.com キャッシュ操作命令については以下の3種…

自作RISC-V CPUコア実装(データキャッシュバンク化の効果)

自作CPUの実装、ロードストア命令のバンク化を実現した結果分岐予測の性能ボトルネックが明らかになった。 性能ボトルネックになっているのは、s0ステージで命令フェッチ、s2ステージで分岐先を予測とということで合計2サイクル分岐予測に必要だったため、命…

自作RISC-V CPUコア実装(データキャッシュバンク化の効果)

自作CPUの性能向上のために、これまで単一バンクだったデータキャッシュを作り変えてみよう。 バンク化の効果を確かめる。以下のようなプログラムを作ってLSUパイプラインの2つから別のバンクにアクセスをかけ、コンフリクトが発生するかどうかを確認する。 …

自作RISC-V CPUコア実装(データキャッシュバンク化)

自作CPUの性能向上のために、これまで単一バンクだったデータキャッシュを作り変えてみよう。 一般的に高性能プロセッサでは複数のLSUパイプラインが同時にデータキャッシュにアクセスする。しかしSRAMは一般的に1ポートしか読み込みポートが存在しないので…

CPUのメモリアクセス命令投機実行の資料を読む (実装の検討)

前回読んだ資料を基に、自作CPUのLSUを作り変えてみようと思う。 EECS 470 Lecture 12 Memory Speculation https://web.eecs.umich.edu/~twenisch/470_F07/lectures/12.pdf 現時点で私の自作CPUはLDQとSTQが別々に実装されているが、LDQはパイプライン実行時…

CPUのメモリアクセス命令投機実行の資料を読む

ある程度頭に入っているつもりだが、CPUにおけるアウトオブオーダ実行でのメモリアクセス命令の取り扱いについて確認する。 EECS 470 Lecture 12 Memory Speculation https://web.eecs.umich.edu/~twenisch/470_F07/lectures/12.pdf 動的にメモリ操作の順序…

SystemVerilogでのqueue arrayにおけるsortの勉強 (と、性能評価用のレイテンシ測定機能実装)

性能評価用に各命令のレイテンシを測りたいのだけれども、最終的な出力ではレイテンシが大きい順番に命令をソートして出力したい。 DPIを使用すれば上手く行きそうだがDPIを使うこと自体が面倒くさい。なんかSystemVerilogで良い機能無いかなーと探していた…

自作RISC-V OoOコアの分岐予測性能解析 (RASの実装改善)

分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、なかなか性能が伸びない。 RASの実装についていろいろ考えなおして、やっとこさある程度安定して動きそうな構成を見つけてきた。 Dhrystoneはまだ完走していないが、殆ど完走でき…

Universal Hardware Data Model (UHDM) に関する情報を調べる

UHDMというのは、ハードウェアを表現するためのデータモデルで、YAML形式で表現されている。 エコシステム全体でSystemVerilogをサポートするための共通オブジェクトフォーマットとして、UHDMが定義されており、このための論文を読んでみることにした。 体裁…

Universal Hardware Data Model (UHDM) に関する情報を調べる

UHDMというのは、ハードウェアを表現するためのデータモデルで、YAML形式で表現されている。 エコシステム全体でSystemVerilogをサポートするための共通オブジェクトフォーマットとして、UHDMが定義されており、このための論文を読んでみることにした。 体裁…

BOOMのFetch Target Queue (FTQ)の役割について考える

https://docs.boom-core.org/en/latest/sections/instruction-fetch-stage.html より引用 自作RISC-Vコアのテストをいろいろやっていく中で、あれ?これどうやって実現すればいいんだろう、というのがある。 今引っかかっているのは、RASからの回復(1日に1時…

MICRO 2021の論文を読む (Software Defined Vector (2))

MICRO 2021 の論文が Free Access になっているので、興味のあるものを読んでいくことにした。 Software-Defined Vectorの続き。メモリアクセスを頑張っているようだが、ここまで分散させているとちゃんとコンシステンシが取れるのか不思議に思えてくる。 ht…