見出し画像

FPGAに実装できる超軽量な自作CPUをオープンソースで公開

東工大が2021年2月19日に発表した4命令しかない超軽量CPUの10分の一くらいのトランジスタ数のCPU「WZeta」を個人で開発。電子工作の部品として便利です。使い易いCPUがあったほうがいいと思う人は積極的に応援してください。勝手で恐縮ですが、僕は量子コンピュータの脅威の対策のほうが人類にとっては優先なので、あまり動けないのです。別のCPU「ICF3-Z」も公開しているので、こちらも面白いと思います。

はじめに

超軽量な自作CPU WZetaを2021年2月27日、制限の緩いライセンスであるApache License 2.0で公開しました。
超軽量CPU WZeta
これまで自作CPUを公開するのは風当りが厳しかったのですが、東工大のIoT向けCPU「SubRISC+」のプレスリリース(2021年2月19日)に勇気づけられ公開に踏み切りました。どちらも超軽量CPUですが関係はありません。

WZetaの特長

命令セットに特長があります。命令コードは32bitですがプログラムを8bit単位に送信して CPUで実行することでCPUの面積や配線リソース、メモリリソース(1ポートメモリでOK)を省力化します。

1バイト目、Aレジスタに7bitの即値を代入するかレジスタ(0-127)の値を代入

2バイト目、Bレジスタに7bitの即値を代入するかレジスタ(0-127)の値を代入

3バイト目、加減算、論理演算、比較、分岐命令のコード

4バイト目、演算結果をレジスタ(0-127)に代入。もしくは分岐命令後の空白

命令コードを分割して送信できること以外は、ごく一般的なCPUの命令セットと同じで、数も少ない。

verilogファイルで公開

ダウンロードのページ からverilogで実装されたWZetaのファイルがダウンロードできます。サンプルコードにAES暗号 256bitのコードがあります。AES暗号は通信の暗号化だけでなく認証としても使うことができます。 このためデータの送受信に安全性が必要な場合、便利に使うことができます。

動作確認をしたFPGAの基板はDIGILENTのArty(秋月電子通商マルツ)です。

やや不親切ですがフォルダwzblock\fpga\arty にArtyに実装できるファイルがあります。超軽量CPUなのでソースコードも、非常に小さく、見ればわかる程度なので読んでやってください。

即値代入命令

アセンブラにLOAD命令があります。CPUのハードにLOAD命令があるわけではなくてアセンブラが加算器を使ってLOAD命令にしています。レジスタR0に255の値を代入するには
LOAD R0 , 255
これは
A=127
B=127
R0 =A+B+1
というコードを生成します。つまり0~255(8bit)の即値代入が可能です。

シフト命令

シフト命令は、ありませんがレジスタR0を1bit左シフトするには
A=R0
B=R0
R0=A+B

n bitの左シフトは1bitの左シフトを繰り返します。7bitの右シフトは2命令で作れます。

A=R0
B=R0
R0=A+B

A=0
B=0
R0=CF

n bitの右シフトも同様にすれば、作れると思います。

NOT命令

A=0
B=R0
R0=A+( not B)

プログラミング テクニック

WZetaはレジスタ間接分岐が可能です。レジスタで指定できるアドレスは下位7bitで、それより上位は即値で指定します。
WZetaはRETURN&LOAD命令も可能なのでプログラムコードがから1バイトづつデータを取り出すことができます。

R8 : 間接CALL用アドレス

LOOP:
CALL xx,R8
   (R0の処理)
   INC R8
   COMPARE R8 , m
   JUMPZF0 LOOP
   (次の処理)
DATA:
   RETURN&LOAD R0, n0
   RETURN&LOAD R0, n1
   RETURN&LOAD R0, n2
   RETURN&LOAD R0, n3
   RETURN&LOAD R0, n4
   

どういったことに向いているの?

データ通信や制御用かも。例えば自宅のパソコンから庭に水を撒く制御機器を作った場合、制御信号に認証コードがない場合、悪人が不正アクセスで勝手に水を撒いてしまうことがありますが、AES暗号による認証があれば簡単には不正アクセスできないようなことができます。

回路面積(トランジスタ数)

東工大のSubRISC+のプレスリリースにはチューリッヒ工科大学のRISC-V、Micro-riscyとの比較があります。SubRISC+の回路面積はMicro-riscyの56%です。WZetaはXilinxのFPGA、Artix-7での実装面積しかないのでMicro-riscyがArtix-7でどのくらいの面積になるのか、調べてみました。lowRISCのibexというRISC-Vコアがあります。これは元々、Zero-riscyだったようです。そしてMicro-riscyはZero-riscyの1.6倍小さいということらしいです。ibexはArtix-7で約2500LUTなのでMicro-riscyは1562LUT程度になりそうです。WZetaは67 LUTなのでWZetaはMicro-riscyの4.3%という見積です。
Micro-riscyとの比較から、WZetaはSubRISC+の7.7%程度の回路面積(トランジスタ数)という見積になります。

ライセンスについて

Apache License 2.0です。制限の緩いライセンスなので技術系メディアでの紹介には都合が良いものです。ただ「日本の税金を使ったプロジェクトでは利用しないでください。」という、お願い付きです。よろしくお願いいたします。
詳しくはライセンスのページ

参考

もう一つ自作CPUを作っています。こちらも東工大のSubRISC+と比較できるCPUになるかもしれません。
ICF3-Z

2
世界一のRSA暗号の性能だった暗号プロセッサICF3を開発した実績があります。『幅広く』多くの人に暗号プロセッサICF3を知ってもらい、その将来について語ってみようかと。 https://www.facebook.com/naoki.hirayama.37