74シリーズにFPUがあるという都市伝説を聞いたことがあるだろうか。 74シリーズはロジックICとして広く知られていて、例えば7404はNOT、74244はトライステートのバッファ、といった感じでデジタル回路を作る時に歴史的には避けて通れなかった。 私がこの伝説に触れたのは学部生の時で、その時は「そういう事もあるのかな?」くらいの認識だったのだが、これがその実物、SN74ACT8847である。

厳密には、74シリーズの一員というより、SN74ACT8800 ファミリーという風に扱われていたようで、この「ファミリー」は1 μmのゲート長で製造され、以下のメンバーがいた [1]:
- SN74ACT8818 16-bit microsequencer
- SN74ACT8832 32-bit registered ALU
- SN74ACT8836 32- × 32-bit parallel multiplier
- SN74ACT8837 64-bit floating point processor
- SN74ACT8841 Digital crossbar switch
- SN74ACT8847 64-bit floating point/integer processor
シリーズの構成としては、AMD の2900 シリーズと同じように、プロセッサを作るための汎用部品として構成要素を切り出してチップとしている製品だったのだ。 そんなシリーズの中でも、このSN74ACT8847 は人気があるチップで、Sun Microsystemsの初期のSPARCを使うワークステーション(Sun-4/[1234]xx, SPARCstation 1のFPU としてWeitek 1164/1165 と並んで採用されていた。 ただ私はその構成を見たことはなくて、例えば富士通のAP1000 はSPARC IU とWeitek 3170の組み合わせなのでこのチップは載っていないし、ほとんどのSPARCstation 1もWeitek 3170 だという情報がある [docs.oracle.com]。 このチップはSun の言葉遣いとしてはTI 8847 と呼ぶようだ。
冒頭の写真に写っているチップはSun から取り出したものではなく、投棄された測定器を分解してみたところ基板に載っていたものだ。 この測定器は制御部分はAm2900系で構成されていて、この辺のチップがいかに柔軟に組み合わせられるかを物語っている。
SN74ACT8847 の機能面では、なんといってもIEEE754形式の単精度と倍精度の浮動小数点数を扱える点を特筆すべきだろう。 というのも、このチップが出て来るちょっと前まではチップとしてもAm9511 などのIEEE754 非互換のFPU がたくさんあったわけだし、システムとしてもVAX やIBM のメインフレームなどIEEE754 とは異なる表現を使う計算機は普通に存在していた(IBM S/390 は1998年発表のG5より前はIEEE754 をハードウェアでは実装せずにHFP表現だったわけだが)。 IEEE754 は精度面ではかなり気を遣って設計されているため、真面目に実装すると性能面ではどちらかといえば不利といえる。 この時点ではIntel 8087 はかなりポピュラーな存在ではあったが、内部的には80ビットの表現で処理する点で素直な実装とはいえないだろう。 SN74ACT8847では乗算器は入力に非正規化数 (denormalized number; denorm)を入れられないとのことで、仕様全てを実装しているというわけではない。 ALUはdenorm を扱えて、更にFAST modeを使うとdenorm は0 として扱えるということで親切な気遣いを感じる。
命令は加算、減算、乗除算、平方根、比較と整数との変換を実行できて、除算は11サイクル、平方根は14サイクルだ。 中には乗算器とALU が一つずつ並んでいる。 入力2本、出力1本がそれぞれ32-bitのバスで外に引き出されている形式で、内部にシーケンサを持っていないので、超越関数は命令としては存在せず、これを計算するための命令列はデータシートに記載されている。 これを自前のシーケンサに組み込んで流してくださいということだろう。
並んでいるALU と乗算器はchained mode を使うと同時に駆動できて、うまく制御すれば積和算 (fused multiply-add)を実現できそう。 このときサイクルあたり2 FLOPS ということになり、40 MHz で動かしたら80 MFLOPSだ。 悪くない。

ということで、噂の74シリーズのFPUは実在した。 巨大だしセラミックパッケージなのでしばしば見る74シリーズと雰囲気は大きく異なるが、FPU としては自前の制御回路と組み合わせて使いやすくできていそうだ。
参考文献
- SN74ACT8800 family 32-bit cmos processor building blocks data manual. Texas Instruments Incorporated. Second revision. June 1989. [uni-stuttgart.de]