クリエイター手抜きプロジェクト[642]IoT IchigoJam編 様々なCPU
── 古籏一浩 ──

投稿:  著者:



今回は、前回の続きでCPUの話です。最新版のIchigoJam RはRISC-V搭載ですが、CPUを変更したという点では、以前にも互換性あるArmの上位版のCPUが搭載されているボードがあります。

・IchigoCake
http://ichigocake.shizentai.jp/


命令セットに互換性がある上位版のCPUへ、乗り換えは割と簡単です。消費電力やピン配置、メモリサイズなどは異なっていても、ベースが同じだからです。

CPUの命令セットによって、作成するソフトウェアの開発のしやすさは大きく変わります。

多分、コンピューター業界で長い間不評だったのが、Intel CPUのx86系のセグメントの壁というやつでしょう。

一度にアクセスできるメモリ空間の範囲が、16bit(65536バイト)に制限されるという仕組み(セグメンテーション)があったためです。16bit以上のメモリ空間へのアクセスは、セグメントレジスタの値を変えることで行います。

・Windowsのメモリー管理をx86の仕組みから読み解く
https://ascii.jp/elem/000/000/649/649680/






大昔、某社のCPUのマニュアルを作成する仕事をしていたのですが、セグメントの壁があるから、それ以外のメモリ範囲には影響を及ぼさないというメリットがあります、と作成元(開発者?)が書いていたのを思い出しました。

今なら、サンドボックスみたいなものでしょう。まあ、影響範囲という解釈をするなら、セグメントも悪くはないかもしれません。

https://ja.wikipedia.org/wiki/サンドボックス_(セキュリティ)


とはいえ、セグメントレジスタを操作してアドレスにアクセスするくらいなら、32bitの広大なメモリ空間に、一発でアクセスした方が簡単です。

初期のMacに搭載されていたモトローラーの68000は、Intel CPU(x86)とは異なり、広大な空間(都合により24bitだった)に、フラットにアクセスすることができました。

基本設計が32bitだったので、アーキテクチャの大幅な変更なく、68020など後継のCPUでは、32bitの広大なメモリ空間にアクセスできるようになっています。

https://ja.wikipedia.org/wiki/MC68000

http://www.st.rim.or.jp/~nkomatsu/mc68k/MC68000.html


68000 CPU便利と思いきや、このCPUは奇数アドレスにアクセスすると止まるという、ナイスなオチがあったりします。

68000 CPUを搭載した古いMacで、爆弾マークが出てシステムエラーが発生するのは、この奇数アドレスへのアクセスによる部分もあります(同じく68000搭載のSHARP X68000でも、アドレスエラーが発生します。68000搭載のAMIGAも、たぶん同じはず)。

でも、やはり不評(?)だったのか、68020以降では奇数アドレスにアクセスした場合、停止せずに実行速度が遅くなるだけに修正されていたと思います。

CPUにはそれぞれ設計思想があり、独特の癖があります。同じ命令セットがないことはよくあります。基本的な計算機能でさえ、ないこともあります。

例えば、乗算命令や除算命令などです(除算命令は処理速度の関係で、逆数を乗算して求めたりします)。命令セットがなければ、同じように動作するようにプログラムを書かなければなりません。

機械語・アセンブリ言語レベルでは、ここらへん苦労しますが、今ではコンパイラ(プログラム言語を機械語に変換するソフトウェア)が、うまく変換してくれるため、あまり気にすることはなくなりました。

ただ、一度作成したソフトウェアは異なるCPUで問題なく動く保証はないので、安定した動作を求めるとなると、簡単にはCPUを乗り換えることができません。

特に1980年代から積み上げてきた、Intel CPUの膨大なソフトウェアとノウハウは、捨てるに捨てられません。特にWindows 95の登場により、さらにそれは強固なものになったと思います。

ちなみに、、Intelも複雑化したIntel x86 CPUの命令セット(アーキテクチャ)でなく、洗練されたものにしようと新しいCPU(64bit)を設計し販売していました。

・Itanium(アイテニアム)
https://ja.wikipedia.org/wiki/Itanium


結局、うまくいかずに今年(2021年)に完全に終了となるようです。このIntelでも難しい離れ技をやってのけたのが、Appleシリコンです。評判もよく、本当に凄いと思います。

OS(Windows/UNIX・Mac)がハードウェアの部分を完全にカバーしてくれるなら、どんなCPU・ハードウェア構成であっても構わないでしょう。

