Skip to main content

標準化されたオープンソースのプロセッサ・アーキテクチャ

オープンソースアーキテクチャにハードウェアとソフトウェアの拡張を追加し、設計を最適化

ジョン・ゲイベイ(マウザー・エレクトロニクス)

(Source: Shutterstock/wanpatsorn)

今まで私たちは新しいプロジェクトでさらにパワーとスピードが必要になる度に、新しいプロセッサのアーキテクチャと開発環境を学習してきた。新しいプロセッサによく知っている部品と同じようなものを使えば、少なくともその苦労を軽減することができる。しかし、1つの新しいアーキテクチャを学習するだけで、今後はもっと速く簡単に設計できるようになるとしたらどうだろう? RISC-Vのスケーラブルで複製可能かつ設定可能なオープンソースプロセッサなら、それも夢ではない。

縮小命令セットコンピュータ(RISC)は新しいアーキテクチャではなく、それ以前の複合命令セットコンピュータ(CISC)に代わる効率的なアーキテクチャとして、すでに数十年前から存在していた。CISCプロセッサは、ノイマン型アーキテクチャを採用しており、命令のフェッチ、デコード、実行という流れで動作していた。RISCプロセッサは、命令バスとデータバスを分離したハーバードアーキテクチャを採用しているため、同時アクセスが可能になり、プロセッサは各命令を1サイクルで実行できる。このため、迅速で決定性があり、コンパイラや関数ライブラリがより簡単に作成でき、マシン間の移植が容易にできる。

ただし、CISCプロセッサと同様に、内部アーキテクチャ、ペリフェラル、I/O、命令セットはメーカーによって異なる。このため、設計開発を行うには、特定のメーカーと部品に合わせた開発ツールを用意する必要がある。開発ツールメーカーは、プロセッサごとに異なる開発ツールチェーンのプラグインとヘッダファイルを用意しなければならず、大変な作業になる。

RISC-Vプロジェクトは、2010年にカリフォルニア大学バークレイ校で、同校内外の専門家と協力者によって開始された。そしてようやく2018年になって、メーカーと設計エンジニアの注目を集めるようになった。注目された理由は、メーカーの部品や部品ファミリに縛られず、自由に設計できる点にある。

RISC-Vは命令セットアーキテクチャ(ISA)のオープン仕様であり、どんなメーカーでも同じコードを実行するプロセッサを作ることができる。この命令セットのアプローチでは、各プロセッサのアーキテクチャごとに独自の開発エコシステムを学習したり、構築する必要がない。専用プロセッサだけでなく、RISC-VコアはASICやFPGAに搭載することで、より高い集積度を実現できる。

重要なのは、オープンソースのRISC-V命令の用途が階層化され、拡張可能である点だ。つまり、オープンソースの標準命令セットを使用する場合でも、設計者は、深く組み込まれた機能をより効率的に実行する命令を追加することで、ASIP(アプリケーション固有の命令セットプロセッサ)を作成することができるのだ。これはチップメーカーが他社との差別化を図るための拡張命令として、または設計エンジニアのアイデアから生まれたASIC/FPGAハードウェアとして実現するかもしれない。たとえば、EDAベンダはVerilogまたはVHDLで拡張命令をサポートすることができる。

なぜこのタイミングが重要か? 今日、市場ではARM(Advanced RISC Machine)アーキテクチャのプロセッサがRISCの主流を占めているが、数十万ドル単位の前払いライセンス料と非常に高額な使用料を支払っている企業も珍しくない。

特に防衛やセキュリティの場合、長期的に持続可能な最先端技術を確保するには、多くの要因が絡んでくる。オープンソースのRISC-Vアーキテクチャは、すべての人のニーズを満たすことができる位置にある。

国際的な圧力により、オープンソースのRISC-Vは国際標準となり、3月には正式にRISC-V Internationalが発足し、本部は米国ではなくスイスに置かれた。RISC-V財団(riscv.org)がこの標準規格を管理している。

 

