FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-V

TileLinkはどのようにしてコヒーレントを維持するのか(1. TileLinkのコマンド)

https://static.dev.sifive.com/docs/tilelink/tilelink-spec-1.7-draft.pdf より抜粋 RISC-Vの多くの実装で採用されているTileLinkには、大きく分けて3つのグレードが存在している。 TL-UL (TileLink Uncached Lightweight) TL-UH (TileLink Uncached Heavy…

Chiselを使ってCPUを作ろう(6. パイプラインと分岐命令の実装)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、ある程度演算命令は動き始めたが、ちゃんと動作しているのかどうかを確かめたい。 分岐命令はALUで比較を実行して、その結果に応じてPCを切り替える。 RISC-Vには3種類のPCアップデートの方法…

Chiselを使ってCPUを作ろう(5. トレース記述をどう作る?)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、ある程度演算命令は動き始めたが、ちゃんと動作しているのかどうかを確かめたい。 普通CPUを作るときは、波形をわざわざ観測するなんてそんなダサいことはしなくて、トレースファイルを出力し…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (4. ALUの実装)

随分とほったらかしにしていたが、Chiselを使ってオリジナルデザイン開発を再開した。 簡単なRISC-VコアをフルスクラッチでChiselで作ってみて、Chiselの理解を深めようと思う。 msyksphinz.hatenablog.com 各種命令の実装 まずはシンプルな算術演算命令の実…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (3. CPUのコアのDebug-Trace作成)

随分とほったらかしにしていたが、Chiselを使ってオリジナルデザイン開発を再開した。 簡単なRISC-VコアをフルスクラッチでChiselで作ってみて、Chiselの理解を深めようと思う。 msyksphinz.hatenablog.com まず、テストパタンを用意しなければならない。テ…

RISC-V for LLVMのビルド試行 (2. RISC-Vターゲットでのコンパイルとテスト)

RISC-V on LLVMについて少し調べている。 LLVMのソースコードを眺めていると、TargetとしてRISC-Vが追加されているのを発見した。 なんだ、追加されてるじゃないか。じゃあ動くんじゃないか。 という訳で最新版のLLVM(ver 8.0?)とClangを落としてきて、パッ…

Ubuntu on Windows Subsystem for LinuxでRISC-V環境のビルド試行

Ubuntu on Windows Subsystem for Linux上でRISC-Vのツールチェインとデザインが使えるのかどうか試行した。 なんでこんなことをしているのかというと、自宅で使っているUbuntu on Virtual Boxがクラッシュして自宅のRISC-V環境を全部失ったから。 折角なの…

RISC-V for LLVMのビルド試行

コンパイラ勉強会に参加してコンパイラ熱が高まっているので、LLVM for RISC-Vについて久しぶりに調べた。 これまで何度かRISC-V for LLVMについて調べてきたが、Mailing Listなどを見ていてもあまりアップデートがない。 msyksphinz.hatenablog.com msyksph…

Chiselで記述された教育用RISC-VプロセッサSodor (1. ビルドとセットアップ)

Chiselのイントロダクションを一通りやり終えたので、次はより実践的なデザインを見ていくために、RISC-V Sodorを見ていくことにした。 Sodorは教育用に作られたRISC-Vのプロセッサで、Rocketよりも単純な構成を取っている。 デザインも1ステージのものから5…

Chisel2とChisel3でのVerilog/C++コード生成フローの違い

Chiselにはバージョンがあり、Chisel2とChisel3が公開されている。 微妙に文法が異なっているので要注意だ。 Chisel2ではVerilogとC++を生成する方法が公開されているが、Chisel3ではどうだろう。 Chisel2でのVerilogとC++の生成方法については、以下のサイ…

RISC-VのSupervisor Binary Interface(SBI)について

