クロック

クロック信号（クロックしんごう、クロックパルス、クロック、clock signal）とは、クロック同期設計の論理回路が動作する時に複数の回路間でタイミングを合わせる（同期を取る）ために使用される、電圧が高い状態と低い状態を周期的にとる信号である。信号線のシンボルなどではCLKという略記がしばしば用いられる。日本産業規格では刻時信号とも訳されるが、この訳が用いられていることはほとんどない(クロック(刻時)回路という表現を使っている資料はある)。 クロック信号はクロックジェネレータ（英語版）で作られる。最も典型的なクロック信号はデューティ比50%の矩形波で、一定の周波数を保つ。クロック信号により同期をとる回路は信号の立ち上がりの部分（電圧が低い状態から高い状態に遷移する部分）で動作することが多く、ダブルデータレート（英語版）の場合は立ち下がりの部分でも動作する。 ある程度以上の規模の複雑さの集積回路 (IC) は回路各部の遅延伝播での最悪の場合を考慮し、それよりも低い周期で各部分を同期させるのにクロック信号を使うことが多い。所定の動作を完了するまでに複数のクロック周期（英: clock cycle）がかかる場合もある。さらに大規模で複雑なICでは、回路全体に正確に同期したクロックを供給すること自体も難しくなる。その目立った例としてマイクロプロセッサがあり、一般に水晶振動子を利用した発振回路を用いて発生させる。低速動作の機器や精度を要求されない機器では、安価なセラミック発振子を用いることもある。水晶振動子と発振回路を1個のパッケージに内蔵し、電源を接続するだけでクロック信号を出力するクロック・モジュールと呼ばれる電子部品を用いることが多い。例外として非同期回路（英語版）がある。 クロック信号はゲート制御されることもある。すなわち、回路の特定部分へのクロック信号供給の有無を別の信号で制御する。使われていないデジタル回路の一部を停止させて消費電力を低減させるのにこの技法を使うことが多いが、タイミング解析における複雑さが増大する。 単一のクロックのエッジにより、関係する全てのフリップフロップが動作する方式である。1990年代以降の大抵のクロック同期設計は単相である。 マスタ-スレーブ方式のラッチ（フリップフロップ）を使う方式のクロックである。 4相論理方式（en:Four-phase logic）などのクロックである。 ナショナル セミコンダクターのIMP-16ファミリーなどの初期のマイクロプロセッサでは、多相クロックを使っていた。IMP-16の場合クロックは4相で、位相にしてそれぞれ90度ずつ時刻差があり、プロセッサコアと周辺機器の同期に使われていた。 1970年代の MOS IC は2相クロックを使っていた。例えばMC6800や8080では外部から2相クロックを供給していた。モトローラの電子部品製造部門は水晶振動子を含むハイブリッドICを販売していた。それらのICは6800や8080が必要とする重なり合わない2相の波形を生成した。後にインテルは8224クロックジェネレータを、モトローラはMC6875を生産した。Intel 8085 やモトローラの6802などの次の世代のマイクロプロセッサはクロックジェネレータをチップ上に持つようになった。8080のクロック周波数は2MHzだったが、その処理性能は1MHzの6800とほぼ同等だった。つまり、8080では1命令の処理により多くのクロック周期がかかる。6800は最小で100kHzでも動作したが、8080はクロックが停止する速度まで動作可能だった。これらのマイクロプロセッサの高速版は1976年にリリースされた。 6501 は外部2相クロックジェネレータを必要とした。その後継の MOS 6502 も2相クロックで駆動する内部設計だったが、2相クロックジェネレータをチップ上に集積したため外部からは単相クロックを入力すればよく、システム設計が簡単化されている。ICによっては4相クロックを必要とするものもあるが、最近のマイクロプロセッサやマイクロコントローラは単相クロックを使っている。 1秒間に発振する（電圧の最大値と最小値を繰り返す）回数をクロック周波数という。パソコンでよく「Intel Core i7 3.20GHz」などといった表示を見かけるが、この3.20GHzの部分がクロック周波数である。現代のパソコンでよく耳にする単位は主にギガヘルツ (GHz) で、この値が大きければ大きいほどそのコンピュータの処理速度が速いということになる。ただし、1クロックあたりの処理内容やコア数はコンピュータの機種・製品により異なるため、異なる機種・製品間ではクロック周波数だけで性能を比較することはできない。 最近のマイクロプロセッサは外部クロック周波数を内部で何倍かにして適切なクロック周波数で動作する。したがってコンピュータシステム全体よりもCPU部分だけが高速動作しており、CPUが外部要因（メモリや入出力）を待たなければならないときを除いて性能向上が図られている。システム全体に供給されるクロックをベースクロック（英: Base Clock; BCLK）、CPU用の倍率をCPUマルチプライヤー（CPUレシオとも）という。2022年現在、x64 CPUのベースクロックは100 MHz前後に設定されていることが多い。例えば 3.20 GHzで実動作中のCPUは100 MHzのBCLKにx32 CPU multiplierを適用して動作している。 デジタル機器の多くは固定かつ一定の周波数のクロック信号を必ずしも必要としない。クロック周期の最大および最小時間の範囲内であれば、クロック周期ごとに時間（周期）が変動しても動作可能である。その場合、動的に周波数を変更できるクロックジェネレータを使うことができ、スペクトラム拡散クロックジェネレータ（英語版） (SSCG)、PowerNow!、Cool'n'Quiet、Intel SpeedStep テクノロジなどの動的周波数変更技術がある。 静的論理を用いたデバイスではクロック周期時間の上限（つまりはクロック周波数の下限）がなく、最終的にクロックを停止させるところまで低速にでき、そこから最高クロック速度にまで戻すこともできる。 精度の高いアナログ-デジタル変換回路などはクロック信号として矩形波ではなく正弦波を使う。これは矩形波が高い周波数の倍音成分を含んでいてアナログ回路に干渉し、ノイズを発生する原因となるためである。このような正弦波クロックは差動信号とされることが多い。このような信号はスルー・レートが2倍であり、同じ電圧範囲のシングルエンド信号に比べてタイミングの不確実さが半分になるためである。差動信号の電磁放射は単一線の場合より弱くなる。代わりに1本の線を電源の線と接地の線で挟むという技法が使える。 CMOS回路では、ゲートの静電容量は連続的に帯電と放電を繰り返す。キャパシタ（コンデンサ）はエネルギーを発散させないが、駆動トランジスタがエネルギーを浪費する。可逆計算では、コイルを使えばそのエネルギーの浪費を抑えることができるが、一般にコイルをIC上に形成すると大きな面積を必要とする。 また、コンピュータのハードウェアやオペレーティングシステム (OS) の時計機能（年月日時分秒を計測する、一般の時計と同様の機能）のこともクロックということがある。そのようなハードウェアを特にRTC（俗にCMOSクロック）と言う。市販のパソコンのRTCは発振子および周辺回路の精度が一般の時計のようには高くないため、またOSではパソコンの汎用のクロック利用して計測しているために、どちらも一般の時計に比べて誤差が生じやすい。このため、時刻が合っていることが重要な場合は、NTPなどで定期的に補正を行う必要がある。また、起動時にはOSはRTCから時刻を取得するため、再起動前にRTCを正確な時刻に合わせたり、シャットダウン時間が長い場合は起動時にRTCの長期的な誤差傾向を考慮して補正する（Linuxのhwclockコマンド）ものもある。 クロック信号が歪まずにチップ上の各部に届くようにする最も効率的な方法は、メタルグリッドである。大規模なマイクロプロセッサでは、クロック信号を駆動し分配するのに使われる電力はチップ全体の消費電力の30%以上にもなる。クロック信号を各部に届ける回路をクロック分配ネットワーク（英語版）と呼ぶ。これには再帰的なH木が使われることが多い。そのネットワーク終端のゲートを含む全構造と途中の全増幅回路はサイクル毎にロードとアンロードを繰り返す必要がある。クロックゲーティングという技術では省電力のために使っていない部分のクロック分配ネットワークを一時的に遮断する。