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