RISC-Vのハイパーバイザについて調べているとき登場したが、Supervisor Binary Interface(SBI)というものが定義されている。 図. RISC-Vのソフトウェアスタック (https://riscv.org/wp-content/uploads/2015/01/riscv-software-stack-bootcamp-jan2015.pdf …

RISC-Vのハイパーバイザ仕様について調べる(2. ハイパーバイザのCSRとアドレス変換について)

RISC-Vのハイパーバイザの仕様について調査中。前回の続き。 参考にしているのは、 RISC-V ISA Manualの最新版(正式リリース版ではなくDraft版。こちらにはハイパーバイザの仕様案が含まれている)。 github.com また、RISC-VのSBI(Supervisor Binary Interfa…

RISC-Vのハイパーバイザ仕様について調べる(1. ハイパーバイザのモードと主要システムレジスタについて)

RISC-V Day Tokyo 2018にも出てきたハイパーバイザ仕様、はっきり言って自分にはさっぱり理解できなかった。 そもそもハイパーバイザの知識が無さすぎるので、これが良い機会なので一から勉強してみることにする。 参考にしているのは、 RISC-V ISA Manualの…

RISC-V Compliance Task Groupのテストパタンを試す(2. 自作RISC-Vシミュレータでテストパタンを通す)

RISC-V Foundationが公開しているテストパタンには、riscv-toolsリポジトリの中に含まれているriscv-testsテストパタンとは別に、RISC-V Compliance Task Groupのテストパタンが公開されている。 github.com ダウンロードして試行することができる。デフオル…

RISC-V Compliance Task Groupのテストパタンを試す

RISC-V Foundationが公開しているテストパタンには、riscv-toolsリポジトリの中に含まれているriscv-testsテストパタンとは別に、RISC-V Compliance Task Groupのテストパタンが公開されている。 github.com ダウンロードして試行することができる。デフオル…

APSで連載しているRISC-V入門全8回がすべて公開されました

今年の初めくらいからAPSさんにRISC-Vの記事を寄稿していたのですが、全8回分が今回すべて公開されました。 www.aps-web.jp APSさんでの連載はこれにて終了になります。 今年の2月から1か月に1本ずつ、合計8回分投稿させていただきました。 もともと入門者向…

RISC-Vシミュレータの命令定義のテーブルをJSONを使って書き直す

GitHub上に公開している自作RISC-Vシミュレータは、命令を定義しやすいように、Rubyの配列上に命令の定義、オペランド、ビットフィールドなどを定義してある。 Rubyの配列で直接記述することで、スクリプトで簡単に読み込むことができるのだけれども、統一さ…

RISC-V Day Tokyo 2018とIEEE MICRO51 Workshopで登壇します

すごくザックリしたタイトルですけど、何かしゃべります。 2018/10/18 RISC-V Day Tokyo 2018 @ 慶應義塾大学 2018/10/20 IEEE MICRO51 Workshop RISC-V Day Fukuoka 2018 @ グランドハイアット福岡 タイトルは「RISC-Vエコシステムを構成する技術と立役者た…

Rocket-Chip実装のリグレッションスイートを試す(2. TL2APB実装の解析)

APBのChisel実装を観察してみる。 今回読んだのは、TL2APBというChiselで書かれた実装だ。TL(TileLink)からAMBAに変換するモジュールについては、 ToAPB ToAHB ToAXI4 の3種類があり、まずは一番簡単そうなAPBを観察する。 ちなみにSiFiveが以下のような資料…

Rocket-Chip実装のリグレッションスイートを試す

全く資料が無いのだが、RISC-V実装であるRocket-Chipでは、リグレッションスイートが格納されているregression/というディレクトリが存在する。 make emulator-regression-tests SUITE=UnittestSuite まずはAMBAのテストを実行してみるためにいくつかテスト…

SiFiveはクラウド上でRISC-Vチップを設計する

図. RISC-Vチップ設計を手掛けるSiFiveのシリコンクラウドサービスについて (https://content.riscv.org/wp-content/uploads/2018/07/1330-18.07.18-Huzefa-Cutlerywala-Open-Silicon.pdf より抜粋) 本日のTSMCのアナウンス記事、面白いと思ったのでメモ。 …

TinyEMU Buildrootを試行する

TinyEMUはQEMUを開発したFabrice Bellard氏が開発したRISC-Vシミュレータだ。 さらに彼はRISC-VのLinuxを起動するためのbuildrootも用意したらしい。RISC-VのMLにアナウンスがあった。 TinyEMU とりあえず超高速のシミュレータでRISC-V Linuxを起動すること…

RISC-V Day Tokyo 2018 / Fukuoka で登壇します

RISC-V Day Tokyo 2018が10/18(木) に開催されます。私はRISC-Vを支える技術周辺、エコシステム周りを発表する予定です。 15分しかしゃべらないのですが、興味のある方はどうぞ。 tmt.knect365.com やっぱりメインはRISC-V Readerの日本語訳の配布、そしてDa…

RISC-Vシミュレータの実装をLambda関数を使って簡単化してみる

GitHub上に公開している自作RISC-Vシミュレータは、命令フェッチ、命令デコーダ、命令実行の部分が分けて実装してある。 命令デコーダは500種類程度ある命令を1つに特定し、その情報に基づいて命令を実行するのだが、その命令の実装はそれぞれの命令で分割し…

Linuxがブートできる自作RISC-VシミュレータをGitHubにアップロードした

自作RISC-Vシミュレータがある程度落ち着いてきたので、キリがいいところでGitHubで公開することにした。 github.com まあSpike(riscv-isa-sim)の劣化Cloneだと言ってしまえばそれまでなので、あまり意味はないのだけれど。。。 図. 自作RISC-Vシミュレータ…

RISC-Vのランダムテストriscv-tortureの+signature

RISC-V Tortureは、生成したテストパタンをシミュレータで実行し、最後にシグニチャを出力する。 シグニチャを他の実装(Rocket-Chipなど)との結果と比較して正しく実行できたかを判定している。 SpikeおよびRocket-Chipでシグニチャを生成するためには+signa…

RISC-Vのランダムテストriscv-tortureを試す

RISC-Vの実装を作るとまずはテストパタンを生成してテストを流してみたくなるのだが、RISC-Vにはテスト用のパタンがいくつか用意されている。 RISC-V Tortureのダウンロードとインストール RISC-V TortureのConfiguration Tortureの生成パタンの構成を変えた…

Freedom-U-SDKで生成したLinuxバイナリを自作RISC-Vシミュレータで実行 (4. 命令セットシミュレータの高速化検討)

RISC-Vの自作シミュレータでLinuxを立ち上げることに成功したが、まだかなりシミュレーション速度が遅いことが心配だ。 原因はすでに解析済み。メモリアクセスが何度も発生しているためにそこが最適化できていない。 以下は前回Google Perftoolsで解析したシ…

Freedom-U-SDKで生成したLinuxバイナリを自作RISC-Vシミュレータで実行 (3. シェル実行)

HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。 自作RISC-Vシミュレータを使ってRISC-VのLinuxをブートさせたいのだけれども、なかなか動作しないので四苦八苦していた。 #自作RISC-Vシミュレータ…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 9. FireSim v1.3.1 でBOOMを動かす

fires.im FireSim v1.3.1 ではBOOMに対応しているので、さっそくベンチマークプログラムを動かしてみた。 FireSim v1.3.1のダウンロード $ git clone https://github.com/firesim/firesim.git -b 1.3.1 --recurse-submodules firesim_v131 $ cd firesim_v131…