FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LLVM 8.0ベースのプロジェクトを LLVM 10.0ベースに移行するための作業まとめ

llvm.org LLVM 10.0がリリースされた。メジャーバージョンアップの頻度が3か月に1回程度となっており追いかけるのも大変だ。 また、メジャーバージョンがアップデートされる度にAPIの仕様が大きく変更されており、プロジェクトを移行させるのも並大抵ではな…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(5. パケットフォーマット)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 5. トレースエンコーダの出力パケット トレースエンコーダでは、以下の情報を含まなければならない。 パケットタイプ…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(4. フィルタリング)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 4. フィルタリング エンコーダがトレースを生成するためのメカニズムを示している。例えば、以下の条件ではトレース…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(3. Hartのエンコーダインタフェース)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 3. Hartのエンコーダインタフェース 3.1 インタフェースの要求 以下の情報がインタフェースとして転送されればよい。…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(2. 分岐トレース)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 Chapter.2 分岐トレース 命令データトレース、もしくは分岐トレースはとあるアドレスからスタートして命令の実行情報…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(1. イントロダクション)

RISC-Vのトレースフォーマットの仕様書が公開された。現在はドラフト段階だが、ドキュメントがGitHubで公開され、pdfファイルも入手することができる。 各種CPUアーキテクチャのトレース形式など、あまり勉強したことが無いのでこれを機に読んでみよう。 git…

UCBのAdvanced Computer Architectureの講義資料を読む(10. 複数命令発行の技術)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(9. 分岐予測)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(8. ILPの向上テクニック, Tomasuloのアルゴリズム)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(7. ILPの向上テクニック)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(6. 高度なキャッシュ最適化)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(5. キャッシュ階層)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(4. キャッシュ階層)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(3.半導体の性能向上)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(2.半導体の性能向上)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

UCBのAdvanced Computer Architectureの講義資料を読む(1. 半導体のトレンドと背景)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学…

RustでRISC-V命令セットシミュレータを作ろう (17. マクロの導入)

Rustで作る自作命令セットシミュレータの続き。アトミック命令をすべて実装したのはいいが、同じような記述を大量に並べてしまっておりどうも気持ちが悪い。 AMOADD.Wの実装 fn execute_amoadd_w (&mut self, inst: InstT) { let rs1 = Self::get_rs1_addr(i…

RustでRISC-V命令セットシミュレータを作ろう (16. アトミック命令の実装)

Rustで作る自作命令セットシミュレータの続き。残りの命令を実装していく。次はアトミック命令の実装だ。これもC++で実装したことがあるのでRustに移植するだけである。 Rustでの実装で気をつけなければならないのは型の変換を明示的に行わなければならない…

RustでRISC-V命令セットシミュレータを作ろう (15. flamegraphによる性能解析)

Rustで作る自作命令セットシミュレータの続き。テストパタンによってはシミュレーションにかなり時間がかかっているような気がするので、どこに負荷がかかっているのかを解析したい。 色々調べていると、Rustで書いたプログラムの性能解析としてFlamegraphと…

RustでRISC-V命令セットシミュレータを作ろう (14. リグレッションテストの全確認)

Rustで作る自作命令セットシミュレータの続き。RV32とRV64でテストはある程度動くようになっているので、ここらでリグレッションテストを通して細かいところを修正していこうと思う。 Rust実装の修正 RV32とRV64で微妙に動作が異なる部分 例えばシフト命令の…

Diplomacyを使ってOCPバスを作成する(15. Xbarの理解2)

TileLinkのXbarの仕組みを引き続き解析している。requestAIOの解析の続き。縦方向がマスター側、横方向がスレーブ側である。下記の図において、A(n, m)=1の場合はマスターnがマスターmにリクエスト要求を出していることを意味する。 A(n,m) = 1 : マスターn…

Diplomacyを使ってOCPバスを作成する(14. Xbarの理解)

DiplomacyのXbarについて理解を深めるためにソースコードを読んでみよう。とりまOCPの実装をしたいのだが、何せ内部を理解しないとどうも改造できそうにない気がしてきた。どうにかしてソースコードを理解しなければ。 NexusNodeについて NexusNodeは複数のS…

Diplomacyを使ってOCPバスを作成する(13. Xbarの作成を行う2)

Diplomacyを使ったOCPプロトコルの作成、Xbarをもう少し拡張させてみよう。複数のマスターに対して1つのスレーブを接続する。 val pusher1 = LazyModule(new OCPPatternPusher("pat1", Seq( new WriteReqPattern (0, 0x100, 0x2), new WriteDataPattern (0, …

Diplomacyを使ってOCPバスを作成する(12. Xbarの作成を行う)

Diplomacyを使ったOCPプロトコルの作成、次にXbarの作成を行う。Xbarというのはクロスバで、複数のマスターとスレーブを接続する。まずは1マスターから複数スレーブに向けて接続する回路を作成する。 Diplomacyのクロスバの考え方はこうだ。まずはすべてのマ…

AWSのPythonインタフェースboto3を使用してEC2インスタンスにジョブを流し込む (3. NVMeを接続した場合の状態を観測する)

EC2インスタンスにジョブを流し込む方式について調査している。boto3を使って任意のインスタンスにディスクをアタッチ・デタッチすることはできるようになった。 これを使って巨大なジョブを流すテストを行っている。 その際、どうも不可思議な状況に出くわ…

AWSのPythonインタフェースboto3を使用してEC2インスタンスにジョブを流し込む (2. ディスクのAttach)

LLVMのビルドなどCPUパワーとメモリを大量とするソフトウェアのビルドについて、自分のプライベートPCでは到底歯が立たないので何とかしたい。EC2インスタンスを使って問題を解決したい。 Threadripperなどを買って並列ビルドすればよいのだろうが、そもそも…

Diplomacyを使ってOCPバスを作成する(11. インタフェースのデバッグ)

Diplomacyを使ったOCPプロトコルの作成、Bufferのデバッグを行っているが、どうも良く分からないところがある。 例えばBufferのインタフェースにQueueを挿入せずにそのまま接続しようとした場合、以下のようなエラーが発生してしまう。 val ram0 = LazyModul…

RustのパーサジェネレータPestに入門する (1. チュートリアルを試してみる)

Rustのパーサジェネレータの調査、少しツールを変えて、LALRPOPからPestに変えてみることにした。 PestもRustベースのパーサジェネレータで、文法ファイルの作り方も似ている気がする。別ファイルに文法ファイルを作ってそれを読み込ませることで解析を行う…

Diplomacyを使ってOCPバスを作成する (10. OCP Bufferの動作確認)

Diplomacyを使って独自OCPバスの作成を行っているのだが、どうも上手く行かない。いきなりXbarを作るのはさすがに難易度が高かったか。とりあえずまずはBufferだけを作って動作を確認する。 Bufferは、単純に信号を右から左に渡すだけの機能だ。ただ渡すだけ…

RustのパーサジェネレータLALRPOPに入門する(4. 重複するパタンのマッチをしたいときの問題点)

パーサジェネレータの続き。いろいろ試しているとこのツールの弱点を発見した。 src/decimal_lalr.lalrpop grammar; pub PosInt: String = <p:r"[1-9][0-9]*"> => p.to_string(); pub Digit: String = <p:r"[0-9]*"> => p.to_string(); FIRRTLの文法の中に上記のようなものがる。これをテス</p:r"[0-9]*"></p:r"[1-9][0-9]*">…