FPGA開発日記

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

RISC-V

Western DigitalのRISC-VコアSweRV-EH1 (4. テストベンチのコンパイル環境)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが動かせるようになった。 久しぶりに見てみると、アセンブリをコンパイルしてシミュレーションに使用する環境がマージされている。 テストには hello_world.s hello_world2.s …

Western DigitalのRISC-VコアSweRV-EH1 (3. オリジナルプログラムを動かす)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが動かせるようになった。 構造が分かってきたので、今度は自分のプログラムを動かしてみたい。 github.com マニュアルのメモリマップを見ても正しいようには思えないのだが、と…

Sipeed MAIX : RISC-V 64 AI Moduleが届いた

随分前にIndieGogoで募集していた、RISC-V ASICチップ+AIモジュールキット、Sipeed MAIX が届いた。 モードと外部ディスプレイ、カメラなどの基板がセットだ。 www.indiegogo.com とりあえずまだ時間がないのでまだ触れない... あと、ドキュメントが余りな…

Western DigitalのRISC-VコアSweRV-EH1 (2. テストベンチを動かす)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが存在しないのでしばらく放置していたのだが、リビジョンが上がってテストベンチが公開された。 https://github.com/westerndigitalcorporation/swerv_eh1 しかし、ソースコー…

RISC-Vのアウトオブオーダコアで体験するSpectre/Meltdown (1. Variant-1を動かしてみる)

BOOM v2.2がリリースされたことに伴い、BOOMを使ったSpectre/Meltdownの攻撃手法を再現するリポジトリの存在を知った。 boom-attacks というリポジトリだ。これはアウトオブオーダプロセッサのBOOMを使い、Spectreの攻撃手法を再現しようというものである。 …

RVC命令に対応したRISC-VアウトオブオーダコアBOOM v2.2リリース (1. ビルド & シミュレーション試行)

https://boom-core.org RISC-VのアウトオブオーダプロセッサであるBOOMのVersion 2.2がリリースされた。 リリース通知から、アップデート内容を確認してみると、 全てのコンフィグレーションでRISC-V Compressed("RVC")命令をサポート これでBOOM専用にRV64G…

Western DigitalのRISC-VコアSweRV-EH1 (1. SweRVの環境構築とVivado論理合成)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされた。 https://github.com/westerndigitalcorporation/swerv_eh1 基本的なスペックは以下の通り。これはSweRVの資料から引っ張ってきた。 https://github.com/westerndigitalcorporation/swerv_…

Chiselで設計したHWのコンパイルオプションで生成されるモジュールを切り替える方法

Chiselという言語はVerilogとは似て非なる。 ハードウェアを記述する言語ではあるが、Verilogと同じように考えているとどのようにハードウェアを作ればよいのかわからなくなったり、Chiselの本来のうま味を引き出せなくなる。 前回は、Chiselの記述中にVeril…

Chiselの中にVerilogを埋め込む方法

ChiselはScalaをベースにしたハードウェア記述言語で、より高位な記法を使ってハードウェアを設計しようという考え方を持っている。 しかし、どうしてもVerilogを使いたい場合、あるいはある部品は既存のVerilogで記述されたものを使いたいと思うときがある…

Chiselを使ってCPUを作ろう(17. 5ステージにCPUにフォワーディングパスを追加する)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。5ステージまで拡張したので、次はフォワーディングパスを追加して正常に演算を実行できるようにする。 github.com ALUのフォワーディングパスは、 WBステージ → EXステージ MEMステージ → EX…

Chiselを使ってCPUを作ろう(16. 5ステージにCPUに拡張してみる)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。折角なので5ステージまで拡張して、テストパタンが通るようにしたい。 参考にしたのはヘネパタの後ろの方に乗っている5ステージのプロセッサの解説。とりあえず図に乗っていることをすべてChi…

Chiselのパラメタライズについて調査(2. Advanced Parameterization Manualの続き)

Chiselについて少しずつ勉強を進めているが、SystemVerilogと同様のことが実現できないと、マスターしたとは言えないだろう。 Verilogでも多く使われるパラメータ化、これをどのようにしてChiselで使用するのか、Rocket-Chipのデザインを見ても良く分からな…

Chiselを使ってCPUを作ろう(15. デザインのパラメタライズ)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。 CPUコアのバスサイズ、Debug情報のON/OFFなどをパラメータにより調整する。 github.com デザインのパラメタライズ パラメータ化する項目は、以下のようにして1つのクラスにまとめた。 RVConf…

Chiselを使ってCPUを作ろう(14. 2段パイプラインのデザインをGitHubに公開しました)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。 とりあえず、rv64ui-pのリグレッションテストがすべてPass するようになったのでGitHub上に公開した。 といっても、2段ステージのパイプラインで非常にしょぼいものだが。 ただし、このデザ…

RISC-Vのフォーマル検証環境riscv-formalを試す

RISC-V Summitで発表があったRISC-VのFormalツールに、riscv-formalというものがある。 内容はまだ未確認だが、どうやらRISC-Vのプロセッサに対してFormal検証をかけることができるツールらしい。 github.com もともとこのツールはVerilogなど通常のデザイン…

Chiselのパラメタライズについて調査(1. Advanced Parameterization Manualを読む)

Chiselについて少しずつ勉強を進めているが、SystemVerilogと同様のことが実現できないと、マスターしたとは言えないだろう。 Verilogでも多く使われるパラメータ化、これをどのようにしてChiselで使用するのか、Rocket-Chipのデザインを見ても良く分からな…

Chiselを使ってCPUを作ろう(13. リグレッションテストを流してみる)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。 とりあえず一旦リグレッションテストを全部流してみるとどのようになるのだろうか。 リグレッションテストは、ホームディレクトリにあるtest.hexを書き換える形で行う。 本当はファイルオー…

Gem5 for RISC-Vのビルド試行 (3. Gem5でCoremarkをコンパイルして実行してみる)

Gem5のリグレッションテストが流れたので、次は自分でプログラムをコンパイルして動かしてみたい。 手っ取り早く、Coremarkのベンチマークプログラムが動かないかと思い、試行してみることにした。 CoremarkをGitHubからダウンロードし、展開する。 github.c…

Gem5 for RISC-Vのビルド試行 (2. リグレッションテストの実行)

Gem5のビルドが完了して簡単なテストが実行できたので、次はリグレッションテストを実行してみたい。 Gem5にはあらかじめRISC-V向けの命令セットのテストパタンが用意されている。これをビルドして、全て流してみればよいわけだ。 cd tests/test-progs/asmte…

Gem5 for RISC-Vのビルド試行 (1. ビルドとhelloを流す)

Gem5というのは命令セットシミュレータの一つで、複数のISAをサポートしている。 現在のサポートしているアーキテクチャの状況はこんな感じだ。 Supported Architectures - gem5 RISC-Vも限定的にサポートされており、ビルドの試行くらいは出来そうだ。 ソー…

TensorFlow LiteでのRISC-V向けビルド試行(1. riscv32-gccを使ったビルド試行→失敗)

TensorFlow Liteは、Raspberry Pi向けであったり、iOS向けにコンパイル環境が用意されているようだが、よく見てみると一応RISC-V向けのビルドファイルが用意されている。 ちゃんとしたサポートになっているのかは分からないが、これを使えばとりあえずRISC-V…

Chiselを使ってCPUを作ろう(12. テスト終了コードの取り扱いについて)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。RISC-Vにはfromhostやtohostといったレジスタ(メモリマップドレジスタ)が定義されており、それを使用してシミュレーションの制御を行う。 このメモリマップドレジスタはだいたい0x1000あたり…

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…