Home
2024年
2023年
2022年
2021年
2020年

2月28日 WZetaの新技術の可能性(4)

市販のLCDを調べるとメモリ付きのものしか見つからないけど、 CPUからLCDを直接制御するにしても1バイト(8bit)単位で画像データを 送信できそうだから、LCDからメモリを削減することはできそうな感じ。
LCDを制御するCPUの周波数を遅くすれば低コストに繋がる。
LCDの制御を割込みに頼る場合、周波数を遅くすると 相対的に割込みの頻度が上がり、非効率、 不具合発生率が高くなるなどの問題が発生する。

ポーリング処理ではプログラムをブツ切りする手間が大きい。

8bit CPU WZetaの仮想マシン技術を使ったポーリング処理であれば、 プログラムをブツ切りする手間が無いので便利。 可搬性の高いコードにもなる。

ついでの話、8bit CPUで暗号関数のハッシュ演算をするには、 32bitの仮想マシンを使うと便利なので、そこにポーリング処理を 追加すればいいだけ。

WZetaの新技術は未来を作れるかもしれない。


2月27日 WZetaの新技術の可能性(3)

(2)では従来技術でも銀行向けのトランザク認証端末が作れることを書きました。

トランザク認証端末ではハッシュ関数による演算が必須です。 従来技術ではハッシュ演算中にLCDの表示を考えながらプログラムする必要があります。 コンパイラを使うことが難しくなることも言えるような気がします。

WZetaによる新技術ではハッシュ関数の演算と同時にLCDの表示が可能です。 コンパイラやハッシュ演算プログラムでLCDを意識する必要はありません。

LCD画面より大きな画像データをスクロールさせながら確認、 スクロール表示中にハッシュ演算をすることは、ありそうです。

ここまでの結論は、トランザク認証端末は、従来技術でも、どうにかなる。 WZetaの新技術あれば便利かもしれない。

LCDのSRAMを削減するために従来技術でも、どうにかなる、と書いています。 実際にどういう実装になるのかは、ここで完全に予想するのは難しいのですが スムーズにスクロールさせるためにLCDに大きなSRAMを搭載する必要があるなら、 CPU側でLCDを直接コントロールする方式は、コスト削減量が大きいということになるもかも。

WZetaの仮想マシン技術のほうがハッシュ演算のプログラムを小さくできるので、省メモリというメリットはありそう。 ハッシュ関数の64bit化や、いろいろなハッシュ関数に対応するとなると、省メモリのメリットは大きくなる。


2月26日 WZetaの新技術の可能性(2)

前回の日記の補足。WZetaの新技術により銀行向けのトランザク認証端末が 低コストにできるかもしれない、という説明をしました。
ほぼ入力待ちになった状態でLCDに表示させる方式でも銀行向けの トランザク認証端末は、作れそうなので、従来技術でも、問題ない という意見がありました。

そうかもしれない。

ただ新技術であれば、処理とLCD表示を同時にできるので、より便利なことができたり、 より多くのアプリを作れますということは言えるような気がします。


2月26日 WZetaの新技術の可能性(1)

現在26日17:15、昨日の21時ごろからメールが止まり、複数のパソコンが サイバー攻撃で麻痺しています。

たかだか8bit CPUなのですが、ところが僕にはWZetaが世界の重要な 技術になるように思えています。ICF3-Zのように16bit÷8bitの演算に 突出した性能を持っているわけではないですが、総合的に十分な 実力を持ったCPUであり、その技術力によって、かつてのZ80のように 世界中に普及するように思えています。

成功は保証しませんが、若い人がWZetaの新技術を応用して、 新しい世界を作っていけるように考えています。 もちろんZ80のアセンブラ時代を知る年代の方も。

例えば、短い間隔で割込みをいれるより、ポーリングできるなら、 そのほが良い場合があります。仮想マシンの命令セットを、 WZetaの命令セットで作れば、仮想マシンの命令の最後にポーリングする 命令を入れることができます。 割込みの場合は、全レジスタを退避、レストアする必要がありますが、 仮想マシンの命令の最後ではレジスタを退避する必要がないので、 効率的です。このためにはレジスタを退避しなくて良い命令セットにする 必要がありますが、少しの努力で、可能になると思います。

ポーリング処理を高速化するためにオプション仕様 を追加しました。WZetaの設計者の僕が考えたので、効率的な仕様になっています。

上手くいくのかは、わかりませんが、これまで長い間、コストの問題で導入できなかった 銀行向けのトランザク認証端末でLCDのSRAMを削除して低コストにすることを、上記に 説明した技術でできるようになるかもしれません。

この例えに限らず、新しいことが、WZetaによってできるようになると思われます。

産業スパイに転職していただいて、安心して開発できる状態にすれば、 これまでより安価で地球資源に優しいマイコンが世界に広まる ことになると思います。


2月26日 WZetaのverilogを乱数系でテスト

1024bitのべき乗剰余やSHA-1の乱数系のテストをverilogのシミュレーションで行っている。 実は、昨年の7月には完成していた。 その後、日記を読み返すと動作検証マシンを仮想化して効率を上げるシステムの構築。 本格的なサイバー攻撃に備えた開発環境の整備。 産業スパイのサイバー攻撃による妨害の数々。 こうして6カ月が経過してしまった。

