ZPUは、フィールドプログラマブルゲートアレイ(FPGA)を含む電子システムで監視コードを実行するためにノルウェーのZylin AS社によって設計されたマイクロプロセッサ スタックマシンです。[1]
ZPU は比較的新しいスタック マシンで、小規模な経済的ニッチ市場を持ち、ユーザー数と実装数が増加しています。[要出典]非常に少量の電子ロジックを必要とするように設計されているため、FPGA でより多くの電子ロジックを他の目的に使用できます。簡単に使用できるようにするために、GNU コンパイラ コレクションのポートが用意されています。これにより、コンパイラのない CPU よりもはるかに簡単に適用できます。サイズを小さくするために速度を犠牲にしていますが、計算の中間結果をレジスタではなくメモリのプッシュダウン スタックに保持します。[1]
Zylin社は2008年にZPUをオープンソース化した。[1]
使用法
多くの電子プロジェクトでは、FPGA に電子ロジックが含まれています。マイクロプロセッサも使用するのは無駄なので、FPGA の電子ロジックに CPU を追加するのが一般的です。多くの場合、CPU のリソース使用量が少なければ、より小型で安価な FPGA を使用できます。これはまさに、ZPU が対処するために設計された状況です。
ZPU は、ユーザー インターフェイスなど、ソフトウェアで処理するのが最適なシステムのさまざまなタスクを処理するように設計されています。ZPU は非常に低速ですが、サイズが小さいため、必要な高速アルゴリズムを FPGA に配置するのに役立ちます。
もう 1 つの問題は、FPGA 用の CPU のほとんどがクローズド ソースであり、特定の FPGA メーカーからのみ入手可能であることです。セキュリティ検査、教育目的、その他の理由により、プロジェクトで広く配布できる設計が必要になる場合があります。これらのプロプライエタリ CPU のライセンスでは、こうした使用が禁止される場合があります。ZPU はオープン ソースです。
プロジェクトによっては、サイズが小さくても、本来大きなコードを持つ CPU で実行する必要があるものもあります。また、GNU コンパイラ コレクションの幅広いコード、コンパイラ、デバッグ ツールをプロジェクトで活用することもできます。このような場合、エミュレータを作成して ZPU の命令セットをターゲット CPU に実装し、ZPU のコンパイラを使用してコードを生成することができます。結果として得られるシステムは低速ですが、多くの CPU よりも少ないメモリにコードを詰め込むことができ、プロジェクトでさまざまなコンパイラとコードを使用できるようになります。[2]
デザインの特徴
ZPU は、電子ロジックの量を最小限に抑えることを明確に目的として設計されました。命令セットは最小限ですが、GNU コンパイラ コレクション用にエンコードできます。また、FPGA に必要なレジスタの数も最小限に抑えられ、フリップフロップの数も最小限に抑えられます。レジスタの代わりに、中間結果はメモリ内のスタックに保持されます。[1]
また、コードが小さいため、メモリを節約できます。スタックマシン命令にはレジスタIDを含める必要がないため、ZPUのコードは他のRISC CPUよりも小さく、ARM Holdings Thumb2の約80%のスペースしか必要としないと言われています。[1] たとえば、符号付き即値により、ZPUは32ビット値を最大5バイト、最小1バイトの命令スペースに格納できます。ほとんどのRISC CPUは少なくとも8バイトを必要とします。
最後に、その命令の約 2/3 は、残りの 1/3 の「必須」命令を使用して実装されたファームウェアによってエミュレートできます。結果は非常に遅くなりますが、結果として得られる CPU には、わずか 446 個のルックアップ テーブル (FPGA の複雑さの尺度で、約 1700 個の電子論理ゲートに相当) しか必要ありません。
ZPU にはリセット ベクターがあり、これは位置 0 から始まる 32 バイトのコード空間で構成されています。また、エッジに敏感な割り込みが 1 つあり、ベクターはアドレス 32 から始まる 32 バイトのコード空間で構成されています。ベクター 2 から 63 にはそれぞれ 32 バイトの空間がありますが、命令 33 から 63 をエミュレートするコード用に予約されています。
基本 ZPU には 32 ビットのデータ パスがあります。ZPU には、さらに多くのロジックを節約するために、16 ビット幅のデータ パスを備えたバリアントもあります。
ツールとリソース
ZPUには、十分にテストされたGNUコンパイラコレクションの移植版があります。[1] 愛好家やファームウェアエンジニアは、ECos [1] 、FreeRTOS [3]、μClinux [4]を移植しました。 少なくとも1つの愛好家グループは、Arduinoの人気のある開発環境をコピーし、それをZPUに適合させました。[5]
現在、ZPUコアには複数のモデルがあります。オリジナルのZylinコア[1]の他に、ZPUinoコア[5]とZPUFlexコア[6]もあります。ZylinコアはFPGAフットプリントを最小限に抑えるように設計されており、16ビットバージョンが含まれています。ZPUinoは速度が実質的に改善されており、エミュレートされた命令をハードウェアで置き換えることができ、システムオンチップフレームワークに組み込まれています。ZPUFlexは外部メモリブロックを使用するように設計されており、エミュレートされた命令をハードウェアで置き換えることができます。
学術プロジェクトには、電力効率の研究と改善[7] 、信頼性の研究[8]などが含まれます。
速度を向上させるために、ほとんどの実装者はエミュレートされた命令を実装し、スタックキャッシュを追加しました。[5] [6] [7] さらに、ある実装者は、2スタックアーキテクチャによりパイプライン化(つまり、クロックサイクルごとに1つの命令に速度を向上させる)が可能になりますが、これにはコンパイラの変更も必要になる可能性があると述べました。[7]
ある実装者は、スタックキャッシュとクロックゲーティングの自動挿入により、電力使用量を46%削減しました。[7]当時の電力使用量は、ARM v2aアーキテクチャを実装した小さなオープンソースのAmberコアとほぼ同等でした。
ZPUの中でフォールトトレランスが最も役立つ部分は、アドレスバス、スタックポインタ、プログラムカウンタです。[8]
命令セット
「TOS」は「Top Of Stack」の略語です。「NOS」は「Next to the top Of Stack」の略語です。
コード ポイント 33 から 63 は、ベクター 2 から 32 のコードによってエミュレートできます: LOADH および STOREH (16 ビット メモリ アクセス)、LESSTHAN (比較は、真の場合は 1、偽の場合は 0 に設定)、LESSTHANOREQUAL、ULESSTHAN、ULESSTHANOREQUAL、SWAP (TOS と NOS)、MULT、LSHIFTRIGHT、ASHIFTRIGHT、ASHIFTRIGHT、CALL、EQ、NEQ、NEG、SUB、XOR、LOADB および STOREB (8 ビット メモリ アクセス)、DIV、MOD、EQBRANCH、NEQBRANCH、POPPCREL、CONFIG、PUSHPC、SYSCALL、PUSHSPADD、HALFMULT、CALLPCREL
参考文献
- ^ abcdefgh 「ZPU - GCC ツールチェーンを備えた世界最小の 32 ビット CPU: 概要」。opencores.org、Zylin Corp。2015年2 月 7 日閲覧。
- ^ 「ZOG - GNU C + Fortran を使用した Propeller 用 ZPU プロセッサ コア」 。Parallaxフォーラム。Parallax。2019年9 月 6 日閲覧。
- ^ アントニオ、アントン。 「ZPUino-HDL/zpu/sw/freertos/」。GitHub。アントニオ・アントン。2015 年2 月 7 日に取得。
- ^ Lopes, Alvaro. 「alvieboy/Linux」. GitHub . Alvaro Lopes . 2015年2月7日閲覧。
- ^ abc Lopes, Alvaro. 「ZPUino」www.alvie.com . 2015年2月7日閲覧。
- ^ ab AMR. 「ZPU Flex」。Retro Ramblings 。 2015年2月9日閲覧。
- ^ abcd エリクセン、スタイン・オヴェ。 「低電力マイクロコントローラーコア」。NTNU オープン。ノルウェーの技術自然科学大学。2015 年2 月 9 日に取得。
- ^ ab Zandrahimi, M. (2010). 「ZPU における障害の影響と伝播の分析: 世界最小の 32 ビット CPU」。第 2 回アジア品質電子設計シンポジウム (ASQED)。IEEE。pp. 308–313。doi : 10.1109 / ASQED.2010.5548320。ISBN 978-1-4244-7809-5. S2CID 20045721。
