spinlockのアイコン画像

FPGAに複数CPUを搭載するのに向いたオープンソースのCPU

spinlock 2021年01月17日に作成  (2021年02月09日に更新)
FPGAに複数CPUを搭載するのに向いたオープンソースのCPU

はじめに

1つのCPUで複数の仕事をさせるより、仕事の数だけCPUを用意したほうが簡単で高信頼なシステムが作れる。そう思える人にとって、とても役に立つオープンソースのCPUの紹介です。XilinxのFPGAに実装できるverilogをgithubに公開しています。

オープンソースのCPUといえばRISC-Vが有名です。実装面積の小さいRISC-Vもありますが、ここで紹介するICF3-Zは、そういった小さいRISC-Vの5分の一の面積で、除算の性能が5倍になることもある、とても小さくて、とても性能のいいCPUです。

まだ開発環境が整備されていないので整備するところからやらないといけないこともありますが、そのおかげで製品に組み込むには使いやすいと思うので是非使ってみてください。

ちょっといい方法

紹介だけだと、さびしいかと思ったので、ちょっといい方法を書くことにします。XilinxのFPGAに実装する手順がICF3-Zのサイトに書かれています。プログラムはBRAMに格納するようになっています。BRAMはディュアルポートメモリなので、2つのCPUで共有できます。複数のCPUをFPGAに実装する場合、BRAMを節約することができます。

Lチカ動画

この動画で使っているFPGAの基板はDIGILENTのArty(秋月電子通商)(マルツ)です。ArtyにICF3-Zを実装する方法はICF3-Zの公式サイトに手順があります。verilogファイルは汎用的に作られているので、いろいろなFPGA、ASICに実装できると思います。

ここに動画が表示されます

オープンソースCPU ICF3-Z

8bit CPU ICF3-Zのオリジナルのコア、Zeviosの除算性能について解説します。Zeviosは2020年1月15日に緩いオープンソースライセンスであるApache License 2.0で公開されました。FPGAに実装できるverilogファイルがあるので、いろいろ性能を測定することができます。

Zeviosの除算器について

正しくは除算器というものはなくて8bitの加算器を効率的に動作させることで1サイクルに1bitの商を演算するアーキテクチャです。除算器の性能としては低いのですが、マイコン向けのCPUでは除算器がないものも多く、小さい面積なのに高速に除算ができるものになっています。(除算器としての面積がほとんどない) その除算向けのアーキテクチャを使って8bitより大きい除算をソフトウェアで実装できます。一般の8bit CPUによる実装よりも高速に演算できます。

16bit÷8bitの除算

ICF3-Zでは加算器を使って効率的に演算できるようになっています。17サイクルで演算ができます。

24bit÷8bitの除算

ICF3-Zでは加算器を使って効率的に演算できるようになっています。17サイクルで演算ができます。
ただし被除数の最上位8bitが除数8bitよりも小さい場合に限ります。

32bit÷8bitの除算

16bit÷8bitの除算方法を応用したサンプルコードによる性能は50サイクルです。サンプルコードはgithubで公開されています。
sim2フォルダのpmem.asmzが32bit÷8bitのコードです。

32bit÷16bitの除算

ICF3-Zのアーキテクチャを駆使したサンプルコードによる性能は約350サイクルです。サンプルコードはgithubで公開されています。
sim1フォルダのpmem.asmzが32bit÷16bitのコードです。
ソフトウェアの実装によって性能は違ってくると思われます。もっと高速な方法もあるかもしれません。
除数が8bit × 8bitの因数に分解できるものなら32bit ÷ 8bitを2回演算したほうが高速です。

32bit÷15bitを230サイクルで演算するコードも作ったのですが、まだ十分に検証できていないため、今回は見送りました。

おわりに

ICF3-Z Zeviosは、とても少ないトランジスタ数(面積)で実装できるのに高速です。16bit÷8bit、24bit÷8bitの除算が有効につかえるアプリでは低消費電力が期待できるように思われます。

参考サイト

オープンソースのCPUの除算性能 RISC-V vs ICF3-Z

8bit CPU ATmega328の除算性能を測定してみた

仮想マシンの加速支援機構つきの新型8bit CPU

spinlockのアイコン画像
ICF3-Zの開発者。ICF3-Zは制限の緩いライセンスの オープンソースのCPUです。少ないトランジスタ数の割には除算が高速で制御に向いているプロセッサです。小さいFPGAにも実装することができたり、FPGAに複数のソフトコアなCPU、ICF3-Zを搭載するケースで役に立ちます。税金を使わないことを方針としているCPUです。詳しくはライセンスのページを見てください。 https://icf3z.idletime.tokyo/
spinlock さんが 2021/01/17 に 編集 をしました。 (メッセージ: 初版)
spinlock さんが 2021/01/17 に 編集 をしました。
spinlock さんが 2021/02/09 に 編集 をしました。
ログインしてコメントを投稿する