FPGA開発日記

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

CPU

組み込みシステムにおけるアドレスの考え方 (VMA, LMAについて)

CPU

ちょっと話が逸れるが、今回は組み込みシステムにおけるVMAとLMAの考え方についてまとめておく。 例えばリンカスクリプトなどを組み上げるとき、「CPUから見たアドレス」と「外部からデータをRAMに配置するときにみる領域」が違うことがある。 例えば、こん…

アウトオブオーダプロセッサの性能解析(アウトオブオーダ命令発行の性能解析)

CPU

自作CPUの性能解析およびリグレッションをしているのだが、アウトオブオーダ発行のところで少し怪しいところを見つけた。 命令発行スロットに格納された命令は、どのように発行されるのだろうか。 一般的に命令発行スロットに複数命令が格納される場合、ここ…

CPUの性能を測る基準、ベンチマークについて

CPU

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の8日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

自作プロセッサの性能解析とその対策(7. コンパイラ最適化オプションの調整)

CPU

前回の記事で、-O3付きでコンパイルできないという問題が残っていたのだが、それを何とか回避できないか試行してみた。 そもそも-O3とはどのようなオプションなのだろうか?調査してみると、-O2に対して以下の最適化オプションを追加したものが-O3らしい。 g…

自作プロセッサの性能解析とその対策(6. コンパイラの最適化オプション追加とそれによる性能変化)

CPU