一度リリースすると修正が困難になるので、アドレス拡張の仕様を先にテスト しようとしていることもリリースを遅らせた理由。

もう一つ、産業スパイを転職させて貰えると、リリース時期が早まります。

C言語のシミュレータだけ先行してリリースすることはあるかもしれない。 楕円や新しい暗号アルゴリズムを試してみたい人があるような気がしています。 シミュレータのWindows版のバイナリだけならは、その気になれば、すぐかも。


2月25日 技術だけで言えばTPM世界トップシェア

ウクライナの緊張感のためかTPMを気にする国民が増えたと思われます。 8bit CPU WZeta と暗号プロセッサSnakeCube を連結したTPMチップは世界トップシェアを握ってもおかしくはなかった。 これから耐量子暗号の世界標準が決まるので、それを見てからTPM向けの専用演算器を取り込めば、 非常に大きな鍵長のRSA暗号も可能なTPMチップとして世界的なシェアになるかもしれない。

耐量子暗号のことを考えなければならなくなった今では、 小規模に税金に優しい方法が取れなくなった。既に立ち上がっていたのなら、話は違ったのだろうけど。 日本で大きなところだとCanonか。大きなところは、上手くいかない要素も、いっぱいだからなぁ。


2月24日 WZetaにJSIG121オプション仕様を追加

フォーラムのリリース情報に投稿しました。詳しくは次のURL
https://wzforum.icf3.net/index.php/postid/43/


2月22日 WZetaをスマホのセキュリティチップにする話

2月20日の日記に書いてます。 量子コンピュータの解読脅威の問題は、どうするのかと思った人もあるかもしれません。 8bit CPU WZetaは8bitの加算器1つの超小型の汎用CPUです。 世の中が耐量子暗号に切り替われば、ソフトウェアを耐量子暗号に切り替えるだけです。

耐量子暗号には小さい整数を使うものもあると思いますが、WZetaは8bit加算器1個なので、 影響ありません。ただし計算量には注意する必要があると思います。

耐量子暗号で巨大整数を使うものがあれば、従来のRSA暗号のために開発された演算器が 流用できて、新、旧双方の暗号を使えるものになり、コストが下がるような気がしています。 SnakeCubeがRSA暗号専用だと思う人が、 まだいるかもしれないので、 再度言うのですが、巨大整数の四則演算器なので、巨大整数を使う耐量子暗号であれば、 高速に演算できます。


2月22日 プログラミングは得意です

僕はプログラミングをする時間があまり取れなくてGUI系のプログラムは不得手ですが、 好きで良くやっています。 人にプログラムを手伝ってもらうと、そこから、足を引っ張られるため、 プログラムは自力で作る方針でした。 借り物であることが示されていない限り、自力で作っています。
MicrosoftのMSDNを、何度か、購入していますが、ついてくるインシデントを消費したことはありません。 ICカードのテスト環境の構築について、1度、インシデントを使ってMicrosoftに質問したことは、 あるのですが、インシデントを消費することなく、回答してもらえた。
プログラミングは、時間さえあれば、どんどん伸びていく僕の最も得意な分野だと 理解してもらえると助かります。
総会屋のような人たちは、お金を貰って敵プログラマを攻撃するので、 僕の現状のスキルのレベルがあまり高くないというだけなのです。
世の中には良く働いたプログラマを潰して生涯賃金クラスの莫大な利益を奪い取る 商売をしている人が、多数いるので、プログラマという商売は、僕には難しいと思っています。 僕は社長である以外ないのかと、思っているのです。 それで上手くいくためには、儲かるビジネスの話が必要なので、ご連絡ください。
オープンソースの世界では、プログラミングを売るより、敵プロジェクトの妨害で、 儲けるプログラマも多くいると、僕は思っているので、自分は違うという方は、ご連絡ください。
相変わらず厳しい状況ですが、頑張っていきましょう。 産業スパイを転職させることを、皆で考えることが必要なのかも。
暗号プロセッサSnakeCubeの技術は重要です。これは、なんとかしなければならないと思います。 そして8bit CPU WZetaは、ちょっと面白くなってきたかなと思っています。 僕は自分の将来を考えますが、この国の将来についても考えています。 すぐに物を作りすぎとだと言う人が出てきます。 8bit CPUについては、税金を使わない方針を最初から言ってきています。 商業で上手くいくことを考えなければなりません。 誰にお金が集まると、将来のことまで、考えてくれるのか、100%のヒーローはいない。


2月22日 FPGAの実機で割込み機能の確認

実機でも割込み機能が正しく動作しましたという報告なので、 この日記は読み飛ばしても問題ありません。
WZetaには外部信号による割込みが2本あります。 FPGAの基板上にあるボタンを割込み0番に割り当てて、 割込みのテストをすると、プログラムが暴走した。
論理合成を使ったことがある人は、わかると思うのですが、使われていない機能は、 論理合成プログラムが自動的に消去して、最小のトランジスタ数になるようになっています。 このため論理合成で消されないように割込み1番を基板のI/Oにつないだままにしていた。
ところが基板のI/Oは、何も設定しないと1になっているみたいで、常時、 割込み1番の処理をしていて、プログラムを実行する時間が取れていないことが判明。
割込み1番に0を入力すると、正常動作することを確認。


2月21日 WZetaの命令セットと設計図を更新

