2020-01-16に更新

8bit CPU AVRとICF3-Zとの違い

はじめに

自作した8bit CPU ICF3-Zを2020年1月15日にApache License 2.0で公開しました。XilinxのFPGAに実装できるVerilogファイルがgithubで公開されているので、いろいろ性能を試せるようになっています。本投稿では8bit CPUでメジャーなAVRとの違いについて簡単に説明したいと思います。
AVRについてはAVR日本語情報サイトにある情報を参考にしています。

命令コード取得と命令実行

AVRはプログラムの命令コードを(1)命令コード取得 (2)命令実行 のフェーズでパイプライン実行します。
ICF3-Zは(1)命令コード取得 (2)命令コード転送 (3)命令実行 のフェーズでパイプライン実行します。デコードがなかったり特殊なので、これまでパイプラインが無いと言っていましたが、パイプラインかもしれないです。
AVRのレジスタはリード 2ポート、ライト 1ポートのレジスタファイルのようです。命令実行のフェーズで(a) レジスタ読出し (b) ALU演算 (c) 演算結果の書込みを逐次実行しています。
ICF3-Zのレジスタはリード 1ポート、ライト 1ポートのレジスタファイルです。命令実行のフェーズで(a) レジスタ読出し (b) ALU演算 (c) 演算結果の書込みを並列実行しています。
つまり同じ半導体素子なら、ICF3-ZはAVRの2倍程度の周波数が出せる。

レジスタ数

ICF3-Zでは(a) レジスタ読出しに1サイクル使えるので大きなレジスタファイルを使うことができます。使って大きなレジスタファイルを使います。
AVRは8bitレジスタ 32個ですが、ICF3-Zは8bit レジスタ 256個です。このうちレジスタのように使えるのは先頭の32個(16個×2バンク)です。リードとライトを同時に行うためには先頭の32個のみで、リードかライトのどちらか一方なら256個の8bitレジスタを操作できます。

乗算命令

AVRには乗算命令を持っているものがあり2サイクルで実行されます。ICF3-Zには乗算命令はありませんが加算器を効率的に動作させることで8bit×8bitを10(or 9)サイクルで実行できます。ICF3-ZはAVRの2倍程度の周波数であることを考えるとICF3-ZはAVRの0.40~0.44倍の性能。
しかしながらICF3-Zは8bit× n bit(n=3~7)の乗算も可能です。
実際のアプリケーションでは

for(i=0 ; i<16 ; i++) A += M[i×3 + 2];

のような乗算も、しばしばあると考えられます。このような乗算ではAVRに負けない性能になるように思われます。

また乗算器は面積が大きいのでICF3-Zは乗算器がない分、面積は小さいです。

除算命令

AVRには除算命令がないようです。ICF3-Zも除算命令はありませんが加算器を効率的に動作させることで16bit÷8bit(条件付きで24bit÷8bit)を17サイクルで演算できます。AVRでソフトウェア的に除算をした場合の性能は正確には、わかりませんが10倍近いサイクル数(値によって違う)になるように思われます。また周波数まで考慮するとICF3-ZはAVRの約20倍の性能(値によって違う)になるのではないかと推測されます。

LOOP命令

ICF3-ZにはLOOP命令があります。これは条件付きで加減算命令と同時に実行できるのでLOOP命令をうまく使うと性能が向上します。

ICF3-Zは制御用途に向いている

ICF3-Zはプログラムコードからサイクル数が正確にわかるのでサイクル単位で制御するのに使いやすい。AVRも比較的、そういった性質を持っているようですが、他のCPUでは命令がストールする場合があり、サイクル数を保証することが難しいものもある。ICF3-Zでも遅いメモリと接続できるコア(ZeraCresta)の計画もあるので、将来的にはコアの仕様を確認する必要が出てくるかもしれません。

その他

AVRには符号付乗算命令など符号を意識した命令がありますがICF3-Zでは2の補数を使って符号は考えないといけません。またAVRのように浮動小数点の命令もありません。ただし、その分、ICF3-Zの面積は小さいものになると思います。

まとめ

AVRには除算命令はありませんが、Intelの8bit マイコン 8051には除算命令があります。ただ8bit÷8bitなので使いにくいように思えています。ICF3-Zは16bit÷8bit(条件つきで24bit÷8bit)の除算が高速なので、この除算が使えるアプリケーションでは低い周波数で動作させることが可能であり低消費電力になるように思われます。
またICF3-Zは面積が小さく、ゆるいライセンスのApache License 2.0なので、期待を含めるなら産業にインパクトを与えるものとなって広く普及する可能性があるように思っています。

Originally published at spinlock.qrunch.io
ツイッターでシェア
みんなに共有、忘れないようにメモ

canal

自作 8bit CPU ICF3-Zをやっています。疑似パイプラインで高周波数動作。小型で高速を両立させたCPU。 16bit÷8bit(条件つきで24bit÷8bit)の除算の高速性を活かして低周波数で動作させての低消費電力。 本命はサーバー向けの高効率なモンゴメリ乗算器を搭載した暗号プロセッサによるSSLアクセラレータ。SnakeCube(ICF3-F)という名前で、現在、開発を進めています。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント