FPGA開発日記

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

2019-04-01から1ヶ月間の記事一覧

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

オリジナル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 関数コールもかなり動くようになってきて、これまでに多くのテストパタンを確認してきたのだが、リグレ…