FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

LLVMのバックエンドを作るための第一歩 (7. ターゲットとサブターゲット)

LLVM Compiler Infrastructure MYRISCVXTargetMachine.{h,cpp} その名の通りターゲットマシンを定義するファイルだ。MYRISCVXTargetMachineはLLVMTargetMachineを継承したクラスで、ターゲットマシンのすべての情報を集約する。 このクラスには、サブターゲ…

LLVMのバックエンドを作るための第一歩 (6. ELFとリロケーションレコード)

LLVM Compiler Infrastructure LLVMのバックエンドにオリジナルターゲットアーキテクチャを追加していくプロジェクト、MYRISCVXターゲットアーキテクチャを追加したら、今度はELFの情報を追加する必要がある。 MYRISCVXはRISC-Vのオリジナル実装なんで、ELF…

RISC-VボードHiFive UnleashedでWebサーバを立ち上げてみる

HiFive Unleashd上でDebian GNU/Linuxが動いてしまえば、あとは様々なことが可能だ。 ウェブサービスを立ち上げたり、各種アプリケーションを立ち上げることも可能となる。 例として、ngnixをインストールして、簡単なウェブサーバを立ち上げてみる。 といっ…

AWS F1インスタンス上のFireSimを実行する(10. FireSimのワークロードを作成してプログラムを動かす)

Rocketコアをカスタマイズし、FireSimのプラットフォームに乗せ、さらにFPGA合成したAGFIまで作成した。いよいよf1インスタンス上で動作させ、ベンチマークプログラムを動かす。 このとき、前章で紹介したようにFireSim上でBuildrootを立ち上げLinuxにログイ…

AWS F1インスタンス上のFireSimを実行する(9. カスタマイズしたFireSimのFPGAイメージを作成する)

カスタムアクセラレータ付きのFireSimデザインが完成したので今度はVivadoで合成し、f1インスタンスで動作させるためのAGFIを作成する。AGFIとはAmazon Global FPGA Image IDの略称で、FPGAのイメージのようなものだ。このイメージIDを指定することで、何度…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(8. カスタマイズしたアクセラレータをFireSimのプラットフォーム上に構築する)

FireSimの環境で、どうにかRocketシングルコアを動かすことができた。ここまでできれば、今度は様々なハードウェアをf1インスタンスで動かしてみたい。RocketはChiselというハードウェア記述言語で設計されているが、ChiselでオリジナルのモジュールをRocket…

RISC-Vの開発環境をcrosstool-ngとriscv-toolsでセットアップする方法

RISC-Vでのハードウェア・ソフトウェア開発をするにあたり、まず必要になるのがツール群だ。 RISC-Vのソフトウェアツール群は、riscv-toolsというリポジトリにまとめられており、まずはこのリポジトリをダウンロードしてコンパイラなどを構築する必要がある…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(7. Firechipでオリジナルデザインを設計してシミュレーションする)

FireSimの環境で、どうにかRocketシングルコアを動かすことができた。ここまでできれば、今度は様々なハードウェアをf1インスタンスで動かしてみたい。RocketはChiselというハードウェア記述言語で設計されているが、ChiselでオリジナルのモジュールをRocket…

Wi-Fi モジュールの付いたRISC-Vボード HiFive1 Rev.Bが届いた

SiFive社が販売しているRISC-Vボードの第3弾、Wi-Fiモジュールの搭載されたRISC-VボードHiFive1 Rev.Bが自宅に到着した。 HiFive1 Rev.Bパッケージ HiFive1 Rev.B内容物 HiFive1 Rev.Bの仕様は、SoCの部分はHiFive1と一緒だ。 動作周波数320MHz RISC-Vコア F…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(6. Firesimで生成されたDCPをVivadoで表示する)

FireSimのシミュレーションに使用する独自のAFIイメージを作成する。 AFIとは、Amazon FPGA Imageの略称で、AFIを作成しておけばすぐにAWS f1インスタンスにデザインをデプロイできる。 Amazon S3のアカウントをセットアップしていることを前提にする。 Amaz…

