2020年7月6日月曜日

「RISCだったら自分たちで作れるんじゃね?」で始まった、自家製RISCプロセッサの興隆

https://news.mixi.jp/view_news.pl?id=6146629&media_id=32
シェアしました。

2020年07月06日 11:12  ITmedia NEWS
ITmedia NEWS
写真R8800のブロック図。中央のExecution Unitは5段のパイプライン構成。動作周波数は最大40MHzとされた
R8800のブロック図。中央のExecution Unitは5段のパイプライン構成。動作周波数は最大40MHzとされた
 最近ではArm、RISC-Vなど組み込みでも華々しい活躍を見せているRISCプロセッサ。その歴史的経緯を、IT史に詳しい大原雄介さんが解説する。




 ARM(現在はArm)の成功は、また別の形で業界に影響を及ぼすことになった。つまり「適当なプロセッサがなければ、自分で作ればいい」というトレンドである。1980年代後半といえば、まだASIC(Application Specific IC:特定用途向けIC)を使うことが多く、国内でもNEC、富士通、日立、東芝、シャープといった大手だけでなく、もっと小さなメーカーもASIC製造に参入していた。


 実際、筆者が昔いた会社では、ヤマハに製造を委託することもあった。もっとも、当時のヤマハは規模こそ小さかったものの、97年にIntelに買収された米半導体企業Chips & Technologiesの製品の製造を受諾していたりしていたから、知名度はそれなりにあったともいえる。この当時だとASIC製造の初期コストは数百万~1千万円台のオーダーだったから、わりと気軽に自社製品専用のASIC製造が可能だった。


 さて、ASICを作るときにはCPUがあった方がやっぱり楽である。全ての処理をハードウェアで実装するのは高速化には役立つし、うまく行けば回路規模の縮小(=製造原価の低減)も可能になるが、その一方で複雑な処理するのは苦手(ステートマシンの管理を全部ハードウェアで実装するのはそれなりに難易度が高い)だし、柔軟性にも欠ける(設計後に要件が変わったりしても対応できない)。


 そこでASICを作る際に、汎用CPU+専用回路という構成にするのはまあまあ一般的であった。問題はこのCPUをどっから持ってくるか、という話である。4/8bitのCISC CPUであれば比較的簡単に作れるし、実際作って利用していた会社は少なくないが、16/32bitの処理性能の高いCPUとなると、それなりのところから購入してくるしかないというのが80年代前半の状況だった。ところがARMの成功を見て、「んじゃRISCだったら自分たちで作れるんじゃね?」と、さまざまなメーカーが自社でRISC CPUの開発を始めることになった。


 有名なところでは、1992年に米Adaptecが投入したSCSIコントローラー「AHA-1740」シリーズに搭載された「PhaseEngine」がある。このPhaseEngineはAdaptecの外部に一切出ることがなかったので、内部の詳細はまったく分からないのだが、当時の広告でも「PhaseEngine RISCプロセッサを搭載することで高速処理が可能!」とたっぷりアピールしていた。


 そのPhaseEngine、確か1992年にAHA-1740に搭載されていた時には4MIPSと宣伝されていた記憶があるのだが、AHA-1740Aでは8MIPS、AHA-2740で10MIPS、AHA-2970では20MIPSに性能が上がり、UltraWideSCSIに対応したAHA-3970には20MIPSのPhaseEngineがデュアルで搭載された、とアナウンスされている。ここまで性能をスケールさせる場合、外部からCPUを購入していたら間違いなくライセンス料がグンと跳ね上がるはずだが、自社製造のCPUだったためにそうした問題は起きなかった。


 1993年に設立されたファブレスGPUメーカーの米Renditionも、やはり自社でRISCを開発した。同社が1995年に発表した「Verite V100」というGPUには、その自社開発のRISCプロセッサが内蔵されており、これが一種のプログラマブルシェーダー的な作業を実行していた(こちらも詳細は不明)。


 もうちょっと後で言えば、台湾のRDC Semiconductor(金麗科技)は、2000年に80186互換の16bit RISCプロセッサとして「R8800」を発表している。


 80186/80188は組み込み業界の方以外にはあまり知られていないが、ベースは8086/8088だ。ただし周辺回路までワンチップ化するとともに、一部80286の命令も取り込んでより高速化した。当時は組み込み向けにx86(というか、IBM PC)をベースにシステムを構築することも多く、その延長でx86でシステムを構築するケースは少なくなかった。


 Intelは1987年から2007年までこの80186/80188を供給し続けていたが、何しろコストカットの要求が激しい分野だけに、より安価かつ性能が高い(オリジナルの80186は最大でも25MHz駆動)互換品には確かにマーケットニーズがあった。


 これを狙うにあたり、RDCは独自の16bit RISCコアを開発して、ただし命令セットだけは80186互換としたわけだ。昨今のx86というかx64は、8/16/32/64bitが入り混じって命令数がやたらに多くなっているが、8086/80186互換なら8/16bitのみだし、RISC化はそう難しくない。幾つかの命令(例えばメモリアクセスを伴う演算命令とか)に関しては内部で命令変換を掛けただろうとは思うが、おおむねx86命令をそのまま実装できたはずだ。同社はその後、これを高速化した「RD1100」シリーズや、32bit化して486互換とした「RD8600」シリーズなどを発表しているが、これも自社開発のRISCコアならではの製品展開である。


 もっとメジャーなところでいえば、開発ボード「Arduino」に採用されたことでおなじみの、米Atmel(現Microchip)のAVRが挙げられよう。もともとはノルウェー工科大学の学生だったアルフ=エーギル・ボーゲン氏とヴェーガル・ヴォロン氏の2人で開発したのがAVRである。AVRは“Alf and Vegard's RISC processor”の略である。もっとも当初はμRISCという名称であり、卒業論文としてこのμRISCの設計を完成させる。2人はその後Nordic VLSIに勤務し、その際に彼らのμRISCはASICの内部で使われたようだ。


 Nordic VLSIは現在のNordic Semiconductorの前身で、当時はASICのデザインハウス的な業務が多かった。そもそもNordic VLSI自身がノルウェー工科大出身者によって立ち上げられたベンチャーみたいなもので、なので2人がそこに勤めたのはわりとごく自然な流れだったらしい。


 その後、ある程度μRISCにも改良を加えて洗練された辺りで、2人はシリコンバレーに渡り、これを大々的に商品化してくれるメーカーを探す。最終的にAtmelがこれに応じ、μRISCの権利をAtmelが買収。Atmel AVRとして記録的な大ヒットに繋がる商品に仕立て上げた訳だ。


 AVRはその後TinyAVRやmegaAVR/XMEGAといった形でラインアップを広げていく。Atmelは1997年にAVR MCUを初めて発売したが、2003年には累計出荷数が5億個に達したというプレスリリースを出している。残念ながら2006年にリリースした32bit版のAVR32は成功したとはいえず、その後Microchipによる買収に伴い事実上消えてしまったが、8bit AVRに関しては現在も生産されているどころか、機能強化されつつ品種が増えている状態である。


 現在の組み込み市場における3大8bitアーキテクチャといえば、8051とPIC、それとAVRということになると思う。PICもややRISC風の実装になっているところもあるし、8051はもともとはCISCながら、昨今ではRISCベースの8051が多数存在する。が、AVRは当初からRISCとして設計され、現在も広く使われているアーキテクチャである。


 そんなわけで、2000年頃になると「RISCは設計コストを抑えつつ自分の好きな構成にできる、良いアーキテクチャである」という認識が一般的に広まってきたと思う。実際2000年を過ぎた後で新規に設計されたCISCのアーキテクチャは、ルネサス テクノロジ(現ルネサス エレクトロニクス)のRXシリーズくらいしか思いつかない。


 前も書いた通り、x86のおかげでCISCとRISCの境目がなくなってしまったという背景はあるが、新規に命令セットから起こすに当たってCISC的な命令セットを用意した最後のプロセッサ、という方が正確だろうか?


 「ではRISCにすれば成功するか?」といえばそんなことはない。先もAVR32にちょっと触れたが、プロセッサが完成してもビジネスとして成功するかどうかはまた別の話である。


 例えば2000年に、OpenRISCというプロジェクトがスタートした。もともとはOpenCoreという、フリーに使えるさまざまなコア(CPUだけでなくDSPとか、CPUの一部だけとか、メモリコントローラーだったりSoCの一部だったり、と多様な種類がここには含まれる)を提供しようというもので、現時点でも多数のコアがIPの形で提供されている。このOpenCoreの目玉プロジェクトとして始まったのがOpenRISCである。


 既にプロジェクトはある程度目標を達成しており、OpenRISC 1000のソースコードはGitHubで公開されている。2017年にはArchitecture Version 1.2が、2019年には同Version 1.3がそれぞれリリースされており、またFPGAへの実装の他、ASICに搭載する形で製造されたチップも存在する。その意味ではプロジェクトの目標である「Open Sourceの形で開発され、ロイヤリティーなしで利用できるRISC CPUを作る」は達成されているのだが、実際には足りてないものが多い。Wishlistを見てみると、


