FPGA開発日記

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

RISC-V

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にもあげられており、しばらく監視していたのだが全く反応がないので諦めていたのだがこの度修正…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (2. シミュレーションモデルの作成)

ハードウェア記述言語であるChiselのチュートリアルを試してみている。 ChiselはScalaをベースにしているDSL(ドメイン特化言語)だ。 したがって、Scalaを勉強しながら進めていく必要がある。 Chiselの理解のために、簡単なCPUを作ってChiselを使いシミュレー…

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

RISC-Vの実装であるRocket-ChipはChiselと呼ばれるDSLで記述されているのだが、この書き方やテクニックについてはあまり知られていない(まあ知る必要もないが...) ただし、AWSで動作するFireSimを改良したりだとか、Rocket-Coreを改造する場合にはこの知識は…

AWSで動作するRISC-VデザインFireSimのカスタマイズ : オリジナルデバイスをVerilog付きでシミュレーションする

前回の記事で、どうにかFixedInputStreamが実行できるようになったが、これはテストベンチまですべてScalaで記述して常に同じ動作を繰り返す環境になっている。 これは嫌なので、Verilogなどを接続して外部から引数を渡し、自由にシミュレーションを実行でき…

AWSで動作するRISC-VデザインFireSimのカスタマイズ : Firechipにオリジナルデバイスを追加する

FireSimについてある程度動かしたので、今度はカスタマイズをしてみたい。 というわけで、FireSimの実際のデザイン部分であるFireChipを使ってみることにした。 オリジナルのデザインを追加してみることにした。 メモリマップのレジスタを作る 参考にしたの…

AWSで動作するRISC-VデザインFireSimのカスタマイズ : Firechipを試す

FireSimについてある程度動かしたので、今度はカスタマイズをしてみたい。 というわけで、Firesimの実際のデザイン部分であるFireChipを使ってみることにした。 Tutorial: Developing New Devices — FireSim documentation まずはデザインをForkしてダウンロ…

Ubuntu 18.04でsbtが動かない問題(というか結果的にRocket-Chipが動かない問題)を何とかする

Ubuntuが18.04 LTSになって、さっそくバージョンアップしてRISC-Vの環境を構築しようとしたのだけれども問題にぶち当たった。 RISCV-Toolsは以下のエントリでインストールの試行はしていたし、うまく行くことは確認していたのだけれども、Rocket-Chipの試行…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 1. 立ち上げと参考文献