RISC-VのVector Extensionの仕様概観

少しRISC-VのVector Extensionについて調査した。 Vector Extensionは、いわゆるベクトル命令だ。1命令で複数のデータを扱う方法といえば、SIMD(Single Instruction Multiple Data)もあるが、RISC-Vではまずはベクトル命令が定義された。現代のアーキテクチ…

RISC-Vの命令セット一覧表のページを作った

RISC-Vの命令セットは、riscv.orgに掲載されているRISC-V User-Level ISA Manual V2.2 を見ればほとんどを把握することができる。 また、RISC-V Reader(日本語版 RISC-V 原典) にも命令セット一覧表が掲載されており、これを見ればRISC-Vの命令セットの概要…

「ファクトフルネス」を読んだ

巷で話題になっている書籍「ファクトフルネス」を読んだ。ゴールデンウィークで時間が少しできたので一気に読みこんだ。 単なる創造や、メディアの一方的な情報だけを信頼していると、実はより広い目で見るとそれは誤っている、という話を様々なストーリーを…

LLVMのバックエンドを作るための第一歩 (5. 命令の定義)

LLVM Compiler Infrastructure LLVMバックエンドを追加するにあたり、MYRISCVXアーキテクチャを定義するためのtdファイルを作成する必要がある。 tdファイルはLLVMのバックエンドを定義するためのDSLで、バックエンドを理解するためには避けては通れないもの…

LLVMのバックエンドを作るための第一歩 (4. 命令フォーマットを定義する)

LLVM Compiler Infrastructure LLVMバックエンドを追加するにあたり、MYRISCVXアーキテクチャを定義するためのtdファイルを作成する必要がある。 tdファイルはLLVMのバックエンドを定義するためのDSLで、バックエンドを理解するためには避けては通れないもの…

LLVMのバックエンドを作るための第一歩 (3. Target Descriptionの記述してレジスタを定義する)

LLVM Compiler Infrastructure LLVMバックエンドを追加するにあたり、MYRISCVXアーキテクチャを定義するためのtdファイルを作成する必要がある。 tdファイルはLLVMのバックエンドを定義するためのDSLで、バックエンドを理解するためには避けては通れないもの…

SiFive社のRISC-Vボード HiFive Unleashedを使ってみる (4. ベンチマークプログラムの実行)

HiFive Unleashed 評価ボード HiFive Unleashed DebianでCoremarkを動かす 次に、ベンチマークプログラムを動かして、HiFive UnleashedのRISC-Vコアの性能を見てみる。 今回はCoremarkベンチマークプログラムを使用する。 linux64/core_portme.makを変更して…

Chiselでモジュールを再帰インスタンスする方法

