FPGA開発日記

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

コンピュータアーキテクチャ

スケーラブル命令セットシミュレータ (RISC-V版) を公開します

自作RISC-Vシミュレータを公開します。 https://github.com/msyksphinz/swimmer_riscv まだサポートできてない命令が山ほどあるけど、とりあえずCoremarkくらいは動くようになった。 基本的にRubyで命令テーブルを作っていき、それを元に命令の雛形を作る。…

アーキテクチャを理解したいなら、ISSを自作しよう、のススメ

RISC-Vの実装を作るために、検証用の命令セットシミュレータを今日はずっと作っていた。 まあ、前もMIPSのやつをベースに改造してたのだけれども、MIPSのやつを拡張していたらだんだん大変になってきて、もうちょっと拡張性の高いISSを作ろう、と思った。 IS…

Conditional Moveがスーパスカラで難しい理由

MIPSにはMOVN/MOVZという条件付き格納命令が存在するが、これの実装は実はなかなか難しい。 if (rt != 0) rd <= rs else <nothing> これ、HW的に分解すると、 if (rt == 0) rd <= rs else rd <= rd とせざるを得なくなる。一度「レジスタにWBする」という名目でフリー</nothing>…

Imagination Technologiesが提供するmips用GCCその3

Imagination Technologiesが提供するmips用GCCその2 - FPGA開発日記 結局、-O3オプションではなく-O2オプションを使うことでエラーはでなくなった。なんじゃこりゃ。 ちなみに、見ていると-mips32r5で生成するといろいろな違いがある。 mult命令(HI/LOレジス…

Imagination Technologiesが提供するmips用GCCその2

Imagination Technologies が提供するmips用GCC - FPGA開発日記 Imagination Technologies が提供するmips用GCC - FPGA開発日記 で、途中でmemsetが定義されていなくてコンパイルできない件は、結局自分でmemsetを追加した。 + +void* memset (void * s, int…

現代のCPUで遅延スロットが嫌われる訳

最初の頃、自分も遅延スロットが嫌われる理由が良く分からなくて、自分がCPUを自作してみて始めて気がついたのだが、 現代のCPU(スーパスカラなどの高速化の方式を取っているもの)にとって、遅延スロットは非常に面倒なものとなってしまっている。 まず、パ…

フェッチ能力向上させるための種々の技法

現在作成している自作CPUは、簡単な命令キャッシュを持っており、キャッシュの空き容量が十分になると次の命令のフェッチにかかる。 現在の構成の問題として、そもそも128ビットの命令列をフェッチするためには、 AXIへリクエスト発行 AXIからレスポンスあり…

ロードストアバッファによるメモリアクセスの非同期化

メモリアクセスは一般的にCPUの性能向上を阻害しなすくなる部分で、特にストアについてはコミット後に実行するため、これまでの自作プロセッサの実装では LSUからCMユニットにストア命令が発行されたことを通知する。 ストア命令はコミットレディとなる。 CM…

Imagination Technologies が提供するmips用GCC

Imagination Technologies が MIPS用のGCCを配布しているので、早速ダウンロードしてみた。 MIPS Compilers | Imagination Community Ubuntuの上で展開すると、mips-mti-elf-xxxの形式でバイナリとライブラリが用意されていた。 mips-mti-elf-gcc の --help=…

MIPSアーキテクチャ Release-6について

2014年8月に、MIPSのアーキテクチャr6がリリースされていますね。あまり内容は読んでいないのですが、 かなり大胆な仕様「削減」を行っているようですね (Imagination Technology の英語サイトに最新のアーキテクチャ仕様書が置いてあります) MIPS32 Archite…

RISC-Vの性能測定 命令数編

RISC-Vの基本的なUser-Level ISAの実装が進んできて、Coremarkが正常にシミュレーションできるようになった。MIPSのシミュレータと合わせて、命令セット的にどちらが良いかを見てみる。 MIPSと比較した場合は以下のとおり。start_time()からstop_time()まで…

RISC-Vの即値生成フォーマット

RISC-Vは即値生成のフォーマットがちょっと変わっている。MIPSとかなら、即値フィールドは下位の16ビットなどにまとめらているのだが、 RISC-Vは一見不思議に見える。以下がRISC-Vの即値生成フォーマットだ。 これ、よくよく説明を読むと、フィールド[10:5]…

RISC-VのPC相対アドレス代入命令

あんまりMIPSに見ない命令、というか、ちょっと特徴的なので、メモ。 AUIPC rd AUIPC (add upper immediate to pc) is used to build pc-relative addresses and uses the U-type format. AUIPC forms a 32-bit o ffset from the 20-bit U-immediate, fillin…

RISC-Vについて

RISC-V は命令セットからオープンな命令セットアーキテクチャである。 なかなか面白いので最近はまっている。http://riscv.org/命令セットを見る限り、あまりMIPSとの差は見られないのだが、顕著なものとして、ハードウェアに落としたときに性能を出しやすい…