2月14日版からLOOPSHxC命令と高速モードを追加した 最新版(2月21日版)(2月22日版)にアップデート。SDogコア、SBaxコアの設計図も更新しています。
公式サイトのダウンロードから入手できます。
21日版はOP1命令の説明が1行ずれていたので修正して22日版にしました。


2月21日 最新版のWZeta SDogコアをFPGAの実機でテスト

LOOPSHxC命令や高速モードを実装したverilogを論理合成してFPGAの実機で動作させてみました。 LEDを点灯させるテストです。昨年の7月にテストしたLED表示回路を追加しています。 周波数は150MHzで合成に成功しました。
LEDの点灯の様子は、昨年の動画と同じなので、昨年のYouTube動画を参照してください。
https://youtu.be/_v84c2G2RBw


2月21日 WZetaの仮想マシン技術でLCDドライバを省く

LCDドライバを省くことができないか?という話です。
昔のSHARPのポケコン、E-500とか、128×48ドットのモノクロ液晶ディスプレイを表示する ためだけにLCDドライバ2個を使っていたらしいことをツイッターのTL上で見かけたのです。

前々からWZetaを銀行のトランザク認証用のデバイスで使えないかと考えていたので、 LCDドライバを調べてみました。 すると1個あたり512バイトのメモリを搭載しているので、銀行用の トークンとしては、あまりに高価みたいに思えたのです。

WZetaが定期的に液晶ディスプレイに信号を送ればいいと思うのですが、 短い間隔のタイマ割込みで実装することを考えると、割込みルーチンに入る毎に、 レジスタの退避、レストアをしなければならず、効率が悪そうです。

WZetaのハードマクロ命令で仮想マシンを作って、普段は、その上で動作していれば、 レジスタの退避、レストアが必要なくなるので、効率的かも!と思ったのです。 仮想マシンの命令が終了するごとにLCDに信号を送信できるので。 暗号演算などで演算に集中したい場合はLCDに「BUSY」のマークを点灯させて、 全力で演算させればいい。初期のSHARPやCASIOのポケコンはBUSYを良く使っていたと思います。

8bit CPU WZetaに実装された新技術(仮想マシン)により、銀行トークンのコストが 低減され、最低限の安全が確保された銀行トークンを使った取引ができるようになるみたいな。

長い年月、コストの問題で最低限の安全が確保されないトークンを使わざるを得なかった問題を、 解決するみたいなことになれば、いいなぁと思いました。


2月20日 WZetaに高速モードを追加、さらに高速化します

まずは前置き。
スマホでは高い周波数で動作するプロセスを使ったプロセッサを利用しています。 またIoTデバイスでも、数GHzで動作するものも多いのですが、認証などの用途では 数秒から数十秒、演算に時間がかかっても、問題ないケースもあります。

つまり8bit CPU WZetaのような加算器1個の非常に小さいプロセッサでも、 暗号コプロセッサとして利用できる場合があるということです。 昨日の日記にも書いたことですが、GoogleのスマホにはTitan M2という セキュリティチップが搭載されていて、これがオープンソースCPUのRISC-Vらしいです。 WZetaを暗号コプロセッサにすば、チップ面積が小さくなり、歩留まりが向上して、 安価なスマホが作れるかもしれない。

ここから本題。WZetaは8bit加算器1個なので、やっぱり遅い。 そこで、もっと性能を向上させる方法を考え、思いついたのが「高速モード」です。 普通に高速化するなら、トランジスタを追加して乗算器を搭載すれば、良いのですが、 トランジスタが増えるとチップ面積が増えて、WZetaのメリットを失ってしまいます。 そこでわずかなトランジスタでRSA暗号の性能を約20%向上させる方法を見つけました。 WZetaの命令コードの最上位ビットはモードによって用途が変更できる仕様です。 「デバッグモード」や「パリティモード」が考えられていたのですが、 ここに「高速モード」を追加します。

最上位ビットが1である場合、通常の命令処理と同時にBレジスタを+1します。 最上ビットをBレジスタのインクリメントの信号にするという、ほんのわずかな、トランジスタの追加で、 RSA暗号の性能を約20%向上しました。汎用的に使える命令なので最上ビットのモードに 「高速モード」を追加することにました。

論理合成結果は、
WZeta(SDogコア高速モード追加版)のトランジスタ数(LUT+FF換算)
LUT: 377 FF: 141 周波数 133.3MHz(7.5ns)
LUT+FF = 377+141 = 518

上記は、Vivado2021.1の合成結果ですが、Vivado2021.2では周波数が多少オーバーする結果になっています。 信頼性向上のためのユーザーモードやメモリモデルのオプションを追加すると、もう少し、 トランジスタ数が増加したり、周波数が下がると思われます。

同時にB=B+1する命令があると、どうしてRSA暗号が20%近く高速化されるのか、説明します。
loop:
  LD A,[mx:B]
  ADDC [my:B],A
  LOOPINC ^loop (B=B+1)

上記のループ命令の実行が全体の実行時間の半分以上を占めます。
LOOPINC命令にB=B+1が入っているので、一般的な高速化テクニックの ループアンローリングでは、高速化されません。高速モードでは ADDC命令にB=B+1を追加可能なので、ループアンローリングすることで高速化されます。
loop:
  LD A,[mx:B]
  ADDC [my:B],A(B=B+1)
  LD A,[mx:B]
  ADDC [my:B],A(B=B+1)
  LD A,[mx:B]
  ADDC [my:B],A(B=B+1)
  LD A,[mx:B]
  ADDC [my:B],A
  LOOPINC ^loop (B=B+1)