参考にしたのは以下。 Welcome to FireSim’s documentation! — FireSim documentation 初期セットアップ・インストール 最初にAWSのユーザグループを作成する。AWSのアカウントと支払を行っていればこのステップを実行する必要はない。 アカウントに必要なAW…

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

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく、その2。 今回はRISC-Vプログラムのシステムコールの呼び出し部分 Spikeシミュレータの構造を調べているのだが、printf()などの…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (4. RISC-Vのプログラムロード)

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく、その2。 今回はRISC-Vプログラムのロード部分。 parse_args()により関数をコールを行う。 riscv-pk/pk/pk.c static size_t par…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (3. RISC-Vのブートシーケンス)

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく。 riscv-isa-sim/riscv/sim.cc 内のリセットベクタが最初に動作する。 riscv-isa-sim/riscv/sim.cc void sim_t::make_dtb() { .…

Elfファイルからシンボルを取り出してシミュレータでトレースを表示する機能の実装

RISC-Vシミュレータにはelfファイルを読み込ませているのだが、elfファイルにはいろんな情報が取り込まれており、例えば テキスト領域の関数のヘッダアドレス グローバルデータが格納されているアドレス などの情報が格納されている。 シミュレータは、テキ…

RISC-VのCompressed命令のISS実装 (2. RV64/RV32の両デコード対応)

RISC-VのCompressed命令について理解したので、自作ISSへの実装を進めた。 Compressed 命令の仕様については以下のまとめた。 msyksphinz.hatenablog.com 前回のRV64版のCompressed命令の実装についてはとりあえず終わったので、次はRV32版のCompressed命令…

RISC-VのCompressed命令のISS実装 (1)

RISC-VのCompressed命令について理解したので、自作ISSへの実装を進めた。 Compressed 命令の仕様については以下のまとめた。 msyksphinz.hatenablog.com というわけで、実装自体はテンプレートに従って追加していったのだが、いくつか注意しなければならな…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (1. RISC-V バイナリの解析)

RISC-V Spikeシミュレータでは printf() や std::cout を使ってもコンソールで出力することができる。 test_output.c #include <stdio.h> int main () { printf ("Hello World, C\n"); return 0; } test_output.cpp #include <iostream> int main () { std::cout << "Hello Worl</iostream></stdio.h>…

Amazon EC2 F1インスタンスで動作するRISC-Vシミュレーション環境FireSimの論文を読む

ISCA 2018で発表される予定の論文、"FireSim: FPGA Accelerated Cycle Exact Scale-Out System Simulation in the Public Cloud" をざっと流し読みした。 EC2 F1インスタンスを勉強している身としては、把握しておきたい内容ということで、分かったことをま…

RISC-V仕様のFormal表現いろいろ

8th RISC-V Workshop in Barcelona で非常に気になったワーキンググループの一つ、RISC-V Formal Specification について調べた。 Formal Group は、 RISC-Vの仕様を、英語で書かれた仕様書としてだけでなく、マシンでもチェック可能なプログラムのような形…

RISC-V Fedora ディスクイメージを立ち上げるための BBL (Berkeley Boot Loader) をコンパイルする

前回の続き。前回は QEMU for RISC-V のビルド実行 Fedora の vmlinux, bbl, ディスクイメージをダウンロード (http://msyksphinz.hatenablog.com/entry/2018/05/07/040000) まで実施した。次に、フルスクラッチからこれらの環境を作るために以下のことをや…

RISC-V版QEMUでLinuxを立ち上げる試行

QEMU が RISC-Vのプラットフォームに対応した。 v.2.12 から、RISC-Vに対応している。 QEMU ChangeLog/2.12 (RISC-V) ChangeLog/2.12 - QEMU さっそくダウンロードして使ってみる。ついでに、いくつかRISC-Vに対応しているLinuxプラットフォームがあるので試…

2018年のRISC-V Workshopのスケジュールが公開されました

2018年のRISC-V Workshopのスケジュールが公開されたようです。 日本でもRISC-V Day Tokyoの第2回が開催のようですね。 riscv.org RISC-V Workshop in スペイン・バルセロナ (05/07 - 05/10) RISC-V Day 上海 (06/30) RISC-V Workshop in インド・チェンナイ…

RISC-VツールセットをインストールしたDockerコンテナ作成(3. 自作RISC-Vエミュレータのリグレッション)

RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。 前回RISC-Vのツールセットが入ったDockerコンテナを用意したので、RISC-Vのテストパタンセットを動作させてみる。 以下のようなDoc…

RISC-VツールセットをインストールしたDockerコンテナ作成(2. RISC-Vコンテナの作成)

RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。 満足したところで公開したいので、一応リグレッションテストをいつでも実行できるような状態にしておきたい。 とりあえず自分で色…

RISC-Vの32bitモードと64bitモードの動作の違いについて

RISC-V にはRV32とRV64のモードが存在しており、これはアドレッシングモードのみを示しているものと思いがちだが、 RV32 : 汎用レジスタ長は32ビット (XLEN=32) RV64 : 汎用レジスタ長は64ビット (XLEN=64) と決められている。 For RV32, the x registers ar…

RISC-VツールセットをインストールしたDockerコンテナ作成(1. 検討)

RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。 満足したところで公開したいので、一応リグレッションテストをいつでも実行できるような状態にしておきたい。 というわけで、RISC-…

RISC-VのシステムレジスタCSRの定義について

RISC-Vのシステムレジスタの仕様は、RISC-V Privileged ISA Manual に記載されている。 ここにはシステムレジスタCSRの定義がいくつか記述されている。このなかには、いくつかの略語が使われており、CSR内部のフィールドの扱い方が説明されている。 riscv.or…

RISC-Vの浮動小数点命令について

RISC-Vの自作エミュレータを作成している。 テスト自体はriscv-testsリポジトリを使えばよいのだが、パタンが落ちた時の解析がなかなか大変だ。少しずつテストパタンを確認しながら進めている。 特に浮動小数点命令について、 単純にsoftfloatライブラリを使…

RISC-V の メモリプロテクション機構について (PMP : Physical Memory Protection)

RISC-V はどのようなターゲットにも適用することの出来るCPUアーキテクチャを目指している。 それはMPU(Micro Processor Unit) だけでなく MCU(Micro Controller Unit)としても活用することができる。 MCUで多く使用される(MPUもだろうけど) メモリ保護の機…

APSにRISC-Vの記事を寄稿しました (第2回 RISC-Vの命令セット)

APSさんにRISC-Vの記事を寄稿しました。第2回。たぶん1か月に1回くらいの更新です。 www.aps-web.jp 初心者向けとか言いながら、ISAの少し深いところにも立ち寄っています。まあこういう記事に興味を持つ人って、ぶっちゃけあまり初学者じゃないですよね。 A…

RISC-Vの仮想アドレス→物理アドレス変換機構の構成と実装について (Ver.1.10版)

RISC-Vはシンプルな構成を特徴としているISAではあるが、一つの特徴としてMMUの構成があまりシンプルではないということがある。 シンプルなRISC-Vの構成の中で、ハードウェアページテーブルウォークを採用したRISC-Vは、それも一緒に実装しないと仮想アドレ…