生成されたクロック周波数は6.144 MHzですが、内部的には(8085プロセッサ)3.072 MHzしか使用されないのはなぜですか。また、クロックで6.144という特定の値につながるもの。
yahooで答えを見つけました... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i
しかし、私はまだそれをうまく得られなかったことを認めなければなりません。これについていくつかの行を投げることができますか?
生成されたクロック周波数は6.144 MHzですが、内部的には(8085プロセッサ)3.072 MHzしか使用されないのはなぜですか。また、クロックで6.144という特定の値につながるもの。
yahooで答えを見つけました... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i
しかし、私はまだそれをうまく得られなかったことを認めなければなりません。これについていくつかの行を投げることができますか?
回答:
クロックを2分周する理由の1つは、デューティサイクルが50%の方形波であることです。8085は内部で両方のクロックエッジを使用し、サイクルの半分が他の半分より短い場合に機能しない可能性があります。
8085が新しい時代には、これらの素敵な発振器は一般的ではなく、人々はしばしば、個別の水晶、コンデンサ、および論理ゲートからクロック回路を組み合わせました。2で除算すると、立ち上がりエッジと立ち下がりエッジが等間隔になります。
6.144MHzについては、整数で除算して、少なくとも38400までの一般的なボーレート値を取得できることがわかります。
8085のIntelデータシートを見ると、3つの興味深い声明があります。
8085には、8082Aに8224クロックジェネレーターと8228システムコントローラーが提供するすべての機能が組み込まれています
X1およびX2:クリスタル、LCまたはRCネットワークに接続されて、内部クロックジェネレーターを駆動します。入力周波数を2で割って、プロセッサの内部動作周波数を求めます。
CLK:システムクロックとして使用するためのクロック出力。CLKの周期はX1、X2入力周期の2倍です。
そのため、クロックの奇数エッジを使用して内部を移動させることについての推測では、Intelが8085を設計したとき、Intelがその機能をチップに統合することで特別なクロックコントローラーの必要性を置き換えていたことが明らかになります。X1-X2タイムベースをCLKとして出力する前に半分に分割することにより、システムは他に何もないとしても、すてきな均等なデューティサイクルを取得できます。
このチップが設計された当時、人々は使用可能なチップに収まるように十分小さくするために、CPUで可能な限り少ないトランジスタを使用していました。
私は、その時代のCPUの実質的にすべての「レジスタ」(プログラマーに見える命令セットレジスタと内部マイクロアーキテクチャラッチの両方)が、透過的なゲーテッドDラッチなどにデータを格納したと考えています。今日では、チップ上にたくさんのトランジスタがありますので、2倍のトランジスタを使用していても、フルマスタースレーブDフリップフロップを使用する方が簡単です。
多くの命令は、レジスタAからデータを取得し、ALUで他のデータと結合し、結果をレジスタAに格納します。レジスタAが完全なマスタースレーブDフリップフロップで実装されている場合、これは非常に簡単です。
ただし、レジスタAがトランスペアレントゲーテッドDラッチである場合、重複しないクロックが必要です。1つのクロックでパルスを使用して中間結果をどこかに保存し(レジスタAは出力を一定に保持)、その後、別のクロックでパルスを使用してレジスタAに新しい値をロードします(中間レジスタは出力を一定に保持します)。
これには2フェーズクロックが必要です。オーバーラップしない2相クロック(トランジスタが不足していた当時)を作成する最も簡単な方法は、入力クロックを取得して2で割る小さな外部回路でした。
時間が経つにつれて、人々は、より多くのトランジスタをICに実装する方法を見つけました。そのため、CPUを設計する人々は、フルコンピュータシステムのCPUの周りのものをCPUチップにますます統合しました。
ウィキペディアのクロック信号の記事の行を読んで、その時代の8085と6502およびその他のチップを設計した人々は、前世代の統合CPUよりも少し余裕があり、彼らが最高のものを決定したという印象を受けますその部屋の使用は、その小さな外部回路をオンチップにすることでした。しかし、それらはすべてのレジスタを以前と同じゲーテッドDラッチに保持しました。
そのため、クロック周波数が2で除算されます。最初の外部クロックパルスがphase_one内部クロック信号でパルスを生成してその中間結果レジスタを更新し、外部クロックからの2番目のパルスがphase_two内部クロック信号でパルスを生成してプログラマから見えるレジスタを更新すると考えることができます。
命令サイクルを複数のクロックサイクルに分割する理由はたくさんあります。良い例は、メインメモリバスへのアクセスです。
最新のプロセッサのほとんどはVon-Neumannアーキテクチャです。つまり、コードとデータの両方が同じメモリチップに存在します。さて、命令を読みたい場合、その命令がメモリから変数をロードしようとしている場合...それは2つのメモリアクセスです。ただし、ほとんどのメモリはシングルポートのみです(つまり、サイクルごとに1つの読み取りまたは書き込みのみを実行できます)。では、命令をどのように読み、変数を読むのでしょうか?
解決策は、2段階の命令サイクルを使用することです。最初のステージはメモリから命令をフェッチし、2番目のステージはメインメモリから変数を読み取る(または書き込む)ことができます。
一部の古いチップはさらに進化しました。かつて、チップに16ビットのアドレス可能なメモリがあり、外部アドレスバスが8ビットしかない場合、アドレスラッチイネーブルに精通していました。1クロックサイクルは16ビットアドレスの上位8ビットを送信し、次のクロックサイクルは下位8ビットを送信します。次に、3番目のサイクルで、メモリから変数を読み書きします。
長さが複数クロックサイクルの命令サイクルを使用する他の、より良い理由があります。最良の理由の1つはパイプライン処理です。これは、最新のプロセッサがチップで利用可能なすべての実行ユニットをより完全に活用するために使用するトリックです。たとえば、1つの命令が実行されている間に、次の命令が同時にフェッチされます。
内部的に、8085Aのコアには2相クロックが必要です。2つのクロックフェーズを導出する内部ロジックは、入力クロックを2で除算します。前述したように、6.144MHz入力クロックを使用する理由はボーレートの目的のためであり、チップは6MHzで問題なく動作します。チップの実際の定格は3MHzで、6MHzの水晶が必要ですが、6.144MHzで快適に動作し、ボーレートの生成が容易になります(Uartは、8085を駆動する発振器からの6.144MHzまたは8085のCLK出力からの3.072MHzでクロックできます多くの使用可能なボーレートを提供します)。私は今でもこれらの古風なチップを使って、私のロボットのいくつかで特別な機能を実行しています。独自の発振器でUartsをクロックし、3.2MHzでチップを実行する6.4MHz発振器で8085Aをクロックします。3。2MHzはうまく分割されて、超音波トランスデューサーに40KHzクロックを提供します。私の「ボット」でより最新のICデバイスを使用する方が理にかなっていますが、私はたくさんの古い8085、Z80、63C09と63C09E、68B09と68B09Eなどを実際に楽しんでいます。