FPGA開発日記

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

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…

Freedom-U-SDKで生成したLinuxバイナリを自作RISC-Vシミュレータで実行 (2. Linuxのブート成功)

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

RISC-VのAtomic Operation命令について

RISC-VにはいくつかのAtomic演算命令が定義されている。 riscv.org Load-Reserved/Store-Conditional 命令 図. Load-Reserved/Store Conditional命令 LR命令はアドレスrs1からのデータをレジスタrdにロードし、その時のアドレスをRegister Reservationに記憶…

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

FireSim v1.3がリリースされた。変更点としてはAWS FPGA shell 1.4.0に対応したようだ。 これもFireSim用に独自の変更が加わっているらしい? github.com 機能的な変更点はあまり入っていない。ただしどこが変わっているか、BOOMの起動がうまくいっていない…

RISC-Vシミュレータ改造のTips

RISC-Vシミュレータで最も信頼できる実装はSpikeシミュレータである。 SpikeシミュレータはC++で書かれており、比較的簡単に解析ができるが、RTLとの実装の違いを確認したり、ソフトウェアの動作を確認したい場合に適用できるTipsがいろいろある。 各命令で…

RISC-Vの割り込みとタイマの仕組み

RISC-Vの割り込みについて。 RISC-Vのサポートしている割り込み・例外について こちらについては、一覧表が作られているので参照されたい。 図. RISC-Vのサポートしている割り込み・例外。(The RISC-V Instruction Set Manual Volume II: Privileged Archite…

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

HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。 これはデフォルトでRISC-V上で動作するLinuxの環境が乗っているようで、SDカードなど用意してLinuxをビルドすると、ちゃんとHiFiveで動作するらしい…

HiFive Unleashed向けのオープンソースRISC-V SDK Freedom-U-SDKの環境構築

HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。 というのは、どうにかしてまともにシミュレータで動かせるLinuxを用意して、自作RISC-VシミュレータでLinuxを立ち上げたい。 せっかくvmlinuxの最初…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (11. 自作RISC-VシミュレータでBBLとvmlinuxを起動する2)

UCBが開発しているRISC-VのシミュレータSpikeや、Rocket-ChipのRTLデザインは通常はシステムコールを持っていない。 つまり、当然ながらC言語でprintf("Hello World\n");などと書いても動作しないのだが、そこはコンパイラとフロントエンドサーバfesvr、pk(P…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (10. 自作RISC-VシミュレータでBBLとvmlinuxを起動する)

UCBが開発しているRISC-VのシミュレータSpikeや、Rocket-ChipのRTLデザインは通常はシステムコールを持っていない。 つまり、当然ながらC言語でprintf("Hello World\n");などと書いても動作しないのだが、そこはコンパイラとフロントエンドサーバfesvr、pk(P…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (9. RISC-Vはデバイスアクセスをどのようにして実現するか)

UCBが開発しているRISC-VのシミュレータSpikeや、Rocket-ChipのRTLデザインは通常はシステムコールを持っていない。 つまり、当然ながらC言語でprintf("Hello World\n");などと書いても動作しないのだが、そこはコンパイラとフロントエンドサーバfesvr、pk(P…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (8. RISC-Vのシステムコールを自作ISS上で実装)

UCBが開発しているRISC-VのシミュレータSpikeや、Rocket-ChipのRTLデザインは通常はシステムコールを持っていない。 つまり、当然ながらC言語でprintf("Hello World\n");などと書いても動作しないのだが、そこはコンパイラとフロントエンドサーバfesvr、pk(P…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (7. RISC-Vのシステムコールとfesvr)

UCBが開発しているRISC-VのシミュレータSpikeや、Rocket-ChipのRTLデザインは通常はシステムコールを持っていない。 つまり、当然ながらC言語でprintf("Hello World\n");などと書いても動作しないのだが、そこはコンパイラとフロントエンドサーバfesvr、pk(P…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (6. ファイルシステムの呼び出し)

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく、その3。 Spikeシミュレータはファイルの呼び出しもできる。これを実現しているのは、Spikeとは外部に接続されているpk(Proxy K…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 7. FireSimのFPGAレベルシミュレーション

FireSim v1.2でベンチマークプログラムを動かそうとしているのだが、どうもFPGAレベルでのシミュレーションでないと動かない? FPGAレベルでのRTLシミュレーションは、Amazon AWS環境でないと動かない気がする。 F1インスタンスで使用しているVU9Pのデザイン…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 6. FireSimのシミュレーション環境解析

FireSim v1.2でベンチマークプログラムを動かそうとしているのだが、なかなかうまく動かない。 NoNIC環境 (FireSim Rocket-Chip Standalone環境)の場合 これは簡単だ。riscv-testsの環境でテストパタンをビルドして、それを持ってくれば簡単なC言語のプログ…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 5. FireSim v1.2 を試行する

FireSim v1.2が公開された。主な変更点としては、Rocket-ChipだけでなくBOOMにも対応したとのことなので試行してみよう。 github.com FireSim v1.2環境をCloneする FireSimのリポジトリを、Tag付きでCloneする。さすがにriscv-toolsは取ってこなくても良いと…

FireSimのRTLシミュレーション環境を試す(1. MIDAS-Level環境でのベンチマークシミュレーション)

Amazon AWS F1インスタンス上で動作するRocket-Chip環境、FireSimはRTLシミュレーション環境が用意されている。 チュートリアルを試しながら、さっそく実行してみよう。 Debugging & Testing with RTL Simulation Debugging & Testing with RTL Simulation —…

RISC-VのZedBoard環境が動作しなくなっている問題

しばらく前から、RISC-VをZedBoardで動作させるための環境fpga-zynqリポジトリが動作しなくなっている状態であった。 (これは私も確認していた)。 GitHub Issueにもあげられており、しばらく監視していたのだが全く反応がないので諦めていたのだがこの度修正…