アーキテクチャの仕様


RISC-Vは標準の5段パイプラインを使用し、1クロックサイクルあたり最大2つの命令を実行できる。標準のロード/ストア・アーキテクチャが実装されており、ALUとメモリ操作を区別している。ベースレジスタは、Base Integer ISAとして定義された場合、オフセットレジスタ値を加算し、ソースまたはデスティネーションレジスタと連携して外部メモリへの完全なアクセスを可能にする。I/Oをこのスペースにマッピングすると、柔軟なプログラムI/Oやブロック操作が行える。さらに、Load-Reserved/Store-Conditional命令(LR/SC)は、条件に応じて更新や出力を行うことができる。

基本整数命令は、整数レジスタ幅とユーザーデザイン空間の大きさによって特徴付けられる。RV32IおよびRV64I命令バリアントは、32ビットと64ビットのユーザーレベルのアドレス空間をサポートし、将来のRV128Iは、フラットな128ビットのアドレス指定能力をサポートする予定だ。この命令は、ASICやFPGAとしての実装に向けて、「オーバーアーキテクト」せずにネイティブなハードウェアの実装を可能にすることを意図している。

命令バリアントには32ビットと64ビットのアドレス指定能力があり、ユーザーレベルのISA拡張と特殊バリアントがサポートされている。そしてx86アーキテクチャと同様に、リトルエンディアン構成が使用されている。たとえば、アクセス先のメモリアドレスは、16、32、64、128ビットのワード幅に揃えなくてもよい。また、「フェンス」命令は、前の命令値の結果が他のスレッドやI/Oデバイスに見えるようにする。これによって、I/Oに影響することなくメモリの読み込み/書き込み操作が分離され、待ち時間が解消される。

ここで役立つのがメモリ上位ロード即時命令である。この命令により、32ビット・アドレスレジスタの上位20ビットを1サイクル命令に入れられた即値データ値でロードすることができる。さらに、別のメモリアドレス操作命令では、下位12ビットを設定することができる。これにより、位置に依存しないコードを作成することができ、プログラムカウンタレジスタに対して32ビット・アドレスを生成するプログラムが可能になる。そして、まだ先の話に思えるかもしれないが、128ビット・アドレスのメモリも機能的にはすでに存在している。

32整数レジスタセットには、スタックポインタ、グローバルポインタ、スレッドポインタが含まれる。別の32浮動小数点レジスタは、引数、パラメータ、結果に使用できる。レジスタx0は、読み込み時に常に「0」を返し、これはすべての実装に共通する。注目すべき重要点は、RISC-Vには組み込みアプリケーション用の16ビット・バリアントと、整数および浮動小数点レジスタセット用の32ビット構成があることだ。

RISC-Vでは、16、32、48、64、80+xビット長の命令が可能である。可変長命令をサポートし、現行仕様には192ビットを超える命令長用の予約エンコーディングが含まれている。例外、トラップ、割り込みも完全にサポートされている。

予想どおり、拡張は、固定、浮動小数点、整数、精度、高い戻り値、低い戻り値、演算型を指定するために算術演算に使用されている(A)。

 

表A:乗算・除算の簡易拡張(出典:著者)

変動およびベクトル処理は、RISC-Vアーキテクチャの明確な目標として、広範なデータ並列アクセラレータをサポートしている。ゆとりのあるメモリモデルなので、将来の拡張機能もデータ並列コプロセッサまたはアクセラレータ関数と連携させやすいだろう。たとえば、ユーザー定義のアクセラレータは、必須アプリケーションドメインからカーネルを実行する設計になるかもしれない。ここでは、基本整数演算以外をすべて削除して、目前のタスクをより効率的に実行する拡張のみを使用することができる。

 

