2021-03-01に更新

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

image

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

はじめに

超軽量な自作CPU WZetaを本日、制限の緩いライセンスである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

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

spinlock

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

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

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

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

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

コメント