8085マイクロプロセッサで、クロック周波数が2で割られるのはなぜですか?


16

生成されたクロック周波数は6.144 MHzですが、内部的には(8085プロセッサ)3.072 MHzしか使用されないのはなぜですか。また、クロックで6.144という特定の値につながるもの。

yahooで答えを見つけました... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i

しかし、私はまだそれをうまく得られなかったことを認めなければなりません。これについていくつかの行を投げることができますか?


2
yahooの答えは非常に貧弱です。作家を知っているなら許してください。
コルトゥク

うーん、ちょうど今学期にマイクロプロセッサを使ったので、それがどれほど間違っていたのかわかりません。私はここで答えを得たと思います...ありがとう。
loxxy

1
MC6800はさらに厳しいものでした。2つのクロック入力(phi1、phi2、約180 Deg位相シフト)があり、それらはオーバーラップしない必要がありました。これらのクロック信号を生成するための追加の発振器IC(MC6810?)がありました。
カード

1
@Curd厄介なタイミングで、供給レールの両方に非常に近く振らなければなりませんでした(当時はまれでした)。pdf.datasheetarchive.com/indexerfiles/Scans-000/…MC6871。MC6810は128 x 8(!)スタティックRAMチップでした。
スペロペファニー14

回答:


15

クロックを2分周する理由の1つは、デューティサイクルが50%の方形波であることです。8085は内部で両方のクロックエッジを使用し、サイクルの半分が他の半分より短い場合に機能しない可能性があります。

8085が新しい時代には、これらの素敵な発振器は一般的ではなく、人々はしばしば、個別の水晶、コンデンサ、および論理ゲートからクロック回路を組み合わせました。2で除算すると、立ち上がりエッジと立ち下がりエッジが等間隔になります。

6.144MHzについては、整数で除算して、少なくとも38400までの一般的なボーレート値を取得できることがわかります。


ファローアップ ...

8085のIntelデータシートを見ると、3つの興味深い声明があります。

  1. 8085には、8082Aに8224クロックジェネレーターと8228システムコントローラーが提供するすべての機能が組み込まれています

  2. X1およびX2:クリスタル、LCまたはRCネットワークに接続されて、内部クロックジェネレーターを駆動します。入力周波数を2で割って、プロセッサの内部動作周波数を求めます。

  3. CLK:システムクロックとして使用するためのクロック出力。CLKの周期はX1、X2入力周期の2倍です。

そのため、クロックの奇数エッジを使用して内部を移動させることについての推測では、Intelが8085を設計したとき、Intelがその機能をチップに統合することで特別なクロックコントローラーの必要性を置き換えていたことが明らかになります。X1-X2タイムベースをCLKとして出力する前に半分に分割することにより、システムは他に何もないとしても、すてきな均等なデューティサイクルを取得できます。


1
多くの場合、マイクロコントローラの異なるステージは、ロジックの遅延のために位相がずれている必要があります。より高速の発振器を使用して分割し、異なるロジックセットに2つの異なるエッジを使用すると、デバイスのコストを大幅に削減できます。JustJeffは、標準のクロックレートの倍数であるオシレーターの使用に特化しています。高速転送が非常に簡単になります。
コルトゥク

2
デューティサイクルステートメントについて確かですか?命令サイクルには複数のクロックサイクル(フェッチサイクルと実行サイクルで構成される1つの命令サイクルなど)が必要な場合があるという印象を受けました。私はかなり確信しても、現代のPICは、すべてのFoscが/ 4は、データシート全体にあります理由は4段階の命令サイクルを、持っているんだ
ajs410

1
@ ajs410-8085は、命令を完了するのに間違いなく複数のクロックサイクルを要します。その時点からの8ビットマイクロ(すべて私が知っている)はすべて、少なくとも2つのクロックを使って何でもしました。ここで言及しているのは、純粋にチップの内部です。これらの古い獣のブロック図を見ると、内部バスや一時的なレジスタなどがあることがわかります。これらが両方のエッジを使用していると推測されるのです。外部バスサイクルは、同じ極性のエッジ間で実行されます。
JustJeff

6

このチップが設計された当時、人々は使用可能なチップに収まるように十分小さくするために、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内部クロック信号でパルスを生成してプログラマから見えるレジスタを更新すると考えることができます。


ラッチがリロードされずに数マイクロ秒を超えない場合、回路をさらに簡素化できるため、「ラッチ」は単一トランジスタのパスゲートとインバータにすぎません。
スーパーキャット

1
上記を書いてから、私は6502の設計を調べました。内部バスの多くは、1つのクロックフェーズで無条件にHighに駆動され、その後、他のクロックフェーズ中に選択したレジスタが適切なビットをLowにプルできます。バスに出力できるレジスタが5つある場合、これは、各レジスタの出力にプルアップデバイスを必要とする代わりに、各レジスタに1つのスイッチドプルアップデバイスと2つの直列配線トランジスタを使用できることを意味します。必要に応じてバスを引き下げます。私は8085がほぼ確実に同様のトリックを使用すると期待しています。
-supercat

2

命令サイクルを複数のクロックサイクルに分割する理由はたくさんあります。良い例は、メインメモリバスへのアクセスです。

最新のプロセッサのほとんどはVon-Neumannアーキテクチャです。つまり、コードとデータの両方が同じメモリチップに存在します。さて、命令を読みたい場合、その命令がメモリから変数をロードしようとしている場合...それは2つのメモリアクセスです。ただし、ほとんどのメモリはシングルポートのみです(つまり、サイクルごとに1つの読み取りまたは書き込みのみを実行できます)。では、命令どのよう読み、変数読むのでしょうか?

解決策は、2段階の命令サイクルを使用することです。最初のステージはメモリから命令をフェッチし、2番目のステージはメインメモリから変数を読み取る(または書き込む)ことができます。

一部の古いチップはさらに進化しました。かつて、チップに16ビットのアドレス可能なメモリがあり、外部アドレスバスが8ビットしかない場合、アドレスラッチイネーブルに精通していました。1クロックサイクルは16ビットアドレスの上位8ビットを送信し、次のクロックサイクルは下位8ビットを送信します。次に、3番目のサイクルで、メモリから変数を読み書きします。

長さが複数クロックサイクルの命令サイクルを使用する他の、より良い理由があります。最良の理由の1つはパイプライン処理です。これは、最新のプロセッサがチップで利用可能なすべての実行ユニットをより完全に活用するために使用するトリックです。たとえば、1つの命令が実行されている間に、次の命令が同時にフェッチされます。


3
私はOPが複数のクロックに命令を広げる理由を尋ねているとは思わないが、むしろ8085は意図したものを取るだけでなく2Xクロック(その後内部で分割する)を供給するように設計されている理由とは思わないクロック周波数。
JustJeff

1
あなたが指示について言ったことはすべてオンになっていますが。
JustJeff

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などを実際に楽しんでいます。


0

時計は、イベントを発生させたい瞬間です。現在、デジタル回路でのレベルトリガーは好ましくありません。時間が長くなると、マイクロプロセッサ内の異なる回路間で相互作用が発生し、短絡が発生する可能性があるためです。だから、私たちはエッジトリガーを求めています。現在、マイクロプロセッサはエッジトリガーがいつ発生したかを知りません。1または0のみを認識します。したがって、クロックエッジが検出されるたびに1と0を生成するには、フリップフロップが必要です。したがって、フリップフロップを使用する必要があります。その結果、クロック周波数は2で除算されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.