後藤弘茂のWeekly海外ニュース

Intel CPU設計の主要技術だったiHDLハードウェア記述言語

設計が難しい高性能CPUコア

 Intelがファウンダリビジネスや外部ファウンダリの活用、IPの提供などを進めて行くためには、1つ大きな課題がある。それは、業界で標準となっているEDAベンダーとの連携だ。現在のファブレス/ファウンダリモデルは、EDAツールのエコシステムの上に成り立っていると言ってもいい。チップベンダーは業界の標準的なEDAツールに慣れている。そのため、Intelはオープン化を進めるためには、EDAエコシステムを引き込む、あるいは飲み込まれる必要がある。

 実はIntelにとって、これが非常に難しい。それは、Intelが長い自社内製のEDAツールの歴史を持ち、その上で積み上げた自社独自の設計フローと手法があるからだ。それこそ、8086開発時から始まる長い積み重ねが、Intelを縛っている。

 Intelの高性能CPUコアと、ARMの論理合成CPUコアのダイレイアウトを比べると、誰でも顕著な違いに気がつく。CPUコア全体が完全に論理合成が可能な完全合成可能(Fully Synthesizable)設計のCPUコアの場合、実際のコアのダイレイアウトは明確な機能ブロックの区分が分かりにくい形状となっている。CPU全体で、ツールが最適な性能&面積の配置を自動的に決定しているからだ。ツールによってCPUコア全体が論理合成され、入り組んだ形にユニットが配置されている。

上はIntelの初代Atomコア、下はARMのCortex-A9のレイアウト例
PDF版はこちら

 それに対して、高性能CPUの場合は、CPUコアの中で各機能ブロックが明確に分かれて見えるレイアウトとなっている。CPUコアの中でユニット毎にブロックを分けておき、さらに、それぞれのブロック内でサブブロックに分け、それぞれ論理合成やカスタム設計といった設計メソドロジを使い分けているためだ。

 こうしたCPUのレイアウトでは、論理合成可能なシンセサイザブルマクロと、ある程度手作業で設計したカスタムマクロやセミカスタムマクロがパッチワーク状に並ぶ。ダイ面積の最適化よりも性能の最適化にフォーカスしたためだ。下はIBMが示したPower7の例で、コアのユニットの内部が、シンセサイザブルな「Random Logic Macros (RLM)」と手作業での設計が入る「Dataflow / Structured Macros」のパッチワークになっていることが分かる。

 IntelもIBMと同様に、こうしたパッチワークのような設計方式を長年採って来た。そのため、ARMなどの完全合成可能なCPUコアの論理合成による設計とは明らかにレイアウトの見かけも異なっている。

 フルコアの論理合成を行なわないことから、Intelは古い手法を採っていると誤解するかも知れないが、実際にはそうではない。Intelは論理合成による設計自動化では先頭ランナーで、設計をHDLに置き換えたのも早かった。しかし、高性能CPU設計では、ぎりぎりまで性能を引き上げるために、カスタム回路設計が必要とされる部分があり、そのために、フルの論理合成に移行できないと判断した。

8087からRTLモデル化を模索し始めた

 Intelの場合、どうやってCPUコアを設計して来たのか、その方法論とCADツールの初期の変化については、詳細な論文が発表されている。「Coping with the Complexity of Microprocessor Design at Intel ? A CAD History」という論文で、IntelのCTOだったPatrick Gelsinger氏や、Intelの有名な設計者のGadi Singer氏などが共同執筆している。この論文を見ると、Intelがかなり初期からRTL化と論理合成に取り組んでいたことが分かる。

