FPGA開発日記

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

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

M1 macOSでLLVMをビルドする際に必要なCMakeのオプションまとめ

M1 macOS上でLLVMをビルドして、C言語プログラム注で#include <stdio.h>を使用しようとするとエラーになったりするのだが、これを回避する方法を色々と探していた。 stackoverflow.com 結論から言うと以下のコマンドでビルドできる。 cmake -G Ninja \ -DCMAKE_OSX_AR</stdio.h>…

clangでRISC-V Vector ExtensionのAuto Vectorizationを試す

Ubuntu 22.04 LTS上でインストールできるclang14を試す。 void vector_test (const long long *a, const long long *b, long long *c) { for (int i = 0; i < 256; i++) { c[i] = a[i] + b[i]; } return; } clang-14 -c vector_test.c -menable-experimental…

IBM POWER7の論文を読む (4. 命令フェッチ)

マイクロアーキテクチャに関する論文を読んでいる。今回はIBM POWER7に関する論文。 ieeexplore.ieee.org 戻って命令フェッチを見ていく。 命令フェッチ 命令キャッシュ : 32KB、4ウェイセットアソシアティブ 16ウェイバンク設計 IEADIRを使用して、この中か…

IBM POWER7の論文を読む (3. LSUの概要2)

マイクロアーキテクチャに関する論文を読んでいる。今回はIBM POWER7に関する論文。 ieeexplore.ieee.org LSUの続き。 アドレス変換 EA (Effective Address) : 有効アドレス。64-bit RA (Real Address) : 実アドレス : 46-bit 第1レベル変換 EAからRAへ変換…

IBM POWER7の論文を読む (2. LSUの概要)

マイクロアーキテクチャに関する論文を読んでいる。今回はIBM POWER7に関する論文。 ieeexplore.ieee.org 先に興味のあるデータアクセス用のLSUについて読んでいく。 データフェッチユニット LSUはLS0とLS1の対称な実行パイプラインを持っている。1サイクル…

IBM POWER7の論文を読む (1. イントロダクション)

マイクロアーキテクチャに関する論文を読んでいる。今回はIBM POWER7に関する論文。 ieeexplore.ieee.org 本論文では、POWER7プロセッサの主な機能について説明する。 各コアは4-wayの同時マルチスレッディングが可能な8コアのプロセッサが搭載されている。 …

Ubuntu 22.04 LTSでのRISC-Vツールチェイン試行 (2. QEMUのバージョン試行)

実際にはM1 Mac上で構築したLima上のUbuntu 22.04 LTS上でのビルドの試行だけれども。QEMUでのLinuxブート環境が構築したくて、RISC-V Getting Started Guideをそのまま試してみることにした。 なんかうまく行かないので、QEMUのバージョンを2種類用意してみ…

Ubuntu 22.04 LTSでのRISC-Vツールチェイン試行

実際にはM1 Mac上で構築したLima上のUbuntu 22.04 LTS上でのビルドの試行だけれども。QEMUでのLinuxブート環境が構築したくて、RISC-V Getting Started Guideをそのまま試してみることにした。 risc-v-getting-started-guide.readthedocs.io RISC-Vツールチ…

M1 Macでriscv-gnu-toolchainのビルド

M1 Mac上にRISC-Vのツールチェインを構築したくて色々試行錯誤している。 git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git -b 2022.05.15 cd riscv-gnu-toolchain mkdir build export RISCV=${インストールしたいディレクトリ} ../confi…

riscv-isa-simのメモリモデルを使用してRTLのメモリアクセスを検証する方法の調査

自作RISC-V CPUの検証をするため、メモリアクセスをSpikeで検証することを考える。 L1Dのアップデートのタイミングで、現状のメモリの状態を確認することを考えてみよう。 いくつかのチェックポイントがあるはずだ。 L1Dからデータを外部に吐き出すタイミン…

riscv-isa-simのメモリモデルを使用してRTLのメモリアクセスを検証する方法の調査

自作RISC-V CPUの検証をするため、メモリアクセスをSpikeで検証することを考える。 L1Dのアップデートのタイミングで、現状のメモリの状態を確認することを考えてみよう。 いくつかのチェックポイントがあるはずだ。 L1Dからデータを外部に吐き出すタイミン…

riscv-isa-simのMMUを使用してRTLのMMUを検証する方法の調査

自作RISC-V CPUの検証をするため、SpikeのMMUを使うことを考える。どうしてもTLB周りとか、VA→PAの検証はデバッグが難しい。 ハードウェアが勝手にPage Table Walkして、万が一L1Dキャッシュにデータを書き損じていた場合、波形を一生懸命眺めないと検証でき…

独自LLVMバックエンドのLLVM14対応を確認

独自に作っていたLLVMのRISC-Vバックエンド、LLVM14のリリースに対する対応を確認する。 LLVMバックエンドはバージョンが変わるとAPI群が直ぐに使用が変わってしまうため油断できない。 llvm/Support/TargetRegistry.hの位置が変わっていた。llvm/MC/TargetR…