上記はループアンローリングで1ループで命令列を4回実行したものですが、 最後のADDCではB=B+1をしないでLOOPINC命令にBのインクリメントを任せます。


2月19日 WZetaの機能削減版SBaxコアの論理合成結果

SDogコアから割込み、ハードマクロ命令の機能を削減したコアを SBaxコアとして公開(設計図のみ) していますが、論理合成した結果が気になって、やってみました。数日前に追加した新規命令、LOOPSHxCも 実装しています。SBaxの結果をlite8080、SDogコアと比較してみます。
lite8080はIntel 8080互換なCPUで非常に少ないトランジスタ数で実装することが目標となっているもの。 そのためオリジナルよりも多少、遅い。

light8080のトランジスタ数(LUT+FF換算)
LUT: 330 FF: 180 周波数 142.8MHz(7ns)
LUT+FF = 330+180 = 510

WZeta(SDogコア2月17日版)のトランジスタ数(LUT+FF換算)
LUT: 381 FF: 135 周波数 133.3MHz(7.5ns)
LUT+FF = 381+135 = 516

WZeta(SBaxコア2月17日版)のトランジスタ数(LUT+FF換算)
LUT: 272 FF: 79 周波数 142.8MHz(7ns)
LUT+FF = 272+79 = 351

WZeta(SBaxコア2月17日版)のトランジスタ数(LUT+FF換算)
LUT: 297 FF: 79 周波数 166.7MHz(6ns)
LUT+FF = 297+79 = 376


light8080は割込み機能があるのでSBaxの数字と単純に比較できませんが、SBaxは SDogと同じプログラムが動作します。ハードマクロ命令を使ったプログラムは動作しませんが、 1024bitのべき乗剰余(RSA 2048bit)は動作します。 そして周波数がSBaxのほうが高いので演算性能だけで言えばSDogより高速なこともあります。

ちょっと性能的に厳しいかもしれないですがスマホ向けの暗号コプロとして 使えたりしないだろうかと。スマホで使われるCPUは約2GHzで動作するため WZeta SBaxコアが2GHzで動作するなら劇重なRSA 2048bit(CRT無)が10秒台で演算できるかも。 8bitの加算器1個のCPUですが、他の暗号アルゴリズムも実装できる。 RSAよりも軽いアルゴリズムなら、現実的になるかな。

GoogleのスマホにはTitan M2というセキュリティチップが搭載されていて、 これがオープンソースCPUのRISC-Vらしいのです。 同じくオープンソースのWZetaにすれば、チップ面積が減って安価なスマホが、 全世界に提供されるみたいな、ことになると、いいなぁと。


2月18日 ICF3(1999年)に楕円暗号を実装した話

ツイッターのTL上で楕円暗号の実装の話題があったのでICF3(1999年)に実装した話を日記に書いてみる。 OpenICF3のサイトに資料を公開しているので、知っている人は、この日記は読み飛ばしても大丈夫です。
2000年ごろIEEE P1363のドラフトを見て暗号プロセッサICF3(1999年)に実装したことがある。 楕円パラメータは日立のシステム開発研究所から入手したのだけど、これがビットコインと同じだったことを 数年前に知ってびっくり。資料はOpenICF3のサイトで公開されています。
https://openicf3.idletime.tokyo/summary.html
楕円暗号のスカラ倍をICF3のA×D、A×Aを同時に演算する演算器で高速化する話。この乗算と自乗の演算器は RSAのタイミングアタックなどサイドチャネル攻撃に強い。SnakeCubeも同様の演算器なので、 乗算+自乗演算器の高速化のプログラムは、将来、ずっと使えるテクニックになるのかもしれない。

当時、数学科以外では楕円暗号は難しいとされていて、楕円暗号が実装できると社外にも、 知れ渡るくらい有名になれた。ビットコインの講習会でも、そういう話を聞いている人はあるかもしれない。 そういえばSONYのプレステで事故った話もあったような。 楕円暗号を実装するキッカケは、リストラすることしか考えていない日立の上層部に、リストラされないためには、 難しい楕円暗号が実装できることが必要だと考えていたから。

個人的にNIFTY(富士通が運営していたパソ通)のメールアドレスを使ってIEEE P1363からドラフトを入手。 そのうち会社の仕事として、することになり、OpenICF3のサイトで公開した資料を作成。 大型コンピュータ事業部から、他の日立の事業部に説明に行った。 このとき、防衛省案件にすることを考えた人があったのだけど、売れなかった。


2月17日 WZetaのLOOPSHxC命令追加後の論理合成結果

昨日の日記の新規命令2個を追加して論理合成をしました。

Intel 8080(light8080)との比較です

light8080のトランジスタ数(LUT+FF換算)
LUT: 330 FF: 180 周波数 142.8MHz(7ns)
LUT+FF = 330+180 = 510

WZeta(2月17日版)のトランジスタ数(LUT+FF換算)
LUT: 381 FF: 135 周波数 133.3MHz(7.5ns)
LUT+FF = 381+135 = 516

