クロックグリッド
H-Treeを使うと製造バラつきが無い場合にはクロックSkewは生じないが、現実には製造バラつきでクロックタイミングがばらついてしまう。図2.16に示すように、上側の中央付近では、2段目以降は第1段のHの右と左側からのクロックが全く別のH-Treeを経由して供給されるので2点間のクロックSkewが大きくなる。
しかし、チップ上では物理的には隣接した位置であり、送端のFFのクロックは右側のツリー、受端のFFのクロックは左側のツリーから供給される、あるいはその逆というケースが発生する。共通のポイントからの遅延時間が大きいので、SQRT(Σti×ti)が大きく、この2点間のクロックSkewは同一の第3段のH-Treeから供給される各点間のSkewに比べて大きくなる。
この問題を改善するために考案されたのがクロックグリッドである。図2.17に示すように、H-Treeの端点を赤線で書いた太いメタル配線で格子状に接続してしまえば、強引であるが、物理的に近接したFF間のクロックSkewは小さくなる。クロックSkewが小さくなれば、結果としてクロック周波数が改善できる。
ということで、1990年代の高性能、高クロックプロセサでは、H-Treeとクロックグリッドを使うプロセサが多く作られた。
DLLを使うクロック分配
クロックグリッドは、小さなSkewで多数のFFにクロックを供給することができるのであるが、シールドされたクロックグリッドの配線容量はかなり大きく、これを毎サイクル充放電する電力はチップの消費電力の中では無視出来ない比率を占めている。
このため、クロックグリッドのように大量の配線を必要としないクロック分配法が考案された。クロック生成系では、Phase DetectorとVCOで基準クロックと同じ周波数のクロック信号を作り出していた。これと似通った回路で、異なる場所のクロック信号の位相を比較しタイミングのずれに比例した電圧を作り、これを積分して制御信号を作る。
そして、入力電圧で遅延時間が可変できるバッファ回路(可変遅延バッファ、Variable Delay Line:VDLと呼ぶ場合もある)にこの制御信号を供給し、早い方の信号を遅延させると、両方の信号の位相を合わせる(スイッチするタイミングを一致させる)ことができる。この回路をDelay Locked Loopと言う。なお、可変遅延バッファとペアになる基準側のバッファの遅延時間は、可変範囲の中央あたりの遅延時間をもつように設計しておく。
図2.18に示すように、左右のH-Treeの端点のクロックの遅延時間を同じにするために、これらの端点から同じサイズのバッファと同じ配線長で、隣接配線の影響を減らしたシールド付の配線を使って位相比較回路に接続する。この位相比較回路の出力で可変遅延バッファの遅延時間を制御すると、比較した2点間のクロックSkewを無くすことができる。それ以外の点の間のSkewは無くならないが、この2点間のクロックタイミングを合わせることで、他の点の間のSkewも全体的には減少する。
このように、DLLを使うとクロックグリッドという配線容量の大きな機構を使わなくてもH-Tree の端点のクロック信号のSkewを減少させることができる。
また、32nmプロセスでクロック分配を行う範囲が数mm角程度のプロセサコア1個分であれば、H-Treeでも配線幅を最も細いものの数倍に増やせばそこそこのSkewでクロックを分配することができたが、20mm角のチップ全体となると初段や2段目のH-Treeは配線長が長くなり、それに比例して配線の抵抗と容量が増加してしまい、クロック分配に適した短い立上り、立下り時間のH-Treeを作ることが困難になってしまう。このような場合には、各領域ではH-Treeとグリッドなどを用い、領域間はDLLでタイミングを揃えるという方法が、消費電力の点で経済的である。
2005年のISSCCで発表された論文では、2コアのItaniumチップのクロック分配系は、このようなDLLを使って多数の場所のクロックタイミングを合わせるクロック系が使われていると述べられている。このItaniumのクロック系のように、基準点Aに対して、B、C、D、Eの4点のタイミングを合わせ、さらに、B~E点を基準にしてさらに多くの点のクロックタイミングを合わせていけば、多くの点のクロックのタイミングを合わせることができるようになる。