FPGA開発日記

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

2021-09-01から1ヶ月間の記事一覧

riscv-arch-test (RISC-V Architecture Test SIG) を試す

riscv-arch-testは、riscv-testsとは別に管理されているRISC-Vのテストスイートである。 github.com これまでちゃんと使ったことが無かったので、ここら辺で少し触ってみておこうと思う。 まずはSpikeでの動作確認から。 リポジトリをクローンする。 git clo…

RISC-V spec 20210922でPublic Reviewになったいくつかの新規命令について

RISC-Vの仕様において、20210922でいくつかの新規拡張命令がPublic Reviewになっている。 これらの命令について、存在は知っていたし概要は知っていたのだけれども、そろそろマニュアルを眺めてどういうものなのか確認することにした。 Zfh : 半精度浮動小数…

自作RISC-V OoOコアの性能解析用Performance Monitorの作成

ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。 一つの要因としては分岐予測を全く実装していないこと。これでは分岐が成立すると殆どの命令を破棄することになってしまう。まずは分岐予…

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

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

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…