FPGA開発日記

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

Vivado-HLSを使って高位合成でCPUを作ってみる(4. RTL合成後のシミュレーションとサイクル測定)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 とりあえず基本的なパタンが動くようになったので、Co-Simulationの実施とサイクル測定を実施する。 Co-Simulationを実施すると、RTLシミュレーションでも無事に動作していることが確認できた。 では…

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

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

オリジナルLLVM Backendを追加しよう (21. 剰余演算の最適化と論理・比較命令の追加)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 資料としては Tutorial: Creating an LLVM Backend for the Cpu0 Architecture を使用している。やっとChapter-4だ。 DIV命令は…

オリジナルLLVM Backendを追加しよう (20. 算術演算命令の追加)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 資料としては Tutorial: Creating an LLVM Backend for the Cpu0 Architecture を使用している。やっとChapter-4だ。 今回からは…

Vivado-HLSを使って高位合成でCPUを作ってみる(3. CPUクラスへの実装まとめ上げとテストベンチ実行)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 これまでは、CPUのクラスは存…

Vivado-HLSを使って高位合成でCPUを作ってみる(2. 標準的な命令を実装する)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 一般的なCPUと同じで、まずは…

オリジナルLLVM Backendを追加しよう (19. 大きな値の生成)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 Cpu0チュートリアルの、ch3_largeframe.bcをうまくアセンブリ生成することができない。 大きな値を作成するために、MYRISCVXAnal…

Vivado-HLSを使って高位合成でCPUを作ってみる(1. メモリのRead/Writeのモデルを作成)

Vivado-HLSで高位合成からCPUを作ってみたい。 高位合成でCPUを作るというのはネタとしてはイマイチだけれども、高位合成がどういうものか、目標をもって試してみるには良い題材だと思うので試してみている。 前回はとりあえずメモリにアクセスしてデータを…

映画「7つの会議」を見てきました

nanakai-movie.jp 七つの会議 (集英社文庫)作者: 池井戸潤出版社/メーカー: 集英社発売日: 2016/02/19メディア: 文庫この商品を含むブログ (11件) を見る 映画「7つの会議」を見てきました。企業の隠蔽体質というか、ブラックな部分を暴く映画としては結構面…

オリジナルLLVM Backendを追加しよう (17. 命令フォーマット増強)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 関数コールに対応するためには、EmitPrologueおよびEmitEpilogueを実装しなければならない。 このためには、ロードストア命令・…

Rustのサンプルプログラムをたくさん写経する

Rustにとても興味がある。 いつもソフトウェア環境はC++を使って構築しているので、Rustに移行すると何か良いことがあるのか? という訳で今年の目標はRustを覚えることに決めた。 Rustの言語使用自体は分かるような気がするのだが、それで現実的なアプリケ…

AXIスライサ・Skid Bufferの勉強

AXIは基本的にReady-Validのハンドシェークで動いているのだけれども、これをひたすら繋いでいくと、ValidとReadyがFFを経由せずにつながってしまい、タイミング的に問題となる。 msyksphinz.hatenablog.com これを改善するために、各種バスプロトコルにはス…

アウトオブオーダ実行の詳細を勉強する場合の資料には"Understanding the detailed Architecture of AMD's 64 bit Core"がとても良い

いろいろ訳あってCPUのアウトオブオーダ実行とか、マルチコアのキャッシュコヒーレンスの仕組みとかを勉強し直しているのだが、勉強するにあたり非常に良い資料がたくさんあるので紹介。 プロセッサアーキテクチャについて学ぶのには、もちろん教科書として…

マルチコアにおけるキャッシュコヒーレンシ方式の簡単なまとめ (2. ディレクトリベースのキャッシュコヒーレンシ)

過去の日記では、キャッシュスヌープ方式のキャッシュコヒーレンシ制御の方法をざっくりと見たが、今度はもう一つのディレクトリベースのキャッシュコヒーレンシ制御についてみていく。 キャッシュスヌープ方式の記事はこちら。 msyksphinz.hatenablog.com …

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 とりあえずまだ時間がないのでまだ触れない... あと、ドキュメントが余りな…

Vivado-HLSを使って高位合成でCPUを作ってみる(1. メモリのRead/Writeのモデルを作成)

Vivado-HLSの勉強をしてみたいのだけれども、何か題材をもってデザインを作ってみる方が良いと思う。 そこで、簡単なモデルでも良いのでCPUを作ってみることにした。 最終的にはRISC-Vを実行させてみたいのだけれども、まずは簡単なモデルから動かすというこ…

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

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

Vivado HLSをWindows Subsystem on Linuxで動作させるための手順

Vivado HLSについて再入門しようと思っている。 最近は環境をVirtual BoxからWindows Subsystem on Linux(WSL)に変更したので、その環境下でVivado HLSが動くようにしておきたい。 私が使うのは、基本的にGUIは立ち上げずにスクリプトだけで処理を行いたい。…

オリジナルLLVM Backendを追加しよう (17. フレーム処理)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 関数呼び出しの際のフレームを生成する。これはCpu0 BackendのChapter3_5に相当するところだ。 これがうまくいくと、main()関数…

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

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

マルチコアにおけるキャッシュコヒーレンシ方式の簡単なまとめ (1. キャッシュスヌープ方式)

久しぶりににヘネパタ(「コンピュータアーキテクチャ 定量的アプローチ 第5版」)を読み直していると面白い。少しマルチコアプログラミングについて確認したいことがあったので、マルチコアにおけるキャッシュコヒーレンシを保つための手法についてもう一度勉…

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

オリジナルLLVM Backendを追加しよう (16. SelDAGtoDAGの実装)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 SelectionDAGを追加している。きつねさんLLVM本曰く、SelDAGtoDAGというのは、 LLVM IR から SelectionDAG を経由して MI Layer…

オリジナルLLVM Backendを追加しよう (15. RISC-Vオリジナルターゲットの作り直し)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 Chapter-3のサイズの大きなスタックフレームの処理に関して、どうにも解決できずに悩んでいる。 とりあえず最初から全体的に見直…

オリジナルLLVM Backendを追加しよう (14. RISC-V命令フィールド登録の見直し)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 Chapter-3のサイズの大きなスタックフレームの処理に関して、どうにも解決できずに悩んでいる。 とりあえず最初から全体的に見直…

Chiselで非同期クロック設計をしよう

Chisel3.0からは異種クロックのサポート、つまり複数のクロックを使ったデザインがサポートされるようになった。 Chisel3でクロックを2つ用意するためには、CrossingIOを使用する。 class AsyncQueue[T

RISC-V 64-bit LLVM Backendを試す (13. Return文生成の解析)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 前回までで、簡単なReturn命令は生成されるようになったが、まだ-O2オプションを付加しないとエラーが発生する。 EmitPrologueと…

RISC-V 64-bit LLVM Backendを試す (12. EmitPrologueとEmitEpilogueを実装したい)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 前回までで、簡単なReturn命令は生成されるようになったが、まだ-O2オプションを付加しないとエラーが発生する。 次はCpu0 Backe…