2018-02-15 23:54 — asano
カテゴリー:
前回はクロックに特殊な電圧レベルを要求するものを取り上げましたが、今回は特殊なタイミングを要求するものたちです。
多相クロック
複数のクロック入力を持っており、それぞれのクロックの間の関係が規定されています。
Intel 8080など
多相クロックの最も一般的なパターンで、2つのクロックφ1, φ2を交互に"H"にします。φ1, φ2が同時に"H"になってはいけません。
この仲間には以下のようなプロセッサも含まれます。
- Motorola MC6800
- MOS Technology 651x
- National Semiconductor NS32016
- MN1610
それぞれ細かい条件が異なるので注意が必要です。
例えば8080ではφ2の"H"→"L"からφ1の"L"→"H"までのtD2が最低70ns必要なので、フリップフロップのQとQをφ1, φ2とすることはできません。
一方、MC6800ではφ1とφ2の間は0nsでも良いのでQ, Qを利用できる可能性があります。
4倍のクロックからデューティ25%のパルスを作れば間隔は十分ですが、今度はパルス幅が仕様を満たすかが問題になってきます。例えば1MHzだと"H"の区間が250nsになりますが、1MHz版のMC6800のφ1とφ2は"H"の区間が400ns必要です。クロックを0.625MHzに落とすか、1.5MHz版のMC68A00を使う必要があります。
MC6800を最高の1MHzで動作させるには16MHzクロックから7/16のパルスを作ればいけますが、74シリーズでは結構面倒なことになります。
Motorola MC6809E
これも2相クロックですが90°位相のずれたQ, Eです。これは4分周で簡単に作ることができます。
ただ単純に作るだけならクロックジェネレータ内蔵のMC6809を使ったほうが簡単で、わざわざMC6809Eを使うということはCRTCなどの外部回路と同期させるといった場合でしょう。
Texas Instruments TMS9900
こいつは何と4相のクロックを要求します。φ1, φ2, φ3, φ4が順に"H"になり、かつ同時に2つ以上が"H"になってはいけません。
ストレッチ
クロックのストレッチとは"H"または"L"の区間を引き伸ばすことです。これはプロセッサが要求するというわけではありませんが、プロセッサによっては特定の機能を実現するためには必要なことです。
今から考えると基準となるべきクロックに細工をするなんてとんでもないというところでしょうが、(特に多相クロックを要求するプロセッサでは)プロセッサに入力されるクロックは基準信号ではありません。基準信号を元に外部でプロセッサの動作フェーズを作ってそれを入力しているだけです。だから状況に応じて動作フェーズの進み方を制御するのは当然だと考えるべきでしょう。
今ではこの動作フェーズを作る回路がプロセッサに内蔵されてしまい、いじることができなくなってしまいました。そこでWAITやBUSREQなどの信号で外から操っているのです。
ウェイト
遅いメモリやI/Oのアクセス時間を稼ぐために行なうのが典型的な目的です。
WAIT, nDTACK, READYなどが無いプロセッサでも、アクセスの際にクロックをストレッチして時間を延ばすことができます。
この方法はMC6809Eのデータシートにも記載されており、メーカ側の想定する方法であることがわかります。
DMAなど
上ではアクセス中にストレッチしましたが、アクセスしていない時にストレッチを行なえばその間バスを使うことができDMAを行うこともできます。
止めていられる時間に上限のあるプロセッサも多いのでその点は注意が必要です。
デバッグ用に
ちょっと変わったところではデバッグ用にステップ実行させる使い方もありました。人間が相手なのでクロックの下限がDCのプロセッサで無いとダメですが、任意のタイミングで止められるのでソフトウェアだけでなくハードウェアの確認にも使えます。
学習用にクロックを手で入力しながら動きを確認するといった使い方もあります。
コメントを追加