・システム構築ツールが必要


・Webベースのシステム可視化ツールが欲しい


・Package Managerが必要


・FreeBSDへのポーティング


・Linux kernelのVDSO(Virtual Dynamic Shared Object)サポート


・さまざまな言語サポート


・GDBが動くようにしてほしい


・libffi/gobject-introspectionの移植


・古いバージョンのコアのアップデート


・ツールチェーンの拡充


・仕様とインプリメントを一致させる(RTLでインプリメントされている関係で、一部一致していない)


 といった項目が並んでいる。大半はCPUコアそのものには関係ない、という気もするのだが、逆にいえばこうしたものをきちんと整備しないとそのコアを使ってもらえない、ということでもある。単にCPUコアだけを作ってもダメで、そのCPUコアを利用するためのエコシステム(OSやソフトウェア、Toolchainの対応)まで考えないと、そのコアが成功するのは難しいということである。


 これは別にRISCに限った話ではないが、一般論としてこのエコシステムの整備には、CPUコアを作ることそのものの何十倍とか何百倍ものコスト(資金だけでなくマンパワーも含む)が必要になる。だから、それこそ冒頭のAdaptecのPhaseEngineのように、自社だけで使う場合には最低限のツールだけあればよいことになるが、これを広く使えるものにしようとすると、途端に難易度が上がる。


 現在も多数のRISCベースのCPU IPが流通しているが、いずれも命令セットが8051互換とかPIC互換とか、既にあるCPUの命令セットをそのまま使えるようにしているのは、要するにソフトウェアエコシステムに関しては既存の8051やらPICやら向けのものがそのまま流用できる、というのが最大の理由である。


 これが自動的に、32~64bitのFreeなRISCコアがあまり存在しない理由にもなっている。32/64bitで、既に広く使われている命令セットと言えばx86/68K/ARM/MIPS/PowerPC/SPARC程度に限られる。そしてx86/ARMに関しては、命令セットこそ公開されているものの、これを利用して自身でコアを作ったり出来ないような工夫(その命令セットを利用しようとすると特許に抵触してしまう、など)が施されている関係で、なかなか乗り出せない。


 実際2000年にARM命令互換のRISCチップを発表したpicoTurboというベンチャー企業は、直後にARMから特許侵害で訴えられる。最終的にARMは2004年に1180万ドルを支払ってpicoTurboを買収しているという辺り、要するになりふり構わずARMの命令セットを守る気だったことがよく分かる。


 x86も同じで、486とかPentiumクラスの性能のものはお目こぼしがある(前述のRDCとか、台湾DM&P ElectronicsのVortex86など)が、それより高い性能を持つプロセッサはIntelから猛烈な攻撃を食らう、という話はAMDやVIA Technologiesの歴史をご存じの方なら容易に理解できるかと思う。


 MIPSとPowerPCは、まずMIPSが2018年にOpen MIPS Initiativeを立ち上げたものの、1年持たずに敗退した。


 PowerPCの方は、まず2013年にOpenPower Consortiumを設立。ここで命令セットのライセンシングなどを狙うが、うまくいかなかった。結局2019年にOpenPOWER Foundation(途中で名前が変わった)はLinux Foundationに寄贈され、ここで完全なオープン化が図られることになるが、これを採用して新規のプロセッサを作ろうとしている話はあまり聞かない。


 唯一実装例があるのがSPARCである。Sun Microsystems(Oracleによる買収前)は早いタイミングでCPUのアーキテクチャの策定をSPARC Internationalという別の組織に移管していたが、2005年にこれとは別にOpenSPARCというオープンソースプロジェクトを立ち上げ、ここにUltraSPARC-T1のソースコード(RTL)を寄贈。のちにUltraSPARC T2のソースコードも寄贈している。


 このOpenSPARCそのものが活躍したわけではないのが皮肉なのだが、1997年にSPARC V8互換のプロセッサであるLEONというプロセッサが、ESA(European Space Agency:欧州宇宙機関)委託を受けていたGaisler Researchという会社によって開発された。


 これは衛星向けのもので、高い放射線環境にあっても稼働するようなものだが、こうした環境でもより高い性能がプロセッサに求められるようになった結果、新たにSPARC V8ベースで開発を行ったというものだ。このLEONはその後LEON 2/3/4/5と次第に高性能化していくが、その途中でOpenSPARCが始まった結果として、SPARC Internationalにライセンスを支払わずに自由に使うことができるようになったという、ちょっと異色のコアである。こちらは現在も航空宇宙分野に広く利用されているが、ただその程度でしかない。


 そんな訳で、32bit以上のRISCコアに関しては、Armなりその他のIPベンダーからCPU IPを購入して使うか、もしくは自分でコアとソフトウェアエコシステムの両方を作るか、の2択になっていった。

0 コメント:

コメントを投稿