WZetaのトランジスタ数(評価値)がlight8080より1%大きい。 周波数の違いによる性能低下は7%です。 それでも総合的にみてWZetaのほうが数倍高速という予測です。
新規命令の追加で、乗算器無しのモンゴメリ乗算が高速化され、 1024bitのべき乗剰余が20%近く高速化しています。
センサーデバイスにCPUをつけてデータに署名をつければ、信用できるデータになるように思います。 CPUが暇なときにバックグランドで署名をつけることをすれば、 8bit加算器のみの非力で超軽量なCPU、WZetaのコスパは高いものになるでしょう。


2月16日 WZetaに、あと2つ新規命令を追加予定

18個の新規命令を追加して14日に仕様を公開したばかりですが、あと2つ新規命令を追加することを考えています。
これに伴って相対分岐できる範囲が1命令分減ります。-127≦n≦127だったのが-127≦n≦126になります。
追加が予定される新規命令

LOOPSHLC ; LOOPINC 0とSHLC [A:B]命令の複合命令。
コードは、これまでのLOOPINC 127

LOOPSHRC ; LOOPINC 0とSHRC [A:B]命令の複合命令。
コードは、これまでのLOOPDEC 127


この命令を追加した理由、1024bitのべき剰余演算を20%近く高速化できるため。 RSA暗号や楕円暗号の演算で使われるモンゴメリ乗算が高速化される。
Cレジスタの値によっては最大256回、リピートする命令ですが、割込みは受け付けます。
WZetaは乗算器がないので、それほど高速ではありませんが、 センサーをつけたIoTデバイスのCPUとして使った場合、 暗号通信で鍵交換をすることはあると思います。 1週間に1回、1時間、RSA暗号の鍵交換をしても、いいようなシステムもありそうです。 WZetaはマルチタスクが可能なので、バックグランドで処理すれば、 センサーの仕事が暇になっている間に鍵交換の演算ができます。


2月16日 WZetaの次の目標

まだWZetaを正式リリースしていないのですが、アドレス拡張命令 について実装検討しています。正式リリースしてからだと、アドレス拡張で基本仕様を 変更したくなっても、変更することが難しくなるため。
アドレス拡張仕様を実装したRedCoderコアを開発していきます。 メモリウェイトの機能を使わなければ、AES暗号やRSA暗号などのプログラムが verilogで動いています。
RedCoderコアの開発を進めていきます。 また暗号プロセッサSnakeCubeに御用件がある方は、ご連絡ください。


2月15日 WZetaの命令セットと設計図を更新

まだ開発は続いていますが新規命令18個を追加したので更新します。 SDogコア、SBaxコアの設計図も更新しています。
公式サイトのダウンロードから入手できます。

Intel 8080(light8080)との比較ですが、WZetaのほうがトランジスタ数が6%以上増加したため、 WZetaの周波数を133.3MHz(7.5ns)に落としました。(light8080は周波数を下げても、トランジスタ数は全く減らなかった)

light8080のトランジスタ数(LUT+FF換算)
LUT: 330 FF: 180 周波数 142.8MHz(7ns)
LUT+FF = 330+180 = 510

WZeta(2月14日版)のトランジスタ数(LUT+FF換算)
LUT: 371 FF: 129 周波数 133.3MHz(7.5ns)
LUT+FF = 371+129 = 500

WZetaのほうがトランジスタ数(評価値)が小さくなりました。 周波数を落としたため性能が7%低下しましたが、 それでも総合的にみてWZetaのほうが数倍高速という予測です。
WZetaが高効率なアーキテクチャであり、大きく普及できるように思います。
高効率な理由は、自分で研究して調べてみるのが良いと思うのですが、 少し列挙してみます。

(1) WZetaのトップページにあるオペランド投機実行。
(2) 256バイト境界にデータを配置することで高速にアクセス可能なアドレッシングモードと命令セット。
(3) 0番~126番のメモリは1命令で演算、分岐が可能な命令セット。
(4) ハードマクロ命令による高速な分岐。
(5) 特殊なINC命令

WZetaは性能重視か、省メモリ重視かによって、様々なコードになります。 WZetaはソフト屋の腕次第で、性能を引き出すことができるということを、 ソフト屋さんに覚えてもらって、先のことを考えて貰えればと思いました。

2月15日 15:20 追記
WZetaのトランジスタ数(LUT+FF)に割込み回路が含まれるのか?という質問。
含まれています。合成で消されないようにボードのI/Oに接続しています。
2月15日 16:20 追記
WZetaは税金を使わないことを方針としています。 税金を使った性能評価など、ご遠慮いただけますよう、よろしくお願いいたします。
2月15日 16:40 追記
light8080も周波数を下げれば、トランジスタ数が減る可能性があるため、 周波数を133.3MHz(7.5ns)に下げて論理合成をしましたが、全く減りませんでした。


2月13日 レトロパソコンにWZetaエミュレータを入れる儲け話

コンピュータが趣味な人のみ。
僕の始めてのコンピュータはCASIO FX-502Pというプログラム電卓。小学5年生のときに父親が持っていたものを私物化。 プログラムメモリは256命令を格納できるものだが、言語は、マシン語といってもいい。 人生、いきなりマシン語からスタートしたのだが、「数当てゲーム」とか「石取りゲーム」とか、 小さいプログラムのゲームで、おもちゃ感覚でマシン語を学ぶことができた。

