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

NehalemとBonnellからガラリと変わったIntelのCPU設計環境

NehalemとBonnellの開発からSystemVerilogへとHDLを切り替え

 Intelは長期間の模索の末に、486からPentium(P5)で、社内の設計体制を整えた。独自のHDL(Hardware Description Language:ハードウェア記述言語)としてiHDL(Intel's Hardware Description Language)を開発し、iHDLをベースとした独自の内製開発環境を構築した。

 Pentium以降もIntelは設計と検証の自動化の道を進み、いくつもの論文を発表している。例えば、1999年にはIntelの技術雑誌「Intel Technology Journal Q1'99」の「Challenges of CAD Development for Datapath Design」で、データパス設計のフローの半自動化の説明を行なっている。設計の方法論において、自動的な合成とカスタム設計をフレキシブルに混合させる手法だ。自動化の研究やカスタム設計との混合の方法を模索していたことが分かる。

 また、Intelは論理合成とカスタム設計を組み合わせた設計態勢を作るが、両手法での結果を合わせた形で検証できるツールを開発することで、CPU開発の信頼性を高め、設計時間を短縮できるようにした。「SALT and PEPPER」という等価性の検証ツールを開発した。検証自動化の必要性が高まった背景には、有名な「Pentium FDIV bug」でのバグ事件もあったという。

 Intelは20年間に渡り自社内製のHDLであるiHDLを使い続けた。「Verilog」と「VHDL」が使われている外部の世界とは隔絶された独自の設計環境にあった。しかし、その方法には限界が近付きつつあった。業界標準的な環境の導入やより高度な自動化や解析が必要になりつつあった。そのため、Intelは2005年に業界標準のVerilogへとHDLを切り替える。しかし、単にiHDLからVerilogへとスイッチしたのではなく、IntelはVerilog自体の拡張に参画した。

SystemVerilogの策定自体に参加

 IntelはVerilogに検証言語を統合してシステムレベルの開発を容易にしたSystemVerilogの策定に参加。SystemVerilogにIntelの提案を織り込んで完成させた。そのため、SystemVerilogの策定者にはIntel関係者が名前を連ねる。

 Intelでは当時、膨れ上がるCPUコア設計の検証が大きな負担となっており、検証作業の自動化をさまざまなレベルで進めていた。SystemVerilogへの移行は、そのアプローチの延長線上にある。検証の比率が高まるのはLSI設計全般のトレンドで、チップ規模が大きくなるに連れて、検証の比重がどんどん大きくなっている。

iHDLによるCPU設計のPentium 4のタイムライン
SystemVerilogの策定作業がNehalemの設計開始に合わせて加速されていることが分かる

 Intelは、SystemVerilogの拡張では急がせた形跡がある。これは、2005年からの「Nehalem」(Core i)の開発への採用に急ぐ必要があったためと見られる。また、Intelは続いて「Bonnell」(Atom)の開発にもSystemVerilogを採用した。これを契機に、Intelのエンジニア求人にVerilog経験を求めるものが増えていったと言う。

 なぜIntelがSystemVerilogを採用したのかについては、2009年にDACに併設して行なわれた「Design Automation Summer School」でIntelが説明したプレゼンテーションがある。Intelが、自社のニーズに合った包括的なHDLを得る方法はSystemVerilogの策定しかないと判断したことが分かる。Intel Technology Journalでは、SystemVerilogの導入の結果、Nehalem開発ではRTLのコード量を従来の半分に減らすこともできたと説明されている。

IntelによるSystemVerilogへの移行についてのスライド

Intel CPUの設計環境の変遷とCPU自体の変化

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

 こうしてIntelの設計環境の変化見ると、IntelのCPUは、手設計が主体だった初期の8086までが第1段階で、設計ツールの模索をしていた486までが第2段階、内製ツールを確立したPentium以降が第3段階、そして標準HDLへと切り替えたNehalem以降が第4段階と切り分けることができる。

 面白いのは、これが、IntelがまだマイクロコントローラとしてCPUを設計していた時期、コンピューティング用に本格的にCPUを開発し始めた時期、RISCに対抗してCPU性能を高めた時期、CPUに周辺機能を統合し始めた時期にそれぞれ合致することだ。

 それぞれの時期に、Intelは設計の困難に直面しており、そのために改革を試みた。例えば、SystemVerilogの導入の直前の2004年に、元IntelのアーキテクトだったRobert Colwell氏が米Stanford大学で講演を行なっている。「Things CPU Architects Need To Think About」と題したその講演で、同氏はIA-32 CPUコアの設計を「ゾウを急坂に押し上げるようなもの(Pushing Elephants up Steep Hills)」と形容。複雑化するCPU設計によって、アーキテクチャ上の脆弱性が増していると説明していた。

 2004年時点では、Colwell氏は、CPU設計では正確な性能分析ができる段階になって問題が発見されても、設計が進みすぎていて本質的な修正ができないと指摘。ボロ隠しのような小手先の修正を加えることになり、その結果、複雑さの上に複雑さを重ねて別な問題を招いてしまうことがあると語った。例えば、1つの問題箇所を直すと、2つの問題が発生するようなことになると指摘した。当時のIntelの設計&検証システムが限界に近づいていたことが分かる。

Intel CPUコアをFPGAシンセサイザブルにする試み

 NehalemからSystemVerilogへと切り替えたIntelは、次にCPUコア全体のRTLをFPGAをターゲットに完全に論理合成する試みを行なう。FPGAに埋め込むハードIPコアへの論理合成ではなく、FPGAアレイ上でのシンセサイザブルソフトIPコアへの論理合成だ。SystemVerilogで書いたBonnell(初代Atom)コアのRTLを、FPGAでエミュレートして走らせた。

 Intelの当初の目標は、BonnellのRTLソースコードに一切手を加えることなくFPGAに落とし込むことだった。しかし、これはうまく行かず、RTLをある程度書き換えることになる。Intelはこの経緯をFPGA '09(International Symposium on Field-Programmable Gate Arrays)カンファレンスで「Intel Atom Processor Core Made FPGA-Synthesizable」として発表している。

初代Atomのダイ(PDF版はこちら)

 うまく行かなかった理由の1つは、2005年時点では、まだEDAツール側のSystemVerilogサポートが完全ではなく、またターゲットとしたXilinxのバックエンドフローとの統合も十分ではなかったためだという。しかし、それだけでなく、ラッチからフリップフロップへの書き換えなど、FPGAならではの作業も含めて、さまざまな作業が生じたことが分かる。

 Intelはさらにこの研究を発展させ、次はCore i(Nehalem:ネハーレン)コアをFPGAシンセサイザブルにする。この研究もFPGA '10で発表(「Intel Nehalem Processor Core Made FPGA Synthesizable」)されている。それによると、IntelはRTLコードを5%修正するだけで、既存のEDAツールでFPGAに論理合成することができたという。

Nehalemのダイ(PDF版はこちら)

SystemVerilog導入を機にオープン化を試みるIntel

 このように、Intelは、SystemVerilogで書いた最初のCPUであるBonnellとNehalemを両方ともFPGAシンセサイザブル化した。業界標準のVerilog系HDLへの移行で新しく開けた可能性を試していることが分かる。ちなみに、これらFPGAへの落とし込みの試みでは、Synopsysのツールを使っている。

 Intelはそれ以前に、Pentium系のコア(P54C)でFPGAシンセサイザブル版を実現しており、これも「An FPGA Based Pentium in a Complete Desktop System」としてFPGA '07で発表している。Pentium(P54C)は、その設計が、かなり早期にVHDLやVerilogに移植されており、Intelのフル論理合成可能コアとして、さまざまな研究チップに使われてきた。論文でFPGA化されたのはVHDLのバージョンで、標準のHDLで完全合成可能になっていたため、FPGAシンセサイザブルにすることが相対的に容易だったようだ。

Intelの48コアリサーチチップに搭載されているP54Cコア

 IntelはP54Cから出発して、より複雑なBonnell、そしてフルのPC向けCPUコアであるNehalemと、FPGAシンセサイザブル化を進めてきた。もちろん、これらの研究はFPGAでのハードウェアエミュレータ上のコアであるため、オリジナルのCPUコアの性能にはほど遠い。CPUコアを通常のロジックプロセス向けに論理合成して高性能を維持するためには、FPGAへの論理合成とは全く別な最適化が必要となる。しかし、IntelがSystemVerilogへの移行を機に、自社のCPUコアをより開かれたIPにしようと、さまざまな試みを行なっていることは確かだ。

今後のIntelにとって重要となるEDAベンダーとの関係

 Intelは長年のEDAツールの自社内製の歴史を持ち、独自の設計フロー、独自の文化を持つ。EDA業界のエコシステムとともに成長してきたファブレスのチップメーカーやファウンダリ専業メーカーとは大きく異なっている。そのため、外部のEDAベンダーのエコシステムに馴染みにくいと言われて来た。

 実際、IntelとEDAツールベンダーの関係は、あまり密接ではなかった。これは、TSMCやGLOBALFOUNDRIESのような大手ファウンドリや、ARMのような大手IPベンダーが、ことある毎にEDAベンダーとの関係を強調することとは対照的だ。EDAベンダーとの協力態勢作りは、Intelにとっての大きな課題となっていた。

 Intelは2005年に内製のiHDLから標準的なVerilogベースのSystemVerilogへとHDLを転換したことで、EDAベンダーの標準的なツールを使うことも容易となった。事実、IntelはVerilog転換の後に、3大EDAベンダーの一角Synopsysと提携。SynopsysをメインのEDAサプライヤーにすると発表した。

 しかし、その後はそうした目立つ発表は最近まであまりなく、逆に聞こえてくるのはIntelはEDAベンダーにとってやりにくい相手という業界噂話だった。例えば、Intelに協力したら、Intelの特殊なニーズためにつぶしの効かない専用ツールを開発させられたといった話だ。しかし、IntelとEDAツールベンダーの関係も変わりつつあると言われる。

 実際、Intelがファウンダリサービスの発表をした際には、大手ツールベンダーがサポートで名を連ねた。EDAベンダーが彼らの標準ツールをIntelのプロセスに合わせてファウンダリサービス向けに提供することと、Intelの社内設計フローにEDAベンダーのツールを融合させることは話が違うが、それでもこのサポートの意味は大きい。IntelもEDAベンダーとの協力が必要なことは認識しており、その方向へと歩んでいることが分かる。

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