Chiselでモジュールを書く場合の、いくつか便利な書き方をまとめておく。 Chiselで再帰を書く この程度だったらVerilogでも可能。 class recurse_module (w: Int = 5) extends Module { val io = IO(new Bundle { val inst = Input(UInt(2.W)) val dec = Out…

LLVMのバックエンドを作るための第一歩 (2. LLVMバックエンドにターゲットアーキテクチャを登録する)

LLVM Compiler Infrastructure LLVMバックエンドを追加するにあたり、まずはLLVMに新しいバックエンドを登録する必要がある。 とりあえず、LLVMバックエンドがMYRISCVXアーキテクチャを認識できるようになりたい。そのために最低限追加すべきファイルについ…

ChiselでBundleの演算子をオーバロードする方法

ハードウェア記述言語の一種であるChiselは、Scalaをベースにした言語であり、Scalaの機能を使って様々な便利な記法が実現可能だ。 その一つの便利な手法として、Bundleを使った演算子のオーバロードがある。SystemVerilogからの移行や、Chiselでの便利な書…

LLVMのバックエンドを作るための第一歩 (1. LLVMバックエンドの仕組みとRISC-V基本情報)

LLVM Compiler Infrastructure LLVMのバックエンドに焦点を当て、オリジナルのアーキテクチャターゲットをLLVMに追加する。 オリジナルのアーキテクチャといっても、一から作ると仕様の部分まで作る必要があるし、またそういう部分で本書の説明を策必要が生…

SiFive社のRISC-Vボード HiFive Unleashedを使ってみる (3. Debianのビルド試行)

HiFive Unleashed 評価ボード HiFive UnleashedはBuildrootだけでなく、それ以外にもDebian / Fedora Linuxをサポートしている。 Debianの起動は、Makefileの記述によると簡単に実行できるようだ。 cd freedom-u-sdk sudo make DISK=/dev/sdd format-demo-im…

RISC-VでZephyr OSを動作させる (3. HiFive1のZephyrの上でPhiloshperのプログラムを動かす)

Zephyrとは、Linux Foundationのプロジェクトの一つでもあり、RTOS(Real Time Operating System)の一つだ。 次は、SiFive社から販売されている32bit RISC-VボードHiFive1を使ってリアルタイムOSであるZephyrを動かしてみる。 参考にするのは、RISC-VのGettin…

SiFive社のRISC-Vボード HiFive Unleashedを使ってみる (2. Buildroot Linuxのビルド)

HiFive Unleashed 評価ボード HiFive Unleashedは、特に何もすることなくデフォルトで付属しているBuildroot Linuxを使ってLinuxを起動することができる。 しかし、これではあまり面白くないので、RISC-VのSDKを使って自分でLinuxをビルドし、カスタマイズす…

SiFive社のRISC-Vボード HiFive Unleashedを使ってみる (1. ボードのセットアップとBuildroot Linuxの起動)

HiFive Unleashed 評価ボード RISC-Vの評価ボードは、数は少ないですが様々なものがリリースされている。 中でも、RISC-VプロセッサのIP開発を手掛けるSiFive社は、個人でも購入できるRISC-V評価ボードを提供している。 2018年の2月にCrowd Supplyというクラ…

オリジナルLLVM Backendを追加しよう (29. LLVMリグレッションテストの書き方)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io LLVMでのテスト記述とリグレッション LLVMのオリジナルのバックエンドを実装してきたが、いろんなソース…

RISC-VでZephyr OSを動作させる (2. HiFive1でZephyr OSを動作させる)

Zephyrとは、Linux Foundationのプロジェクトの一つでもあり、RTOS(Real Time Operating System)の一つだ。 次は、SiFive社から販売されている32bit RISC-VボードHiFive1を使ってリアルタイムOSであるZephyrを動かしてみる。 参考にするのは、RISC-VのGettin…

組込みシステム技術協会の機関誌Bulletin JASAに寄稿しました

私も聞いたことのなかった機関紙なのですが、組込みシステム技術協会というのがありまして。 Embedded Technologyとかを主宰しているところですね。 実物をこれまで見たことがなかったのですが、組込みシステム技術協会はBulletin JASAという4半期に1回発行…

RISC-VでZephyr OSを動作させる (1. QEMUでHello Worldを動作させる)

Zephyrとは、Linux Foundationのプロジェクトの一つでもあり、RTOS(Real Time Operating System)の一つだ。 このZephyr OSはRTOSとしてはかなりメジャー?のなOSであり、完全にオープンソース、そして組み込みデバイスなどの小さな機器に搭載するためのOSと…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(5. オリジナルAFI(Amazon FPGA Image)の生成方法調査)

AWS F1インスタンス上でRISC-Vコアを動かすことのできるFireSimは、徐々にバージョンが上がっており、現在はBOOM(Berkeley Out-of Order Machine)のLinux起動もサポートできるようになっているらしい。 fires.im 一度、F1インスタンスのチュートリアルはやっ…