FPGA開発日記

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

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インスタンスのチュートリアルはやっ…

オリジナルLLVM Backendを追加しよう (28. C++のサポート)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io C++のサポート LLVMでC++特殊な文法をサポートするためには、ポリフォーフィズムをサポートする必要があ…

オリジナルLLVM Backendを追加しよう (28. Intrinsicのサポート2)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第11章では、アセンブラやIntrinsicをサポートする。今度はC言語の中にIntrinsicを埋め込んだアセンブラ…

赤羽北区ハーフマラソン大会に参加した

ハーフマラソンに参加するのは人生で3回目。 前回は暑さと音楽プレーヤーが壊れたことによりタイムが大幅にダウンしたので、今回はリベンジしたい。 場所は新荒川大橋の付近で、ハーフマラソンの参加者は250人くらい? コースは赤羽の荒川の河川敷を走る。一…

Intel Agilex FPGAのホワイトペーパーを読んでまとめる (デジタル部に重きを置いて)

Intel(旧Altera)から発表された最新世代のFPGA、Agilexのアーキテクチャについてホワイトペーパを読んでみた。 デジタル部に重きを置いて読んでみた。I/Oの部分も野心的なI/Oコントローラが積み込まれており、面白そうだ。 www.intel.co.jp Intel Agilexデバ…

オリジナルLLVM Backendを追加しよう (27. Intrinsicのサポート)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第11章では、アセンブラやIntrinsicをサポートする。 具体的には、Intrinsic関数などのC言語の内部にア…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(4. F1インスタンスの立ち上げとLinuxのブート)

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

オリジナルLLVM Backendを追加しよう (26. ELFのサポートとobjdump)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第10章は、ELF形式のサポートと、objdumpコマンドを動かす。 まずは、ELFの形式をサポートする。ELFの形…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(3. FireSimリポジトリのセットアップとビルド)

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

オリジナルLLVM Backendを追加しよう (25. 可変引数・動的スタック割り当て)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第9章の後半では、様々なイントリンジックを挿入する。 9.6.5 Function related Intrinsics support LLV…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(2. マネージャインスタンスの立ち上げ)

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

RustでRISC-V命令セットシミュレータを作ろう (7. trait, generics, 64-bitモードへの拡張)

Rustで作るRISC-Vシミュレータ。基本的な形が出来上がった。32bitの整数演算命令はある程度PASSできるようになっている。 C++で作ったRISC-Vシミュレータ同様、64bitモードもサポートして動作させるようにしたい。 C++版では、32bitと64bitモードの実装はtem…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(1. 環境の立ち上げ)

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

オリジナルLLVM Backendを追加しよう (25. 可変引数・動的スタック割り当て)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第9章の後半では、可変長引数と、動的スタックの割り当てを実装する。 可変長引数のサポート 可変長引数…

オリジナルLLVM Backendを追加しよう (24. Tail call optimizationの実装)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 関数コールの最適化の一つとして、Tail call optimization(末尾再帰呼び出し)を実装してみる。 ja.wikip…

オリジナルLLVM Backendを追加しよう (23. llvm-projectを使ってテスト環境を構築する)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 関数コールもかなり動くようになってきて、これまでに多くのテストパタンを確認してきたのだが、リグレ…

aws-plugin-for-slurmを使ってAWS上でクラスターを作りたい

速いコンピュータが欲しいんです... AWSを使用すると一時的にでも高速なコンピュータでジョブを動かすことができるが、高性能なマシンはお値段も高いので、作業中に常時立ち上げておくのはもったいない。 そこで、普段の作業の時はもっと弱いサーバ(もしくは…

オリジナルLLVM Backendを追加しよう (23. 命令の定義からAsmPrinterへの変換プロセスまとめ)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io LLVMには独自のIRを定義できる仕組みがあり、それを使って命令を変換したりして最終的に命令を生成する…

MIPS Openがリソース公開

リソースの一部を公開するとアナウンスしたMIPSだが、この度一部の資料が公開されたようだ。 www.mipsopen.com ダウンロードできる資料も増えたようだ。 https://www.mipsopen.com/ ダウンロードできる資料としては、 MIPS Open Architecture (仕様書) Basel…

オリジナルLLVM Backendを追加しよう (22. テスト環境の調査)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 関数コールもかなり動くようになってきて、これまでに多くのテストパタンを確認してきたのだが、リグレ…

RustでRISC-V命令セットシミュレータを作ろう (6. MMUの実装とテストパタンの実行)

Rustで作るRISC-Vシミュレータ。基本的な形が出来上がった。トレースファイルも出せるようになったので、MMUを実装してテストパタンを実行して確認しよう。 MMUを動かすテストパタンは、rv{32,64}u{imfda}-v-xxxという形で表現されている。-v-というテストパ…

RustでRISC-V命令セットシミュレータを作ろう (5. シミュレータのトレースデータ出力機構の実装)

Rustで作るRISC-Vシミュレータ。基本的な形が出来上がった。MMUの変換処理は、まだデバッグ中だ。しかしデバッグするためには、トレースデータを出力できるようにする必要がある。 トレースデータを出力するためには、RISC-Vシミュレータが実行した情報をト…

Chiselでビットコインマイナーを設計してみる(3. Scala版とVerilog版の検証と速度比較)

ChiselでSHA256の回路を設計するプロジェクト、Scalaでの検証用コードと、Chiselで書いたハードウェアを検証する。 Chiselで書いたハードウェアは、SHA256のアルゴリズムで64回分ループを回す部分を展開し、パイプライン化した。 これにより、1サイクル毎にS…

オリジナルLLVM Backendを追加しよう (21. Function Callの実装)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第9章は、関数コールの実装だ。関数コールの実装は量が多すぎてまだ理解が及んでいないが、とりあえずJu…

Chiselでビットコインマイナーを設計してみる(2. ScalaでSHA256の検証プログラムを書く)

SHA256の回路をChiselで開発しようプロジェクト、とりあえず基本的な回路は記述したので、次に検証用のテストコードを書いていく。 検証用のテストコードはScalaで書く。その方がChiselと親和性が良いし、検証が行いやすいと思う。 という訳で、とりあえずSc…

Chiselでビットコインマイナーを設計してみる(1. SHA256コアの開発)

Vivado-HLSで観察していたビットコインマイニング回路の開発、面白そうなのでChiselに移植してみることにした。 勘違いしがちだがChiselは高位合成システムではなく、基本的にRTLの記述レベルを維持しつつ、Scala言語の良いところを取り入れてよりソフトウェ…

LLVM 8.0がリリースされたのでビルド試行とオリジナル実装の8.0への移行

releases.llvm.org LLVM 8.0がリリースされたので、さっそくダウンロードしてビルドしてみた。 これまで通り、GitHub経由でダウンロードしていたので、タグをrelease_80にアップデートするだけである。 $ cmake -G Ninja -DCMAKE_CXX_COMPILER=${HOME}/other…