RISC-Vの乗算拡張機能でRV32Iに効率的な32ビット乗算を追加する方法

RISC-V命令セットアーキテクチャ(ISA)は、2010年にバークレーで開発されました。RISCは縮小命令セットコンピュータ(Reduced Instruction Set Computer/Core)の略ですが、メーカーはRISCのISAに命令を追加したり、新しいアドレッシングモードを追加したりして、オペコードマップを埋めてしまい、RISCというよりCISCになってしまうことがあります。しかし、バークレーのRISC-V開発者は、コアを真のRISCに保つことについてかなり厳格でした。RV32I RISC-VのISAでは、基本命令が47個のみの形で設計されており(47は昔ながらのスタートレックファンには妙に意味深な数字ですね)、11年経った今でもその数は同じです。

基本命令の数の抑制の背後にある元々の理念は、複雑なCISC命令は一連の単純なRISC命令として再現できるというものです。私の経験では、これによってコード効率が上がり、コードサイズが小さくなるかどうかは、アプリケーションによって異なります。これまでは確かにそうでした。そのため、Armはオペコードマップに複雑な命令を追加しました。

命令の追加は性能の向上に役立ちますが、32ビット命令を持つ32ビットコアに、スペースを節約するために32ビット命令の一部を16ビット命令に圧縮する機能を追加するとなると、事態はより複雑になります。しかし、16ビット命令を追加するには、圧縮された命令のためにコアのオペコードマップに余裕を持たせる必要があります。また、CISC命令を追加すると使用可能オペコードの数が減ってしまいます。

ここでRISC-Vの優位性が発揮されます。Armは後にThumb2圧縮命令フォーマットを追加し、別の16ビットISAを追加することで、これらの16ビット命令を既存のISAに適合させました。しかし、RISC-VのISAは、最初から圧縮命令のオプションを想定して設計されているため、ISAは1つしかありません。これにより、コアをシンプルかつ効率的に保つことができ、半導体の設計やテストを簡素化することもできます。

乗算命令によるRISC-V RV32IのISAの強化

メーカーは、標準化された命令拡張を追加することで、47個の命令のISAを拡張することができます(図1)。基本ISAには乗算や除算の命令がないため、M拡張がその機能を提供します。たとえば、M拡張を備えたRV32Iは、RV32IMとして指定されます。

図1:47個の命令を備えたRISC-Vの基本ISAは、コア名の後に文字サフィックスで示される標準化された命令拡張を追加することにより、拡張できます。(画像提供:RISC-V.org)

M拡張を備えたコアの例としては、SparkFun ElectronicsRED-V Thing Plusがあり、オープンソースの150MHzのFreedom E310(FE310)32ビットRISC-Vマイクロコントローラを搭載しています。FE310のコアはRV32IMACとして指定されています。基本となる整数演算(I)機能のほか、図1を参照すると、整数乗算(M)、アトミック命令(A)、圧縮命令(C)にも対応しています。

SparkFunのDEV-15799 RED-V(「レッドファイブ」と発音)RISC-V評価ボード(図2)は、32MBのプログラムメモリQSPIフラッシュを搭載し、電源、プログラミング、デバッグのためにホストコンピュータとインターフェース接続するUSB-Cコネクタを備えています。また、バッテリに電源供給するためのコネクタも追加されています。

図2:SparkFunのDEV-15799ボードは、オープンソースの150MHz FE310 RV32IMAC RISC-Vコアの評価に使用されています。このボードは、USB-Cインターフェースを介してホストコンピュータとインターフェース接続します。(画像提供:SparkFun Electronics)

M拡張では、符号付きおよび符号なしの32/32除算命令DIV/DIVU、および符号付きおよび符号なしの剰余演算命令REM/REMUが追加されます。さらに、4つの乗算命令が追加されます。

  1. MULは、32 x 32のレジスタ乗算を行い、64ビットの結果の下位32ビットをレジスタに格納します。
  2. MULHおよびMULHUは、それぞれ符号付きおよび符号なしのレジスタ乗算を行い、64ビットの結果の上位32ビットをレジスタに格納します。
  3. MULSHUは、符号付き x 符号なしのレジスタ乗算を計算し、64ビットの結果の上位32ビットをレジスタに格納します。

つまり、32 x 32 = 64の符号なし乗算の場合、推奨されるコードシーケンスは次のようになります。

