FPGA開発日記

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

2022-04-01から1ヶ月間の記事一覧

自作RISC-Vアウトオブオーダコアの実装 (標準構成でのベンチマーク)

前回とりあえず最も規模の小さなデザインで上手く動き出したので、徐々にスケールして動作するか確認してみる。 標準構成でシミュレーションすると、Dhrystoneで見事にアサーションエラーとなってしまった。 ./msrh_tb_rv64imc_standard-debug -d -e ../test…

Universal Hardware Data Model (UHDM) に関する情報を調べる (3. サンプルデザインで確かめる)

UHDMというのは、ハードウェアを表現するためのデータモデルで、YAML形式で表現されている。 私の持っている一番汎用的な書き方をしているモジュールが、どのようにUHDMで表現されるのか見てみることにした。 module bit_oh_or_packed #( parameter type T =…

自作RISC-Vアウトオブオーダコアの実装 (分岐の高速化2)

CALLとRETの問題について、もう少しアサーションを組みながら徹底的に解析していたのだが、何となく問題が分かってきた。 RISC-Vの命令は32ビットが基本なのだが、RVC命令をサポートするために16ビット境界に配置することができる。この時、この16ビット境界…

RISC-VのBOOMv3の分岐予測についてドキュメントとソースコードを読む2

BOOMv3のフロントエンド、特に分岐予測の部分についてちょっと実装を確認したくなった。 以下ドキュメントとソースコードを読んだ時のメモ。続き。 docs.boom-core.org RASのアップデートのタイミング 読み込みのタイミング。f3のタイミングでRASを読んでい…

RISC-VのBOOMv3の分岐予測についてドキュメントとソースコードを読む

BOOMv3のフロントエンド、特に分岐予測の部分についてちょっと実装を確認したくなった。 以下ドキュメントとソースコードを読んだ時のメモ。 docs.boom-core.org F0 PCの生成、命令キャッシュに投げる。 TLBにも投げる? BTBに投げる F1 BTBの参照 BIMの参照…

自作RISC-Vアウトオブオーダコアの実装 (分岐の高速化)

自作RISC-Vアウトオブオーダコアの実装、パフォーマンスの問題。分岐予測の効率が良くない。 特に今は非常にナイーブな実装であるため、JAL命令の予測ができていない。むしろこれは予測というよりも命令をキャッシュから取り出した時点で一発で分かるのでど…

Chipyardで独自コアシミュレーション環境構築方法の調査 (6. Chipyard 1.6.2で試行する)

自作CPUをChipyardの環境で動かすための確認。前回は色々と試行錯誤したがVerilatorのシミュレーションがうまく行かなかったのだった。 そこで、Chipyardのバージョンを1.6.2にアップデートして再度試行してみる。 現在のChipyardの最新バージョンが1.6.2な…

ISCA2021のVectorization Replayに関する論文を読む (2.)

ちょっと読んでいる論文のメモその2: ieeexplore.ieee.org 4. SRVメモリ曖昧さ回避アーキテクチャ A. 用語解説 水平依存:従来のステートメント間のデータ依存 垂直依存:レーン間の依存 リスト3は、2つのベクトルロード命令と1つのベクトルストア命令を持…

Chipyardで独自コアシミュレーション環境構築方法の調査 (5. シミュレーションエラー解析)

自作CPUをChipyardの環境で動かすために、何が必要かを久しぶりに確認した。 前回、Sensitivity List関連で何故シミュレーションが失敗するのかを見つけるために、デバッグビルドで再実行したのだった。 ./simulator-chipyard-MSRHConfig-debug +verbose -v …

ISCA2021のVectorization Replayに関する論文を読む (1.)

ちょっと読んでいる論文のメモ: ieeexplore.ieee.org SIMDアーキテクチャは、安全な場合にのみ、コードをベクトル形式に変換できる。メモリアクセスの解析能力や、メモリデータ依存が発生している場合は、コードの全領域を安全にベクトル化することが出来な…

