FPGA開発日記

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

CPU

ISSからハードウェアデコーダを自動生成してみる(3)

CPU

続き。とりあえずデコードテーブルを作ってみたところから。 ## start of RISC-V instructions # ['BITFIELD' 31-26, 25-21, 20-16 15-11 10-06 05-00 ] # ['DECODE-KEY', 'OPCODE', 'RS' 'RT', 'RD', 'SHAMT', 'FUNCT' 'TYPE' 'KEY_TABLE' ] $arch_table[ 0…

ISSからハードウェアデコーダを自動生成してみる(2)

CPU

msyksphinz/swimmer_riscvgithub.com MIPSのデコーダをISSのデコードテーブルから自動生成してみる。MIPSのISSはC版しかないのだが、RISC-V版のデコーダだけ書き換えて一時的に作ってみた。 とりあえずこんな感じになっている。arch_tableとして表現されてい…

ISSからハードウェアデコーダを自動生成してみる

CPU

msyksphinz/swimmer_riscvgithub.com ISSの命令デコーダは、rubyから自動生成している。これを活用すると、ハードウェアのデコーダも自動生成できないだろうか。 とりあえず作ってみると、こんな感じになった。 まず、ISSのデコーダはRubyのテーブルで以下の…

命令セットシミュレータにおける命令のデコードと実行(C++における関数ポインタ)

CPU

