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

FPGA開発日記

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

The RISC-V メモリコンシステンシモデル

RISC-Vウェブサイトに出ていたこの記事。 Vengineerさんにも言及いただいた。 @dev_msyksphinz Tool checks computer architectures, reveals flaws in emerging designApril 12, 2017https://t.co/sMVySElt8j読みました?— 無限ゲームのなか (@Vengineer) 2…

RISC-V LLVM を用いたベンチマークビルドの方法(Compressed ISAを生成させない方法)

前回のRISC-V LLVM 32ビット版命令生成には一つ問題があり、そのままパッチを当ててしまうとCompressed ISA(16ビット版 RISC-V ISA)を生成してしまう点にある。 現状自作CPUも自作ISSもCompressed ISAには対応していないので、32bit版命令しか生成しないよう…

RISC-V LLVMのビルドとインストール手順

RISC-VはLLVMにも対応しており、リポジトリがgithubに公開されている。 github.com ブランチがいくつか存在するが、 riscv-trunk を選択すること。これは最新のLLVMを追いかけているブランチだ。 リポジトリのチェックアウトとビルド ビルドまでは非常に簡単…

RISC-Vコア BOOM向けのCoremarkリポジトリの準備

BOOMコアの解析の続き。やはり途中で割り込みに飛んでしまう動作が気に食わないので、riscv-testsのリポジトリをForkしてCoremarkを追加してみようと思った。 まず、Coremarkのriscv-testsのディレクトリを解析してみよう。riscv-testsのbenchmarkディレクト…

RocketChip RISC-V実装RTLにてベンチマークを計測する(3. -O3によるCoremarkコンパイル)

ずいぶん大昔の記事を引っ張り出してきたが、RASの解析などを行うにあたり、BOOMの実装を調べたくて、BOOMの実性能がどうなっているのか調べたくなってきたので調査している。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com gem5を使えばBOOMのパイ…

自作RISC-VのSystemVerilog化と命令発行方式の変更

ちまちまRISC-Vの自作プロセッサを改造している。まずは拡張性の向上のためにRISC-Vプロセッサの実装をSystemVerilogに置き換えている。 SystemVerilogの詳細についてはここでは述べないが、いくつか便利な記述があるので紹介。 packed struct 制御信号線周…

Zephyr-RISCVはFreedom E310プラットフォーム(Arty FPGA)をサポートしている

前回少し紹介したZephyr-OSは、実行プラットフォームとしてQEMUだけでなく、Arty FPGA上で動作するFreedom E310もサポートしている。 ただし、OpenOCDによる接続が必要なため、ArtyFPGAに少し配線を追加しないといけないようだ。 手持ちにデバッグ用のケーブ…

RISC-V on ZedBoard for Parallelaのビルド実験

試しに、RISC-V on Parallela ボードのRISC-Vデザインをビルドしてみた。 リポジトリは以下に存在している。 https://github.com/eliaskousk/parallella-riscv ここでは、Vivadoを用いて合成するので、LinuxマシンにVivadoがインストールされているのが前提…

RISC-V on Parallela Board

RISC-Vの実装としていろいろ調査している中で、Parallelaのホストボードとして利用されているZynq(またはZedBoard)上にRISC-Vを移植してアプリケーションを動作させるというプロジェクトを発見した。 Google Summer of Codeのプロジェクトの一つだったようだ…

RISC-Vプラットフォーム Freedom E300 ArtyFPGA ボードの実験

Freedom PlatformをFPGAボードへ書き込む。 ArtyFPGAを知り合いから借りてきたので、それにダウンロードした。 https://japan.xilinx.com/products/boards-and-kits/arty.html Arty FPGAにRISC-Vをダウンロードして動作させるための手順は、SiFiveにある、 “…

RISC-V ISS Spikeのチュートリアル資料

RISC-VのMLにSpikeのチュートリアル資料が投稿されていた。 groups.google.com SpikeのOverviewと、それを実現するためのソースコードの一覧となっている資料だ。 Spikeのトップレベル構成 メモリシステム キャッシュ構成 TLB & MMU プロセッサのOverview Ha…

RISC-V SiFive Freedomプラットフォームのビルド手順

前回、SiFiveのFreedomプラットフォームについてまとめたが、今回は実際にそのプロジェクトを触ってみる。 Freedomプラットフォームはgithubに公開されており、デバイスさえあれば誰でもビルドすることができるようになっている。 github.com ビルド対象のFP…

RISC-Vプラットフォーム SiFive Freedomについて

RISC-VのASICチップおよび評価ボードとして、SiFiveのHiFive1ボードがすでに世界中で販売されているが、このHiFive1の持つFreedomプラットフォームについてまとめておこう。 そもそもHiFive1のRISC-Vプラットフォームはどのようになっているのだろう。 SiFiv…

RISC-V用LinuxのビルドとSpikeによるシミュレーション(vmlinuxとroot.binの解析)

前回、SpikeシミュレータでRISC-V版Linuxをビルドしようとしたのだが、なぜかエラーが発生して起動しなかった。 どこに原因があるのかさっぱりわからないため、まずはルートファイルシステムとvmlinuxを切り替えて起動実験をしてみる。 lowRISCには、すでに…

RISC-V用LinuxのビルドとSpikeによるシミュレーション(Spikeによるシミュレーション→失敗)

msyksphinz.hatenablog.com 前回、Linuxビルド用のRISC-V GCCの構築が終わったので、次にLinux本体のビルドとシミュレータによる実行をしてみたい。 github.com RISC-V用Linuxの構築 まずはRISC-V用Linuxの作業リポジトリと、Linux本体を取得してくる。 curl…

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を埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…