独自LLVMバックエンドのLLVM13対応を確認

独自に作っていたLLVMのRISC-Vバックエンド、LLVM13のリリースに対する対応を確認する。 LLVMバックエンドはバージョンが変わるとAPI群が直ぐに使用が変わってしまうため油断できない。 needsStackRealignment が hasStackRealignment に変わっていた。 調べ…

MacOS (Apple Silicon)でのChipyard動作試行

相変わらずApple Silicon上での作業に四苦八苦しているのだが、Chipyardの環境が構築できるのか思考している。 github.com このリポジトリを使うためには最初にツールチェインをビルドする必要がある。これまではサボってビルド済みバイナリをダウンロードす…

Alpha 21264に関する論文を読む (6. バスインタフェースユニット)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。 ieeexplore.ieee.o…

自作RISC-Vコア向け環境のlibelfを置き換える試行

ひょんな理由でM1 Macを使う必要が生じたのだが、MacOSにはlibelfが無いということが分かった。 いろいろ考えて、x86のLinuxを仮想マシンでシミュレートするか、それともそもそもMac環境で開発することを諦めるか考えたのだが、よく考えてみるとriscv-isa-si…

MacOSでのRISC-Vツールチェインの動作確認

ひょんな理由でM1 Macを使う必要が生じたので、M1 Mac上で自分のRISC-Vコアをシミュレーションする方法について模索している。 M1 MacはベースがArmなのでいろんな環境がLinuxと異なっているのだが、そのへんをどのように調整すればいいのか四苦八苦すること…

Alpha 21264に関する論文を読む (5. メモリアクセスユニット)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。 ieeexplore.ieee.o…

MIPSがRISC-Vに化けた。P8700とI8500コア

前々から噂されていた、MIPSがRISC-Vを作っている話、正式発表があったようだ。 PシリーズとかIシリーズとかMIPSの時代からあった名前なので、それがそのまま踏襲されてしまっている。ただし中身はRISC-V。 riscv.org eVocore P8700 これはかつてのMIPS Pシ…

Alpha 21264に関する論文を読む (4. 実行ユニット / メモリアクセスユニット)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。 ieeexplore.ieee.o…

Alpha 21264に関する論文を読む (3. 分岐予測)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。 ieeexplore.ieee.o…

Alpha 21264に関する論文を読む (2. 命令発行キュー)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。 ieeexplore.ieee.o…

Alpha 21264に関する論文を読む (1. 概要とフロントエンド)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。 ieeexplore.ieee.o…

自作RISC-V CPUコアで構成を変えながら性能を測定していく (5. Pipeline Visualizerのトレース生成実装)

自作RISC-V CPUコアの方は、いくつかのコンフィグレーションにおいてDhrystoneを完走させることができるくらいになってきた。 パイプライントレースのログ生成を実装する。基本としては各モジュールのパイプラインステージ毎にDPI-Cを通じてC++側に情報を取…

自作RISC-V CPUコアで構成を変えながら性能を測定していく (4. Pipeline Visualizerを導入する)

自作RISC-V CPUコアの方は、いくつかのコンフィグレーションにおいてDhrystoneを完走させることができるくらいになってきた。 ちょっとパイプラインのボトルネックが見えないので、Pipeline Visualizerを導入してみることにした。 使ってみたのはKanataとい…

Chipyardで独自コアシミュレーション環境構築方法の調査 (7. Rocket-Chipでの動作確認)

前回、Chipyardで自作CPUが動かないのを解析していたのだが、波形を見ても全然分からないので、正しく動くリファレンスデザインと比較することにした。 msyksphinz.hatenablog.com 比較対象は全く同じ構成でRocket-Chipを接続したもの。 FSTで波形を取って観…

自作RISC-V CPUコアで構成を変えながら性能を測定していく (3. Dhrystoneのボトルネック解析ツール)

自作RISC-V CPUコアの方は、いくつかのコンフィグレーションにおいてDhrystoneを完走させることができるくらいになってきた。 前回の結果に基づいて、どの部分でストールが発生しているかというのをチェックする。 まず、命令バッファが埋まり切っているタイ…

自作RISC-V CPUコアで構成を変えながら性能を測定していく (3. Dhrystoneのボトルネック解析ツール)

自作RISC-V CPUコアの方は、いくつかのコンフィグレーションにおいてDhrystoneを完走させることができるくらいになってきた。 次に、どこがボトルネックになっているのかを見てみるために、いくつか性能ダンパーを追加することにした。 基本的に見てみたいの…

自作RISC-V CPUコアで構成を変えながら性能を測定していく (2. RAS性能改善後のDhrystone測定)

自作RISC-V CPUコアの方は、いくつかのコンフィグレーションにおいてDhrystoneを完走させることができるくらいになってきた。 RASの実装を変更してからCALL/RETでの分岐予測ミスが減ったので多少性能が上がったと思うのだが、久しぶりにDhrystoneを測定して…