命令セットシミュレータにおける命令のデコードと実行 - FPGA開発日記msyksphinz.hatenablog.com 結局、クラスのメンバとして関数ポインタを指定して、そこでどのようにして所望の関数の実装を呼べば良いかというと、 m_inst_env->RISCV_Inst_Exec (inst_idx…

命令セットシミュレータにおける命令のデコードと実行

CPU

大概の命令セットシミュレータは同様の構成を取っていると思うが、命令セットシミュレータといえど * 命令デコード * 命令実行 というハードウェアと同じことをしているのは変わらない。 自作シミュレータも多分に漏れず、以下のような構成を取っている。 こ…

ベンチマーク評価向けシミュレータをC++で書き直す

CPU

msyksphinz/swimmer_riscvgithub.com RISC-Vの評価向けに作っているシミュレータをC++で書き直している。 C++にすることの利点として、Cよりも汎用的に書くことができ、一般化し易いということと、クラスによる階層を持たせることにより、例えばスレッドを構…

ベンチマークをシミュレータで動作させてみる(sbrkでメモリが足りない?)

CPU

Coremark-Proのバイナリをシミュレータで動作させてみる(失敗) - FPGA開発日記msyksphinz.hatenablog.com うーん、sbrkで、確保しているメモリが足りない気がしている。 そこで、リンカスクリプトで、ヒープの領域をさらに大きめに確保してみた。 diff --git…

Coremark-Proのバイナリをシミュレータで動作させてみる(失敗)

CPU

msyksphinz/benchmarksgithub.com Coremark-Proのコンパイルができるようになったので、シミュレータで動作させてみた。 swimmer -h builds/linux/gcc-mips/bin/zip-test.srec -o zip-test.sw.log -c 1000000 終了までの命令数を見てみると、 ==============…

gccをsoftfloat付きでビルドする

CPU

前回の続き。という訳でgccとnewlibをsoftfloat付きでビルドする。 参考にしたのは以下のサイト: Mian M. Hamayun - Re: How to enable soft-float support in newlib and gcc toolchains for an Chefのレシピを変更して対応する。変更したのはブランチとし…

Coremark-Proをコンパイルしてシミュレータで流せる形式にする(コンパイル成功)

CPU

Coremark-Proをコンパイルしてシミュレータで流せる形式にする(奮闘中) - FPGA開発日記msyksphinz.hatenablog.com 結局、MIPSで試していたのだが、コンパイルは成功した。システムコールの部分を自分で作るかどうかがポイントだ。 あとは、リンカスクリプト…

AXIチャネルのアクセスをどうやって実装するか?

CPU

この実装方法が本当に合っているのかどうかは分からないけれども... CPUはパイプラインフラッシュが発生することがあるため、メモリアクセスが途中でぶった切られる可能性がある。 例えば、アドレスチャネルまでの応答が確定していて、そこでパイプラインフ…

アウトオブオーダのCPUを作ろう - 命令フェッチをAXIバスに対応させる -

CPU

自作CPUのデータバスへのアクセス部分をAXIに変更してしまおうと思う。今までは、オリジナルバスを利用していたがら、それだとZynqとかに接続するときにやりにくい。 アウトオブオーダプロセッサで、しかも同時実行できる数が多いプロセッサにとって生命線と…

ベンチマークプログラムをリポジトリとして公開します

CPU

といっても、まだMIPS用ではCoremarkしかないし、Coremark-Proはきちんと移植できていないけど... msyksphinz/benchmarksgithub.com tree . -L 2 -d . ├── archive │ └── mibench ├── coremark_v1.0 │ ├── barebones │ ├── barebones_mips32r5_gcc51_O2 │ ├─…

Coremark-Proのクロスコンパイルを試す (MIPS/RISC-Vで挑戦)

CPU

最近あまり成果のないブログになってしまっている。新しいベンチマークを解析するのは、結構時間がかかるのだ... さて、Coremark-Proのコンパイルを再度挑戦し続けている。 諸事情につき、別のアーキテクチャの有償コンパイラを用いた場合、全てのビルドには…

Coremark-Proのクロスコンパイルを試す (ライブラリが足りずに失敗)

CPU

Coremark-ProのクロスコンパイルをMIPSで試行中。ライブラリ不足でうまくいかない... 基本的に、./util/make 内のファイルを変更してクロスコンパイル用にしていく。 Coremark-Proの環境は、make実行時にTARGET=xxxを指定してクロスコンパイルターゲットを決…

Coremark-Pro を試す

CPU

Coremark-Pro がダウンロード可能になっていたので、早速ダウンロードして試してみた。 EEMBC -- The Embedded Microprocessor Benchmark Consortium tar xvfz coremark-pro_1.1.2446.tgz cd coremark-pro_1.1.2446 make TARGET=linux64 とりあえずVirtual B…

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(配線遅延短縮) -

CPU

パイプラインのCPUを作っていると、どうしても問題になってくるのが遅延時間だ。5ステージくらいなら問題ないし、フォワーディングパスを投入すればほぼストール無しでパイプラインを構成できる。 しかし、スーパスカラやスーパパイプラインを作っていると、…

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(コンパイルオプションを変えて性能を上げる) -

CPU

きっかけはここらへん。 http://www.eembc.org/benchmark/reports/benchreport.php これは Imagination Technologies がFPGA上に実装したMIPS P5600のベンチマーク結果である。 これを見ると、コンパイルスイッチが、 -O3 -funroll-all-loops -fgcse-sm -fgc…

EEMBC、最新のCPUベンチマークプログラム「Coremark-Pro」発表

CPU

Benchmark Stresses Big Chips | EE Times EEMBCがCoremarkの新版を発表した。"Coremark-Pro"と呼ばれるこのベンチマークは、組み込み業界では既にデファクトスタンダードとなっている「Coremark」を改良したものである。 中身は複数のベンチマークセットか…

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(ボトルネック解析2) -

CPU

さて、もう一度CoreMarkの100サイクルずつの命令実行数を見てみよう。 次は1000サイクルずつの命令実行数。 1000サイクルの方が綺麗だねえ。 1000サイクルで、良くて800命令くらいで推移している。つまり1サイクル1命令ですら動けていないということ。ぬうう…

アウトオブオーダのCPUを作ろう - ロードバッファによるメモリアクセス数削減

CPU

一般的に行なわれていることだが、ロードストアユニットの側には、データキャッシュが搭載されており、隣接する既にロードされている値があれば、キャッシュを参照することでわざわざCPUの外にアクセスすることなくデータをレジスタに格納することができる。…

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(ボトルネック解析) -

CPU

大分性能を上げてきたが、まだまだ性能向上の余地がある、というか現時点では大鑑巨砲のくせに性能が低すぎる。 どこがボトルネックになるか見てみる。 現状では、パイプライントレースとして、以下のようなログ(コミットログのみ列を抜粋)を出力している。 …

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(分岐予測構成2) -

CPU

最終的に搭載した分岐予測の構成は一般的な二段階の分岐予測だ。4つのステートマシンを持ってるやつな。 これについては、一般的なので別に何も言及することはない。まあ、それ相応に性能向上するよね、という感じだ。 ちょっと悩んだのだが、ステートのどこ…

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(分岐予測構成1) -

CPU

アウトオブオーダCPUにおいて、性能向上の生命線となるのが、分岐予測だ。現在自作CPUには、2種類の分岐予測命令を搭載させている。 * 命令分類による静的分岐予測 (beql / bnel 命令などのLikely命令による分岐) * 分岐結果に基く動的分岐予測 (beq / bne …

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(RSキュー深さ解析) -

CPU

趣味でアウトオブオーダのCPUを作っている。アーキテクチャとしては、一番良く知っているMIPSだ。 現状の構成は以下の通り。4命令同時デコード、整数系は2命令同時演算可能、分岐命令とロードストア命令は別々に発行キューを持っており、アウトオブオーダ発…