これはAIアクセラレーションと機械学習に役立つだろう。teraFLOPS/Wattを向上させるために、ドメイン固有拡張(DSE)、Tensor命令、ベクトルISAを使用した取り組みも進んでいる。ユーザー定義のハードウェア・アクセラレータは、ソフトウェアベースの計算ソリューションよりも常に優れた性能を発揮するだろう。これらのカスタムアクセラレータは、データパイプラインへ連結して、グラフィック、マルチメディア、DSP、リアルタイムモータ制御、その他固有のアーキテクチャ要件を高速化することができる。

 

最近承認されたものに、7つの非特権CSRを32ビット・ベクトルレジスタに追加するベクトル拡張がある。ベクトルコンテキスト・ステータスフィールドmstatus vs.を適切に設定することが必須であり、そうしなければ、ベクトル命令の実行またはアクセスしようとすると、不正な命令例外が発生する可能性がある。

 

アクセラレータはハードウェアタスクと計算集約型のタスクに適している。一方、ハイパーバイザ命令は仮想マシンをゲストやプロセスとして実装する際に便利である。内部に組み込まれたメソッドは、集中的な機能やハウスキーピング関数を処理することができ、プロセッサのコードに組み込まれるか、システムの他のコアにオフロードされる。「H」拡張を使用するハイパーバイザ命令は、特権命令セットの一部であり、マシンモードで動作するプロセッサに複数のユーザー、プロセス、スーパーバイザを持たせることができる。直交実装として計画した場合、構成ビットにより、スーパバイザコードがハイパーバイザ・レジスタにアクセスしたり、アクセス時に割り込みを生成したりすることができる。

 

暗号化機能と機械学習機能は、特定のドメインでの追加のベクトル拡張のベースとなるベクトル拡張を利用する。RISC-Vアーキテクチャは、32ビットおよび64ビットのデータパスをサポートする暗号化ワークロードを高速化できる。これは、NIST AES復号およびNIST AED復号だけでなく、ブロック暗号、ハッシュ関数、エントロピーソース拡張、クロスバー置換などの実装にも役立つ。

最近の重要な展開は、SiFiveのFreedom SDK開発システムでTEE(Trusted Execution Environment)サポートが利用できるようになったことだ。HexFive Security MultizoneのRISC-Vへの追加機能は、「無制限」の数のセキュリティゾーンに対して、強制分離に基づくハードウェアポリシーをサポートする。これにより、ファームウェアの開発者はデータを完全に制御できるようになる。コード、ペリフェラル、割り込みのロックアウトは、セキュリティ違反を試みることになるだろう。

ハードウェアスレッドの明示的な定義は、特権命令の一部であり、停止したスレッド、または続行する準備ができていないスレッド(たとえば、入力待ちや計算中など)から回復することができる。またハードウェアスレッドは、高速でリアルタイムの処理ルーチンに対して保存および復元操作を実装する必要がないため、効率的な割り込みを実装できる。RISC-VのISAでは、ハイパーバイザ操作の5つのモードがサポートされている。5つのモードとは、マシン、スーパーバイザ、ユーザー、スーパーバイザー・アンダー・ハイパーバイザー、ユーザー・アンダー・ハイパーバイザーである。これにより、複数の独立した処理に十分な柔軟性が保たれ、互いに干渉することなく稼働することができる。

 

実例


RISC-Vとは何か。今後このテクノロジーをどう活用できるのか。これについて理解を深めるため、例として、業界屈指のRISC-V開発企業を見てみよう。SiFive社は、ドメインに特化したSoC向けのRISC-Vプロセッサコアの製品群を提供している。製品ラインアップは、低消費電力の組み込みマイクロコントローラ型コアからマルチコア・アプリケーション・プロセッサまで多岐にわたる。さらに、構成可能なコアは、HyperXアーキテクチャ、パイプラインアーキテクチャ、ベクトルアーキテクチャ、並列処理アーキテクチャなど、固有のニーズに合わせて調整できる。

