クロックを使わない非同期のマイクロプロセサというものも存在するが例外的で、クロックに同期して論理回路を動作させるプロセサが一般的である。

クロック同期方式のプロセサでは、クロックの刻み(サイクル)で、命令のデコードや演算の実行などの各ステップを実行するパイプライン処理が行われる。簡単なプロセサでは命令のフェッチから実行の完了まで数ステージのパイプラインで処理するプロセサもあるが、最近の高性能なプロセサではスーパスカラやアウトオブオーダ処理などの複雑な処理を行うためにより処理ステップを細分化し、命令のフェッチから完了までには10~20ステージを必要としている。

時計(クロック)は時刻があっていることが重要

パイプライン処理を行うと、パイプラインのステージ間のデータやコントロール情報の受け渡しにはレジスタが必要になり、64ビットのオペランド2個と制御情報を含めると、このレジスタは200ビット程度は必要となる。IntelのSandy Bridgeから採用が始まったAVX命令は、256ビット長のオペランドを使う。このため、AVXの演算系のパイプラインではパイプステージ間に512ビット+αのレジスタが必要となる。

また、キャッシュのストアバッファなども各エントリは64バイト(512ビット)幅のような幅の広いレジスタが必要である。このようにプロセサには大量のフリップフロップ(FF)が使われ、ハイエンドのプロセサコアでは10万~20万個という量になる。そして、これらのFFを動かすにはクロックを供給してやらなければならない。

図2.2 同期論理回路の一般的な形

図2.2に示すように、同期論理回路を使うパイプラインの1ステージを模式的に書くと、一群のFFの出力が組み合わせ論理回路(AND、OR、NOT、NAND、NORなどの組み合わせ)を通って受け側のFFの入力に接続される。この図ではFF-Aの入力はFF1~8の状態の組み合わせ論理で生成されている。そして、FF-Bの入力はFF5~8と、下からの矢印の信号を作るこの図には書かれていないその他のFFの状態の組み合わせ論理で生成されている。

FF-Aの入力に着目すると、FF1~8の出力からFF-Aの入力までの組み合わせ回路の遅延時間のうちの最も長いものがサイクルタイムの制約条件となり、各FFの入力を生成する組み合わせ回路の内の一番遅いものがプロセサのサイクルタイム(クロック周波数の逆数)を決める。

図2.3 クロックタイミングと許容できる最大遅延

理想的には組み合わせ論理回路の遅延は、図2.3の青線で示されるようにクロック1サイクルの時間以下であれば良いが、それぞれのFFに供給されるクロックのタイミングにバラつきがある場合は、設計上は赤線の遅延時間に収まるようにしておかないと確実に動作するとは言えなくなってしまう。つまり、組み合わせ論理回路で使える時間は、サイクルタイムからクロックのバラつき(これをクロックスキュー:Clock Skewと言う)を引いたものになる。逆に言うと、理想的なクロックSkewがゼロの場合に比べて、Skew分だけサイクルタイムが延び、その分、動作クロックが下がることになるので、Skewの小さいクロック分配が求められる。

なお、ここでは赤線や青線の全部の時間が組み合わせ論理回路の遅延時間として使えるように書いているが、正確には、組み合わせ論理回路で使える時間は、クロック入力からFFの出力までの遅延時間と、 FFの入力の到着がクロックエッジより前になければならない時間(FFのセットアップタイムと言う)を差し引いたものとなる。