FPGA開発日記

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

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 4. Single Core Roctket-Chipの動作

FireSimのチュートリアルを試す続き。前回はなぜかFireSimが起動せずに終わった。 色々調べていくと、FireSimを立ち上げる際のF1インスタンスの設定で、t1.nanoで生成したVPCとサブネットを使用しなければならなかった。 AWSコンソール上でこれを確認してF1…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 3. ソフトウェアのビルドと環境設定

AWSで動作するRISC-Vシミュレーション環境FireSimのチュートリアルその3. F1インスタンスにアクセスするために、生成したキーペアのfiresim.pemをホームディレクトリに配置しておく。 また、sshのキーと同様に、chmod 600 しておく。 $ chmod 600 ~/firesim…

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

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

Spectre & Meltdown を防ぐマイクロアーキテクチャSafeSpecの論文を読む

CPU

Hisa Ando氏のブログで知ったのだが、Spectre & Meltdownを防ぐマイクロアーキテクチャとしてSafeSpecという技術が発表されたので、これを読んでみることにした。 2.SpectreやMeltdownを防ぐSafeSpecマイクロアーキテクチャ 20180616 Boffins offer to mak…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 2. インスタンスの設定とAWSの起動

AWSで動作するRISC-Vシミュレーション環境FireSimのチュートリアルその2. [高度な詳細]を開き、テキストボックスに付録に示すようなテキストファイルを入力する。 ... 次にストレージを追加する。デフォルトでは75GBと設定されているが、これを300GBまで拡…

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 SpikeシミュレータでC/C++のprintfを実現する仕組み (2. Device Tree Blobと Proxy Kernel)

RISC-Vのシミュレータは、シミュレーション対象のプログラムのElfファイル以外に、いくつかの外部ライブラリをロードしている。 RISC-V の Device Tree (SpikeのビルドにDevice Tree Compiler が必要なのはこのためだ) RISC-V の Proxy Kernel (I/Oなどの本…

分散システムのコンセンサスアルゴリズムRaftについて調査

ビットコインの勉強の最中に、コンセンサスアルゴリズムについていろいろと調べていたのだが、じゃあ一般的に分散システムでコンセンサスってどうやってとるんだろう?ということに興味をもってコンセンサスアルゴリズムというものを知った。 最初は、ちょっ…

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 というわけで、実装自体はテンプレートに従って追加していったのだが、いくつか注意しなければならな…

「ブロックチェーン・プログラミング」を読む (ビットコイン送金を体験)

「ブロックチェーン・プログラミング」第2章はビットコインの基本を復習しておく。 Mastering Bitcoinを読んでいるので、ある程度理解できるのでサクサク読み進めていく。 今回は第4章の途中まで。第3章は暗号技術でちょっと難しいのでとりあえず読み飛ばす…

「ブロックチェーン・プログラミング」を読む (ビットコインとブロックチェーンの基本)

「ブロックチェーン・プログラミング」第2章はビットコインの基本を復習しておく。 Mastering Bitcoinを読んでいるので、ある程度理解できるのでサクサク読み進めていく。 ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)作者: 山崎重一…

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>…

「ブロックチェーン・プログラミング」を読む (bitcoinツールの導入)

"Mastering Bitcoin"によりビットコインの基礎中の基礎を学んだので、次にブロックチェーンをより実践的に触ってみたいと思い、以下の書籍を購入した。 ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)作者: 山崎重一郎,安土茂亨,田中俊…

AWS EC2 F1インスタンスを使ったハードウェア開発の勉強 (11. 割り込み信号によるFPGAからホストへの通知機能)

AWS F1インスタンス HDK の勉強を続けている。 目標としては、以下の部分にAXIマスタを接続してDRAMにアクセスし、データをフェッチする。 DMAでホストからデータをDDR4メモリに格納する。 AXIマスタデータをフェッチする 演算し、結果を格納する。 として、…

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

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

「30日でできる!OS自作入門」を読了した (29日/30日 アプリケーション作成)

30日でできる! OS自作入門作者: 川合秀実出版社/メーカー: 毎日コミュニケーションズ発売日: 2006/03/01メディア: 単行本購入: 36人 クリック: 735回この商品を含むブログ (299件) を見る 29日目と30日目はアプリケーションをたくさん作ってみる話。 アプリ…

「30日でできる!OS自作入門」を読み始めた (28日目 ファイルの操作と日本語表示)

30日でできる! OS自作入門作者: 川合秀実出版社/メーカー: 毎日コミュニケーションズ発売日: 2006/03/01メディア: 単行本購入: 36人 クリック: 735回この商品を含むブログ (299件) を見る 28日目はファイル操作と日本語のサポートを行う。 ファイル操作につ…

NHK技研公開2018に行ってきました

www.nhk.or.jp NHK放送技術研究所に行ってみるのは初めてのことだった。成城学園前駅からバスで約10~15分。意外と遠いな! 実際に通っている人はみんなバスで通っているのかな。 NHKの技研公開では、NHKが考える未来の技術、現在開発中の技術や、NHKが作ろ…

RISC-Vの連載第5回がインターフェース誌に掲載されました

これまでの記事はこちら。 RISC-Vの連載をInterface誌に寄稿しました(2018年2月号から) RISC-Vの連載第2回がインターフェース誌に掲載されました RISC-Vの連載第3回がインターフェース誌に掲載されました RISC-Vの連載第4回がインターフェース誌に掲載されま…

AWS EC2 F1インスタンスを使ったハードウェア開発の勉強 (10. 整数行列計算回路の実装)

AWS F1インスタンス HDK の勉強を続けている。 目標としては、以下の部分にAXIマスタを接続してDRAMにアクセスし、データをフェッチする。 DMAでホストからデータをDDR4メモリに格納する。 AXIマスタデータをフェッチする 演算し、結果を格納する。 として、…

Speculative Store Bypass に学ぶ現代プロセッサの高速メモリアクセスユニットの仕組み

Microsoft および Google から、新たなCPUの脆弱性であるVariant 4およびVariant 3aについてのアナウンスがあり、Intel, AMD, Arm が対応に迫られている。 これらの脆弱性は、現代のコンピュータアーキテクチャの飽くなき性能追及の結果発生したものが多く、…

Amazon AWS F1インスタンス上で動作するRISC-VプロセッサRocket-Chipの環境FireSimがオープンソース化

UCBにて開発されているRISC-VのRocket-Chipを、Amazon AWS F1インスタンス上で動作させるための環境FireSimがISCA 2018にアクセプトされたとのこと。 おめでとうございます。 1. FireSim Basics — FireSim documentation via kwout さらに、FireSimの環境が…

C++で記述された軽量CNN実装 mojo-cnn 試行 (4. RISC-V on FPGAのデバッグ)

FPGAでCNNのプログラムを動かそうとしたのだが、C++のコードをそのままRISC-Vでコンパイルして走らせてもどうもうまく行かない。 そもそもの問題だが、例えばRISC-V on FPGAで何かを動かしたい場合、printfなどは独自のsyscalls.c を使ってPS (=ARM)に表示さ…

RISC-V におけるメモリモデルについて

RISC-Vのコンパイル時に登場する謎のメモリモデルについて調査したのでまとめておく。 以下の資料を参考にした。 All Aboard, Part 4: The RISC-V Code Models www.sifive.com RISC-Vはコード内をジャンプするための手法としては複数の手段があるのだが、他…