読者です 読者をやめる 読者になる 読者になる

FPGA開発日記

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

RISC-V Linuxビルド用GCCの構築

RISC-V用のLinuxは、以下のリポジトリで公開されている。 github.com Compile and install RISC-V cross-compiler · lowRISC RISC-V用のLinuxには、riscv64-unknown-linux-gnu-gcc が必要だ。このビルドには、riscv-gnu-toolchainフォルダでのリビルドが必要…

Zephyr-OSがRISC-Vをサポート(QEMUでの試行)

少し前に、RISC-VのMLにてZephyr-OSがRISC-Vをサポートしたというアナウンスがあった。 Zephyr-OSは、Linux Foundationが発表した、モバイル用途向けの小規模のオペレーティングシステムだ。 Home | Zephyr Project Zephyr (operating system) - Wikipedia W…

HiFive1のパフォーマンスカウンタについて

前回Coremarkの測定を行ったし、その前は各命令のレイテンシを測定した。 このとき、実際にプログラムのサイクル数を測定しているわけだが、これはどのようにして実現しているのだろう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com まず各命令の…

HiFive1でベンチマークプログラム測定(Coremarkを動作させる)

HiFive1でベンチマークプログラムや一般的なプログラムを動作させるのはそこまで難しい話ではなくて、SiFiveもプログラム開発用のツールセットを公開している。 freedom-e-sdkというリポジトリは、RISC-V向けプログラムのコンパイル環境を提供しており、Core…

HiFive1のCPUコア性能を測定(ベンチマークプログラム作成)

前回、HiFive1のプログラムをC/C++で開発するための環境を構築した。 次に、HiFive1のCPUコアの基本性能を測定してみよう。まずは、通常のプログラムを動作させる前に、同一の命令を何度も実行して、命令のスループットおよびレイテンシを測定してみる。 msy…

HiFive1向けのC/C++言語プログラムを開発するフロー構築

HiFive1は基本的にArduino経由でプログラムを開発するようになっているが、実際に動作しているのはriscv32-gccであり、隣家スクリプトとコンパイルオプションさえ揃えれば普通にC/C++でプログラムを開発できる。 今回、そのプログラム開発フローを構築したの…

Windows版RISC-V GCCのビルド方法(1. msys2環境でRISC-V 32bit向けGCCをビルドする)

