FPGA開発日記

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

RISC-V

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…

UCBのRISC-V FPGAシミュレーション加速環境 "MIDAS"を試行する(1)

CARRVで発表された、UCBのRISC-V FPGAシミュレーション環境 MIDASのリポジトリがあったので、実験してみた。 試してみたのは以下のディレクトリ。 github.com まずは一応全部ダウンロードした。riscv-fesvrを最新に更新しないと動作しないようなので、riscv-…

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セッションあるらしい。 ってかセッ…

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で動作するような設計だ。 なぜこんなに遅い周波数で設計されているのだろう? …