本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。
論理回路の遅延時間とクロック周波数
各論理回路の入力容量が一定となるようにゲートを設計すると、ゲートの遅延時間は負荷となるゲートの個数(あるいは大きさ)が何個であるかという電気的な増幅率(Electrical Effort)とLogical Effortの積(Total Effort)で決まるというのがLogical Effortの理論である。ゲートを多段に接続する場合、各段のTotal Effortを小さくして全体のゲート段数を増やしても、各段のTotal Effortを大きくして全体のゲート段数を減らしても、トータルの遅延時間は大きくなり、各段のTotal Effortを4程度とすると遅延時間が最小になることが知られている。
しかし、各段のTotal Effortをこれよりも若干大きめの5~8程度に取ることにより、遅延時間は若干増加するが、消費電力は遅延時間の増加分より大きく低減する。このため、低電力を重視する場合には4よりも多少大きめのTotal Effortとなるように設計する方が良い。
2入力NANDゲートのLogical Effortは4/3であるので、単位入力容量のゲートを3個負荷として接続するとTotal Effortは、(4/3)*3=4である。また、インバータに単位入力容量のゲートを4個負荷に接続した場合もTotal Effortは1*4=4である。後者はFan Out 4(FO4と略称される)インバータとも呼ばれ、半導体プロセスのゲート遅延時間を表わす代表値として使われる。そして、プロセサのマイクロアーキテクチャを議論する場合には、パイプライン1段あたりFO4インバータ何段分の遅延時間で構成するかというように使われる。
上記の計算は配線の寄生容量を含んでいないが、配線容量は、ゲートの単位入力容量を基準として、入力、何個分というように換算される。配線の寄生容量は微細化のレベルにはあまり影響されず、1mmあたり100~200fF (Femto Farad)程度となるのが普通である。トランジスタのゲート容量は、微細化によりゲート絶縁膜が薄くなるが、一方、ゲートポリシリコンの幅も減少するので、微細化のレベルに拘わらず、チャネル幅1umあたり1fF程度である。仮に、W=0.8μmのP-TrとW=0.4μmのN-Trで構成されるインバータを基準とすると、単位入力容量は1.2fFとなり、6~12μmの長さの配線が1ゲート入力と等価として計算される。
スーパースカラプロセサでは命令のフェッチからデコード、実行、結果の格納までのトータルの論理はFO4インバータ換算で250~300段程度であり、パイプライン1段あたりで複雑な論理を実行して25FO4程度とすると10~12段程度のパイプライン構成になる。65nmテクノロジのFO4インバータの遅延(=FO3 2NAND)は、ITRSロードマップでは16psであり、25FO4の場合は400psとなり、単純計算ではクロックは2.5GHzとなる。一方、最高クロックを追求するPentium 4やCellプロセサの設計では各パイプステージを12~14FO4で構成している。この設計では、単純計算では200ps程度の遅延であり5GHzのクロックとなる。但し、実際にはパイプラインの間にフリップフロップを入れる必要があり、このフリップフロップ回路の遅延時間とクロック分配の時間ずれ(Clock Skew)として3FO4程度が加わるので、前者は2.2~2.3GHz、後者は4.2GHz程度となる。非常に粗い見積もりであるが、このクロック周波数は、65nmプロセスで作られる次世代のRISCプロセサとクロック重視のPentium 4やCellなどのプロセサのクロック周波数としてほぼ妥当な値である。
ここまでは負荷容量の充放電による遅延時間だけを考慮してきたが、微細化に伴い配線のRC遅延が大きな遅延時間を占めるようになってきている。
この図に示すように、送端のゲートの出力では鋭い立ち上がりの波形であっても、配線の抵抗と寄生容量からなるRC線路を伝送していく内に、波形が鈍ってしまう。抵抗が無い場合は、青色で示したような波形であり、抵抗分があることにより大きな遅延が発生する。配線全体の抵抗をR、寄生容量をCとすると、この遅延は、おおよそ、RC/3となる。RとCはともに配線の長さに比例するので、RC線路の遅延は配線長の2乗に比例する。
LSI内部の配線のRC遅延の値は、ITRSロードマップの65nm世代の半導体プロセスでは、長さ1mmの銅配線の場合、最下層の第1層(136nmピッチ)では767ps、中間層(140nmピッチ)では682ps、上層の幅が広い配線(210nmピッチ)では209psとなっている。
上層の幅の広い配線はRC遅延が小さく、同一の配線遅延を許容するとより長い距離の信号伝送を行うことが出来る。しかし、使用できる配線本数は線幅に逆比例して減少するので、全ての信号を上層で配線することは出来ず、遅延時間の厳しいところに限定して使用するのが一般的である。
しかし、2GHzのクロックの場合、1サイクルの時間は500psであり、上層の配線を使っても1mmの配線のRC遅延は1サイクルの40%以上を占め、2mmになると1サイクルでも伝送できない。そこで配線遅延を減らすためには、次に示すように、配線を分割して、間にリピータ(インバータやバッファなど)を入れるという手法が用いられる。