FPGA開発日記

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

RISC-V

UCBのRISC-V FPGAシミュレーション加速環境 "MIDAS"

2017/10/14-10/15にかけて、アメリカのボストンにてRISC-Vの学術的なトピックに焦点を当てたワークショップ "CARRV (Computer Architecture Research with RISC-V)" が開催された。 その際の発表資料などは、CARRVのウェブサイトにて見ることが出来る。 carr…

RISC-Vにおける命令拡張についてのポリシー

先日Design Solution Forumで発表をしてきたのだが、その時にRocket Chipを拡張して独自命令を追加した話をした。 そのあとで他の発表の方から、RISC-Vの拡張方法についていろんな考え方が聞けたため、そういえばRISC-Vって独自の命令を追加する場合に何か考…

RISC-V 64bit Quadコア SoC "U54-MC Coreplex"

Linuxをサポートしている64bit RISC-V 4コア + 64bit RISC-V 1コアのSoCとのこと。 Quad Coreの方はU54コアということで、アーキテクチャとしてはRV64GC(整数浮動小数点何でも入り)、シングルコアの方はE51をベースとしたRV64IMAC(整数演算のみサポート)を搭…

Rocket Chipの足回りを理解する (7. デバッグモジュールによるデータの転送)

前回の続き。Rocket Chipがどのようにしてプログラムをロードするのかを引き続き解析している。riscv-fesvrのdtm.ccを見てその動作を解析している。 write_chunk (uint64_t taddr, size_t len, const void* src) ターゲットのアドレスtaddrからlenバイト分、…

Rocket Chipの足回りを理解する (6. デバッグモジュールによるRocket Chipの内部レジスタアクセス)

RISC-VのフラグシップモデルであるRocket Chip Generatorは、RISC-Vのほぼ全ての仕様を網羅している非常に優れているデザインだが、最初はなかなか取っつきにくい部分がある。 それはいくつかあるのだが、 ChiselというScala拡張の言語で記述されており、Ver…

RocketChipの足回りを理解する(5. Load_Elf 解析中)

前回の続き。Rocket Chipがどのようにして制御を行っているのか、またプログラムのロードや、Start,Stopの制御はどのように行っているのかなどを調査している。 前回まではload_program()関数が呼ばれるところまでを見てきた。 msyksphinz.hatenablog.com 実…

RISC-V実装 BOOM v2をコンパイルしてRTLシミュレーションを実行する

RISC-Vのアウトオブオーダ実装であるBOOMv2は、githubで既に公開されている。 github.com BOOMv2の実装とRocket Chipの実装は分離されており、内部コアをBOOMv2、外部のインタフェース部分をRocket Chipで実装する。 上記のBOOM v2.0.1は riscv-boom リポジ…

RISC-Vのアウトオブオーダ実装 BOOM v2の内部構成

少し前に、RISC-VのRocket Coreのアウトオブオーダ版、BOOM(Berkeley Out-of-Order Machine) のVersion2がリリースされたことがアナウンスされたが、CARRV (RISC-Vの学術ワークショップ) に向けてその詳細が公開されたので読んでみた。 BOOM v2: an open-sou…

Rocket Chip on ZedBoardはどこまで周波数を上げられるのか (2. SmallConfigの場合)

Rocket Chipの動作周波数を上げるべくいろいろ試行していたが、ZynqSmallConfigの場合はどれくらい周波数が上がるのだろう? ZedBoardでFPGA向けに合成をする場合にはいくつかオプションがあり、デフォルトではZynqConfig、小さめの構成でZynqSmallConfigと…

Rocket Chip on ZedBoardはどこまで周波数を上げられるのか?(1. DefaultFPGAConfigの場合)

Rocket ChipをFPGAにインプリメントして動作させているが、動作周波数が25MHzに設定されているというのに驚愕した。 ZedBoard自体は100MHzで動くはずだし、HiFive1だって320MHzで動作するような設計だ。 なぜこんなに遅い周波数で設計されているのだろう? …

Rocket ChipのChiselを使ってアクセラレータを作る(Dot Productアクセラレータの性能評価)

前回、Chiselを使ってDot Productアクセラレータを作ったが、まだ正しく答えが一致していなかった。 msyksphinz.hatenablog.com 一応デバッグしてプログラムを正しく走ることが出来るようにして、まずは16x16のサイズで正しく問題が計算されていることを確認…

Rocket ChipのChiselを使ってアクセラレータを作る (より大きな行列に対応したDot Productハードウェア)

Chiselを使って行列積を計算するハードウェアを開発してきたが、これには弱点がある。 小さな行列に焦点を当てたので、大きな行列(16行以上)に対応できないことだ。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com しかしこの方法には利点もある。16…

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/ucb-bar/fpga-zynq) SiFiveのfreedomリポジトリを利用する (https://github.com/sifi…

"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に変換して…