Chipyardで独自コアシミュレーション環境構築方法の調査 (4. Verilatorでのシミュレーション)

自作CPUをChipyardの環境で動かすために、何が必要かを久しぶりに確認した。 Chipyardの環境で自作CPUを動かすために、Chipyardに自分のコアを認識させるのと、ソースファイルを食わせる必要がある。 色々やって、BOOMと同じ状況を作るためにソースファイル…

自作RISC-Vアウトオブオーダコアの実装 (浮動小数点除算器の組み込み)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。次はいよいよ除算器の組み込みだ。 浮動小数点除算器は一から作る訳では無く、例によってFPNewから拝借してくる。 これを組み込んでいく。どうも仕様を見ていると32ビットと64ビットを1モジュール…

フロントエンドプリフェッチに関する論文 "Re-establishing Fetch-Directed Instruction Prefetching: An Industry Perspective"を読む

ちょっとCPU設計のフロントエンドについて勉強がしたくなって、プリフェッチに関する論文を読むことにした。 ieeexplore.ieee.org 前回の続き。分岐予測器の基本的なところからサマライズしておく。 第2章:基本情報 A. 分岐予測について そもそも分岐予測の…

自作RISC-Vアウトオブオーダコアの実装 (FPUのサイクル数変更)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。現在整数側のパイプラインをベースとしてFPUのレイテンシを1としているが、そんなことはあり得ないので、レイテンシを伸ばしていこうと思う。 ただし、すべてのFPU命令のレイテンシを伸ばしていく…

OpenXiangShanのドキュメントを読んでいく

勉強のためにOpenXiangShanのドキュメントを読む。原文は中国語なので、翻訳しながらまとめていく。 xiangshan-doc.readthedocs.io XiangShanのフロントエンドについて読んでいく。これ、前に少し読んだ分岐予測器と命令フェッチを分離するアーキテクチャか…

GitHub Actionsを用いたsanity checkerをDockerを用いて構築する

自作RISC-Vコアの実装はGitHubを使って管理しているのだが、GitHub Actionsを使ってせいぜいVerilatorのLintチェッカーが落ちないように管理している。 このとき、GitHub Actionsを動かすためのYAMLを書く必要があるのだが、VerilatorのLintチェッカーを使う…

自作RISC-VコアをYosysで合成する試行 (3. sv2vによるデザイン全体の修正)

結構時間が空いてしまった。sv2vによるSystemVerilogのデザインをVerilogに修正する作業の続き。Yosysのためにいくつかのデザインを修正している。 最初はfilelistの中のファイルを1つ1つ変換して移行かと思ったが、パッケージの読み込みとかincludeの問題で…

フロントエンドプリフェッチに関する論文 "Re-establishing Fetch-Directed Instruction Prefetching: An Industry Perspective"を読む

ちょっとCPU設計のフロントエンドについて勉強がしたくなって、プリフェッチに関する論文を読むことにした。 ieeexplore.ieee.org この論文はArmの人が書いたもので、「アカデミックのフロントエンド設計はだめだ!産業界のリーダーが本物を教えてやる」とい…

自作RISC-Vアウトオブオーダコアの実装 (FPU命令のサポートとXLEN/FLENの違いによる実装変更)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。RISC-VのISAIMC/IMFC/IMFDCに対応するためにいくつかのパラメータの変更を行う必要があった。 RV32IMC/RV32IMFC などの構成では、FLD命令やFSD命令などのFLEN=64などの命令を除外する必要がある。…

自作RISC-Vアウトオブオーダコアの実装 (FPU命令のサポートとXLEN/FLENの違いによる実装変更 2)

昨日の続き。結局これはメモリアドレスのPMAの設定の問題で、Spikeは0xfffffff0へのアクセスを許可しているが、私の現在のRTLは許可していない、という話だった。 18005 : RTL(9,1) Exception Cause = SRET Flush(25) PC=0000ffc00140, Inst=10200073, sret …

