FPGA開発日記

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

RISC-V

Chiselを使ってMNISTハードウェアアクセラレータを実装(FPGAで確認)

MNISTを、ハードウェアアクセラレータを使って高速化したい。 前回はChiselで初期実装を行った。シミュレーションをして、短いテストプログラムで動作確認をして、結構うまく動作するようにになったのでいよいよFPGAに書き込んで確認したい。 やってみよう。…

Amazon AMI でRISC-V Rocket-Chipを合成したい(微妙に挫折)

Rocket-ChipはXilinx FPGAを使って合成することができるが、Xilinx Vivadoと言えば、 Amazon AMI だ(身勝手)。 Amazon AMIのインスタンスを使えばVivadoをAWSで簡単に使用することができるらしい、と聞いて早速やってみた。 AWS Marketplace: FPGA Developer…

Chiselを使ってMNISTハードウェアアクセラレータを実装(実装中)

前回までで、MNISTをハードウェアアクセラレータをどのように実装すれば良いか、RISC-Vの命令セットシミュレータ(ISS)を使って動作をシミュレーションし、プログラムを構築した。 次に、実際にハードウェアを作成する。コーディングにはChiselを使う。 なぜC…

RISC-V ISS Spike を使ってMNISTのハードウェアアクセラレーションを実装する

前回の続き、前回まででやっと環境が整ったので、MNISTの行列計算の部分をオフロードしてRoCCアクセラレータのシミュレーションを行う。 SpikeでRoCCアクセラレータを模擬するのは以下の操作だ。 行列積の1要素を計算するのに、1番目の行列の要素を行方向に…

RISC-V ISS Spike を使ってMNISTのハードウェアアクセラレーションをシミュレーションしたい

RISC-V の ISS であるSpikeは、RISC-Vの通常命令セットだけでなく、RoCCのアクセラレータをシミュレーションする機能も持っている。 この場合はアクセラレータはC++で記述する必要があるが、同じ挙動を示すC/C++のコードを使ってハードウェアの挙動をあらか…

Rocket-ChipでMNISTのプログラムを動かす (2. RTLシミュレーション・FPGA動作)

Rocket-Chipでディープラーニング的なプログラムを動かして、RoCCのアクセラレータで高速化することができないか、いろいろ試行している。 まずは前哨戦として、C/C++で作成したMNISTのプログラムを動かしてRISC-Vで動作させたいと思っている。 RISC-Vでコン…

Rocket-ChipでMNISTのプログラムを動かす (1. コンパイルと Spikeによるシミュレーション)

Rocket-Chipでディープラーニング系のプログラムを動かしたいと思っている。 まずは、Rocket-Chipで通常のMNISTプログラムを移植して動かしていこう。 これまでに作ったHiFive1のMNISTのプログラムを移植して、まずはアクセラレータを使わずに動作させたい。…

Chiselでオリジナルデザインを開発し、Verilogを生成する(1. Chisel-template を生成する)

Chiselを使ってオリジナルデザインを作成してみたい。とりあえず、ディープラーニングをターゲットとして、行列計算のためのモジュールをいろいろ作ってみたい。 まずは、Chisel単体で開発環境とテスト環境を構築するためにはどうしたらよいのだろうか。 い…

Rocket-Chipのブートシーケンスと内部構造の解析(1)

RISC-V の実装の一つである Rocket-Chip の解析を行いたいのだが、Chiselの実装が複雑で詳細の解析に阻まれており、なかなか進まない。 やりたいこととしては、現在のRocket-Chip Generatorの環境を利用せずに、Rocket-Chipの生成されたVerilogファイルだけ…

Design Solution Forum とRISC-V Tokyo 2017 の発表資料を公開しました

今年開催されたRISC-Vに関係するイベント、 "Design Solution Forum 2017" および "RISC-V Tokyo 2017" で使用した発表資料を公開しようと思います。 Design Solution Forumについては既に登録者限定で公開されているけど、特に隠す必要はないので公開してし…

7th RISC-V Workshop の Vector Extension Proposal 概要

RISC-V 7th Workshopでは、Vector Extensionの説明がなされている。 The RISC-V Vector ISA https://content.riscv.org/wp-content/uploads/2017/12/Wed-1330-RISCVRogerEspasaVEXT-v4.pdf 資料を読みながらまとめてみる。追記の可能性あり。 RISC-V Vector …

RISC-VのCompression命令仕様について

RISC-Vのハードウェア仕様の中で、RV64GCとか、RV32IMACとか出てくるが、その中で"C"というのは"Compressed"命令ということで、命令長が16bitの短縮命令のことを指す。 サポートしているアーキテクチャの中で"C"が入っていれば、このCompressed 命令を動かす…

RISC-Vオープンソースコア Rocket-Chip, BOOMv1, BOOMv2 のサイクル性能比較

RISC-V Day Tokyo 2017お疲れさまでした。 私は午前中から適当なことを喋って、特にお金をもらっているわけでもないのにRISC-V Foundationとか、SiFiveのIPについてべた褒めをしてしまったのだった。 あとで何人かには聞かれたのだが、講演で使った資料には…

7th RISC-V workshopのアジェンダ公開 & 8th RISC-V workshopについて

11月28日から11月30日までミルピタス州のWestern Digital社で開催されていた7th RISC-V Workshopのアジェンダおよび発表資料が、riscv.orgに公開されています。 riscv.org 今回は発表量が非常に多く、分刻みのスケジュールとなっており内容も盛りだくさん。 …

RISC-V向けRust-Toolchain の仕組み(HiFiveクレート)