マシン語を小学生のうちから学ぶという。 コンピュータ英才?教育というものが、あるだろうかと思った。

WZetaは、8bit CPUのオープンソースなので便利。 ハードマクロ命令や、命令コード中にパリティが埋め込める機能など、 従来8bit CPUにないものがある。これからならZ80や6502(ファミコンのCPU)より、いいかもしれない。
ということでレトロパソコンにWZetaのエミュレータを入れて、子供のおもちゃとして与えれば、 小学生でもプログラミング教育が必修化された、今の時代、いいかも!?

Z80 4MHzによるWZetaエミュレーションでも、BASICとかFORTHとかなら性能的に自作することができるかも。 Z80 4MHzのパソコンの使い道として、どうだろうか。 Z80に、こだわることもなくてi386 20MHzとかでも、いいのかもしれない。
まだWZetaのシミュレータは、C言語で現在開発中ですが、オープンソースで公開予定。

写真は、僕が中学生の頃に読んでいたZ80のプログラミングの本の写真

図をマウスでクリックすると拡大されます


2月13日 WZetaに18個目の新規命令の追加(予定)

今回、追加した新規命令。

LD B, C ; 命令コード 0x0120 --- op1命令の20h

今のところ、この命令を追加して論理合成をすると、昨日よりトランジスタ数が減る。 論理合成では、そういうことは、良くあるみたい。


2月12日 WZetaに17個目の新規命令の追加(予定)

新規命令を追加するなら、今だと思っているので、もう一個追加します。 新規命令の追加で時間がかかっていますという報告。
ZERO [m] ; [m]=0 (0≦m≦126)

オペコードは ST [xx],B と共用です。オペランドの最上位ビットが1の場合、ZERO命令と解釈します。 最上位ビットが1の場合、これまで
ST [m:B],B
という処理をするのですが、あまり意味のない処理なので、これをZERO命令に置き換えます。

今のところ、Intel 8080(light8080)との比較は、クロックは同じ142.8MHz(=7.0ns)、 LUT+FFによるトランジスタ数の評価値はlight8080が510、17命令を追加したWZetaは540(Vivado2021.2)です。 ZERO命令の追加でLUT数が増えてしまったようです。

light8080よりもトランジスタ数が約6%増加しましたが、新規命令の追加で性能やメモリ効率が上がったと思います。

ZERO命令は、メモリの0番~126番をレジスタのように使うWZetaでは、 ループ変数の初期化など、良く使われると思うのでZERO命令は追加します。


2月11日 WZetaに新規命令2個を追加予定

まだ2月7日に追加した新規命令14個の動作確認が終わっていませんが、 さらに2個の命令を考えています。一応、論理合成をしてトランジスタ数を確認しましたが、 全く増加していません。これはディレイ対策も同時に行った結果と思われます。
STAC [A:B] ; [A:C]=[A:B]
STZC [A:B] ; [C]=[A:B],B=B+1,C=C+1

STAC命令はLOOP命令と組合せると256バイト単位内のコピーが高速に行えます。 必ずコピー先は256バイト単位の先頭になりますけど。
STZC命令を連続することでメモリ上のデータを低位アドレスのメモリに1バイト/命令で転送できます。 ハードマクロ命令と組み合わせると、とても便利。 参考まで、低位アドレスのメモリからメモリ上のデータに転送するにはSTACP [m:B] (A=0)を使えば可能です。
全部で16個の新規命令を追加したことになりますが、既存のオペコードのオペランド値=127を使っているため、 空いている2個のオペコードは使っていません。


2月8日 ソフトバンク、ARM売却断念のニュース

産業スパイが騒ぎだしている。ソフトバンクに謝れみたいな勢い。 ひとことで言うなら、僕はソフトバンクにとって最悪の人間だったということかも。
少し僕の歴史を説明します。僕は1994年に日立製作所、中央研究所の超高速プロセッサ部に、 新卒修士の一般で入った。ギガヘルツのCPUを作ろうという謳い文句だったと思う。 普通の人だとCPUと言えばNECとか富士通を思い浮かべるのかもしれないけど、 この時の日立は、CPUだらけと言えるくらいCPU人工があった。 セガサターンやドリームキャストなんかで日立のSHマイコンが採用されることもあったようですが、 僕は全くSHと関わり合いがない。SHマイコンが撤退していたことを知らなかったので、 ブラウザの中で動作するSHのエミュレータを公開したこともある。

超高速プロセッサに入社した直後から、日本でCPUのリストラが開始され、僕も日立を余儀なく退社することになった。 日本のリーダー孫さんがARMを買収するときも、孫さんの発言を見ていたのですが、日本のエンジニアが 聞いたら怒り出すだろうなという感じでした。

孫さんが、孫正義育英財団一期生を募集したとき、僕も年齢オーバーながら、 真剣に応募したのですが、ほぼ門前払いをされています。 せめて意見交換会に参加させてもらっていれば、暗号プロセッサSnakeCubeをうまく運用できて、 ソフトバンクが大儲けする可能性はあったかもしれません。

僕は日立は大嫌いで、まだ断絶中ですが、ソフトバンクは嫌いではありません。 共栄できる話があるのなら、よろしくお願いします。


2月8日 WZetaとIntel 8080を比較(3)