ここで、レジスタrs1rs2は被乗数と乗数、レジスタrdhrdlはそれぞれ上位と下位の32ビットの結果です。

64ビットの乗算結果を2つの32ビット演算に分けることで、ISAは複雑な32 x 32 = 64のCISC命令を追加する必要がありません。これは、単純な命令を使用してCISCの演算を行うというRISCの理念に合致しています。

基本となるRV32I ISAのほとんどの命令は1命令のみのクロックサイクルで実行されますが、RED-V FE310のこれらの乗算命令は5命令を必要とします。このように考えると、上記の推奨コードシーケンスは10クロックサイクルを要します。これは150MHzでは許容できるかもしれませんが、非常に低電力、低クロック速度のマイクロコントローラアプリケーションでは、割り込みが非常に重要となります。私も、5MHzでの10サイクルの乗算は重要な割り込みを待つのに長すぎるといったケースを見たことがあります。このようなケースでは、ファームウェア開発者が、割り込みが許容された複雑なアセンブリのサブルーチンを使用して乗算を行っていました。

しかし、FE310のコアは、連続した命令を、マクロオプスフュージョンによって内部で融合させ、より高速な1つの命令にする機能を備えています。コアマイクロアーキテクチャは、2つの命令を1つの内部命令に融合し、10サイクルよりも高速に実行することができます。RISC-Vマイクロアーキテクチャでは、インデックス付きロード、ロードペア、ストアペア命令などの一部のコードシーケンスに対してこの処理を自動的に行い、実行速度を大幅に向上させています。さらに、FE310は、互換性のある2つの16ビット圧縮命令を融合できる場合に「C」拡張をサポートしているため、コードと実行速度の両方でメリットを得ることができます。

Armが圧縮命令のように後からマクロオプスフュージョンを追加したのに対し、RISC-Vは最初からマクロオプスフュージョンを想定して設計されています。コード圧縮の利点や、マクロオプスフュージョンの開始タイミングを実際に理解する最善の方法は、SparkFunのDEV-15799のような評価ボードによりこれらの動作を観察することです。FE310マイクロアーキテクチャがどのように各命令をフェッチして実行するのか、デバッガでコードを確認することができます。これにより、アセンブリ言語の動作をより深く理解することができ、コード圧縮やマクロオプスフュージョンに対応したCコンパイラで効率的なコードを書くのに役立ちます。

まとめ

RISC-VのISAは、わずか47個の基本命令によって構成された真の縮小命令セットとして自らを堂々と売り込んでいます。これは、乗算および除算命令を追加する「M」乗算拡張のような標準化された拡張機能で強化することができます。RISC-Vアーキテクチャ特有のマクロオプスフュージョンにより、連続した乗算命令などの互換性のある命令のコード実行を高速化するとともに、「C」圧縮拡張でコードサイズを縮小することができます。圧縮命令とマクロオプスフュージョンにより、他のアーキテクチャを凌ぐ大幅な性能の優位性をもたらします。

著者について

Image of Bill Giovino

Bill Giovino氏は、シラキュース大学のBSEEを持つエレクトロニクスエンジニアであり、設計エンジニアからフィールドアプリケーションエンジニア、そしてテクノロジマーケティングへの飛躍に成功した数少ない人の1人です。

Billは25年以上にわたり、STMicroelectronics、Intel、Maxim Integratedなどの多くの企業のために技術的および非技術的な聴衆の前で新技術の普及を楽しんできました。STMicroelectronicsでは、マイクロコントローラ業界での初期の成功を支えました。InfineonでBillは、同社初のマイクロコントローラ設計が米国の自動車業界で勝利するように周到に準備しました。Billは、CPU Technologiesのマーケティングコンサルタントとして、多くの企業が成果の低い製品を成功事例に変えるのを手助けしてきました。

Billは、最初のフルTCP/IPスタックをマイクロコントローラに搭載するなど、モノのインターネットの早期採用者でした。Billは「教育を通じての販売」というメッセージと、オンラインで製品を宣伝するための明確でよく書かれたコミュニケーションの重要性の高まりに専心しています。彼は人気のあるLinkedIn Semiconductorのセールスアンドマーケティンググループのモデレータであり、B2Eに対する知識が豊富です。

More posts by Bill Giovino
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum