FPGA開発日記

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

MLIRの勉強 (4. 自作言語のMLIR変換とダンプ)

MLIRについて勉強している。 独自言語を作成し、その中間表現をMLIRを使って表現してみることに挑戦する。 ここで想定する流れは以下の通りだ。 独自言語(MYSV : System Verilogオリジナル改造バージョン) を読み込んで、独自形式でASTを作成する MYSVのAST…

MLIRの勉強 (3. 自作言語のMLIR変換とダンプ)

MLIRについて勉強している。 独自言語を作成し、その中間表現をMLIRを使って表現してみることに挑戦する。 ここで想定する流れは以下の通りだ。 独自言語(MYSV : System Verilogオリジナル改造バージョン) を読み込んで、独自形式でASTを作成する MYSVのAST…

MLIRの勉強 (2. チュートリアルをベースとした自作言語作成)

MLIRについて勉強している。 独自言語を作成し、その中間表現をMLIRを使って表現してみることに挑戦する。 ここで想定する流れは以下の通りだ。 独自言語(MYSV : System Verilogオリジナル改造バージョン) を読み込んで、独自形式でASTを作成する MYSVのAST…

2022年のRISC-V新仕様まとめ

RISC-V Internationalがアナウンスした2022年に仕様策定に入った新仕様、いくつか情報が出てきている。 riscv.org E-Trace for RISC-V: CPUのためのデバッグ用分岐トレース。なんかこれの大昔のバージョンを読んだことがあったな。 github.com RISC-V specif…

MLIRについての勉強 (チュートリアルをベースとした自作言語作成2)

MLIRはMulti Level Intermediate Representationの略で、LLVM IRよりも更にメタ化したような中間言語だ。LLVM IRでは吸収しきれないような各言語で定義される中間表現を、許容するために開発された。 これを使ってみたいので、まずはToyに似たような言語を使…

Alpha EV8の分岐予測機に関する論文を読む(1. 概要)

Alpha EV8の分岐予測機に関する論文を読み始めた。 ieeexplore.ieee.org Alpha EV8の分岐予測のポイント: グローバルヒストリ分岐予測の機構を用いる。 ハイブリッドスキューブランチ予測器2Bc-gskewを用いて予測を行う。 圧縮された分岐履歴とパス履歴を組…

MLIRについての勉強 (チュートリアルをベースとした自作言語作成)

MLIRはMulti Level Intermediate Representationの略で、LLVM IRよりも更にメタ化したような中間言語だ。LLVM IRでは吸収しきれないような各言語で定義される中間表現を、許容するために開発された。 これを使ってみたいので、まずはToyに似たような言語を使…

MLIRについての勉強 (チュートリアルをベースとした自作言語作成)

MLIRはMulti Level Intermediate Representationの略で、LLVM IRよりも更にメタ化したような中間言語だ。LLVM IRでは吸収しきれないような各言語で定義される中間表現を、許容するために開発された。 これを使ってみたいので、まずはToyに似たような言語を使…

GShare分岐予測器で解決すべき問題設定

自作CPUにおいて、GShareb分岐予測器の実装をしようとしている。自分が実装しているものが本当に正しいのか検証したくて、いろいろモデルを作りながらまとめている。そのメモ。 実験 以下のプログラムを考える。要するに、両方の引数が偶数か奇数かで値を設…

VirtIOのドキュメントを読む (2)

https://blogs.oracle.com/linux/post/introduction-to-virtio SNS界隈で見つけて、面白そうなので読んでみることにした。 VHostについて これまではVHostという言葉は登場しなかったが、ここで説明しておく必要がある。 パフォーマンスの問題が発生から出て…

VirtIOのドキュメントを読む (1)

https://blogs.oracle.com/linux/post/introduction-to-virtio SNS界隈で見つけて、面白そうなので読んでみることにした。 ポイント 仮想マシンとホストデバイスの抽象化を行うレイヤのこと ホストの物理ハードウェアと仮想マシンの間でデータをの授受を行う…

M1 MacにおけるMLIR向けLLVMビルド手順

以下は単なるメモ:MLIRをビルドするに当たりLLVMのビルドの方法。 M1 MacはARMなので、よく考えたらx86を指定しても意味ないのだった。何も考えずにドキュメントをコピペしていたらハマってしまった。 $ cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS=mli…

IBM POWER7の論文を読む (5. Instruction Sequencing Unit)

マイクロアーキテクチャに関する論文を読んでいる。今回はIBM POWER7に関する論文。 ieeexplore.ieee.org 続いて命令シーケンスユニット。これはいわゆるフロントエンドから命令完了までを取り扱うユニットのことらしい。 命令シーケンスユニットの役割 (Ins…

Linux on RISC-V 2022を読む (3)

SNSで見つけた、Linux on RISC-Vが現状のRISC-Vを非常に端的に説明していて勉強になると思ったので、読んでみることにした。 以下は読書メモ。といってもほぼ一対一に翻訳してしまっている。 前回の続き。最後はQEMUとか評価ボードとか。 kernel-recipes.org…

Linux on RISC-V 2022を読む (2)

SNSで見つけた、Linux on RISC-Vが現状のRISC-Vを非常に端的に説明していて勉強になると思ったので、読んでみることにした。 以下は読書メモ。といってもほぼ一対一に翻訳してしまっている。 前回の続き。今回は例外処理とOpenSBIとか。 kernel-recipes.org …

Linux on RISC-V 2022を読む (1)

SNSで見つけた、Linux on RISC-Vが現状のRISC-Vを非常に端的に説明していて勉強になると思ったので、読んでみることにした。 以下は読書メモ。といってもほぼ一対一に翻訳してしまっている。 連続で投稿する。何回かに分けて読んでいこうと思う。 kernel-rec…

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 に変わっていた。 調べ…