現在はVMwareのPatrick Gelsinger氏(CEO, VMware)

 Intelは70年代中盤に8086 CPUの設計時にゲートレベルのロジックシミュレータを内部作成して試した。次に、8086とペアになるコプロセッサ8087の設計時にはRTLモデルを導入したという。その当時は、まだ回路図をベースに設計するのが一般的だった時代に、IntelはRTLに取り組んだ。続く286 CPU設計もRTLを採用し、Algolに似た記述言語「MainSail」を使った。ただし、RTLで記述されたブロック群は、まだ手作業でゲートレベルやトランジスタレベルへと変換されており、自動化した論理合成は行なわれていなかった。また、システムレベルのシミュレータMossimで検証を行なったという。Mossimについては、IntelはDAC(Design Automation Conference) 84カンファレンスで論文「Functional Design Verification by Multi-level Simulation」を発表している。

 Intelはさらに複雑になった386 CPUではRTLを使う設計による自動化に注力することにした。386は275,000トランジスタで、134,000トランジスタだった286の2倍で、自動化をしないと効率的な設計が難しいレベルに来ていた。そのため、Intelは1982年当時に設計自動化研究で先端を走っていたUCバークレーに協力を求めることにした。

 その当時Intelのマイクロプロセッサ部門を率いていたAlbert Yu氏とGelsinger氏がバークレー校を訪れ、新しいツールとメソッドの共同研究をスタートさせたという。386で採用したHDLもMainSailだった。こうした386の設計態勢については、Computer History MuseumのOral History Panelアーカイブにある『Intel 386 Microprocessor Design and Development』で詳しく語られている。

IntelのCPUトランジスタ数の推移
PDF版はこちら

 こうして386では、膨れ上がった回路規模に対応するために、全面的なRTLの採用とマルチレベル論理合成と自動レイアウト、セルライブラリベースの設計手法が採用された。同社が、早期にCPU設計のRTL化を実現した企業だったことが分かる。しかし、論理合成と自動レイアウトは386の制御回路部に採用されたが、データパスやI/Oリングは合成ができなかった。ちなみに、当時としては膨大な規模の386は製造も難しく、最初のシリコンではグッドダイ(良品ダイ)はウェハ当たり0.5個、つまり2枚のウェハに1個しか良品が採れなかったという。

