Nios II

設計するプロセッサの命令セットはNiosIIのものにした。今まではMIPSだったが、Niosの方が単純だし、自分好み。Niosの特徴としては、

  • 32-bitの一般的なRISC
  • 遅延分岐じゃない
  • キャリーフラグとかがない
  • 乗算の結果は32-bit
  • 除算で得られるのは商のみ
  • 浮動小数点演算はオプション(というかまだ定義されてない?)

などがある(まあ、英語のリファレンスハンドブックを読んで得た知識なのでちょっと怪しいかも)。MIPSとの大きな違いは、遅延分岐、乗除算命令。MIPSの分岐命令には基本的に1命令分の遅延スロットがあり、32-bit乗算命令の場合の積は64-bit、除算命令では商の他に剰余も得られる。また、乗除算命令の結果はHiとLoという専用レジスタに格納される。これらは、シンプルなパイプライン命令では特に問題ない。というか遅延分岐はパイプラインで分岐ペナルティを削減するために導入されたものだ。しかし、スーパースカラを考えるとどれも厄介。4命令同時フェッチとかになれば1スロットの遅延分岐は役に立たない(はずだ)し、結果が二つある乗除算は制御が他と異なりめんどくさい(と思う)。

ちなみにNiosはAlteraのFPGAに載るソフトコアなプロセッサ。うちの研究室にあるFPGAXilinxのものなのだが。XilinxにもMicroBlazeというプロセッサがあるが、これは3段のシングルパイプラインプロセッサで命令セットもそれに最適化されてる感じがするのでパスした。