FPGA開発日記

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

2022-07-01から1ヶ月間の記事一覧

Yosysの使い方を勉強する (7. WireとCellの関係性)

まずはYosysに簡単なPassを作ってみる。モジュール内の配線やセルをリストアップしてみよう。 search_wires()とsearch_cells()を作って、モジュール内の配線などを出力してみる。 void search_wires (RTLIL::Module* module) { log(" Wires :\n"); // auto w…

命令フェッチ手法とトレースキャッシュについての勉強

ふと思って、トレースキャッシュについてあまりよく知らなかったので資料を読んで勉強することにした。 読んだのは以下の本。古いけど基本的なことは網羅されており頼りになる。 Modern Processor Design: Fundamentals of Superscalar Processors (English …

分岐予測の評価キット Branch Prediction Championship Kit を試す (5. GShareの動きを読んでみる)

Branch Prediction Championship Simulatorの続きを試す。 Gshareの動きを読む これはpredictor_gshare.hにのみ実装されていて、かなり短いため読みやすい。 構成 PHTが必要数分だけ確保されている。HIST_LENがGShareの記録する分岐命令の数のため、それを確…

分岐予測の評価キット Branch Prediction Championship Kit を試す (4. Local Bimodal Branch Predictionを試す)

Branch Prediction Championship Simulatorの続きを試す。 Local Bimodal Branch Predictorを作ってみる 以下のようにPREDICTORを構成する。メンバ変数としてm_local(本当は2ビット)を4096個構成して、Local分岐予測として使用する。 #include <stdlib.h> #include <string.h> #i</string.h></stdlib.h>…

分岐予測の評価キット Branch Prediction Championship Kit を試す (3. 静的予測を試してみる)

Branch Prediction Championship Simulatorの続きを試す。 静的予測を作ってみる 常にジャンプすると予測するPredictorを作ってみよう。 #include <stdlib.h> #include <string.h> #include <assert.h> #include <inttypes.h> #include <math.h> #include "utils.h" #include <vector> class PREDICTOR { public: PREDIC</vector></math.h></inttypes.h></assert.h></string.h></stdlib.h>…

分岐予測の評価キット Branch Prediction Championship Kit を試す (2. トレースファイルを解析する)

Branch Prediction Championship Simulatorの続きを試す。 Branch Prediction Simulatorのトレースファイルの中身を解析する。 トレースファイルの中身を読んで見る 例えば、SHORT_MOBILE-24.bt9.trace.gzの中身は以下のようになっている。大きく分けて4つの…

Yosysの使い方を勉強する (6. 自作のPassでModuleを表示する)

まずはYosysに簡単なPassを作ってみる。Passに対してモジュールの名前をリストアップするPassを作ってみよう。 デザインに登録されているModuleの名前を取得する。 yosys/passes/tests/mypass.cc void execute(std::vector<std::string> args, RTLIL::Design* design) ove</std::string>…

Yosysの使い方を勉強する (5. 自分のPassを作ってみる)

まずはYosysに簡単なPassを作ってみる。mypassと言って、何もしないPassである。 yosys/passes/tests/mypass.cc struct MyPass : public Pass { MyPass() : Pass("mypass", "My Pass") { } void help() override { // |---v---|---v---|---v---|---v---|---v…

分岐予測の評価キット Branch Prediction Championship Kit を試す (インストール)

Ubuntu 20.04 LTSを使用した。 ビルドのためには、Boostを使用しなければいけないらしい。 jilp.org sudo apt install libboost-dev libboost-iostreams-dev Championship Kitをダウンロードして、ビルドする。 curl -L http://hpca23.cse.tamu.edu/cbp2016/…

Yosysの使い方を勉強する (4. RTLIL中間表現を観察する)

YosysのRTLILについて見て行っている。 RTLILのコードとしては、いくつかのstructが定義されている。 /yosys/kernel/rtlil.h namespace RTLIL /* ...途中省略 ...*/ struct Const; struct AttrObject; struct Selection; struct Monitor; struct Design; str…

MLIRの勉強 (8. rewriterの勉強3)

MLIRについて勉強している。うーん、どうしてもPassManagerが適用されない。 どうしても-optでOptimizerが動いてくれないのが、理由が分からない。toycはどのようにしているんだろう? b SimplifyRedundantTranspose::matchAndRewrite * frame #0: 0x0000000…

Alpha EV8の分岐予測機に関する論文を読む(4. ハイブリッド分岐予測の構成やり直し)

Alpha EV8の分岐予測機に関する論文を読み始めた。 ieeexplore.ieee.org msyksphinz.hatenablog.com 4章のハイブリッドの予測器の構成について間違いを指摘して頂いたので、もう一度勉強し直している。 まず、分岐予測器のエイリアシングというのが出てきた…

MLIRの勉強 (8. rewriterの勉強2)

MLIRについて勉強している。うーん、どうしてもPassManagerが適用されない。 -debugによりPassを表示させてみても、どうみてもPassが適用されない。 toy-ch3を-debugオプションで表示させてみると、ちゃんとPassが適用されている。 * Pattern SimplifyRedund…

MLIRの勉強 (7. rewriterの勉強)

MLIRについて勉強している。 いくつかの最適化について実装してみたくて、例えばA-Aを自動的に0としてくれるみたいなのは簡単に作れそうなのだけれども、MLIRのrewriterというのを使うらしい。 /// This method attempts to match a pattern and rewrite it.…

Yosysの使い方を勉強する (4. RTLIL中間表現を観察する)

RTLILの中間表現に対していくつかテストケースを流してみて、どういう表現が生成されるのかを眺めてみる。 always_combとassignの違い assign out0 = in0; always_comb begin out1 = in1; end 生成されるRTLILは同一だった。 connect \out0 \in0 connect \ou…

Yosysの使い方を勉強する (3. Passを見てみる)

YosysのPassを見てみたい。Yosysのリポジトリにおいて、以下のようなディレクトリにPassが配置してある。 . ├── cmds ├── equiv ├── fsm ├── hierarchy ├── memory ├── opt ├── pmgen ├── proc ├── sat ├── techmap └── tests 11 directories, 0 files 例え…

Alpha EV8の分岐予測機に関する論文を読む(3. ハイブリッド分岐予測の構成)

Alpha EV8の分岐予測機に関する論文を読み始めた。 ieeexplore.ieee.org msyksphinz.hatenablog.com もう少し真面目に読み直している。第4章のハイブリッド分岐予測についてもう一度真面目に読んでいる。 4. 分岐予測器の構成 ローカル履歴とグローバル履歴…

「RISC-V+LLVM本 付録2. 浮動小数点命令」を無償公開しました

「作って学ぶコンピュータアーキテクチャ」では、執筆時点ですでに500ページを超えてしまい、泣く泣く2章分を削除しています。 1つ目の付録である「付録1. 関数呼び出しのバリエーションと高度な機能」についてはすでに公開済みですが、もう一つの「付録2. …

Yosysの使い方を勉強する (2. RocketのVerilog実装をYosysでコンパイル)

次はChipyardで生成したRocket-Chipの実装をYosysで読ませてみたい。 Chipyardで生成したRocket-Chipの実装をYosysに読み込ませてElaborationするためには以下のコマンドを実行すればよい。 synth.cmd read -sv chipyard.TestHarness.RocketConfig.top.v hie…

Yosysの使い方を勉強する (1. 環境構築と論理合成)

結構時間が空いてしまった。とりあえずYosysの環境を構築して、Chipyardで構築した簡単なVerilog機構はコンパイルできるようにしてみよう。 インストール git clone https://github.com/YosysHQ/yosys.git git co yosys-0.19 make -j$(nproc) make install P…

M1 Mac上でChipyardの環境を構築する試行

M1 MacOS上でChipyardの環境を構築したくて、いろいろ調査しているとすでに試行されているのを発見した。 qiita.com Chipyardのバージョンは1.6.2を使用した。 M1 Mac上ではOpenJDKは別にダウンロードしなければならない。 curl -L https://cdn.azul.com/zul…

MLIRの勉強 (6. 演算を定義する)

MLIRについて勉強している。 独自言語を作成し、その中間表現をMLIRを使って表現してみることに挑戦する。 前回のテストでは、最適化が効きすぎて変数がまとめられてしまい、思い通りのMLIRを出力することができていなかった。次は演算子を定義し、これらをM…

「RISC-V+LLVM本 付録1. 関数呼び出しのバリエーションと高度な機能」を無償公開しました

「作って学ぶコンピュータアーキテクチャ」では、執筆時点ですでに500ページを超えてしまい、泣く泣く2章分を削除しています。 そのうちの一つである、「付録1. 関数呼び出しのバリエーションと高度な機能」を無償公開しました。 github.com この章は、本当…

MLIRの勉強 (5. MLIRGenにおけるスコープ)

MLIRについて勉強している。 ちょっとTypeについて詰まってしまったので、ドキュメントを読み直している。 mlir.llvm.org MLIRは完全に拡張可能なインフラストラクチャとして設計されている; 属性(定数メタデータなど)、演算、型などについての閉じた集合が…

自作CPUの現状のフロントエンド構成をまとめる

これは、GShareを久しぶりに実装しようとするといろんな事を忘れており忘れてしまっているので思い出すためのメモ。 ちなみに、以下でまとめる現状のフロントエンド構成は非常に良くないと思う。 実デザインではやってはいけない古めかしい構成だと思うので…

「ディジタル回路設計とコンピュータアーキテクチャ RISC-V版」を購入

物理本はなかなか置く場所がないので電子版を購入。達人出版会でPDFを購入した。 tatsu-zine.com 英語版も購入していたので、日本語英語両方とも揃ったことになる。 日本語版は例によって(ヘネパタと同じく)2段組になっている。なんかこの辺は出版社との兼ね…

MLIRの勉強 (5. MLIRGenにおけるスコープ)

MLIRについて勉強している。 独自言語を作成し、その中間表現をMLIRを使って表現してみることに挑戦する。 ここで想定する流れは以下の通りだ。 独自言語(MYSV : System Verilogオリジナル改造バージョン) を読み込んで、独自形式でASTを作成する MYSVのAST…

Alpha EV8の分岐予測機に関する論文を読む(2. 並列分岐予測の難しさ)

Alpha EV8の分岐予測機に関する論文を読み始めた。 ieeexplore.ieee.org msyksphinz.hatenablog.com 第2章と第3章は適当に人力で日本語化した。つまり並列度が非常に高まった分岐予測は難しいということだろう。 細かい所は英語をちゃんと読もうとしてもよく…