JA EN
体系サプライチェーン
·★ 会員·14分で読めます

EDAツールを1から — チップは「ソフトウェアで書かれている」

最先端チップの数百億個のトランジスタは、誰も手で並べていない。設計者が書くのは図形ではなく文章(RTL)で、それを論理合成・配置配線・検証というソフトウェアが物理的な図形へコンパイルする。この流れと、SynopsysとCadenceがなぜ抜けられない存在になったのかを前提知識ゼロから解説する。

対象textタスクhardware

チップは「描く」ものではなく「書く」もの

半導体チップと聞くと、顕微鏡でしか見えない極細の配線を、設計者が一本ずつ引いている絵を想像するかもしれません。1970年代まではそれに近いことをしていました。方眼紙に多角形を描き、その図面をそのまま写真原版にしていたのです。

いまは違います。最先端のチップに載るトランジスタは数百億個の規模で、仮に1個を1秒で置けたとしても一人では数百年かかります。だから設計者は、図形ではなく文章を書きます。「クロックの立ち上がりで、a と b を足した値をレジスタ c に入れる」——こう書いた文章を、ソフトウェアが論理回路に翻訳し、既製の部品に割り当て、シリコン上の座標に並べ、配線でつなぎ、製造用の図形データとして吐き出す。この一連のソフトウェア群を EDA(Electronic Design Automation、電子設計自動化)と呼びます。

つまり現代のチップは、ソフトウェアで書かれ、ソフトウェアでコンパイルされています。プログラマがC言語を書いて機械語を直接書かないのと同じ構図です。違うのは、出力先が命令列ではなくシリコンに焼き付ける物理的な図形であり、一度焼けばパッチで直せないという点です。

なぜ手作業では不可能なのか

チップ設計の中心にあるのは配置問題です。n 個の部品を、チップ上の n 個の置き場所に割り当てる。素朴に数えれば n!n! 通りで、部品が20個でも約 2.4×10182.4 \times 10^{18} 通り、1秒あたり10億通り調べても数十年かかります。実際の部品数は数百万から数億のオーダーです。配線も同じで、「与えられた点の集合を最短でつなぐ」問題は、計算量の理論では厳密に解くのが現実的でない部類に入ります(NP完全性とは何かで扱う、指数的に膨れ上がる問題群の一種です)。

FIG 1部品数 n を増やすと、しらみつぶしに必要な手数だけが桁違いに跳ね上がる。EDAツールが「最適解」ではなく「十分に良い解」を高速に出す設計になっている理由がここにある

だからEDAツールは、最適解を探すことを最初から諦めています。焼きなまし、勾配降下、分割統治といった近似手法を積み重ね、人間には手が出ない規模の問題を実用的な時間でまあまあの品質に収める。EDAの品質差とはこの「まあまあ」の程度の差であり、それがそのままチップの動作周波数と消費電力の差になります。

全体像: RTLからGDSIIまで

設計は、抽象度を1段ずつ下げていく翻訳の連鎖です。各段が次へ渡す成果物の名前まで覚えると、業界の会話が急に読めるようになります。

  1. RTL記述 — Verilog / VHDL / SystemVerilog で振る舞いを書く
  2. 論理合成 — RTLを、既製部品(標準セル)の接続表=ネットリストに変換する
  3. 配置配線(P&R) — 各セルにチップ上の座標を与え、金属配線でつなぐ
  4. 検証・サインオフ — 論理は正しいか、タイミングは間に合うか、製造ルールを守っているか
  5. テープアウト — 最終的な図形データ(GDSII / OASIS)を工場に渡し、フォトマスクに焼く

このうち4だけは工程ではなく、1〜3と並行して最初から最後まで走り続けます。人手と計算機を最も食うのも、実はここです。

第1段: RTL — 回路を「振る舞い」で書く

RTL は Register Transfer Level の略で、「どのレジスタからどのレジスタへ、どんな演算を通して値が移るか」の粒度で回路を書く、という意味です。

module accumulator (
  input  logic        clk, rst_n,
  input  logic [15:0] din,
  output logic [15:0] sum
);
  always_ff @(posedge clk or negedge rst_n) begin
    if (!rst_n) sum <= 16'd0;
    else        sum <= sum + din;   // クロックごとに足し込む
  end
endmodule

ソフトウェアのコードに見えますが、違いが2つあります。1つはすべてが同時に起きること。always_ff ブロックが100個あれば、上から順ではなくクロックの立ち上がりで一斉に動き、行の順序は実行順序を意味しません。もう1つは書けるものと合成できるものが違うことで、シミュレータは受け付けるのに回路に落とせない書き方があり、その境界を「合成可能サブセット」と呼びます。

第2段: 論理合成 — 文章を部品表に変える

合成ツールは、RTLという文章を標準セルライブラリの部品の組み合わせに置き換えます。標準セルとは、ファウンドリが「このプロセスではこの部品が使えます」と提供する既製の論理素子で、2入力NANDやフリップフロップなど数百〜千種類に、面積・遅延・消費電力の実測値が Liberty(.lib) ファイルとして付いています。合成は要するに、命令セットに合わせたコード生成です。

設計者が与えるのが制約で、「クロックは1.2GHzで回す」といった条件を SDC(Synopsys Design Constraints)形式で書きます。ツールは厳しい経路に駆動力の大きいセルを、緩い経路に小さく低電力なセルを割り当てる。制約を書き忘れた経路は最適化されません——合成で最も多い事故で、静かに性能が出ないという形で現れます。

チップが正しく動く条件は、突き詰めれば1つです。クロックが次に立ち上がるまでに、信号が次のレジスタへ届いて落ち着いていること。この余裕をスラック(slack)と呼びます。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

コメント

コメントにはログインが必要です