私が知っているように、クロックはすべてのロジック操作を制御しますが、コンポーネントに応じてクロックがローからハイまたはハイからローに変化するのをゲートが待つ必要があるため、コンピューターの速度も制限します。クロックが組み込まれていない場合、コマンドが与えられるたびにゲートはできるだけ速く変化するので、なぜコンピューターの速度が向上しないのか、なぜクロックが使用されるのか?
私が知っているように、クロックはすべてのロジック操作を制御しますが、コンポーネントに応じてクロックがローからハイまたはハイからローに変化するのをゲートが待つ必要があるため、コンピューターの速度も制限します。クロックが組み込まれていない場合、コマンドが与えられるたびにゲートはできるだけ速く変化するので、なぜコンピューターの速度が向上しないのか、なぜクロックが使用されるのか?
回答:
すべての回路が同期シーケンシャルロジックではないとしても、ほとんどの場合、クロックはコンピューターで使用されます。
同期回路では、クロックと呼ばれる電子発振器が、回路内のすべてのメモリ要素に分配されるクロック信号と呼ばれる一連の反復パルスを生成します。
さて、それは満足のいくものではないように思えるかもしれませんが、「コンピューターで同期回路を使用する理由」を合理的に尋ねるでしょう。しかし、それも答えが簡単な質問です。
同期ロジックの主な利点は、そのシンプルさです。データの操作を実行する論理ゲートは、入力の変更に応答するために有限の時間を必要とします。これは伝搬遅延と呼ばれます。クロックパルス間の間隔は、次のクロックパルスが発生する前に、すべてのロジックゲートが変更に応答し、その出力が安定したロジック値に「安定」するように十分に長くする必要があります。この条件が満たされている限り(他の特定の詳細を無視して)、回路は安定して信頼できることが保証されます。これにより、同期回路の最大動作速度が決まります。
研究の活発な分野は、すべてではないにしてもほとんどの回路が非同期シーケンシャルロジックである非同期コンピューティングです。
計算のためにメモリからALUに送信される8ビット整数があり、(少なくともこの例では)ALUが必要とする前に、わずかに異なる時間に、メモリ回路が8本のデータ線で信号を提供するとします。
ここでクロックを使用すると、8つのデータラインが1クロックサイクルで表現される整数の正しい値を保持し、ALUが同じクロックサイクル内でそのデータを「収集」します。
それはおそらく最高の説明ではないことを認識しています。本質的にクロックがないと、データの一貫性を確保することは、速度を上げることが価値があるよりもはるかに難しくなり、多くの競合状態の問題に遭遇します。
算術論理演算装置のような回路は、入力としていくつかの数値を取り、ouptutとして数値を生成します。一定期間内に、出力のすべてのビットが正しい最終状態に到達することを保証できますが、出力ビットが有効になる実際の時間は、さまざまな要因に基づいて大幅に変わる可能性があります。
「有効な」入力と「有効な」出力を使用してALUを構築し、計算が実行される前に十分な時間「有効な」入力が低く、データ入力に「有効な」入力が高くなる前の望ましい値、「有効な」出力は、出力ビットが実際に正しくなるまで高くなりません。このような設計では、おそらく従来のALUの約2倍の回路が必要になります[基本的に、各ビットがゼロであることがわかっているか、1であることがわかっているかを追跡する必要があります。すべての出力ビットの状態がわかると、その「有効な」出力が真になります]。
さらに悪いことに、CPUの高速実行可能な部分を許可することは、遅い部分が追いつくのを常に待機していない場合にのみ役立ちます。それを実現するには、特定の時点でマシンのどの部分が「先」にあるかを判断し、それに基づいてアクションのコースを選択するロジックが必要です。残念ながら、この種の決定は、電子機器が確実に行うことが最も難しい決定の1つです。2つのイベントのどちらが最初に発生したかを確実に決定することは、「近い呼び出し」がないことを保証できる場合にのみ簡単です。メモリシーケンサが処理ユニット#1からの要求を処理しており、ユニット#1がその後保留中の別の要求を持っているとします。#1からの最初のリクエストが完了する前にユニット#2がリクエストを送信した場合、メモリユニットはそれを処理する必要があります。それ以外の場合は、ユニット#1からの次のリクエストを処理する必要があります。それは合理的な設計のように思えますが、驚くほど問題があることになります。問題は、その瞬間より前に受け取ったリクエストがすぐに処理され、その後に受け取ったリクエストが待たなければならないような瞬間がある場合、リクエストが期限を超えるかどうかを判断するのに必要な時間がリクエストが受信された時間と期限との差にほぼ反比例します。メモリユニットが#2からのリクエストが1フェムト秒だけデッドラインを超えると判断するのに必要な時間は、ユニット#1からの2番目のリクエストを処理するのに必要な時間を大幅に超える可能性がありますが、ユニットは処理できませんどちらを最初にサービスするかを決定するまで要求します。
すべてが共通のクロックで動作するようにすると、計算の出力がいつ有効になるかを決定する回路が不要になるだけでなく、「クローズコール」のタイミングをなくすこともできます。システム内のすべてが100Mhzクロックで動作する場合、クロックエッジの1ns後までクロックに応答して信号は変化せず、クロックエッジに応答して発生するすべての動作は7ns以内に発生し、その後に発生するすべての動作は特定のクロックエッジは少なくとも3nsで「勝ち」、クロックエッジが1nsで「失われる」まで発生しないことはすべて起こります。「近い」ことが保証されている場合、クロックの前後に信号が発生する可能性があるかどうかを判断することは、2つの任意のタイミングの信号のどちらが最初に発生するかを判断するよりもはるかに簡単です。
同期システムを設計している場合、目標クロックレートがあり、1クロック周期内のサイクル中にすべての計算を完了するようにロジックを設計します。これは、低電源電圧、高温、「低速」チップなどのさまざまな条件を考慮して、安全マージンを組み込む必要があることも意味します。同期チップは、これらのすべての悪条件下で最長のロジックパス(最も遅い計算)が時間内に終了するように設計されています。その結果、条件がひどくない場合、ロジックが動作を完了してから次のクロックが結果をラッチするまでの時間/マージンが大きくなります。(通常)クロック周波数を変更できないため、この速度を失います。
そこている私はあるNULLコンベンションロジックに精通していることだ。一例のために存在する非同期論理パラダイムは、完全に。広範なストロークを使用して何が起こっているのかを説明することで、論理回路は計算がいつ完了したかを識別でき、独自の「クロック」信号を効果的に作成できます。これにより、回路を可能な限り高速で実行でき、電力とEMIの利点がいくらか抑えられます。残念ながら、設計密度と最高のパフォーマンスの点で非同期の性質にペナルティを払っています。また、同期設計と検証のソフトウェアツールは成熟していますが、非同期設計の設計と検証の多くは依然として手動で行われるため、非同期設計の設計と構築に多大な労力が必要になります。
これは、特定のアプリケーションが時間の基準となるためにクロックが必要になる場合があることも完全に無視しています。たとえば、サウンドカードは特定の正確なサンプルレートでADCまたはDACを更新する必要があるため、非同期で動作できません。そうしないと、音声が歪んでしまいます。
クロックが組み込まれていない場合、ゲートはコマンドが与えられるたびに可能な限り速く変化するので、コンピューターの速度が向上しないのはなぜですか?なぜクロックが使用されるのですか?
簡単に言えば、人間は超知的な存在ではなく、10億要素の回路設計を可能にするためにショートカットを作成する必要があるためです。
私たちの機械の支配者が上昇するとき、彼らは非常によく時計を取り除き、プロセスの変動にもかかわらず時計のない回路を製造可能にするような微妙なミニューを克服し、いくつかの速度向上を利用します。
少し拡大すると、離散的で予測可能なものが合理的に分析および設計されやすくなります。さらに大きな利点として、自己修正が行われます(この場合、タイミングは自己修正されます)。これが、最初にデジタルロジックを使用する理由です。(同様に、プログラミングでは、浮動小数点の代わりに整数を使用し、goto-spaghettiの代わりに使い慣れた制御構造を使用します。また、非常に「柔軟な」言語ではなく、明確なルールを持つ言語を使用します。コードが実行されるまで。)