比較(1)比較(2)ではWZetaが得意な 処理で3~5倍以上高速であることを書きました。不得意な処理も比較しないとWZetaが普及するか、 わからないと考える人はあると思います。 そこで今回は不得意な処理の性能について比較をしてみます。
WZetaが不得意な処理はスタック機能がないためサブルーチンなどのスタック処理が不得手です。 ただしハードマクロ命令を使えばCALL命令4クロック、RET命令は0クロックなので、 性能が必要なところでハードマクロを使えば、全体としては、高速に動作することもあるように考えています。
ハードマクロを使わないスタック実装例をフォーラムに投稿 しました。詳しくは、そちらを見てください。
ハードマクロを使わないサブルーチンの実装例

CALL命令
Intel 8080(light8080) 29クロック
WZeta(サンプル実装) 52クロック

サブルーチンの本体がメインメモリ32KBを超えている場合は52ではなくて56クロック。


RET命令
Intel 8080(light8080) 14クロック
WZeta(サンプル実装) 28クロック

マイコンでは簡易スタック機能でも良い場合があるので、この実装よりも高速、省メモリになることはあると思います。 アドレス低位のメモリは高速にアクセスできる命令セットなので、アドレス低位のメモリをアプリに合わせて、効率的に 利用することで高速化できます。 興味のある人が、ブログとか、本とかを書けるようなプログラミングテクニックのネタになれば、いいなぁと思っています。

まとめ
WZetaのサンプル実装ではCALL+RET命令で80クロック、ハードマクロの場合はCALL+RET命令で4クロック。 比率を1:1とした場合、平均でCALL+RET命令は42クロックです。
一方、Intel 8080(light8080)ではCALL+RET命令は43クロック。
つまりPRINT Aのような非常に良く使われるサブルーチンをハードマクロにして1:1よりも ハードマクロのほうが呼び出し回数が多いケースでは不得手なスタック処理もWZetaのほうが高速ということになります。 その他の処理ではWZetaが数倍、高速であるため、WZetaは広く普及できるように思います。


2月7日 8bit CPU WZetaの新規命令追加、その後

腹痛に伴う速報。良好な結果が出ました。
予定通り、次の新規命令14個を追加、論理合成をしてみました。 まだRSA暗号が正しく演算できることくらいしか、チェックしていません。
ADD A,C
ADDC A,C
SUB A,C ( A←C-A )
SUBC A,C ( A←C-A )
AND A,C
OR A,C
XOR A,C

