Hツリーを使うクロック分配
VCOで作られる元のクロックからの時間のずれを最小にしてチップ全体に配るために用いられるのが図2.8に示すH-Treeという構造である。
図2.8で太線で書いた部分はメタル配線であり、△は各段のEffortを4程度にするように設計されたインバータのチェインからなるバッファである。
中央の赤色のH型の配線の横棒の中心にバッファで増幅されたVCOクロックの信号が供給されている。この時、(1)から(4)と書かれたHの縦棒の端に接続されたバッファの入力信号は、VCOクロックからの配線や負荷容量が設計上は同一であるので、製造ばらつきが無ければ同タイミングとなる。
実際のLSIでは配線や(1)から(4)のゲートのトランジスタサイズの製造バラつきがあり、完全に同一タイミングとはならないが、(1)から(4)のバッファの入力のタイミング誤差はかなり小さいものとなる。
そして(1)から(4)のバッファで駆動される青線で書かれた第二段のHの4つの端点の負荷容量が同じであれば、これらの点のクロック信号のタイミングも小さな誤差で一致する。この図では2段階のH-Treeであるが、大きなチップの場合は更にH-Treeの段数を増やしてやれば良い。また、Hの横棒と縦棒の長さは同じである必要はなく、長方形のチップでも多段のH-Treeで覆うことができる。
32nmテクノロジを使うとプロセサコア1個の面積は10~20平方mm程度である。この領域を覆うH-Treeの第1段のHの各辺は2mm程度あれば良い。第1段のHの横棒を表2.1に示したIntelの32nmプロセスのメタル9配線で作ると、片側の抵抗は0.46Ω、配線容量は0.2pF程度となる。そして、Hの縦棒をメタル8で作ると、端までの抵抗は139Ω、配線容量は0.2pF程度となる。ということで、メタル8配線の部分のRC/3は10ps程度であり、メタル9配線のRCは十分小さい。
しかし、FastHenry2というインダクタンスを計算するプログラムで計算してみると、メタル9の横方向の配線は、1GHzのインピーダンスZは1.56+2.0jΩ、10GHzでは6.04+6.77jΩとなり、抵抗分より若干インダクタンス分が多い。一方、メタル8の配線は1GHzでは123.5+5.42j、10GHzにおいても137+37jΩである。なお、ここではこれらのクロック配線の両側にシールド線を置き、3μm下に0.3μm厚のグランド層があるという条件で配線のインピーダンスを計算している。
1GHzのインピーダンスでメタル配線のインダクタンスを計算すると、Z=ωLから、メタル9のインダクタンスは318pH、メタル8のインダクタンスは863pHとなる。このインダクタンスを含んだ回路モデルを作り、LTSpiceで解析したのが次の波形である。
振幅1Vの台形の波形が入力であるが、インダクタンスの影響でHの横棒の端の青色の波形は0.4Vもオーバーシュートしている。そして、Hの端点の緑の波形オーバーシュートは0.4Vを若干超えている。このようにLSI内部の1mmという短い配線であるが、インダクタンスは大きな影響を与えるので注意が必要である。
メタル9の部分の抵抗を25Ωまで増やすと図2.10の波形となり、緑色のHの端点の波形はほぼ1Vの振幅となる。
つまり、クロックのHツリーにIntelのメタル9配線を使うのは抵抗が小さすぎ、適当な抵抗を持つメタル8やメタル7の幅広の配線を使う方が良い。
初段のHの全長は6mmなので、どの層の配線を使うかとは殆ど関係なく、全体の容量は1.2pFとなり、バッファの入力容量を1fFとするとバッファのElectrical Effortは120万倍となる。これは4.05のEffortのインバータ10段で実現でき、基本単位の遅延時間を2.5psとするとバッファの遅延は126ps程度である。なお、Intelの32nmプロセスの遅延時間は公表されておらず、この2.5psの基本単位の遅延時間は筆者の推定値である。