FPGA開発日記

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

RISC-V

RoCCアクセラレータを乗せたRocket ChipのFPGA論理合成(4. 自作アクセラレータの論理合成)

RISC-Vの実装、Rocket Chipのアクセラレータ向けインタフェースにハードウェアを実装し、RTLシミュレーションを行った。 次に、Rocket ChipをFPGA向けに論理合成するところまで上手く行ったので、今回開発したRoCCアクセラレータをFPGAに実装してみよう。 こ…

RISC-VのRoCCアクセラレータ付きRocket-Chip構成をFPGA向けに合成する(3. アプリケーション動作)

前回作業をした、RISC-VのRocket Chipで、FPGAにRoCCアクセラレータ付きの実装をインプリメンテーションする作業、前回までは、 一応ブートまで進んだものの、何故かアプリケーションが動作せず、作業が止まってしまっていた。 そこで、もっとお気楽なビルド…

Rocket ChipのChiselを使ってアクセラレータを作る (行列積アクセラレータを高速化する)

前回、RISC-VのRocket Chipに整数のDot Productを計算するアクセラレータを接続した。 これにより、整数行列積の計算において、約2.7倍の高速化を達成した。 ただし、これはまだ高速化できる余地がある。 一度データをアクセラレータ内に格納すると、次に同…

Rocket ChipのChiselを使ってアクセラレータを作る (行列積アクセラレータのアイデア出し)

Rocket ChipとChiselの勉強を進めてきた。RoCCのインタフェースにChiselで記述したアクセラレータを接続して、その効果を測定した。 まずは簡単化のために、RoCCインタフェースからメモリの値を読み込んで、その値をすべて加算するプログラムを書いてみた。 …

RISC-VのRoCC アクセラレータ付きRocket-Chip構成をFPGA向けに合成する (2. LinuxのビルドとFPGAでのブート)