完全ではなくても、ほとんどの部分が特定のハードウェアに依存しないのであれば、どのCPU上でも動作するはずです。例えば、ARMチップ上で動作するWindowsで、同じソフトウェアを動作させることができます(実行速度はともかく)。

https://docs.microsoft.com/ja-jp/windows/arm/

https://ascii.jp/elem/000/004/038/4038895/


異なるCPUでも、同じプログラムを動作させたい場合に使われるのが、エミュレーションです。これは、他のCPUの動作を、そっくりに真似てしまうという方法です。

この方法が使えるのは、エミュレーションするCPUよりも、高速なCPUでないといけません。そうでないと、実用的な速度で動かすことが難しいからです。

ここらへん、何度もCPUを変えてきたAppleは、何とかうまいことやってきたと思います。

今となっては忘れてる人も多いかもしれませんが、PowerPCで68000のCPUエミュレーションをしたMac(PowerMac 6100など)は凄く遅くてナントモでした。

その後、PowerPCからIntel x86 CPUに乗り換えたわけですが、PowerPCをIntel x86でエミュレーションしたRosettaは実用的な速度で動作し、なかなかやるなと思ったものです。

そして、M1チップによるIntel x86 CPUのエミュレーションを行っているRosetta2も、最初に変換する時間を除けば、実用的な速度で動作します。ここまでくると、もうどんなCPUになってもOKみたいな気もします。

・Rosetta
https://ja.wikipedia.org/wiki/Rosetta


そもそも、そんな面倒なことになるなら、最初から理想的なCPUを搭載した仮想マシンを用意すればよいのではないか?

ここらへん、誰でも思いつくネタで、実際に使われているのがJava仮想マシンです。

Java仮想マシンが動作する環境さえ用意すればいいので、特定のメーカーに依存せずに済みます(実際はいろいろあったりしましたが……)。Javaで作成しておけば、将来的にもプログラムを動かすことができるので、安心感が違います。

結局のところ、CPUでもパソコンでも何でも、特定のメーカーの思惑に振り回されたくない、安心して開発したい、プログラムを作りたいわけです。誰しもメーカーの一存でちゃぶ台返しされて、投資したお金と時間が無駄になるのは避けたいのです。

Apple社やGoogle社のように、何度もちゃぶ台返ししてくる会社もあれば、マイクロソフト社のように、とにかくそれを避ける会社もあります。ほとんどの場合、ちゃぶ台返しは嫌なので、マイクロソフト社の製品が選択されるのも必然だったのではないかと思います。

そして、ちゃぶ台返しされたくないということで、出てきたのがRISC-Vです。検索したら、RISC-Vに至るまでの経緯が書かれた連載がありました。20年後には、MacにもカスタマイズされたRISC-Vチップが搭載されるというオチもあるかもしれません。が、そんな先まで今のコンピューターが残っているのか? というのもあります。

・RISCの生い立ちからRISC-Vまでの遠い道のり
https://www.itmedia.co.jp/news/series/18103/


ということで、ようやく本題、IchigoJam Rについてです。新しいIchigoJam Rに搭載されているCPUのは、このRISC-Vです。

・RISC-V
https://ja.wikipedia.org/wiki/RISC-V


以前のIchigoJamに搭載されていたのは、ARMのCortex-M0というCPUです。

・ARM Cortext-M0
https://www.arm.com/ja/products/silicon-ip-cpu/cortex-m/cortex-m0


RISC-V(32bit)搭載というのは、ちょっと時代の先取りなのかもしれませんが、なかなか度胸あるなと思いました。(あまり搭載例がないのではないかと)

ちなみにIchigoJam Rで動作するRISC-Vのマシン語表(と思われる)は、以下に掲載されていました。

https://ichigojam.github.io/asm15/rvasm.html


ということで、次回は速くなったIchigoJam Rで、プログラムを動かしてみます。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/


ちなみに、安価でRISC-V(64bit)を搭載した機器というのは、中国の企業から発売されており、私もひとつ持っています。ここ数年で、IoT絡みでは有名になりつつある、M5Stack社が出しています。

・M5StickV(マイク搭載版)
https://www.switch-science.com/catalog/6651/


標準でリアルタイム画像認識プログラムが入っているので、興味ある方は入手していじってみるとよいかもしれません。

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


・8K/4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/


・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/