FPGA開発日記

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

RISC-V

LLVM for RISC-Vのステータスアップデート

RISC-Vのコンパイラとしては主にGCCが提供されており、LLVMはいつからか開発が停止していた。 ところがここ数日でLLVMに関してアップデートがあったようで、どうやら開発はまだ継続している様子。 github.com [llvm-dev] RISC-V LLVM status update 本家の最…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(2. ニューラルネットのパラメータのロード)

MNISTのデータをロードするところまでできるようになった。まずは学習処理ではなく、学習結果のパラメータをロードしてデータを評価できるようにする。 学習済みデータをオブジェクトファイルに変換する 前回と同様、パラメータなどの初期値データはファイル…

RocketChipをカスタマイズするためのチュートリアル(4. RTLシミュレーションによる動作確認)

前回まででRocketChipのカスタマイズと、binutilsのカスタマイズが完了した。 今回はRocketChipのシミュレーションをして動作確認してみよう。 bitrev命令のテストプログラムを作成する 新規命令のテストプログラムを作成するには、riscv-toolsの環境を使う…

RocketChipをカスタマイズするためのチュートリアル(2. Chiselによるパイプラインの改造)

RocketChipはChiselで記述されており、改造するためにはScalaの知識が必要だ。Scalaは良く知らないので試行錯誤にはなるが、ALUに何らかの命令を追加するくらいなら何とかなりそうだ。Chiselを読み解いて、ALUに新しい演算なりなんなり、入れてみたい。 Rock…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(1.MNISTのロード)

そろそろHiFive1ボードを活用しないと、、、 MNISTのデータは非常に巨大で、フラッシュなどに入れないとHiFive1のチップの中にはもちろん入らない。 まずはMNISTデータを小さくしてオブジェクトとして貼り付け、HiFive1のシリアルコンソールから出力するとこ…

Spike-ISSによるRISC-V向けにコンパイルしたアプリケーション実行(1)

忙しくてずいぶんと放置してしまっていた。RISC-V向けにアプリケーションをコンパイルして、動作させてみるテスト。 いきなり大きなプログラムを実行して、HiFive1を壊してしまったりしたので、今回は慎重に生きたい。まずはISSなどであらかじめプログラムの…

BOOM(Berkeley Out of Order Machine) version 2

UCBより、BOOM (Berkeley Out-of Order Machine) v.2 のアナウンスがあった。 It's been a busy summer! Here's a glimpse of what we've been up to (hint: it's BOOM version 2.0!): https://t.co/kNqee9KzeA— The BOOM Processor (@boom_cpu) 2017年8月16…

AXIバス by Chisel

Rocket-Chipは、主にTileLinkとAXIバスによって記述されており、TileLinkがRocketChipに近い方、AXIが外部バスに出ていく方として記述されているのだけれども、AXI4のバスもChiselで書かれているようだ。 とりあえず見てみたが、正直なんだか良く分からない…

RocketChipをカスタマイズするためのチュートリアル(1)

RocketChipはChiselで記述されており、その実装はオープンになっているので、Chiselを操ることができればRocketChipを自由にカスタマイズすることができる。 さらに、RISC-VのGCCをカスタマイズすれば専用命令を追加することができ、自分の好きな命令を追加…

A Short Users Guide to Chisel 勉強中(1)

Chiselの勉強をすべく、githubのChiselプロジェクトについているWikiを読んで勉強中。 github.com Chiselは、「Constructing Hardware In a Scala Embedded Language」の略。 Chiselでハードウェアを設計するときは、Scalaのプログラムを利用してハードウェ…

RocketChip周辺のモジュール接続図を作成した

RocketChipを改造しようにも、どこがどうなっているのか全く分からなかったので、頑張ってエディタで配線を追いかけながら接続構成図を作った。 だいたい3本のバスがRocketChipにつながっている。メインのバスと、L2に接続するためのバス、コヒーレント用の…

(大昔の)ThinkPad にRISC-V実験環境を構築したが、HiFive1の調子がおかしい(続き)

HiFive1の試行を引き続き行っているが、たぶんこれ誰も大規模なプログラム流したことないのかな、というのが分かってきた(気がする)。 一枚目のボードを壊してしまったぽいのだが、2枚目のボードもちょっと大きめに配列を取ってコンパイル後、流したら不正終…

ヘネパタ第6版はRISC-Vで全面刷新?

Amazonで調べていたら、どうやら次のヘネパタが発売されるのを発見した。 Computer Architecture, Sixth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)作者: John L. Hennessy,David A. Patterson出…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(1. コンパイル)