だんだんネタも無くなってきたので、CoremarkをRISC-VのGCCでコンパイルするにあたり、本当に最適なオプションになっていたのかを調査してみようと思う。 以前までのCoremarkは、以下のオプションでコンパイルしていた。 PORT_CFLAGS = -O2 -g $(MACHINE_TAR…

自作プロセッサの性能解析とその対策(5. タグフォワーディング)

CPU

リザベーションステーションを実装していると、連続して同じレジスタを使うような命令が連続する場合、通常の実装ではどうしてもストールが1サイクル入ってしまう問題があった。 上記のような演算器の実装をしていると、どうしても演算器の結果の直後にFFが…

自作プロセッサの性能解析とその対策(4. 分岐予測アルゴリズムの改善)

CPU

自作RISC-Vプロセッサの性能向上対策その4。分岐予測アルゴリズムを、4ステートの分岐予測方式に切り替える。 これまでは、単純な2ステートの分岐予測アルゴリズムを利用していた。 当該命令で分岐すると、次に同じ命令では分岐と予測する 当該命令で分岐し…

自作プロセッサの性能解析とその対策(3. Loadデータのレイテンシを1つ削減)

CPU

自作RISC-Vプロセッサの性能向上対策その3。 ロード命令のレイテンシは、プロセッサの性能に重大な影響を与えることは既知の通りだ。 プロセッサのLoad-Useの性能を向上させるために、ロード命令のレイテンシを1つ短縮しよう。 もともとこれはロード処理の直…

自作プロセッサの性能解析とその対策(2. 分岐命令用エントリ数の増強)

CPU

自作RISC-Vプロセッサの性能解析をしているのだが、パイプライントレースを解析していてまず気になったのは、分岐予測の結果が悪いことだ。 分岐予測では、即値による分岐、PC相対分岐をターゲットにしており、単純な分岐ではあるがそれなりにヒットするはず…

自作プロセッサの性能解析とその対策(1.ReservationStationエントリ数と性能の関係)

CPU

自作プロセッサにおいて、性能面でどうしても納得出来ないところがあり、調査していた。 (Cm13,53)[PC=000017a8] R15<=00008184 : LW r15,0x004,r11 (46) 909 (Cm14,--)[PC=000017ac] : SH r13,0x002,r15 910 (Cm18,31)[PC=000017bc] R14<=00000003 : ANDI r…

L1データキャッシュの実装設計(LSUとの接続部の検討)

CPU

L1データキャッシュは、L1命令キャッシュと違って書き込みにも対応する必要がある。もちろん、LSUもReadとWriteを同様に対応しなければならないのだが、いくつかの問題にぶち当たった。 一般的なLSUの構成 一般的なLSUの構成は、Hisa Ando氏の本にあるように…

L1データキャッシュの実装検討(ステートマシン作成)

CPU

前回までの実装で分岐予測の機構までは実装できたが、L1データキャッシュの実装がまだできていない。 L1命令キャッシュの実装は完了しているのだが、L1データキャッシュは、さらに以下の実装が必要だろう。 データ書き込み処理 データ書き込み時の、キャッシ…

分岐予測実装に関する考察と実装(3. 自作RISC-Vプロセッサを使った実験)

CPU

前回までで、分岐予測の実装についておおよそ解説した。分岐予測は、 予測を早いステージで実行する。複数命令を同時に実行する場合は、どのウェイを有効にするかよく考えること 予測結果は分岐ユニットで判別する。無条件分岐命令でも、レジスタ相対ジャン…

分岐予測実装に関する考察(2. 分岐予測の結果反映と、結果のリプレース)

CPU

前回の続き。分岐予測を実行するところまで書いたが、今度は分岐が当たったかどうかを調査しなければならない。 msyksphinz.hatenablog.com 分岐予測の成功条件、分岐予測の更新条件 分岐予測に成功した、というのは何だろうか? 当該命令が「予測した」命令…

分岐予測実装に関する考察(1. 分岐予測する場所と、フェッチラインの考察)

CPU

2016/11/09 図に誤りあり。一部差し替えました。 CPUにおける分岐予測といえば、複数命令を同時発行させる現代のCPUにおいて不可欠な技術であり、投機実行の技術を支える重要な高速化技法であるが、だいたいのの解説書の場合、以下のような記述で説明がなさ…

CPUのパイプライントレースビューアGem5 (RISC-V BOOMプロセッサのパイプラインを分解)

CPU

RISC-V BOOMプロセッサの試行をしていると、パイプライントレースの出力方法としてgem5というものを利用していた。 github.com gem5というのは何なんだろう?調査してみる。 The gem5 Simulator: A modular platform for computer-system architecture resea…

L1キャッシュを制御するためのステートマシン調査

CPU

L1キャッシュは、具体的にはどのようにして制御をしたらいいのだろう? まずはサンプル回路を使って、制御シーケンスを調査してみよう。 対象とするのは、パタヘネで解説してあるL1キャッシュのシーケンサだ。 コンピュータの構成と設計 第5版 上作者: ジョ…

シンプルなL1キャッシュをVerilog実装する(1. シンプルなモデルを調査)

CPU

CPUにシンプルなL1キャッシュを実装する。単純なダイレクトマッピングで、最初はレイテンシについてもあまり考えない。 ヒットミス判定が正しく行え、正しくデータをパイプラインに流すことができることを至上命題としよう。 まず、いろいろ調査していると、…

Epiphany-V: A 1024プロセッサコアについて

CPU

Parallelaからリリースされた1024コアのプロセッサについて。 上記画像はAdaptevaのブログより引用。https://www.parallella.org/2016/10/05/epiphany-v-a-1024-core-64-bit-risc-processor/ Epiphany-V: A 1024-core 64-bit RISC processor | Parallella 10…

CPUのリネーミングを支えるユニット、フリーリスト

CPU

CPUのレジスタリネーミングでは、フリーリストと呼ばれる、空いているレジスタ番号を管理するためのFIFOキューが存在する。 フリーリストには、現在使用されていない物理レジスタ番号が格納されており、命令がデコードされ、レジスタ書き込みが必要な命令で…

ISSとRTLを比較するためのフレームワークの実装

CPU

CPU設計を行うにあたり、検証に必要なフレームワークを構築する。 RTLで記述されたCPUは、シミュレーション中にログを出力し、同じプログラムをISSでも実行する。 この2つのログを比較して、正しくRTLが動作しているかを検証する訳だが、この場合に何をどの…

リネームIDをISSでモデル化する

CPU

レジスタリネーミングでは、アーキテクチャレジスタと物理レジスタを接続するための仕組みだ。 レジスタに書き込みを行う命令が実行されると、アーキテクチャレジスタのIDはリネーミングレジスタのレジスタIDに置き換われる。 このレジスタリネーミングの仕…

AXIと接続するLSUの実装方法検討(1)

CPU

LSUとはLoad Store Unit(たぶん)のことで、メモリアクセスに関わるすべての操作を担当するユニットだ。最もシンプルなものであれば、キャッシュに対するロードストアが出来れば良い。 CPUのパイプラインからの要求に応じて、外部バスを操作してメモリにデー…

CPU開発に必須な検証手法の話

CPU

CPU開発をしていると、自分の設計したCPUが正しく動作しているかを検証する必要が必ず生じる。 プログラムを流して動作させているときに、そのプログラムが正しく動作したかを確かめるためには、いくつかの方法がある。 一つ目はプログラム自体に検証能力を…

AXIバスリクエスト中に命令フラッシュが入った場合を考慮した命令Fetcherの実装(1)

CPU

msyksphinz.hatenablog.com この話の続き。RISC-V対応のCPUの実装にあたり、足回りのAXIをどのように実装するか。 今のところ1次キャッシュは備えていないので(いずれは追加しないといけないが)、足回りのAXIは、 命令アドレスリクエスト用チャネル (IF_MAR)…

"RISC-Vについて"ページを更新、およびソフトバンクARM買収によるRISC-Vの立場について僕の(個人的な)意見

CPU

今日はすごいアクセス数が来ると思ったら、ソフトバンクのARM買収により代替手法としてのRISC-Vについていくつかのツイートで言及されたためか、RISC-V関連のアクセスが急上昇したため、コメントも含めて"RISC-Vについて"のページを更新しておいた。 msyksph…

プロセッサにおけるアウトオブオーダの考え方について(リネームレジスタの例外時の処理について)

CPU

趣味でCPUを作るのは楽しいもので、自作CPUを作成してベンチマーキングし、性能最適化していったり、高速化していくのは趣味の一つとして楽しめるものだと思う。 CPUを理解するのに、アウトオブオーダ処理、レジスタリネーミングについて理解するのは必須だ…

MIPSがGoogleのIoT向けOS「Brillo」をサポート

CPU

Imagination Technologyのプレスリリースより。 imgtec.com BrilloというのはGoogleの開発しているIoT向けのOSだ。GoogleのOSと言えばAndroidだが、IoT向けにはこちらが本命なのかな? Brilloのサポート環境としては、ARM, x86, そしてMIPSだ。Googleが何故M…

AXIルータ生成プログラムの作成(デコーダの記述)

CPU

AXIルータを自動生成できるよう、スクリプトを記述している。 今は、入力データに対して、どのようにアドレスデコーダを搭載して、パケットをルーティングするかというところだ。 $regions = Array[Array['START', Array['1011_1111_1100_XXXX_XXXX_XXXX_XXX…

MIPSのTLBについて勉強(シンプルなアドレス変換をISSに実行する)

CPU

MIPSのブートについて理解するためには、まずはMIPSアーキテクチャのメモリマップについて理解しなければ。 このあたりに、メモリマップの説明がある。 ファイル:MIPS32 MemoryMap.png - Wikipedia これを見ると、0xA000_0000-0xBFFF_FFFF, 0x8000_0000-0x9F…