FPGA開発日記

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

SiFive Webinar "Part II: Introduction to SiFive RISC-V Core" 聴講

途中で寝ちゃいましたけど!日本時間の2:30~は遅すぎるよ。。。 SiFive社が主催しているRISC-VのWebinar第2回、今回はSiFive社が提供しているRISC-VのIP群についての話。シングルコアの話から、マルチコアのものまでザックリと製品群のすみ分けの説明だった…

RISC-V 7th Workshop の Preliminary Agendaが公開されました

11月28~11月30日に実施される7th RISC-V Workshop、今回もPreliminary Agendaが公開された。 7th RISC-V Workshop Preliminary Agenda - RISC-V Foundation via kwout 今回も2日間に渡るセッションだが、量が多いなあ!45セッションあるらしい。 ってかセッ…

Google初のカスタムデザインチップPixel Visual Coreから考えるソフトウェアプログラミングモデル

GoogleのフラグシップスマートフォンPixel 2が発表された。スマートフォン自体についてはあまり興味が湧かなかったのだが、搭載されているチップについては興味をそそる内容だ。 www.blog.google Pixel Visual Core: image processing and machine learning …

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

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

オープンソースGPGPUの論理合成試行

オープンソースGPGPUをいろいろと調査しているが、その中でなかなか完成度の高いもののひとつであるNyuziProcessor、テストパタンの動作までは上手く行ったが、FPGAにインプリメントしてみたい。 少し調べてみたのだが、どうやらALTERAのFPGA、そしてDE2-115…

プログラミング言語Rustに入門中(1. Rustのイントロダクション)

突然新しいプログラミング言語に入門したくなることもある。自分としてはスクリプト言語はRubyをメインに使っているのだけれども(最近Rubyistとしては隠れすぎていてRubyを使っておらず、シェルスクリプトで何とかしようとする傾向があるが)、最近徐々に知名…

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

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

オープンソースGPGPU "NyuziProcessor"を試行する (2.テストパタンの構成調査)

オープンソースGPGPUであるNyuziProcessorの話続き。NyuziProcessorは、ビルドした後のリグレッションテストを自動的に実行することできる環境が用意されている。 こういうハードウェア関係のプロジェクトでリグレッションテストの環境まで提供されているの…

オープンソースGPGPU "NyuziProcessor"を試行する (1. ダウンロードとビルド, サンプル実行)

前回紹介したオープンソースのGPGPU "NyuziProcessor" はどうやらダウンロードして簡単に試行できるようだ。試してみよう。 Ubuntuで試行する場合は、必要なパッケージをダウンロードした。 sudo apt-get -y install autoconf cmake make gcc g++ bison flex…

オープンソースなGPGPUについて調査

オープンソースなCPUと言えばOpenRISC, OpenSPARC, そしてRISC-Vだったり。ところで、それ以外でオープンソースなGPGPUってあるんだろうか? 例えば、いろいろ調べてみると以下のようなものが出てきた。 NyuziProcessor https://github.com/jbush001/NyuziPr…

Facetsでプロセッサベンチマークソフトウェアの解析を試行した話2

引き続き、Facetsで遊んでいる。現在はDhrystoneプログラムを解析中。 レジスタ読み込みアドレスとレジスタ書き込みアドレスの関係を調査していたのだが、いくつか読み込ませるデータを変更して、より解析しやすくしてみた。 sed 's/C0://g' output/dhryston…

Facetsでプロセッサベンチマークソフトウェアの解析を試行した話

Facetsというのは、Googleがリリースしたデータ解析ツールだ。機械学習に使えるとしており、データを可視化するのが得意で、ダイナミックな動きが特徴のデータ可視化ツールセットとなっている。 これを使って何かできないかと考えたのだが、例えばCPUベンチ…

VHDL/VerilogのテスティングフレームワークVUnitを試行する

VUnit は VHDL/SystemVerilogのテスティングフレームワークだ。VUnitにはいくつかテストパタンが用意されているが、少し自分でもテストパタンを用意してみよう。 作ってみたのは、32bit×32bit=64bitの符号なし整数の演算器を実装して、VUnitでテストを実行し…

Design Solution Forum 2017にて発表します

そろそろ告知しておかないと自分でも忘れそう。 2017/10/13(金)に開催されるDesign Solution Forumにて、RISC-Vのトラックの一つとして発表させて頂くことになりました。 トラックB3 12:00 - 12:40 で、タイトルは "さわって分かる オープンソースプロセッサ…

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

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

VHDL/Verilogのテスティングフレームワーク"VUnit"

ソフトウェア環境下においてテスティングフレームワークは、例えばJUnit, GoogleTest など。 しかしハードウェア言語向けのテスティングフレームワークというのは少ない。 以前に少し紹介したのは、cocotbというテスティングフレームワーク、こちらはPython…

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 実…

Facets with Jupyter Notebook on Ubuntu on VirtualBox のインストール手順

Googleの公開した機械学習向けデータビジュアライゼーションソフトウェア Facets を Jupyter Notebook にインストールした。 普段の作業はUbuntu Linux on Virtual Boxでやっているので、いろいろ迷ったのだがVirtual Box上のJupyter NotebookにFacetsをイン…

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…

Raspberry-Pi3でOpenCVを動作させて顔検出するチュートリアル

ちょっと久しぶりにRaspberry-Pi3を立ち上げた。やりたいことは組み込み機器でOpenCVとか、OpenVXをどのようにして動かせばよいのかの調査だ。 まずは、Raspberry-Pi3を使ってOpenCVを動作させたい。 これは既に先人によって手法が確立されていることで、Qii…

Rocket ChipのChiselを使ってアクセラレータを作る(3. Dot Productアクセラレータのデバッグ)

前回Dot Productアクセラレータを作ったのだが、正しく動作していなかったのでデバッグしていた。 よく考えたら、行列積 を求めるにあたり、メモリのフェッチアドレスのとび幅を決めるのに、行列の列サイズも必要だったので、それを設定するファンクションも…

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…

OpenVX実装についての調査とチュートリアル試行

ザイリンクスのreVISIONスタックは、コンピュータビジョン、機械学習、コネクティビティ & センサー サポート に注力してFPGA上で動作させることのできるハードウェアデザインやソフトウェアスタックを提供している。 このなかでコンピュータビジョンに注目…

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

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