HiFive1ボードはRISC-Vが動作する(おそらく世界で唯一商用の?)プロセッサボードである。このHiFive1ボードの仕様は以下のようになっている。 Microcontroller: SiFive Freedom E310 (FE310) SiFive E31 Coreplex 32bit RV32IMAC (整数演算のみ、乗除算ハー…

HiFive1ボードの自作プログラムのアップロード方法

HiFive1ボードはRISC-Vが動作する(おそらく世界で唯一商用の?)プロセッサボードである。 このボードを使っていくつか試行してみたいことがあるのだが、久しぶりに立ち上げたので少しリハビリの意味も兼ねて整理しておく。 プログラムの開発には、SiFiveが公…

RocketChipの足回りを理解する(4. RISC-V FrontEnd Server)

ところで、RISC-V Rocket-Chipをシミュレーションするとき、何気なくmakeを叩いて、 make CONFIG=DefaultConfig output/rv64ui-p-add.out とかして、勝手に実行されているけど、よく考えると具体的にどのようにして動作しているのか分からない。これを理解す…

RocketChipの足回りを理解する(3. BootROM)

RocketChipのリセットが解除されると、まずはBootROMへのフェッチが始まる。 BootROMは、TestDriver/TestHarness/ExampleRocketTop/bootromに格納されている。 まずはこの周辺の波形を見てみよう。最初にBootROMにアクセスするのは、0x00010040 がアクセスさ…

RocketChipの足回りを理解する(2. TileLinkについて)

RISC-V実装のRocket-Chipでは、足回りのインタフェースとしてTileLinkというインタフェースを使っている。ところがこれ、どれだけ検索しても詳細が出てこない。TileLinkとは何なのだろう? 資料については、以下のページぐらいしか出てこない。これを読み解…

RocketChipの足回りを理解する(1. RocketChipのVerilogを読み解く)

RISC-VのUCB実装であるRocketChipはRISC-Vのプロセッサ実装の中で最も参考になるもので、例えばSoCに組み込むとなると真っ先に導入を考えるRISC-V IPの一つだ。 RocketChipはデフォルトで64ビット命令をサポートしており、シンプルなパイプラインながら性能…

自作RISC-Vプロセッサでriscv-testsテストパタンセットを流す

RISC-Vにはriscv-testsというテストパタンセットが用意されており、これらを流すことによりRISC-Vのアーキテクチャとして正しく実装されているかどうかをチェックすることができるようになっている。 github.com 自作RISC-Vプロセッサにおいても、このパタン…

RISC-V シミュレータツールチェイン rv8

こういうツールチェインが作りたいんだよなあ。見た目にも非常にきれいな、RISC-Vシミュレータツールセットだ。RISC-V命令セットからx86/64へのバイナリトランスレーション(JIT)もサポートしている。 RISC-Vのほしいツールチェイン群はすべて揃っているんじ…

CARRV 2017: Computer Architecture Research with RISC-V

First Workshop on Computer Architecture Research with RISC-V (CARRV 2017) RISC-Vのワークショップはこれまでにいくつも開催されており、最近の開催ではちょうど5月に開催された、6th RISC-V Workshop in 上海だった。 これまでのRISC-Vワークショップは…

DAC(Design Automation Conference) のRISC-V発表資料

DAC(Design Automation Conference)で、RISC-Vの発表が行われたようだ。MLで発表資料が流れてきている。 VectorBloxというカナダの組み込みプロセッサの会社の発表だ。 DAC presentation slides (survey results on RISC V implementations) Google グループ…

7th RISC-V Workshopは11/28-11/30でカリフォルニア開催です

RISC-V 6th workshopはNVIDIA@上海で無事に終了したが、さっそく次のWorkshopのアナウンスが出ている。次はWestern Digital@カリフォルニアミルピタス とのことだ。 開催日は2017/11/28 - 11/30 だ。 Western Digitalといえば日本の某フラッシュメモリメー…

6th RISC-V Workshopの全発表資料が公開されました

riscv.org 6th RISC-V Workshopの記事が公開された。一個ずつチェックしていこう。

64bit BOOMプロセッサでCoremarkを動作させたい (2. RTLによるシミュレーション)

前回に引き続き、RocketChipおよびBOOMでCoremarkを動作させる。いろいろ調査した結果、RocketChipとBOOMでコンパイラを切り分けなければならないので、 それを適用してCoremarkをコンパイルしてみる。 ここでは、RocketChip版は${ROCKET_CHIP} リポジトリ、…

RISC-V RocketコアとBOOMコアでサポートされているISAの違い

msyksphinz.hatenablog.com 前回BOOMコアでRTLシミュレーションを行おうとしてRTLシミュレーションエラーになってしまっていたのだが、どうしてもエラーの理由が分からず、まさかと思いriscv-toolsをboomのブランチでリコンパイルして動作させてみた結果、動…

RISC-V UCB実装のメモリマップまとめ

実装を確認するにあたり、RISC-Vの実装のメモリマップを各種資料からまとめた。 たぶんあっていると思うが、オフィシャル文章ではないので、間違いを発見した場合は指摘お願いします。。。

64bit BOOMプロセッサでCoremarkを動作させたい

RISC-V環境であるE51プロセッサを動作させたときに、Coremarkの公称値と実際の値が少し違っているのを見つけた。 64bit版Coremarkバイナリの生成 Coremarkをriscv-testsの環境でコンパイルしてみる RISC-V ISS Spikeでシミュレーション BOOMコアでRTLシミュ…

RISC-V Instruction Set Privileged Architecture 1.10 / User-Level ISA 2.2が出ました

RISC-V Instruction Set Architectureに更新が入っていた!こういうのをシレッとアップグレードするのは正直止めてほしいのだが。。。 User-Level ISA Specification 2.1 –> 2.2 (2017/05/07) Draft Privileged Architecture 1.9.1 –> 1.10 (2017/05/07) ど…

SiFiveの64bit RISC-Vコア Soc E51でCoremarkを動作させる(MCSの作り方)

前回、RISC-Vの64bitコアを搭載したSoCプラットフォームE51を使ってCoremarkを動作させたが、このときにあらかじめ提供されているMCSを改造してCoremarkを挿入した。 この方法はハードウェア設計の師匠に教えてもらったものだが、師匠から許可を得たのでその…

SiFiveの64bit RISC-VコアE51でCoremarkを動作させる

前回、MCSをダウンロードしてSiFiveのRISC-VコアE51を起動させた。 その時は、デバッグ用の機器を用意していなかったので自分のプログラムを動作させることができなかったが、ハードウェア設計の師匠からメールをもらい、プログラムを動作させることができる…

SiFiveの64bit RISC-VコアE51をArty FPGAで動作させる

SiFiveはフリーのRISC-Vコアデザインとして、32bitのE31、64bitのE51を提供している。 www.sifive.com これらのソースコードはリクエストしないとダウンロードすることは出来ないが、mcsファイルが配布されているためこれを使って手っ取り早くFPGAで動作させ…

SiFiveの新RISC-VコアIP(E51, E31 Coreplex IP)

RISC-V 6th Workshop にて、SiFiveが新RISC-VコアIPであるE51を発表した。これまで発表されていたE31 Coreplex-IPは32ビット版だが、E51は64bitだ。 www.eetimes.com SiFiveはそれ以外にも、E51の有償サポートを発表している。足回りのIPにより値段が若干変…

コンパイルオプションを変えてCoremarkベンチマークを改善する

自作RISC-Vプロセッサは16バイト単位で命令をフェッチしてくる。つまり分岐などで新しい場所に命令フェッチを発生した時も、16バイトアラインで命令をフェッチする。 このとき、分岐先や関数の先頭が16バイトに乗っていると効率的だ。16バイトアラインの乗っ…

命令バッファのサイズによる性能変化の調査

自作RISC-VプロセッサでCoremarkベンチマークを計測しているが、命令フェッチをどれだけ投機的に実行するかによって性能がずいぶん変わってきた。 投機フェッチは、命令バッファが空いている限り実行しているが、あまりフェッチを出しすぎると、パイプライン…

自作RISC-VプロセッサにRASを実装する

自作RISC-VプロセッサにRAS(Return Address Stack)を実装して性能を調査した。 RASの実装をここしばらくやっていたのだが、意外と難しいということが分かった。 Return命令の判定をどこで行うか RAS以外の分岐予測、アドレスを使って分岐予測を行う方式の分…

6th RISC-V Workshop Agendaが発表されました

RISC-V Workshopの第6回目、今回は上海だ。 riscv.org 開催日:May 8-11, 2017 場所:Shanghai Jiao Tong University (SJTU) in Shanghai China 今回はnVIDIAが協賛している。アジェンダは上記のリンクの通りだが、ざっと眺めてみた感じ、第5回ほどのバリエ…

RISC-Vでコンピュータアーキテクチャの基礎を学びたい人向けの入門書(Computer Organization and Design RISC-V Edition)

RISC-Vで書き直されたパタヘネこと"Computer Organization and Design"が発売された。 Computer Organization and Design RISC-V Edition: The Hardware Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design)作者: David A…

RISC-VがGCC7.1に取り込まれた(インストール試行)

[sw-dev] Fwd: GCC 7.1 Release Candidate available from gcc.gnu.org groups.google.com 以下からダウンロードすることが可能だ。 とりあえずダウンロードして、ビルドして様子を見てみることにする。 ftp://gcc.gnu.org/pub/gcc/snapshots/7.0.1-RC-20170…

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にある、 “…