FPGA開発日記

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

LLVMのPassの作り方について学ぶ(ドキュメントを読む3)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

TerosHDL for Visual Studio Code を試してみる

ネットで回ってきたVisual Studio Code用のVerilog/VHDLの総合開発環境プラグインTerosHDLが気になったので少し試してみた。 github.com インストールはVisual Studio Codeのプラグイン環境で簡単にインストールすることができた。 私はWSL2の環境(とリポジ…

LLVMのPassの作り方について学ぶ(ドキュメントを読む2)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

LLVMのPassの作り方について学ぶ(ドキュメントを読む1)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

自作RISC-V OoOコアでDhrystoneが完走した

ちまちまと自作RISC-Vコアを実装している。riscv-testsがかなり通っているので、Dhrystoneを実行することにした。 実はDhrystoneは少し前に動かしていたのだけれども、L1Dキャッシュのデータリプレースの部分になかなか難しいバグがあり、難しくなっていた部…

RISC-V Vector Extension v1.0がリリースされた

これまでのものはv1.0のRC1だったりRC2だったりするけど、いよいよv1.0正式バージョンについてのPublic Review版がリリースされた。 一応差分をチェックしてみたが、本文内の曖昧の所を明文化したようなところが多い。 以下にまとめたのはRC1→RC2からのさら…

リングフィットアドベンチャー本編をクリアした

春辺りからリングフィットアドベンチャーを毎日コツコツやっていたのだが、ついに本編を全クリアした。長かった... 全クリアまで100日以上かかっている。地道にやっていったがついにコンプリートだ。 元々のモチベーションは、コロナで外で運動とかできなく…

RISC-V向けLinuxをビルドするための確認 (2. Dockerで環境構築)

RISC-V向けLinuxのビルドについて少し確認したいと思っていろいろと調査している。結局WSLの上ではビルドが難しそうなので、WSL2にDockerをインストールしてこの上で動かすことにした。 Dockerでfreedom-u-sdkを構築するためにDockerfileを書いている。 FROM…

Rocket-ChipのPMA検出回路を自作CPUに実装する

前回、Rocket-ChipがどのようにPMAをていぎしているのか分かったので、この構造をそのまま自作CPUに取り込みたいと思う。 前回作成した表をもとに、JSON形式でPMAの定義を作成し、これを自動的にSystemVerilog形式に落とし込むスクリプトを作った。 元となる…

ChipyardのRocket-ChipにおけるPMA構成調査

自作CPUにPMA (Physical Memory Attributes) を実装するために、まずは既存のRISC-V実装がどのようなメモリマップ構成になっているのかを調査した。 対象としたのはChipyard上で構成できるRocket-Chipだ。Rocket-ChipのVerilogファイルを生成すると同時にメ…

RISC-V向けLinuxをビルドするための確認

RISC-V向けLinuxのビルドについて少し確認したいと思っていろいろと調査している。昔ビルドに使用していたのはfreedom-u-sdkのツールセットなのだが、今ははどうなっているのか。 github.com それ以外の方法としても以下の方法が用意されていた。QEMUを使う…

RISC-VのGPGPU実装であるVortexのビルドメモ

以下のリポジトリでVortexのソースコードをCloneできる。 github.com Specifications Support RISC-V RV32IMF ISA Scalability: 1 to 32 cores with optional L2 and L3 caches Software: OpenCL 1.2 Support Supported FPGAs: Intel Arria 10 Intel Stratix…

Rocket-ChipのTLBがメモリの属性を取得する仕組み (Rocket-ChipでPMAのエラー発生源を追う)

Rocket-ChipのTLBの解析の続き。Rocket-ChipのPMAはTileLinkによって接続された各デバイスのアドレス情報を引っ張ってきてテーブルを作り、許可されるアドレス領域かどうかを判断していることが分かった。 具体的なテストケースを使って確認しよう。rv64mi-p…

CPU内のキャッシュラインを置き換えるためのフローについて考える2.

キャッシュラインを置き換える話その2。 キャッシュラインを置き換える際に、掃き出し用のデータを持っておく必要があるのだが、いくつかのケースでバグに嵌ってしまい再考を余儀なくされている。 ケースとしては、 L1Dに書き込みをするためにMissしたライン…

CARRV 2021での発表論文を概観する

CARRVというのはComputer Architecture Research with RISC-Vのことで、RISC-Vネタにした研究に関するワークショップである。 毎年ISCAと併設して実施されている。 carrv.github.io なんかまじめに論文を読んでいなかったので、とりあえず概観してみることに…

Rocket-ChipのTLBがメモリの属性を取得する仕組み

Rocket-ChipのTLBは、TLBミスが発生すると外部のPTWにアクセスして当該メモリ領域の属性を取得する。 その実装を探していたのだが、Chiselで書いてあって非常に分かりにくい。PTWの実装のうち、おそらくこの辺がPMAのテーブルを作っているものと思われる。 s…

"libmpfr.so.4: cannot open shared object file" エラーメッセージの対処方法

完全な作業メモ。WSL上でChipyard向けのGNUツールのビルドを行っていると時々こういうエラーに遭遇する。 $ ./scripts/build-toolchains.sh --ignore-qemu ec2fast ==> Removing existing riscv-pk/build directory ==> Configuring riscv-pk checking build…

Verilatorのリグレッションテスト用にGitHub Actionsの設定を試行

GitHub Actionsの使い方がだんだんわかってきた。いろんなサンプルプログラムを見ながらVerilatorを使ったリグレッション環境を作ろうとしている。 色々試した結果、私の自作CPUのデザインではかなり規模の問題で厳しいことが分かってきた。 最初はこんな感…

Verilatorのリグレッションテスト用にGitHub Actionsの設定を試行

Verilatorを使った自作CPUのリグレッションテスト用に、Dockerでの環境構築と同時にGitHub Actionsを使ってCI環境を作っておきたい。 GitHub Actionsはこれまで全く使ったことが無かったので、まずは使い方を覚えるところから。 .github/workflowsというとこ…

Verilatorのリグレッションテスト用にWSL2上にDocker環境を構築する試行

Verilatorを使った自作CPUのリグレッションテスト用に、Dockerを使った仮想環境を作っておきたい。Windowsを使っているので、WSL2のDockerを使って構築することにした。 ここを参考にしてインストールした。WindowsならばWindowsバイナリをダウンロードした…

文字起こしサイト"LogMi Tech" にカーネルVM勉強会の発表内容が掲載されました

文字起こしサイト「ログミーTech」に、私のカーネルVM勉強会Onlineで発表した「Rustで作るQEMUもどき」の発表内容が掲載されました。 文字起こしは2回に分けられていて、前半はQEMUもどきの実装のところまで、後半なスピードアップの話題になっている。 logm…

CPU内のキャッシュラインを置き換えるためのフローについて考える

キャッシュの置き換えアルゴリズムというのはいろいろあるけれども、ここではそういう話ではなくて「どうアトミックにキャッシュを置き換えるか」ということを考えた。 つまり、キャッシュを掃き出してロードするまでには間隔があくわけで、それをきちんと実…

Digital Design and Computer Architecture RISC-V Edition を買った

Digital Design and Computer Architecutre というのは、通称Hariss & Harris と呼ばれ、デジタル回路、コンピュータアーキテクチャの基礎的な題材を取り扱う非常に有名な教科書だ。 これまで第1版、第2版と出てきて、さらにARM版も出てきている。これらは日…

ストアバッファについて考える

最近は色々あってCPUのストアバッファについて考えている。 ストアバッファは簡単に言えばコミット済みのストア命令を、STQ(Store Queue)から分離しL1Dキャッシュもしくは外部へ書き込むまでの生存管理を行うものだ。 STQによるLSUパイプライン実行とL1Dへの…

RVWMOにおけるリトマステストについて調べる

RISC-VはメモリコンシステンシモデルとしてRVWMO (RISC-V Weakl Memory Ordering)を採用している。 RVWMOについての説明はRISC-Vの仕様書のAppendixについて説明されているが、ここを読んでいくことにする。 RVWMOを理解するにあたって、リトマステストとい…

RISC-V 拡張命令の命名ポリシについて

RISC-Vの仕様書27章にある「ISA Extension Naming Convensations」が面白かったので纏めてみる。 RISC-Vの命名文字列(つまり、RV64IMAFDCやRV32IMCなど)は、大文字小文字を区別しない。 標準拡張、つまり以下の拡張命令には表記の順序がある。以下の表におい…

ELFからHEXに変換するためのツール

ModelSim(32-bit版)を使うにあたり、これまで使っていたlibelfが使用できなくなり、elfをhexに変換してRAMにロードする必要が生じた。 しかもRAMとしてシミュレーション用に連想配列を使っているので、readmemhで読み込む際にアドレス情報が必要になる。いく…

LLVM13でのAPI変更点について確認

LLVMバックエンドの開発で、これまで使用していたrelease/12.xブランチからrelease/13.xに移行したときのAPIの変更点について確認した。 今回はAPIの変更点が少ない。 namespace llvm { // 以下のコードを追加 class formatted_raw_ostream; MCTargetDesc/MY…

「RISC-VとChiselで学ぶはじめてのCPU自作」を献本頂きました

RISC-VとChiselで学ぶ はじめてのCPU自作 ――オープンソース命令セットによるカスタムCPU実装への第一歩作者:⻄⼭ 悠太朗,井⽥健太技術評論社Amazon 最近発売になった、「RISC-VとChiselで学ぶはじめてのCPU自作」を献本頂きました。@ciniml 様、ありがとうご…

自作CPUをVivado Simulatorでシミュレーションするための試行

これまで基本的に自作CPUのシミュレーションはVerilatorを使っていた。これには理由がある。 - ある程度の規模のデザインならばコンパイル時間も気にならない。 - SpikeとのDPI接続などの機能が豊富 - かなり攻めたSystemVerilogの構文もサポートしている し…