自作RISC-Vアウトオブオーダコアの実装 (FPU命令のサポートとXLEN/FLENの違いによる実装変更)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。XLENとFLENが異なるコンフィグレーションをいくつも作って、自分の実装が正しいことを確認していきたい。 ここでは6つのコンフィグレーションを用意した。 - RV32IMC (XLEN=32, FLEN=0) - RV64IMC…

ISCA 2021の"Zero Inclusion Victim: Isolating Core Caches from Inclusive Last-level Cache Evictions"を読む

何となくマイクロアーキテクチャの論文を読みたくなったのでISCAの論文から選んで読んでみている。メモがてらブログにサマライズを書いていく。 2回目。もう少し提案手法を読み解いていく。 ieeexplore.ieee.org 図2はInclusive Victimsの数を正規化したもの…

自作RISC-Vアウトオブオーダコアの実装 (FPU命令のサポートとXLEN/FLENの違いによる実装変更)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。FMADD命令の実装に関して、いくつか大幅な実装の変更を行う必要があった。 FMADD命令は浮動小数点レジスタを3つ持っている。整数演算向けに、1命令で最大で2オペランドしかリネームする機構を持っ…

ISCA 2021の"Zero Inclusion Victim: Isolating Core Caches from Inclusive Last-level Cache Evictions"を読む

何となくマイクロアーキテクチャの論文を読みたくなったのでISCAの論文から選んで読んでみている。メモがてらブログにサマライズを書いていく。 ieeexplore.ieee.org 概要 Inclusive Cacheとは何か?上位のキャッシュ (LLCに対してL2キャッシュやL1キャッシ…

自作RISC-Vアウトオブオーダコアの実装 (FPNewとデータ変換命令のデバッグ)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。変換命令についてテストパタンを通しながらデバッグしている。 FFLAGSとFRMの関係性について 浮動小数点演算に必要な主要なフラグはいくつか定義されているが、重要なのはFFLAGS, FRM, FCSRであろ…

自作RISC-Vアウトオブオーダコアの実装 (FPNewとデータ変換命令のサポート)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。FPNewのデータ変換命令は、また別のユニットが担当するらしい。 fpnew_opgroup_multifmt_sliceというモジュールを使う。 基本的な動かし方は一緒なのだが、データの変換元と変換先の指定にop_mod_…

自作RISC-Vアウトオブオーダコアの実装 (FPNewと算術演算以外の命令サポート)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。FPUの基本的な算術演算はFPNewにより動作するようになったが、算術演算以外の命令はまだサポートしていない。調査してみよう。 FPNewはいくつかのサブモジュールから構成されているが、基本的な演…

OpenXiangShanのドキュメントを読んでいく

勉強のためにOpenXiangShanのドキュメントを読む。原文は中国語なので、翻訳しながらまとめていく。 xiangshan-doc.readthedocs.io XiangShanとは Chiselで開発されたオープンソースのRISC-Vプロセッサ。ロードマップは以下の通り。 2021年7月 雁栖湖アーキ…

自作RISC-Vアウトオブオーダコアの実装 (FPU演算のFFLAGSアップデートのサポート)

自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。 基本的な演算について、FPNewとの接続作業は完了した。演算自体は上手く回ってFPレジスタに答えを書くことが出来ているようだが、問題はFFLAGSをアップデートするパスを用意していなかった。この…

自作RISC-Vアウトオブオーダコアの実装 (FPNewによる浮動小数点命令のサポート試行)

自作RISC-Vアウトオブオーダコアの実装、FPUについて実装の調査を始めた。 FPUの演算器自体は自分で作るのは荷が重すぎる。既にオープンソースとして公開されているFPU実装を使ってみようと思う。 Rocket-ChipやBOOMなどはChiselで記述されたFPUエンジンであ…