RISC-VのMLで話題に挙がっていた、Windows版RISC-V GCCのコンパイル方法をやってみた。 まだイマイチ洗練されていないようだが、バイナリ自体は作れるようだ。 環境にはmsys2を利用する。 RISC-V GCC for Windowsのビルド方法 必要なもの Windows (筆者の確…

HiFive1のプログラムコンパイルをArduinoIDEを使わずに制御したい(2. OpenOCDを使ったHiFiveへのプログラム書き込み)

前回の続き、今回は、OpenOCDを使って、コンパイルしたバイナリファイルをHiFive1に書き込み、実行する。 msyksphinz.hatenablog.com OpenOCDを使った書き込みシーケンスを探す Arduinoのディレクトリを探して、OpenOCDを使ったバイナリファイルへのアップロ…

HiFive1のプログラムコンパイルをArduinoIDEを使わずに制御したい(1. C/C++コードのコンパイル)

HiFive1を使ったプログラムは、まだ時間が無くてLチカとUARTのテストくらいしか出来ていないが、早くもArduinoIDEに不満が出てきた。 可能ならばEmacsでプログラムを書きたいし、Makeを使ってコンパイルやダウンロードができるようになるとうれしい。 そこで…

HiFive1におけるシリアル通信

HiFive1を使って、PCとのシリアル通信を実行する。 やり方は非常に簡単だ。プログラムはArduinoのサンプルからコピーしてきた。 void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.print("RISC-V HiFive1 Start\r\n"); …

HiFive1のでのArduinoプログラム コンパイル結果の解析

Arduinoのプログラムをコンパイルするとき、最初にターゲットボードを指定して、対応するGCCなどをインストールした。 GCCを利用しているはずなので、コンパイル結果やオブジェクトなどがどこかに生成されているはずだ。 調査してみると、以下のArduino IDE…

HiFive1 の環境セットアップとサンプル実行

HiFive1の実行環境を早速構築しよう。まずはすでにHiFiveを使っている方がいらっしゃるので、それを参考に。 qiita.com HiFive1の実行のためには、Arduino IDEをインストールする必要がある。僕はWindowsユーザなのでWindowsにインストールしようと思ったが…

RISC-VのArduino(HiFive)が我が家にやってきたよ

マルツオンラインが、RISC-VのArduinoボード、HiFive1を取り扱い始めた。 www.marutsu.co.jp これまで海外で購入可能だったが、海外サイトでわざわざ購入するのが億劫で買っていなかったのだが、マルツだと安心。 購入して即日で届く速さだった。 まだ開封し…

6th RISC-V Workshop の Registration および Call for Papers が始まりました

2017/05/8 - 2017/05/11にかけて、6th RISC-V Workshopが開催されるようだ。RegistrationおよびCall for Papersが開始されている。 riscv.org 場所は上海の上海交通大学、情報系の学会に行くと、必ずと言っていいほど聞いたことのある中国では有名な大学だ。…

RISC-Vテストパタン VMモードの解析

前回に引き続き、Sv32で動作させるときのテストパタンの動作について解析している。 RISC-Vのテストパタンは、基本的なテストを行うxxx.Sのアセンブラリストと、それを囲むプロローグとエピローグから構成されている。 中心となる検証用アセンブラリストは、…

RISC-V ISS Sv32, Sv39の実装

いまいち実装が進んでいないが、Sv32とSv39のISSへの実装しなおしが完了した。 Sv32とSv39については、前回の記事を参考にして欲しい。 msyksphinz.hatenablog.com github.com 実装方法としては、まずはPTEを参照しながら上位の物理アドレスを生成していき、…

特権命令の例外権限を委譲するためのRISC-Vシステムレジスタmedeleg, mideleg

テストパタンのチェックをしていて、スーパバイザモードで例外が発生してもスーパバイザモードに留まっているパタンがおり、何が起きているのだろうと調べていると、以下のようなレジスタの仕様を発見した。 目的としては例外が発生した場合のコンテキストス…

RISC-Vのメモリ仮想化の方式について (v1.9.1編)

自作ISSのテストパタンが通らなくなってきた! 特に仮想メモリを使っているパタンが通らなくなった。大昔に自作ISSに仮想アドレスから物理アドレスの変換を実装していたのだが、どうやら仕様がv.1.9.1で変わっているらしい。 もう一度チェックしてみよう。 …

RISC-V. Open Hardware for Your Open Source Software @ FOSDEM17

FOSDEM17 というイベントでRISC-Vについての講演があるらしい。 FOSDEMというイベントはこれまで知らなかったのだが、"FOSDEM is a free event for software developers to meet, share ideas and collaborate"ということで、 主にオープンソースツールにつ…

RISC-VのSpike-ISSを使ったFreeRTOSの起動ルーティンの解析(3)

前回の続きで、ROMにはさらにいくつかの情報を挿入しなければならない。0x1020から挿入しなければならないのが、以下のRISC-Vのコンフィグレーションに関する情報だ。 前回の記事で紹介した以下のものになる。 platform { vendor ucb; arch spike; }; rtc { …

RISC-VのSpike-ISSを使ったFreeRTOSの起動解析

前回の続きで、どうしても自作ISSとSpike-ISSの動作結果が一致しないところがあり、何が悪いんだろうと調べていた。 まず、spikeにはRISCV_ENABLE_COMMITLOGというログ出力用のフォーマットがある事は紹介した。 これだけでは情報としては不十分で、例えば実…

RISC-V のISS "Spike"のログフォーマットを拡張する方法

RISC-VにはUC-Berkeleyの開発した命令セットシミュレータであるSpikeが存在する。 github.com このSpikeというシミュレータ、高速でLinuxもブートできる優れものなのだが、欠点はログがほとんど見れず、プログラムが誤作動を起こしても何が起きているのかさ…

FreeRTOSをRISC-V Spike ISSで動作させるためのオプション

しばらくFreeRTOSをRISC-Vの自作ISSや、Spikeシミュレータで動作させることが出来ず悩んでいたのだが、いつの間にかSpike-ISSに以下のオプションが追加されているのを発見した。 $ spike --help spike: unrecognized option --help usage: spike [host optio…

FreeRTOS-RISCVの起動シーケンスを追いかける(1)

FreeRTOSの話題の続き。前回FreeRTOSのRISC-V版を少しエミュレータで試してみたものの、何も動作せずに終わっていたのだった。 (そしてそれを特に原因究明せず放置していた。) msyksphinz.hatenablog.com それではあまりにもつまらないので、自作ISSを使って…

RocketChip/BOOMプロセッサの波形ダンプの方法

RISC-VのUC Berkeley実装であるRocketChip/BOOMはエミュレーション時にVerilatorを使用している。 基本的な命令トレースなどは出力することが出来るが、波形を出力するためのオプションが存在する。 make CONFIG=BOOMConfig output/rv64ui-p-add.vcd テスト…

RISC-VがLinley GroupのRISC-V chosen as Best Technology of 2016に選ばれました

riscv.org The Linley Group Announces Winners of Annual Analysts' Choice Awards The Linley Group - The Linley Group Announces Winners of Annual Analysts' Choice Awards まあ私は関係者でもなんでもないんだけど、おめでとうございます。 Linley Gr…

教育用RISC-V実装Clarviの調査 (Modelsim Altera starter editionのインストールとコンパイル)

前回Clarviの調査ということで概要を把握したのだが、SystemVerilogを実行できるシミュレータを持っていなかったため、シミュレーションが実行できなかった。 msyksphinz.hatenablog.com ところがその後各方面から「Modelsim Altera starter editionを使えば…

FreeRTOSのRISC-V移植版

RISC-Vのメーリングリストを読んでいて知ったのだが、FreeRTOSという無償のリアルタイム向けOSがあるらしい。これをRISC-V向けに移植している人がいるそうだ。 www.freertos.org RISC-Vへの移植が進められており、Privilege v.1.9への移植版が公開されていた…

教育用RISC-V実装Clarviの調査

Twitterでvengineerさんに教えてもらった教育用RISC-V実装、Clarviについて簡単に調査してみた。 Clarviは大学が教育用に作成したRISC-Vプロセッサで、もちろんRISC-Vの仕様に完全に準拠しているわけではないが、非常にコンパクトな実装と、教育用に簡単な拡…

RISC-V実装におけるのリグレッションテスト実施方針

RISC-VにおけるテストセットのPass/Fail判定 過去の記事でも少し解説したが、RISC-Vではriscv-testsというテストパタンセットが用意されている。 msyksphinz.hatenablog.com パタンの説明では、どうやら0x8000_1000への書き込みでもってパタンの終了を判定し…

RISC-Vの特権レジスタ群のアクセス権限まとめ

Reserved Writes Ignored, Reads Ignore Values (WIRI) WIRIビットフィールドの例 Reserved Writes Preserve Values, Reads Ignore Values (WPRI) WPRIビットフィールドの例 Write/Read Only Legal Values (WLRL) WLRLビットフィールドの例 Write Any Values…

RISC-Vの特権レジスタ群の割り当てまとめ

訳あってRISC-Vの特権レジスタ群の仕様を読み込んでいるのだが、Privilege Instructionの仕様書をしっかり読むとなかなか面白い。 Chapter-2のControl and Status Registers(CSR)ではCSRレジスタ群についてまずは簡単に分類がされているのだが、いろんなこと…

128bitまで対応したRISC-VエミュレータでLinuxが動く (しかも超高速)

ダウンロードとビルド riscvemuを動作させる riscvemuの実行方法 risvemuを利用したSimple Linuxの起動 シレっとRISC-Vメーリングリストに投稿されたこれ、QEMUの開発者でもあるFabrice BellardがRISC-Vの128bitモードまで対応したエミュレータを開発したと…

RISC-Vのテストパタンセット riscv-tests

最近はほとんどテストベンチのメンテナンスを行っていなかったのだが、Privileged Instructions v1.9.1に対応させるために、久し振りにriscv-testsを使ったISSのリグレッションを実行してみた。 しばらくずっと触っていなかったのだけれども、昔メンテナンス…

BOOM RISC-V実装RTLにてベンチマークを計測する

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の16日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-V 5th Workshopの発表紹介 (RISC-V Vector Extension)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の15日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-VのOoOプロセッサ、BOOMの性能を読み解く(1)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の9日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

組み込み向けプロセッサの性能評価指標、ベンチマークを動作させる

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の9日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-V 5th Workshopの発表紹介 (Fast Instruction Set Simulator)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の7日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-V 5th Workshopの発表紹介 (Time Traveling Coherence Algorithm)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の6日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-Vの特権命令まとめ

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の5日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-Vアーキテクチャの実装についてまとめ

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の2日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-VのFreeBSD実装をZedBoardで動作させたい(解決したがFPGAで動作不良)

結局、いろいろ調べたところFreeBSDのカーネルを作るのにはもう一段階くらい必要で、 riscv - FreeBSD Wiki のWikiでFreeBSDをビルドする際、 make TARGET_ARCH=riscv64 buildworld の次に、 make TARGET_ARCH=riscv64 KERNCONF=ROCKET buildkernel を追加し…

RISC-VのFreeBSD実装をZedBoardで動作させたい(トラブルあり未解決)

(画像はriscv.org, freebsd.orgより拝借) FreeBSDは現在RISC-Vに移植されており、RISC-Vで動作させることが出来るらしい。 いろいろチュートリアルはあるのだが、まだちゃんと動作させたことが無い。 riscv - FreeBSD Wiki BBLというものをビルドしなければ…

RISC-Vの実装をZedBoardで手っ取り早く試すためのチュートリアル

自分でも良く分からなくなるのでまとめておく。RISC-Vを手っ取り早くFPGAボードで動作させたいときのために、githubからいろんなビルド済みの何かをダウンロードして動作させる方法をまとめておく。 用意するもの FPGAボード (ZedBoard, Zybo, zc706) 私はZe…

MicrosemiのFPGA向けRISC-Vソフトコア

Microsemiが自社のFPGA向けに、RISC-Vのソフトコアを発表した(FPGA向けは世界初ということだが)。 www.newelectronics.co.uk (画像はMicrosemiのウェブサイトより引用。) Microsemiの発表によれば、自社のFPGA(SmartFusionおよびIGLOO)向けのRISC-Vソフトコ…

RISC-Vのトレードマークと商標利用について(1)

RISC-VのMLにて、商標利用およびトレードマークの扱いについて議論が起きている。 正直、商標や、著作権などについては全くの素人のため、あまり詳しい部分は分かっていないのだが、現状のRISC-Vの商標について調べてみた。 ロゴについて riscv.org RISC-V商…

Debian on RISC-V情報

Twitterで知ったのだが、Debian GNU/LinuxのRISC-Vへの移植プロジェクトが進んでいるようだ。先日、メーリングリストが公開された。 New mailing list created for porting Debian to free and open RISC-V CPU arch https://t.co/o2q5TjZ5pj— The Debian Pr…

RISC-V BOOMプロセッサのRTLシミュレーションを実行(VCS用プロジェクトで試行)

前回は、Verilator用の生成ファイルおよび環境を移植して、VeritakでのRTLシミュレーションを試行しようとしたが、シミュレーションが始まらず失敗したのだった。 いろいろ調査していると、Verilator用だけでなく、SynopsysのRTLシミュレータであるVCSでのシ…

RISC-V BOOMプロセッサのRTLシミュレーションを実行したい(Veritakで挑戦→解析中)

RISC-Vのアウトオブオーダ実装であるBOOM (Berkeley Out-of-Order Machine)のRTLシミュレーションは、基本的にverilatorを使って実行されている。 それもそのはず、BOOMはオープンソースハードウェアであるため、オープンソースのシミュレータを使わないと万…