ADD [A:B],C
ADDC [A:B],C
SUB [A:B],C( [A:B]←[A:B]-C
SUBC [A:B],C( [A:B]←[A:B]-C with CY)
AND [A:B],C
OR [A:B],C
XOR [A:B],C


2月3日2月5日の日記にIntel 8080(light8080)と比較した結果があります。
light8080のトランジスタ数(LUT+FF換算)
LUT: 330 FF: 180 周波数 142.8MHz(7ns)
LUT+FF = 330+180 = 510

新規命令を追加したWZetaのトランジスタ数(LUT+FF換算)
LUT: 394 FF: 127 周波数 142.8MHz(7ns)
LUT+FF = 394+127 = 521


新規命令の追加でlight8080よりもトランジスタ数が約2.2%増加しましたが、 周波数はlight8080と同じで合成できました。

これでWZetaは数倍、高速に動作します。 このくらい高効率だと広く普及するのではないでしょうか。(苦手な処理もある)

WZetaのアーキテクチャが、どうして高効率なのかを、考えるのも楽しいかもしれません。 WZetaのSDogコア、今回、論理実装したコアに限って言えば、全命令4サイクルです。 制御信号を出力してから、待っている間に、別の仕事をさせることとか、便利です。

中学校でガソリンのエンジンが4サイクルであることを学んだ記憶がありますが、 将来、CPUのアーキテクチャの一つとしてWZeta SDogコアを学ぶことがあるだろうかと。

このSDogの機能削減版であるSBaxの設計図も、公開されています。 シンプルなので、一見してわかります。公開している設計図などの資料は、 新規命令の動作を、きちんとチェックしたあと、アップデートします。


2月5日 WZetaとIntel 8080を比較(2)

2月3日の日記の日記で8bit CPU WZetaとIntel 8080(light8080)と同程度の 規模になることを書きました。つまり命令セットのサイクル数で性能を比較できます。 2月3日の日記ではWZetaが得意な公開鍵暗号のサンプルで比較していますが、本日の日記では、 一般的なサンプルとして16bitポインタで示される16bitデータに定数123を加算することを考えます。
C言語で書くと
short int *x;
x = 0x7777;
*x += 123;

light8080(Intel 8080互換な軽量プロセッサ)
LHLD x ; HL ← [x]
MOV A,M ; A ← [HL]
ADI 123 ; A ← A + 123
MOV M,A ; [HL]←A
INR L ; L ← L + 1
MOV A,M ; A ← [HL]
ACI 0 ; A ← A + carry
MOV M,A ; [HL]←A

コード 12バイト、クロック数 79
Intel 8080は、不慣れなので、もっと性能のいいコードがあると思われる方は、ご連絡ください。

WZeta
LD A,[x+1]
LD B,[x]
LD C,123
ADD [A:B],C
LOOPINC 1 ; B←B+1 , C破壊
INCC [A:B]

コード 12バイト、クロック数 24
2月4日の日記の新規命令を追加した前提なので、 WZetaの規模が多少、大きくなります。

結果
WZetaはlight8080(Intel 8080互換)と同じコードサイズで性能が3.3倍。 産業スパイの妨害で功を焦る感じなのですが、WZetaが制限の緩い オープンソースのライセンスで出されれば、全世界的に役立つと思うのです。


2月4日 WZetaに新規命令14個の追加検討開始

昨日、WZetaとIntel 8080と比較できるようにしたばかりなのですが、新規命令14個の追加を検討します。 新規命令の追加でトランジスタ数の増加と周波数の低下が酷い場合は、追加を見送ります。 最も軽量なSBaxコアには追加しない案もあるような気がしてます。

追加検討の新規命令
ADD A,C
ADDC A,C
SUB A,C ( A←C-A )
SUBC A,C ( A←C-A )
AND A,C
OR A,C
XOR A,C

ADD [A:B],C
ADDC [A:B],C
SUB [A:B],C( [A:B]←[A:B]-C
SUBC [A:B],C( [A:B]←[A:B]-C with CY)
AND [A:B],C
OR [A:B],C
XOR [A:B],C


2月3日 WZetaとIntel 8080を比較

Intelの8bit CPU、8080をオープンソースのverilogにしたlight8080WZetaをXilinxのFPGAで論理合成をして比較してみた結果を、 簡単に説明します。
普通にlight8080を検索するとverilogのないVHDLのみのlight8080が見つかるのでverilogつきのほうに リンクを張りました。 このlight8080が信用できる根拠がないのですが、そこは考えないことにします。

Intel 8080は、日本人の嶋正利さんが設計したという驚くべき事実を、Wikiを見て、最近知りました。 (僕は、一度もあったことはない) 嶋正利さんオリジナルの設計ではありませんが、light8080のマイクロコードのメモリは 32bit×512ワードなので、ICF3(1999年)と同じだったりします。

FPGAを使ったトランジスタ数の予測は、論理合成のオプションによっても大きく違います。 論理合成ソフトのバージョンが上がると同じverilogのコードでも、以前ほど良いものができないこともあります。 しかし机上による見積で比較するよりは、気分的には、いいように思います。

論理合成ソフト : Xilinx Vivado 2021.1
FPGAデバイス : ARTIX-7 XC7A35TICSG324-1L
メモリ : 4KB


light8080の合成結果(トランジスタ数)
条件を同じにするためUARTの回路は省きました。32bit×512ワードのマイクロコードはXilinx BRAMを使いません。 マイコンとしてASICで実装することを考えてもSRAM(BRAM)より、ロジックで作ったほうが、いいように思います。
LUT: 330 FF: 180 周波数 142.8MHz(7ns)
LUT+FF = 330+180 = 510


WZeta(SDogコア)の合成結果(トランジスタ数)
SDogはアドレス拡張やメモリウェイト機能のないコア。 ユーザーモード、アクセス例外、オフセット(レジスタバンク)などの機能を省きました。
LUT: 381 FF: 131 周波数 142.8MHz(7ns)
LUT+FF = 381+131 = 512


LUT+FFの合計をトランジスタ数として考えると、ほぼ同等の規模になりました。
昔の日立のFFは、他社よりトランジスタ数が多いFFだったから、合計で、あまり違和感がない。 日立のFFは、クロック動作中に、スキャンできる特技があった。 WZetaは166.7MHz(6ns)でも合成できました。比較のため142.8MHz(7ns)にしています。

トランジスタ数の規模と周波数が同一になるので命令セットだけで性能を考えることができます。

WZetaはスタックの命令がないので、厳密なスタックを要求するアプリでは、性能が遅くなると思いますが、 マイコンのアプリでは簡略化したスタックみたいなものでも足りる場合もあります。 またハードマクロ命令は1段の高速なスタックとして使えるのでアセンブラで最適化すれば、WZetaのほうが、 高速になることもあると思われます。

乗算器のないCPUで公開鍵暗号を演算する場合、多倍長加算を多用することになります。 この多倍長加算のループコアの命令数で比較してみます。light8080はオリジナルの8080より、 命令当たりのサイクル数が、多少、多い。 あまり自信はないので、もっと高速なコードがあると思われた方は、ご連絡ください。

light8080
loop:
LDAX D ; LD A,(DE) --- 9cyc
ADC M ; ADD A,(HL) --- 9cyc
MV M,A ; ST (HL),A ---9cyc
INX DE ; INC DE --- 6cyc
INX HL ; INC HL --- 6cyc
DCR C ; DEC C --- 6cyc
JNZ loop ; JP NZ,loop --- 12cyc

合計 57cyc

WZeta
loop:
LD A,[m:B] --- 4cyc
ADDC [n:B],A --- 4cyc
LOOPINC loop --- 4cyc

合計 12cyc
256バイトでアライメントする必要がありますが、RSA暗号で実装できることを確認しています。

多倍長加算のループコアでは4.75倍、light8080よりWZetaの方が高速。

WZetaなら楕円暗号を実装して実際のアプリで使うことができるかもしれない。

多くのケースでテストする必要がありますが、平均的にはWZetaが高速であるように思われます。
WZetaは、80系でも68系でもない、新しい高効率なCPUであることが、言えるように思います。 全世界に広く普及する可能性が、あるように思いました。


暗号プロセッサ OpenICF3