RISC-V向け Rustのリポジトリは結構な量のライブラリとツール群が入っているが、HiFive1のサポートパッケージはどのように構成されているのか調査してみた。 riscv-rust-quickstartのCargo.tomlにはhttps://github.com/dvc94ch/hifiveを指定する記述があり、…

RISC-V向けRust-Toolchain試行(4. リポジトリの修正試行 → ビルド成功 → HiFive1動作)

前回のRust on RISC-Vのツールチェインのビルドの続き。 msyksphinz.hatenablog.com riscv-rust-toolchainをビルドするためのソースコード修正 結局なんでうまくいかないのか、GitHubで聞きました。 compile error on ubuntu 17.10 https://github.com/dvc94…

Computer Architecture: A Quantitative Approach 第6版を入手しました

この記事は 半導体・ハードウェア開発 Advent Calendar 2017 - Qiita の7日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 私一人では、クオリティのある記事を続けられそうにありません。。。(弱音) 前…

2017年のRISC-V界隈振り返り

この記事は 半導体・ハードウェア開発 Advent Calendar 2017 - Qiita の2日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 私一人では、クオリティのある記事を続けられそうにありません。。。(弱音) 201…

RISC-V向けRust-Toolchain試行(3. Repositoryと環境の修正試行)

前回のRust on RISC-Vのツールチェインのビルドの続き。 msyksphinz.hatenablog.com 前回のRust on RISC-Vのツールチェインのビルドは、おそらくパッケージとライブラリの指定が足りないせいだ。 Ubuntu 17.10にパッケージを追加するのと、LD_LIBRARY_PATHを…

RISC-V向けRust-Toolchain試行(2. Repositoryの修正試行)

前回、RISC-V Rust Toolchainが公開されていたので早速ビルドしようとしていたのだが上手く行かなかった。 msyksphinz.hatenablog.com $ make build xargo build --target riscv32-unknown-none error: failed to run `rustc` to learn about target-specifi…

Rocket-ChipとBOOMの環境の違いは何なのか?(1)

UCB(University of California Berkeley)の実装したRISC-Vコアとしては代表的なものが2つあり、1つのリポジトリでブランチが切られている。 github.com Rocket-Chip : masterブランチ BOOM-v1 : boom2ブランチ BOOM-v1 : boom-v1ブランチ しかしどうもRocket…

RISC-V向けRust-Toolchain試行(1)

RISC-V Workshopが開催されているが、このタイミングでプログラミング言語RustのRISC-V移植版が公開されているのを発見した。 やっぱり来ると思ったよ! abopen.com Rustのコンパイル環境はLLVMをベースにしているようだ。 ターゲットボードはHiFive1となっ…

ハードウェア記述言語"Chisel"のテスト環境の一例"Hardfloat"(1)

RISC-Vの実装であるRocket-Chipには、標準的な5ステージパイプラインであるRocket-Core、さらにアウトオブオーダ実行が可能なBOOM(Berkeley Out-of-Order Machine)-V1, BOOM-V2などが存在する。 これらのCPUコアはいずれもハードウェア浮動小数点演算器を持…

Rocket-Chipにおけるコンフィグレーション別の面積比較(各種構成での面積比較)

前回の続き。多少は面積比較できる程度に環境が構築できてきたので、いろんな構成でもってVivadoで合成して面積を比較してみた。 まず大前提の問題として、Vivadoの面積レポートはとても読みにくい。まあSynopsysのDesign Compilerのように、単純にゲート数…

Rocket-Chipにおけるコンフィグレーション別の面積比較 (BlockRAMへのマッピングの問題)

Rocket Chipは構成によってどのようなコンポーネントが含まれているのかが変わっているのだが、それ以外にもリビジョンによっても結構構成が変わって、FPGAへのインプリメントに使用する面積が変わったりもする。 比較対象として、以下のリビジョンを使用し…

MicroPython試行(3. RISC-V移植環境の調査 → Spikeでの動作)

MicroPythonをRISC-Vのプラットフォームで動作させたくて、調査している。 MicroPythonはQEMUの環境も用意されていて、ARMやXtensaなどの環境も用意されている。これらを参考にしながら、実装を進めていこう。 RISC-V用に用意しなければならないのは、 nlr_p…

RISC-Vの命令セットシミュレータSpikeでRoCCインタフェースを実装する2.

UCBの開発しているシミュレータSpikeは、RISC-Vの命令セットをシミュレーションすることのできるISSで、サイクル精度を出すことはできないが最初のアプリケーションのデバッグに有用なツールだ。 そして、RISC-Vにはカスタム命令 (custom0 - custom3)が用意…

RISC-Vの命令セットシミュレータSpikeでRoCCインタフェースを実装する

UCBの開発しているシミュレータSpikeは、RISC-Vの命令セットをシミュレーションすることのできるISSで、サイクル精度を出すことはできないが最初のアプリケーションのデバッグに有用なツールだ。 そして、RISC-Vにはカスタム命令 (custom0 - custom3)が用意…

RISC-Vの命令セットシミュレータSpikeでもRoCCインタフェースがシミュレーションできる?

UCBの開発しているシミュレータSpikeは、RISC-Vの命令セットをシミュレーションすることのできるISSで、サイクル精度を出すことはできないが最初のアプリケーションのデバッグに有用なツールだ。 そして、RISC-Vにはカスタム命令 (custom0 - custom3)が用意…

Rocket ChipにはDual Coreのコンフィグレーションがある(1. シミュレーション試行 & Vivado合成試行)

UCBの開発したRISC-V実装であるRocket Chipは基本的にシングルコアのモードで動作させるが、よく見るとデュアルコアのモードも存在する。 rocket-chip/src/main/scala/system/Configs.scala class DualCoreConfig extends Config( new WithNBigCores(2) ++ n…