Intel内製のハードウェア記述言語iHDLを開発

 1986年に設計をスタートさせた486(80486)では、Intelはさらに設計ツールを発展させた。486の時に開発されたツールや言語が、以後20年ほどの間、Intelの標準システムとなったという。Intelの社内開発態勢の礎を築いたのが486だった。

 486では、まず、RTLからレイアウトまでの設計変換の自動化(RLS:RTL to Layout Synthesis)を目指した。コントロールロジック部は完全に論理合成で生成し、チップ全体のフロアプランニングなどもツール化した。

 そのために、486設計をスタートさせる前の85年からHDL(Hardware Description Language:ハードウェア記述言語)とCADツールの開発をスタートさせた。これにはIntel社内で、CPU開発拠点だったオレゴンとサンタクララ、CADツールを作るイスラエルの各チームが連携したという。その結果、Intelの内製言語「iHDL(Intel's Hardware Description Language)」が作られた。当時、VerilogやVHDLが登場していたが、Intelは自社のニーズに絞り込んだiHDLを選択したという。iHDLは2005年にVerilogに置き換えられるまでIntel社内で使われた。

 ちなみに、iHDLについては、元Intelのアーキテクト(P6, Willamette)だったRobert P. Colwell氏が書いたIntel CPU開発の内幕本『The Pentium Chronicles: The People, Passion, and Politics Behind Intel's Landmark Chips』でも触れられていた。Colwell氏は、P6(Pentium Pro)開発で、iHDLをより上位のビヘイビアモデルの記述に使おうと試みた話を書いている。iHDLで通常の論理レベルのRTLより上位の、ビヘイビア記述のBehavioral RTL(BRTL)の定義を行ない、複雑なP6のアーキテクチャ開発を容易にしようとした。Colwell氏は、試みた結果、まだまだ課題があることが分かったと記している。ビヘイビアレベルの記述言語とセミ自動化は、現在でもチップ設計の焦点の1つだ。また、Colwell氏は、この当時のIntelのCPU設計は、必要となる設計ツールの開発からスタートしていたと述べている。

IntelのトップアーキテクトだったRobert Colwell氏。最近までDARPAに在籍していた(Director, Microsystems Technology Office, DARPA)。Intelの前はMultiflowにいた

 IntelのRTLからレイアウトまでの合成システムは「MIS (Multi-level Logic Interactive Synthesis System)」と呼ばれた。UCバークレーが公開した合成システムと同名なのは、バークレーの協力を得て開発したからだ。Intelイスラエルのハイファのチームがソフトウェア部分を担当した。フルチップのフロアプランニングでは「ChPPR」と呼ばれるツールを開発、これも2005年まで使われた。また、IntelとUCバークレーの共同研究は、学術での論理合成の研究を大きく発展させたという。

論理合成と手設計がパッチワークとなったP5

 Intelは486で確立したHDLベースの設計システムを、Pentium(P5)、Pentium Pro(P6)へも継承させた。平行してIntelとUCバークレーの外ではEDA産業が急発達を始めており、Intelも外部ツールを一部導入し始める。しかし、iHDLとChPPR、それに付帯するシステムは2005年まで使い続けられた。

 Pentiumではトランジスタ数は310万となり、486の120万から激増した。Pentium(P5)まではIntelはプロセスの微細化に加えてCPUのダイサイズの大型化によってCPUの規模を大きくている。Pentium(P5)のダイサイズは0.8μm(800nm)で294平方mmと、その当時としては巨大チップに膨れ上がった。

CPUのダイサイズとアーキテクチャの遷移
PDF版はこちら
トランジスタ数の違いをCPUの大きさで示したチャート
PDF版はこちら

 当時としては膨大なトランジスタ予算を使い、Intelは486より格段に複雑なマイクロアーキテクチャをPentium(P5)で組み立てる。実行パイプラインを並列化したスーパースカラ設計とし、複雑な可変長のx86命令を2命令同時デコードできるようにした。さらに、Pentium MMX(P55C)では、ショートベクタのMMX命令と実行ユニットを実装した。

386/486/Pentiumのアーキテクチャ比較
PDF版はこちら
PentiumとMMX Pentiumのアーキテクチャ比較
PDF版はこちら

 Pentium(P5)では、マイクロアーキテクチャも格段に複雑化したため、Intelは設計自動化をさらに進めた。ただし、RTLからの論理合成は制御ロジックに全般的に使われたものの、より複雑なデータパス部は継続して手作業による設計となったという。高速化が求められたP5では、データパス設計で高い密度と性能を達成するためには手設計が必要だったからだという。データパス(またはデータフロー)と呼ばれるファンクションタイプには、下のIBMのスライドが示すようなブロックが含まれる。

 各ブロック毎にデータパスを最適化して遅延を最小に抑えなければ、ぎりぎりの高クロック化が実現できない。そのため、伝統的なデータパス設計では、セルを仮配置して大まかな位置を決め、その配置でのインターコネクト長を見積もり、タイミングや面積を分析する。その分析を元に配置を微調整して最適化を行なうことを繰り返していた。

 Pentiumのダイを見ると、浮動小数点演算(Floating Point)ユニットと整数演算(Integer Unit)ユニットの中がそれぞれ2分割されていることが分かる。IntelのCADツールの論文によると、左上の浮動小数点演算ユニットでは右が論理合成された制御部で左が手設計のデータパス部となっている。中央の整数演算ユニットでは逆に左が論理合成の制御部、右が手設計のデータバス部だ。

初代Pentiumのダイ
PDF版はこちら

 こうしたパッチワークのような設計メソッドは、その後も継続される。ちなみに、現在でもデータパス部の論理合成の品質は大きな課題の1つで、そのために、Intelに限らず高性能を必要とするロジックでは、データパス部をカスタム設計する場合が多い。モバイル向けのアプリケーションプロセッサですら、手設計を行なうメーカーがある。下はカスタム設計と自動設計の違いを示すIBMのスライドだ。

左がカスタム設計で右が自動設計

IntelのCAD進化と平行するIntel CPUの進化

 IntelのCADの進化は、同時に当時の主流のコンピュータシステムの性能向上とも連携している。Intelは386開発時にはDEC 20やIBM370-168(のちに3081)を主に使っていた。OSはUNIXに傾倒していたPatrick Gelsinger氏(現VMware, CEO)の指揮でUNIXへと移って行ったとされている。

 386まではIntel CPUは他社のプロセッサで設計されていた。しかし、486以降は、Intel自身のCPUの性能と機能が伸びたために、自社CPUマシンに移行した。486は386ベースのUNIXワークステーションで設計し、Pentiumは486マシンで設計したという。Intelはより高性能なCPUを開発する度に、その演算性能を活かして開発環境を進化させ、より高性能なCPUを開発していた。自身のCPU開発部隊が、自社CPUの最上の顧客だったわけだ。ちなみに、Intelの外でも、CADは一部は専用システムだったのが、汎用のUNIXハードウェアの上に移行して行った。

(後藤 弘茂 (Hiroshige Goto) E-mail