MC68881とMC68882:68020および68030用の浮動小数点演算ユニット
MC68881(通称68881)およびその後継モデルであるMC68882(68882)は、68020および68030マイクロプロセッサ向けに設計された浮動小数点演算ユニット(
FPU)です。このチップを
コンピュータに追加することは、全体的なコストを上昇させるものの、
浮動小数点数値演算の処理能力を格段に向上させました。この技術は、特に科学的計算や高度な数学演算において重要な役割を果たしました。
概要
68020と68030プロセッサは、68881チップを使用することを前提に設計されています。この設計では、特別に予約された命令セット「F-line」が用意されており、命令コードはすべて16進数のFで始まるトラップ命令として機能します。トラップ命令は通常、
オペレーティングシステム(OS)の管理に使用されますが、68881がシステム内に存在する場合、その命令は
FPUで処理され、マイクロプロセッサ(MPU)による内部割込みが回避されます。一方、
FPUが存在しない場合、MPUは内部割込みを発生させ、OSがそれを検出し、代わりに
FPUエミュレータを呼び出すか、プログラムを中断します。
アーキテクチャ
68881は、8つの96ビット長のデータレジスタを搭載しており、IEC規格に基づく多様な
浮動小数点数値演算を行います。具体的には、80ビットの拡張精度形式を含む7種類の数値表現(ANSI-
IEEE 754-1985標準に準拠)に対応しています。68881は浮動小数点演算に特化し、汎用プロセッサとしての機能には限界があります。例えば、アドレス計算を行う命令は、68881の制御が行われる前にメインCPUによって実行され、CPUと
FPUは同時に動作できるように設計されています。
CPUが68881の命令を受け取ると、それに必要なオペランドを
FPUに渡し、その後
FPUが処理を終えるとCPUは次の命令に進みます。このようにして、高速な浮動小数点演算が実現されます。
MC68882
MC68882(68882)は68881の改良版で、パイプラインの最適化やクロックの速度向上が施されています。命令セットは68881と同じながらも、ピン互換性があり、FSAVE命令による退避情報が大幅に増加しています。このため、例外処理におけるタイミング条件が厳しくなり、FSAVE命令によって退避された情報を扱う際は、特に注意が必要とされます。モトローラは68882が68881よりも40%以上の性能向上を実現すると謳っていましたが、一般的な使用においてその効果はあまり見られなかったようです。
実装例
68881または68882を搭載した
コンピュータとして、
サン・マイクロシステムズの
Sun-3や
AppleのMacintosh II、コモドールの
Amiga 3000などが挙げられます。さらに、68000プロセッサをベースにした周辺機器で68881や68882を利用した製品も存在します。
また、後に登場した
MC68040プロセッサには内蔵
FPUが搭載され、多くの68881命令がハードウェアでサポートされています。ただし、一部命令はソフトウェアでエミュレーションが必要でした。
機能表
| モデル | トランジスタ数 | クロック速度 | 性能 |
|---|
| -- | --- | --- | --- |
| 68881 | 155,000 | 16MHz | 160 KFLOPS |
| | | 20MHz | 192 KFLOPS |
| | | 25MHz | 240 KFLOPS |
| 68882 | 176,000 | 25MHz | 264 KFLOPS |
| | | 33MHz | 352 KFLOPS |
| | | 40MHz | 422 KFLOPS |
| | | 50MHz | 528 KFLOPS |
| 68040 | - | 25MHz | 3.500 MFLOPS |
| | | 33MHz | 4.662 MFLOPS |
| | | 40MHz | 5.600 MFLOPS |
これらのデータはcomp.sys.m68k FAQからの引用です。68882の16MHzおよび20MHzバージョンも製造されましたが、リストには掲載されていません。