RISC-VのRocket Chipで、FPGAにインプリメンテーションをするためにはいくつかの方法があるが、その中でfpga-zynqリポジトリ(https://github.com/ucb-bar/fpga-zynq)を使って、FPGAにRISC-Vを焼いてみている。 その中で、やはりRoCC(Rocket Custom Coprocess…

RoCC アクセラレータ付きの構成をFPGA向けに合成する(1. 構成の追加とFPGA合成)

RISC-VのRocket Chipを使う構成で、FPGAにインプリメントするためのパッケージとしては以下の2つがあるだろう。 UCBのfpga-zynqリポジトリを利用する (https://github.com/sifive/freedom) SiFiveのfreedomリポジトリを利用する (https://github.com/ucb-bar…

"An Introduction to RISC-V Architecture for Embedded Developers" 聴講

世の中ではAppleが新しい製品を発表するらしくそっちで徹夜している人はたくさんいるだろうが、私はRISC-VのWebinarを聴講するために徹夜してました。 zoom.us 内容としてはRISC-Vの基本的なISAの基礎から始まる初心者向け。 なお、このウェブセミナーは三回…

RISC-V向けHiFive1ボードのフラッシュメモリアクセス性能評価

RISC-V評価ボードのHiFive1は、オンチップのメモリが少なく、L1Dキャッシュが16KBしかない。それ以外のデータにアクセスするためには、外部のフラッシュメモリを利用する必要がある。 これにより、ほとんどすべてのデータはあらかじめフラッシュメモリに格納…

Windowsで動作するRISC-Vプログラム開発環境"Freedom Studio"

RISC-Vチップで動作するプログラムを開発する場合、いくつか方法が存在する。 Arduino IDEを使って開発する Freedom-E-SDK を使って開発する これらの方法はどちらとも、本ブログを通じで紹介してきた。Arduino IDEは他のArduinoプラットフォームとの親和性…

CARRV(Computer Architecture Research with RISC-V)の事前プログラム

msyksphinz.hatenablog.com RISC-Vに特化したワークショップ、IEEE MICROとの連携で開催されるCARRV(Computer Architecture Research with RISC-V)の事前プログラムが公開されています。 開催は2017/10/14、ボストン RISC-Vシミュレーション、エミュレーショ…

最大8コアのRISC-V Rocket-ChipがAmazon F1インスタンスで動く (FireSim)

本日アナウンスがあって知った。Amazonが提供するインスタンスF1で動作するRISC-V マルチコアNoCがリリースされたらしい。 fires.im 名前は"FireSim"。AmazonだからFireなのかな? 構成としては2種類用意されている。Amazon F1にも2種類あるが、 f1.2xlarge …

RocketChpのRoCCインタフェースに専用ハードウェアを接続して、性能測定する(専用ハードウェア高速化)

前回は、RoCCインタフェースを使って専用ハードウェアを動かし、通常のソフトウェア命令を動かした場合と比べてどの程度性能が異なるのか調査した。 その結果、ハードウェアがシンプルなためか、ソフトウェアを使った場合と大差ない結果になってしまった。 …

RocketChipのRoCCインタフェースに専用ハードウェアを接続して、性能測定する

RoCCインタフェースを使って専用命令を作成し、ハードウェアアクセラレーションができるようになった。 とりあえず、まずは小手調べに、メモリからデータを読み込んで加算する専用ハードウェアを作成し、その性能を見てみよう。 作成するハードウェア まずは…

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

RISC-VプロセッサHiFive1でMNISTを動作させよう。実機デバッグをしていて、やっと動作するようになった。 まだバッチサイズは1のままだが、とりあえず動作するようになった。 問題だったのは、データの配置方法だった。ちゃんと調整して入力データを流すと、…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(4.実機を使ってテストデータを動作させる)

だいぶ時間が空いてしまった。RISC-VプロセッサHiFive1を使った実験、機械学習のネットワークを動作させてMNISTを動作させる件、やっと再開した。 とりあえずMNISTのデータを使ってちゃんと計算できるようになりたい。それでも、デバッグはなかなか大変だ。 …

RoCCを使ったRocket Core拡張方法の調査 (5. 波形デバッグ)

前回から一生懸命RoCCインタフェースに接続したアクセラレータのデバッグをしているのだが、どうも上手く行かない。 RoCCインタフェースからコマンドを受け取って、L1キャッシュに対してアクセスをしてデータを取り出し、そのデータに対して加工を行いたいの…

The RISC-V Book

なんだいこれは?真ん中にあるやつ。モナリザが異様な雰囲気を醸し出している。 riscv.org 著者: David Patterson & Andrew Waterman 発売日: September 1, 2017 179ページ 価格 : $10 やっす!でもAmazonにまだ出ていない。モナリザの顔で、179ページも何を…

Chiselでのprintfデバッグの方法

Chisel、コンセプトとしてはいいのかもしれないが、マジで書きにくいなあ。 一度Scalaでシミュレーションすればよいのかもしれないが、Rocket CoreのScalaシミュレーションとかどうやるんだろう? RTLシミュレーションするのだとしても一度Verilogに変換して…

CentOS7にriscv-toolsをインストールするための手順

完全に自分のメモな訳だが。。。 ちょっとした事情でCentOSにRISC-Vの環境をインストールする必要が生じたので、一応メモしておく。 通常の手順はUbuntu上での手順が基本なのだが、CentOSの場合はパッケージのインストール方法が異なるだけだ。 Ubuntuの場合…

RoCCを使ったRocket Core拡張方法の調査(4. 独自Acceleratorの作成)

RoCCへの接続方法について、少しずつ分かってきたので、独自Acceleratorを作って、接続してみたい。願わくば、FPGAで動作確認できるところまで行ってみたいな。 RoCC Interfaceについて RoCCには、いくつかインタフェースが入っているが、大きく分けて使用す…

RoCCを使ったRocket Coreの拡張方法の調査 (3. サンプルデザインの解析)

RoCC (Rocket Custom Coprocessor) のチュートリアルって意外と少ないので、調査するのに苦労する。 前回のサンプルプログラムは、一応意図通りに動作したのだが、いったいどのような仕組みになっているのか調査してみる。 test_accumulator.c の解析 test_a…

RoCCを使ったRocket Coreの拡張方法の調査 (2. サンプルデザインの実行)

RoCC (Rocket Custom Coprocessor) のチュートリアルって意外と少ないので、調査するのに苦労する。 githubにチュートリアルっぽいものがあったので、試行してみようと思った。 github.com これは、RocketCoreのカスタムデザインの中でアキュムレータを内蔵…

RoCC を使ったRocket Coreの拡張方法の調査

RISC-VのRocketCoreを拡張する方法にはいろいろあって、まずは命令を拡張してALUにいろいろ手を加える方法と、アクセラレータを外部に接続してそれに対するアクセスを実行するためのRoCCという方法がある。 命令を拡張してパイプラインの内部に手を入れる方…

プロセッサHiFive1で機械学習コードを動作させる(3. 推論コードの動作確認)

RISC-V プロセッサHiFive1を使って、機械学習のチュートリアルとも言えるMNISTのプログラムを動作させたい。 まずはMNISTの推論コード自身から、HiFive1に移植している。 当たり前と言えば当たり前だが、行列演算の途中のデータとか、全部L1データキャッシュ…

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について)

2017/09/05 TileLink Specification Ver.1.7 Draftが公開されていたので、追記しています。 RISC-V実装のRocket-Chipでは、足回りのインタフェースとしてTileLinkというインタフェースを使っている。ところがこれ、どれだけ検索しても詳細が出てこない。Tile…

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} リポジトリ、…