FPGA開発日記

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

2021-01-01から1年間の記事一覧

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

春辺りからリングフィットアドベンチャーを毎日コツコツやっていたのだが、ついに本編を全クリアした。長かった... 全クリアまで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の構文もサポートしている し…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (6. コヒーレンスプロトコル2)

developer.arm.com developer.arm.com インターコネクト間のプロトコルフローについて 次に、CHIのプロトコルフローについて見ていく。 Read Transaction flows Read transactions with DMT and without snoops DMTというのはDirect Memory Transferであると…

RISC-Vの命令拡張に関するポリシに関して

RISC-Vの仕様書を一から読みなおすことを地道に続けている。RISC-Vの仕様自体についてはあまり言及することはないのだが、仕様書には面白いことに「RISC-Vの拡張」関する取り決めをした章が設けられている。"Chapter26 Extending RISC-V"がそれに相当する。 …

AMBA5 の CHI (Coherence Hub Interface)についての調査 (5. キャッシュ状態とコヒーレンスプロトコル)

developer.arm.com developer.arm.com CHIのコヒーレンスプロトコルについて キャッシュラインの取りうる状態 キャッシュラインの状態の種類は、以下のようになっている。 状態 説明 補足? I (Invalid) キャッシュラインはキャッシュ中に存在していない Inv…

JSONベースで書ける波形表示ツールWaveDromがとても便利だった (2)

少し前にWaveDromというJSONで波形を表示するツールについて調査していたのだが、ある程度使いこなすことが出来るようになってきた。 今作っている自作RISC-V CPUの仕様書を書くために波形を書いているのだが、結構便利に使うことが出来ている。 例えば、以…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (4. オーダリング制約)

developer.arm.com developer.arm.com CHIのオーダリングの章を読んでいたのだが、正直概念的な話が多すぎて良く分からん。 CHIのオーダリングについて CHIがオーダリングの要求をサポートするためのプロトコルのメカニズムについて説明する。 マルチコピー…

RTLの情報をC++プログラムにバックポートする方法の調査

自作CPUとかをやっていて、RTLとISS(命令セットシミュレータ)でどうしても誤差が生じる部分と言えば、真っ先に思いつくのがサイクル計測部分だ。 RISC-VのCPUとかを設計していると、ベンチマークを流している場合に必ずMCYCLEが一致しない問題にぶちあたる。…