SiFiveの主な強みは、詳細なアーキテクチャ構成と拡張機能を提供する自社のオンライン・マイクロアーキテクチャ生成ツールにある(1)。設計者は、シングルコア設計、または8つ以上のコア設計に、単一または複数の浮動小数点プロセッサ、ビット操作命令、柔軟な割り込みハンドラ、予測分岐などを指定できる。アーキテクチャは、J-TAGを使ったデバッグとトレース機能だけでなく、テストフック用の設計で構築されている。

図1:統合型設計またはモノリシック設計で複数のコアを組み合わせられるため、ニーズに合わせて設計を調整することができ、しかも、全体を再設計しなくても、部分的にアップグレードまたは拡張する能力も維持できる。(出典:SiFive

 

ペリフェラルポートは32ビット幅にでき、コードとデータ用のメモリポートは64ビット幅にできるので、アクセス回数が減り、スピードが向上する。メモリブロックを1コアに限定することも、コア間の共有アクセス用にマッピングすることもできる。SiFiveのアプローチの主な利点は、集約機能およびペリフェラル機能の処理をヘテロジニアスに、またはモノリシックに、あるいはその両方で調整できることにある(2)。計算集約型のタスクは、共有メモリとペリフェラルへのアトミックアクセスにより、データI/O、ロードと保存、通信操作と並行して実行することができる。

図2:柔軟なオンラインコア開発ツールでは、マルチコアアーキテクチャ、ペリフェラルアーキテクチャ、バス幅、共有リソースなど、各コアの固有のニーズを取り込んで分類できる。ビルド機能はカスタムコアを作成し、シミュレーションモデルは機能検証に使用される。(出典:Bedford Falls

SiFiveのもう一つの重要な利点に、セキュリティ強化がある。WorldGuard技術を採用した、きめ細かいセキュリティによって実行用とデータ用にコードを分離できる。これには、ユーザー定義のワールドの数が無制限で、複数レベルの特権が含まれる。さらに、ワールドIDマーカーがプロセスを互いに分離し、保護され分離された実行を保証する。

重要な情報を守るシールドアーキテクチャには、NIST SP-800-90A/B/Cに適合する真の乱数生成器があり、暗号化およびエントロピーベースの安全機能を提供する。さらにAES暗号化エンジンは、多種多様な攻撃から保護されており、セキュア暗号ハッシュエンジンはSHA-2、SHA-3規格、および公開鍵暗号化をサポートしている。

また最近新たにCrown SupplyのHiFive FE310-G002 32ビットRISC-V SoCと開発ボードも、チップとして、または開発プラットフォームで利用できるようになった。3.3Vの開発ボードには、32ビット幅のデータバスと統合ワイヤレス技術が搭載されており、高性能処理能力を必要とするネットワーキングやIoTアプリケーションに対応できる。

RISC-Vベースの製品をコアとして開発することで、ほとんどすべての機能とデータ転送がモノリシックに実行されるため、最高の統合性と性能が実現できる。

ハードコアを使用することで、完全に特性化されデバッグされたプロセッサの開始点が提供されるが、ソフトコアを使用すると、ユーザー統合機能をモノリシックに共存させることが可能になる。

 

 まとめ


ライセンス無料のIPでマイクロコントローラとマイクロプロセッサのアーキテクチャをカスタマイズできれば、現在から将来にわたって製品ラインの標準化が可能になる。さらに、オープンソースとは、最初の学習曲線を完了すれば、知識のある熟練した設計者が増え、今後も製品のアーキテクチャを開発し続けることができることを意味する。

最小限の設計改良を少しずつ行えるため、これまで大切にしてきたものを捨てずに済み、ハードウェアとソフトウェアを賢く実装すれば、将来的に再利用できる。これにより、設計者は新しいプロジェクトの先進的な側面だけに専念できるようになり、将来利用できる設計のエレメント、ライブラリ、機能、ブロックの安定した基盤がもたらされる。つまり、RISC(リスク)こそ「低リスク」なソリューションなのだ。