RISC-V
RISC-V
RISC-V(リスク ファイブ)は、確立された縮小命令セットコンピュータ (RISC) の原則に基づいたオープン標準の命令セットアーキテクチャ (ISA) である。他の多くのISA設計とは異なり、RISC-V ISAは、使用料のかからないオープンソースライセンスで提供されている。多くの企業がRISC-Vハードウェアを提供したり、発表したりしており、RISC-Vをサポートするオープンソースのオペレーティングシステムが利用可能であり、いくつかの一般的なソフトウェアツールチェーンで命令セットがサポートされている。
RISC-V ISAの注目すべき特徴は、ロードストア・アーキテクチャ、CPU内のマルチプレクサを簡素化するビットパターン、IEEE 754浮動小数点、アーキテクチャ的に中立な設計、符号拡張を高速化するために最上位ビットを固定位置に配置することなどである。命令セットは、幅広い用途に対応できるように設計されている。可変幅で拡張可能なので、常により多くのエンコーディングビットを追加することができる。32、64、128ビットの3つのワード幅と、さまざまなサブセットをサポートしている。各サブセットの定義は、3つのワード幅によって若干異なる。サブセットは、小型の組み込みシステム、パーソナルコンピュータ、ベクトルプロセッサを搭載したスーパーコンピュータ、倉庫規模の19インチラックマウント並列コンピュータをサポートしている。
ISAの128ビット伸張版の命令セットスペースが確保されたのは、60年にわたる業界の経験から、最も回復不可能な命令セット設計上の誤りはメモリに対するアドレス空間の不足であることが示されているからである。2016年時点で、128ビットISAは意図的に未定義のままであるが、これは、このような大規模なメモリシステムでの実用的な経験がまだほとんどないためである。
このプロジェクトは2010年にカリフォルニア大学バークレー校で開始されたが、貢献者の多くは大学とは関係のないボランティアである。他のアカデミックな設計は、一般的に説明を簡単にするためだけに最適化されているのに対し、RISC-Vの命令セットは、実用的なコンピュータで使用できるように設計されている。
2019年6月の時点で、ユーザスペースISAのバージョン2.2と特権ISAのバージョン1.11は凍結されており、ソフトウェアとハードウェアの開発を進めることができる。デバッグ仕様は、ドラフトとしてバージョン0.13.2が用意されている。
RISC-Vの製作者は、自由に利用可能ないくつものCPUデザインをBSDライセンス下で提供することを目指している。同ライセンスは、RISC-Vチップの設計や派生成果物を、RISC-V自身と同様オープンかつ自由に、またはクローズドで独占的に、作成することを許可する。
対照的に、商業チップ製造者、たとえばARMホールディングスやミップス・テクノロジーズは、彼らの特許を利用するにあたり、相当のライセンス料を課する。彼らはまた、設計の優位性や命令セットを記した文書を渡す前に秘密保持契約を要求する。
CPUの設計開発は、電子論理回路・コンパイラ・オペレーティングシステムにまたがる専門的な知識を要する。プロの設計部隊以外でこうした専門知識を有する組織は極めて稀である。そのため、現代的かつ高品質な汎用コンピュータ命令セットで広く利用可能なものはなく、また学術分野を除けば詳しい解説もなされていない。こうした背景があるため、多くのRISC-Vの貢献者(Contributor)は、RISC-Vをコミュニティの総力による賜物だとみなしている。そうした多くの貢献者からの要求があったことが、RISC-Vが幅広い利用目的に合うように設計された理由の一つに挙げられる。
また、RISC-Vの製作者たちは、CPU設計の検証にあたって、実機・シミュレーション問わず研究・利用の両方の立場での豊富な経験を持っている。RISC-V ISAの直接的な起源は、継続的に行われた学術的なコンピュータ設計プロジェクトにあり、それらのプロジェクトを補佐する狙いもあって始まったものである。
「RISC」という用語は1980年頃に作られた。それ以前は、よりシンプルな設計のコンピュータは効率的な可能性があるといういくつかの知見は存在したが、そのような設計指針はまだ広まってはいなかった。単純で効率的なコンピュータは、常に学術的な関心にとどまっていた。
研究者は、RISC命令セットのDLXを、1990年に初版の『コンピュータ・アーキテクチャ 設計・実現・評価の定量的アプローチ』のために作成した。著者のデイビッド・パターソンは、後にRISC-Vを支援した。しかし、DLXは教育目的用だったため、研究者やホビーストはDLXをFPGAを使って実装したが、商業的には成功しなかった。
ARM CPUのバージョン2とその前は、パブリックドメインの命令セットであり、現在もまだGNUコンパイラコレクションによってサポートされている。このISA向けに、3つのオープンソースのコアが存在するが、もはや製造されていない。
OpenRISCは、DLXをベースとしたオープンソースのISAであり、RISCの実装の1つである。OpenRISCはGCCとLinuxの実装を完全にサポートしているが、商業的な実装は少ない。
RISC-Vという名称は、カリフォルニア大学バークレイ校が発表したRISC ISAの5番目のメジャー・バージョンであることを表している。RISC-Vの前の4つのバージョンは、それぞれRISC-I、RISC-II、SOAR、およびSPURである。
カリフォルニア大学バークレイ校のクルステ・アサノビッチ(Krste Asanović)は、オープンソースのコンピュータシステムが広く普及している状況を認識していた。2010年、彼は「夏の3ヶ月の短期間プロジェクト」の中で、RISC-Vを開発、公開することを決意した。この計画は、研究者や企業のユーザーに役立つものだったため、バークレイ校のデイビッド・パターソンも協力した。もともとパターソンは、バークレイRISCの特性を定めた人物であり、RISC-Vは、彼のRISC-Vの研究プロジェクトの長い経歴の一つである。初期の開発では、DARPAが財政支援を行っていた。
RISC-V財団は2015年に設立された。RISC-V財団をサポートしている組織としては、アドバンスト・マイクロ・デバイセズ、Andes Technology、BAEシステムズ、Berkeley Architecture Research、Bluespec, Inc.、Cortus、Google、GreenWaves Technologies、ヒューレット・パッカード・エンタープライズ、華為技術、IBM、Imperas Software、中国科学院、IIT Madras、ラティスセミコンダクター、Mellanox Technologies、Microsemi、マイクロン・テクノロジ、NVIDIA、NXPセミコンダクターズ、オラクル、クアルコム、Cryptography Research、ウェスタン・デジタル、SiFiveなどがある。
2019年11月に、RISC-V財団は米国の貿易制限に対する懸念からスイスへの移転を表明し、2020年3月にはスイスの国際交流協会RISC-V Internationalが設立された。
RISC-V Internationalは、RISC-Vをソフトウェアおよびハードウェア設計に自由に利用できるようRISC-Vの仕様を公開している。仕様の策定はRISC-V Internationalの会員により行われる。さらに、会員組織は製品に対して「RISC-V Compatible™」ロゴの使用を許可される。
2017年、Linley Groupにより、ベスト・テクノロジー(命令セット)賞に選定された。
RISC-Vの設計者は、命令セットは、ハードウェアとソフトウェアの中間に存在する故に、コンピュータのインタフェースの中心であると主張している。もし、良い命令セットがオープンで誰もが利用できるなら、ソフトウェアの再利用がより可能になり、そのコストは劇的に削減されるだろう。また、ハードウェア製造者間の競争が促進され、ハードウェア製造者は、より多くのリソースを設計に使えるようになり、ソフトウェア・サポートに使うリソースは少なくできる。
彼らの主張によれば、命令セットの設計では新しい設計原理が現れることはほとんどなく、過去40年の中で最も成功した設計はますます似通って来ている。失敗した設計のほとんどは、出資した企業が商業的に失敗したのであり、命令セットが技術的に劣っていたからではない。よって、よく設計されたオープンな命令セットが、十分に確立された設計原理を用いて設計されれば、多くのベンダーが長期間に渡ってサポートする気になるだろう。
先行のオープンなISAのほとんどは、ライセンスにGNU General Public License(GPL)を使用することで、ユーザーにコピーや利用するにあたって、実装をオープンにするようにさせていた。
他の学術目的の設計とは異なり、RISC-V命令セットは、研究内容の説明のための簡略化に最適化するのではなく、実用的なコンピュータに最適化した簡略化にすると宣言されている。この簡略化はコンピュータの速度向上を目的とするが、コストや電力使用量も削減される。この命令セットに含まれるものは、ロード/ストア アーキテクチャ、CPU内部のマルチプレクサを単純化するビット・パターン、簡略化された標準に基いた浮動小数点、アーキテクチャに中立な設計、および、最上位の符号ビットを固定とすることによる符号拡張の高速化である。符号拡張は、しばしば、クリティカル・タイミング・パスになると言われている。
命令セットは、幅広い層のユーザー向けに設計されている。32-、64-、128-ビットの3つのワード幅、様々なサブセットをサポートする。各サブセットの定義は、3つワード幅間で、わずかに変化する。サブセットは、小さな組み込みシステム、パーソナルコンピュータ、ベクタプロセッサを持つスーパーコンピュータ、および、ウェアハウス・スケールのラック・マウント型並列計算マシンをサポートする。
命令セットは、可変長幅で、拡張可能であるため、より多くのエンコード・ビットが追加可能である。ISAには128ビットまで拡張されたバージョンまで予約されている。これは、過去60年の業界の歴史の中で、過去の命令セットでメモリアドレス空間が不足していたことが原因で、取り返しのつかない失敗が起きたことを反映している。2016年現在、128-ビットのISAは、その巨大なメモリシステムに関する知見がほとんどないために、意図的に未定義にされている。
しかしながら、RISC-Vは、設計者の学術利用もサポートしている。整数命令のサブセットは単純であるため、学生が初歩的な練習をすることができ、整数命令サブセットはシンプルなISAであるため、ソフトウェアによる研究用マシンの制御にも利用できる。可変長のISAは、学生の練習と研究のための拡張を可能にする。別定義の特権命令セットを用いれば、OSの研究を、コンパイラを再設計せずにサポートできる。RISC-Vのオープンな知的財産によって、設計を公開したり、再利用したり、修正が可能になる。
RISC-Vオーガニゼーションは、RISC-VのCPUとSoCの実装リストを管理している。
既存の商用実装には以下のようなものがある。
アリババグループ (T-Head) は2019年7月、史上最速のRISC-Vプロセッサ「2.5GHz 16コア64ビット(RV64GCV) XuanTie 910」アウトオブオーダープロセッサを発表した。2021年10月、T-Headはこれを含む4プロセッサ (C910, C906, E906, E902) をオープンソース化した。
2016年にコンソーシアムに参加したRISC-V Internationalの創設メンバーであるAndes Technology Corporationは、2017年に初めて2つのRISC-Vコアをリリースした。N25とNX25というコアには、完全なデザインエコシステムと多数のRISC-Vパートナーが付属している。AndesはRISC-Vエコシステムの開発を積極的に推進しており、2018年にはいくつかのRISC-V新製品をリリースする予定。
CloudBEARは、さまざまなアプリケーション向けに独自のRISC-Vコアを開発するプロセッサIP企業である。
CodasipとUltraSoCは、CodasipのRISC-VコアなどのIPとUltraSoCのデバッグ、最適化、アナリティクスを組み合わせたRISC-V組み込みSOC向けに完全にサポートされた知的財産を開発している。
GigaDeviceは、RISC-VベースのMCUシリーズ(RV32IMAC、GD32Vシリーズ)を持っており、そのうちの1つが中国の電子企業Sipeed社が製造したLongan Nanoボードに採用されている。
GreenWaves Technologiesは2018年2月、32ビット1コントローラ+8個のコンピュートコア、32ビットSoC(RV32IMC)、デベロッパーボードを搭載したGAP8の発売を発表した。彼らのGAPuino GAP8開発ボードは2018年5月に出荷を開始した  。
IAR Systemsは、RV32 32ビットRISC-Vコアと拡張機能をサポートする「IAR Embedded Workbench for RISC-V」の最初のバージョンをリリースした。今後のリリースでは、64ビットのサポートとより小型のRV32Eベース命令セットのサポート、機能安全認証とセキュリティソリューションが含まれる予定。
FPGAコアのRISC-Vコア。C++で定義されたRISC-Vコアを含むSystem On Chip。
SEGGERは、同社のデバッグ・プローブJ-Link、同社の統合開発環境Embedded Studio、RTOSのembOSと組み込みソフトウェアにRISC-Vコアのサポートを追加した。
RISC-Vハードウェアの開発に特化して設立されたSiFiveは、2017年にリリースされたプロセッサモデルを持っている 。これらには、Linuxなどの汎用OSを実行可能なクアッドコア、64ビット(RV64GC)のシステムオンチップ(SoC)が含まれている。
RISC-V Internationalの創設メンバーであり、最初の商用RISC-V IPベンダーの1社であるSyntacoreは、2015年からRISC-V IPファミリーの開発とライセンス供与を行っている。2018年現在、製品ラインにはオープンソースのSCR1 MCUコア(RV32I/E[MC])を含む8つの32コアと64ビットコアが含まれている。2016年にはSyntacore IPをベースにした最初の商用SoCがデモされた。
は標準トレースシステムを提案し、実装を寄贈した。
Western Digitalは2018年12月、SweRVと呼ばれるRV32IMCコアを発表した。SweRVは、インオーダー2ウェイスーパースカラと9ステージのパイプライン設計を特徴とする。WDは、SweRVベースのプロセッサをフラッシュコントローラやSSDに採用する予定で、2019年1月にサードパーティ向けにオープンソースとして公開している  。
Espressifは、同社のESP32-S2マイクロコントローラにRISC-V ULPコプロセッサを追加した。
ASTCは、組み込みIC用のRISC-V CPUを開発した。
Centre for Development of Advanced Computing, India(C-DAC)は、64ビットのアウトオブオーダーのクアッドコアRISC-Vプロセッサを開発している。
Cobham GaislerのNOEL-V 64ビット。
ケンブリッジ大学コンピューター研究所が、FreeBSDプロジェクトと共同で、そのオペレーティングシステムを64ビットRISC-Vに移植し、ハードウェア・ソフトウェア研究プラットフォームとして使用していると発表している。
Esperanto Technologiesは、RISC-Vベースの高性能コア「ET-Maxion」、エネルギー効率の高いコア「ET-Minion」、グラフィックスプロセッサ「ET-Graphics」の3つのプロセッサを開発していると発表した。
チューリッヒ工科大学とボローニャ大学は、エネルギー効率の高いIoTコンピューティングのための並列超低電力(PULP)プロジェクトの一環として、オープンソースのRISC-V PULPinoプロセッサを共同開発した。
European Processor Initiative(EPI)、RISC-V Accelerator Stream。
インド工科大学マドラス校は、IoT用の小型32ビットCPUから、RapidIOやHybrid Memory Cube技術をベースにしたサーバーファームなどの倉庫規模のコンピュータ向けに設計された大規模64ビットCPUまで、6つの用途に合わせて6つのRISC-VオープンソースCPU設計を開発している。
lowRISCは、64ビットのRISC-V ISAをベースにした完全オープンソースのハードウェアSoCを実装する非営利プロジェクトである。
Nvidiaは、GeForceグラフィックスカードのFalconプロセッサを置き換えるためにRISC-Vを使用する計画。
SiFiveは、同社初のRISC-Vアウトオブオーダー高性能CPUコア「U8シリーズプロセッサIP」を発表した。
以下のように多くのオープンソースのRISC-V CPUの設計がある。
バークレーCPU。これらは独自のハードウェア設計言語「Chisel」で実装されており、有名な電車のエンジンにちなんだ名前のものもある。
64ビットのRocket。Rocketは、パーソナルデバイスのような小型で低消費電力の中間的なコンピュータに適している。スティーブンソンのロケットにちなんで命名された。
64ビットのBerkeley Out of Order Machine(BOOM)。BOOMは、合成可能でパラメータ化可能なオープンソースの RV64GC RISC-V コアで、ハードウェア構築言語 Chisel で書かれている。BOOMはRocketのために作られたインフラストラクチャの多くを使用しており、個人用、スーパーコンピュータ、倉庫規模のコンピュータで使用できる可能性がある。
学生プロジェクト用に設計されたバークレーの 5 つの 32 ビット Sodor CPUデザイン。Sodorは、「きかんしゃトーマス」を題材にした童話に出てくる架空の列車の島である。
Claire Wolfによるpicorv32。Verilogによる32ビットマイクロコントローラユニット(MCU)クラスRV32IMCの実装。
Syntacoreのscr1。Verilogによる32ビットマイクロコントローラーユニット (MCU)クラスRV32IMC実装。
チューリヒ工科大学 / ボローニャ大学の PULPino (Riscy and Zero-Riscy)。PULPino のコアは、マイクロコントローラ(Zero-Riscy) 用のシンプルな RV32IMC ISA や、組み込み信号処理用のカスタム DSP 拡張機能を備えたより強力な RV32IMFC ISA を実装している。
新しい命令セットを作る際に一般的な問題点は、CPUの設計とソフトウェアが存在しないことであるJanuary 2019が、RISC-Vのウェブサイトには、オペレーティングシステムをサポートするために、ユーザーモード命令の仕様と、汎用目的の特権命令セットの予備仕様が用意されている。
オープンソースのCPU設計としては、64-bit Berkeley Out of Order Machine(BOOM)、64-bit Rocket、Berkeleyによる5種類の32-bit Sodor CPUの設計、Clifford Wolfによるpicorv32、Syntacoreによるscr1、ETH Zürich / University of BolognaによるPULPino(Riscy and Zero-Riscy)などが存在する。第3世代のSodor CPUは小型の組み込みCPUに適しているように考えられている。Rocketは小型の低消費電力の個人用中型コンピュータに適している可能性がある。BOOMはRocket向けに作られた命令の多くを使用しており、パーソナルコンピュータ、スーパーコンピュータ、データセンタースケールのコンピュータに適している可能性がある。picorvおよび scr1は32ビットのマイクロコントローラ・ユニット(microcontroller unit; MCU)クラスのRV32IMCのVerilog実装である。PULPinoのコアは、マイクロコントローラ(Zero-Riscy)または組み込み信号処理のためのカスタムDSP拡張を搭載したより強力なRV32IMFC ISA向けの、シンプルなPV32IMC ISAを実装している。
設計用ソフトウェアには設計コンパイラのChiselがあり、デバイスで使用するためのVerilogでの設計工数を削減することができる。ウェブサイトでは、コアの実装をテストするための検証用データが公開されている。
現在利用可能なRISC-Vソフトウェアのツールとしては、GNU Compiler Collection(GCC)ツールチェーン(GDBおよびデバッカーを含む)、LLVMツールチェーン、OVPsim simulator(およびRISC-V Fast Processor Modelsのライブラリ)、Spike simulator、およびQEMU内のシミュレータが存在する。
オペレーティング・システムのサポートも、Linuxカーネル、FreeBSD、NetBSDに存在しているが、特権モード命令は2019は標準化されていないため、暫定的な対応となっている。RISC-Vアーキテクチャへの予備のFreeBSD移植版は2016年2月にアップストリームに反映され、FreeBSD 11.0で公開された。DebianへのポートおよびFedoraへのポートはすでに安定している。Das U-Bootへのポートが存在する。UEFI仕様v2.7のRISC-Vバインディングおよびtianocoreへのポートは、HPEのエンジニアによって完了しており、アップストリームに反映されることが期待されている。seL4マイクロカーネルのポートも存在する。ウェブブラウザ上でRISC-V Linuxが動作するシミュレータシステムがJavaScriptで書かれている。
ハードウェアのコアはRocket Core Generatorを使用して生成できる。
David Patterson & John Hennessy: "Computer Organization and Design (RISC-V Edition)", Morgan Kaufmann, ISBN 978-0128122754 (Apr. 27th, 2017).
David Patterson & Andrew Waterman: "RISC-V reader: an open architecture atlas", Strawberry Canyon, ISBN 978-0-9992491-1-6 (Sep. 10th, 2017).
John Hennessy & David Patterson: "Computer Architecture (6th Edition)", Morgan Kaufmann, ISBN 978-0128119051 (Dec, 7th, 2017).
デイビッド・パターソン、アンドリュー・ウォーターマン、成田 光彰 (訳):「RISC-V原典 オープンアーキテクチャのススメ」、日経BP社、ISBN 978-4822292812(2018年10月18日)。