Home

2019年
2020年

7月2日 ICF3-Zで自分のオリジナルCPUを作ると面白い

新しい技術を使って実用性のあるものを作れないか考えている人向け。
8bit CPU ICF3-Zは利用者が自由に 定義できる命令を最大127個作れる。作れる命令は16bit長の命令コードで、 最上位ビットは常に1、オペコード7bit、オペランド8bitです。 サブルーチンコール命令や、ジャンプ命令も、 実装できるため自分のオリジナルCPU(仮想マシン)を作れます。 そしてICF3-Zで作られた仮想マシンは、ハードウェア支援によって高速に動作します。
ICF3-Zの仮想マシン機能(利用者定義16bit命令)をサブルーチンコール命令の 一種として実装することで、実に良くできた実装になっています。 つまりサブルーチンコール命令を作るには、ジャンプ命令を実行すればいいのです。 ジャンプ命令を作るには、サブルーチンのスタックを1つ減らす命令を実行して、 ジャンプ命令を実行すればいいのです。
自分の仮想マシンをarduinoなどのコンピュータに移植すれば、 仮想マシン上で動作するプログラムは、いろいろなコンピュータで動作します。 自分のオリジナルCPU(仮想マシン)を作るのは面白く、価値があることになると思われます。 先日の日記で書いたTTL版のICF3-Zに 仮想マシンを移植することは容易なのでTTLで作ったCPUの世界とつながっていくと思われます。 ICF3-ZはTTLで実装できるCPUとしては高速なので、TTLならではの用途が見つかれば、 TTLのCPUが、売れるようになるのかも。
既存のJAVAとの違いは、何かというと、TTLでも実装できそうなくらい、 非常に小さいCPUで仮想マシンが高速に動作する「ICF3-Zの仮想マシン機能」です。 新しく仮想マシンを作るので、JAVAのAPIの紛争問題も起きません。
命令コードの最上ビットが常に1になっていますが、将来、 ICF3-Z以外の仮想マシンの拡張用として考えることもできます。 パリティつきのメモリは高価なのでパリティビットとして使えば、 安価なメモリで高信頼なものが作れます。


追記
TTLが強調されていますが、TTLがなくても、多くのコンピュータで 動作するということだけでも、オリジナルCPUを作る価値はあるように思っています。 その価値を大きくできるかは、自分で考える必要がありますけど。
ICF3-ZをTTLで作ることを散々考えている理由は、SRAMがとても安価なので 大容量のSRAMを搭載したマイコンを作りやすいから。


6月15日 将来を考える全国民が考えるべき話かと

お金をかけずに従来より、より良いCPUを作りましょうという話で、 そのためにメディアの力が必要だと思っています。
6月12日に初めてプレスリリースをしたのですが、まだ反応というのは、 ほとんどありません。「研究者に必要なのは年間700万円の賃金だ!」という反応があったくらい。 これは当然の反応です。
同日、朝日新聞のサイトをはじめ、いくつかのニュースサイトに僕の作成した原文が掲載されたようです。 CPUもオープンソースが広まりつつあります。RISC-Vが支配的に普及するなか、 RISC-Vがカバーしきれない低性能領域において、新しいCPUが必要であり、 お金をかけないで、作っていきましょうということなのです。
細かいメリットもいっぱいあって、書ききれていないのですが、 3Dプリンタのような家庭用半導体製造装置で安心できるCPUを作るのに作りやすいとか、いろいろあると思っています。
普通の人にも読めるような記事なので、読んで拡散をお願い致します。お金をかけない話は、研究者には、できないので。
朝日新聞のサイトに掲載されたもの
https://www.asahi.com/and_M/pressrelease/pre_13007430/
同じ内容ですが、ICF3-Z CPUの公式サイトのほうが見やすいです。こちら↓
https://icf3z.idletime.tokyo/icf3z202006.html


6月15日 Vivado2020.1でICF3-Zの面積性能が上がった

XilinxのVivadoのバージョンを2019.2から2020.1にして合成しました。 周波数175MHzでのLUT数が減り、性能を保ちながら約11%面積が小さくなったようです。
githubのほうは更新していませんが、公式サイトの downloadのページに結果を書きました。


6月9日 ICF3-Zで符号つき乗算はできるの?

ソフトウェアによって符号付き乗算はできます。 どういうやり方をしてもいいのですが、2の補数で負の数場合は、 正整数にするコードは、こんな感じ。 Cレジスタが正ならA=C、負ならA=-Cにするプログラム。 1サイクル目、Cに0x80を加算して結果をキャリーフラグ(CF)にセット。 CF=0なら、遅延スロットのA=Cを実行してLBL1以下の行に分岐。 CF=1の場合、遅延スロットA=Cを実行して、A=-Cを実行、そしてLBL1以下の行に。

    ADDL=0x80;ADDR=C;ADD
    BCF0(LBL1)
    A=ANS;ADDR=C
    A=ANS;ADDR=C;ONE;NOT
LBL1:
    xxxxxx


6月8日 ICF3-Zの割込みは遅いのか?

ICF3-Zは割込みが入るとすぐに割込みルーチンに飛びますが、演算レジスタA,B,C,Dを、 もし使うならば自分で退避する必要がある。このため4サイクル程度、退避に時間を取られます。 しかしならが32bit CPUの実装によっては除算命令の最初で割込みが入るケースを考えると32サイクル、 割込みが遅延してしまうこともあり、これを考慮しなければならないことを考えるなら ICF3-Zの割込みの応答性は遅くないといえます。
割込みが即入るアーキテクチャなのでMMU実装に使えば、簡単にMMUも実装できるのかもしれません。


6月8日 Z80の数値演算ライブラリの本

僕が中学生のころ買ったZ80の本に16bit÷8bitのコードがありました。 以下は、その本の写真です。電波新聞社の創業者さんも2019年の社長さんも、 僕と同じ「平山」という姓みたいです。全然、関係ないのですが(^^;;
サードパーティー製の数値演算ライブラリのほうが高速というのは、よくある話です。


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


暗号プロセッサ OpenICF3