一部の論理1でデータ行に奇妙な「ノッチ」が表示されるのはなぜですか?


15

レトロコンピューティングの楽しみのためにZ80自作コンピューターを構築し、電子設計の基礎を学ぼうとしています。概念実証のために、私は前の週にブレッドボード上に基本的なシステムをすでに組み立てました。

現在のプロトタイプは非常に単純です。Iは、システムクロックとして74HCT04ピアス発振器によって駆動される4 MHzの水晶を用い、透過モード(中の2つの74HCT573ラッチLE16ビットアドレスバスのためのバッファとして高い)により制御反対方向にさらに2 74HCT573 RDNOT RD双方向データとしてバスバッファ。私は、添付の100nsの AT28C256 EEPROM(のみ16 KiBのがデコードさ)および2つの150ナノ秒のシステムバスに8 KiBのSRAMチップ。74HCT42を使用してCS信号を生成しOE、EEPROMをLow WEからHighにハードワイヤードし、EEPROM を制御するCS信号を1つだけ残しました。

ブレッドボード上のすべてがうるさいですが、すべてのステージを完了した後、システムは完全に動作しているように見えました。今では、EEPROMから命令をフェッチSRAMへ/からデータを読み取り、書き込み、およびそれは別のラッチ74HCT573から作られたシリアルポートを持っている、ことができますD0に接続されているD0LEある(NOT (IOREQ NAND WR))、出力から出てくるQ1だけで一つの出力ポート、つまり、 adrressデコードロジックなし。CPU / RAMを多用するベンチマークプログラムを作成しましたが、コンピューターは期待どおりの結果を出力できます。Memdumpsは、Z80がEEPROMからすべてのバイトを正しく読み取ることができるため、すべてが機能していることも示しました。

しかしD0、データバスのピンをプローブしようとすると、論理1の出力に奇妙な「ノッチ」が見られました。

D0の奇妙なノッチの例

そしてCS、EEPROM の信号がアクティブになった直後に、いくつかの論理1で常に表示されるようです。たとえば、青色のEEPROM CS信号に重畳された奇妙なノッチのキャプチャです。

CS信号に重畳された奇妙なノッチ

問題を切り分けようとしたので、SRAMのすべてのCSピンをHIGHに固定し、システムから効果的に削除し、メモリアクセスのない単純なテストプログラムを作成しました。

.org 0x00
    di

    xor a
loop:
    out (0x00), a
    inc a

    jp loop

しかし、問題は依然として変わらず、奇妙な「ノッチ」でいつものために表示されるいくつかの論理1S、直後にMEMRQ(それが今、基本的にワンチップだから)、および/またはCS(青)はローになります。

SRAMのすべてのCSピンはHIGHであるため、システムにはほとんどメモリとしてAT28C256 EEPROMチップ、出力ポートとしてラッチがあります。システムには、DMA要求中にEEPROMをオンザフライで再プログラムするAtmega328pで作られたインシステムプログラマもありますが、プログラマのすべてのデータとアドレス出力をトライステートにしたので、それが原因ではないと思います。プログラマーを追加する前からノッチを見てきました。

「ノッチ」の別の例

そのため、オペコードフェッチサイクル中に「ノッチ」を作成する必要があります。彼らは何ですか?

私にはいくつかの仮説があります:

  1. 問題はありません。これはブレッドボードのシグナルインテグリティが悪いために発生したもので、適切に設計され、適切に分離されたPCBでは自動的に消えます。ブレッドボードには、インピーダンス不整合、反射、寄生容量、クロストーク、EMI / RFIなど、あらゆる種類の信号整合性の問題があります。ボード上を走る長いバスワイヤは、問題をある程度悪化させる可能性があります。

    もしそうなら、「ノッチ」の性質を説明できますか?この現象はEEに名前がありますか?私は以前に多くのオーバーシュートとリンギングを見ましたが、「ノッチ」を見たことはありません。そして、なぜ私はいくつかの論理レベルでのみそれを見るのですか?

  2. タイミング。EEPROM出力または他の論理回路の短い「整定時間」がバスにこの奇妙な効果を引き起こしている可能性はありますか?

  3. 扇形に広がります。おそらく長いバスには大量の電流が流れ、静電容量が大きいため、EEPROM出力はバスを高く駆動するのに苦労していましたか?おそらく、オシロスコープのプローブもバスに負荷をかけていますか?

  4. バスの競合、または何かがデータバスをプルする原因となった他の論理エラー。ありそうもないと思う?バス上の他のコンポーネントは分離されており、単一のAT28C256 EEPROMまたはラッチがこれを行う方法を確認できませんでした。しかし、配線エラーやブレッドボードの隠れた内部短絡のために、それはまだ可能だと思います。

更新:ボードのデカップリングコンデンサとフィルタリングコンデンサを最初から使用していました。ボード全体でかなりの数の0.1 uFデカップリングコンデンサを使用しましたが、CPUにはデカップリング用に0.1 uFと0.01 uFの両方のコンデンサがあります。現在のシステムには8つのボードがあり、各ブレッドボードにはローカルフィルタリング用に2つの4.7 uFアルミニウムコンデンサが両方のレールにあります。また、devboardから得られる電力には200 uFのタンタルコンデンサがあります。しかし、私が言ったように、問題はここにあります。

ただし、ブレッドボード上のチップの近くに104個のコンデンサを配置することの難しさを考えると、それで十分かどうかはわかりません。おそらくさらに追加することで修正できますか?

私が興味を持っているのは問題の根本原因です。それが単に不十分なデカップリングやブレッドボード上の信号の完全性の固有の問題であることが確認できれば、最終設計はPCBになります。確信はないけど。

ありがとう。

Update2:私の考えでは、ブルース・アボットのコメントは正しい答えを与え、問題は解決されたと思います!明日までテストできませんが。犯人はZ80のDRAM更新です。詳細については、私自身の回答を参照してください。現在、新しい回答は必要ありません。解決策を確認したら、自分の回答を受け入れます。うまくいかない場合は、質問を更新します。みんなの助けてくれてありがとう。


あなたの編集を見ました。使用している部品の仕様と設計ノート/アプリケーションを見れば理想的だと思います。デバイスのデカップリングコンデンサ以外のコンポーネントが不足している可能性があります。すべての仕様に従っていると確信していますか?それは良い根本原因の運動です。今のところ、あなたの質問は回路図なしでは答えられません。
KingDuken

6
EMI /電力の問題とクロック/論理の問題を区別する1つの方法は、0.5MHzや1MHzなどの低速クロックを使用することです。奇妙なグリッチが250nsから1usになった場合、それはプロセッサの動作に基づいています。約250nsのままである場合は、EMI /電力の問題である可能性があります。バスにプルアップ/ダウン抵抗がありますか(これはトライステート応答である可能性があります)?
W5VO

1
プロセッサのデータシートで、データバスのプルアップ抵抗またはプルダウン抵抗が推奨/推奨されているかどうかを確認してください。これにより、トライステート動作によるグリッチの可能性を減らすことができます。プログラムに別の「inc a」命令を追加した場合、おそらくどの命令がグリッチの原因であるかを理解できます。
W5VO

1
「...双方向のデータバスバッファーとして、RDとNOT RDによって制御される反対方向の別の2つの74HCT573。」-たぶんこれ?制御信号を示す回路図を提供してください。
ブルースアボット

5
各M1(オペコードフェッチ)サイクルの最後の更新が原因であると思われます。CSおよびデータバスバッファーイネーブルを生成する方法を正確に確認する必要があります。
ブルースアボット

回答:


13

みんなの助けてくれてありがとう。ブルース・アボットは正しい答えを出したと思います。私はベッドから投稿しており、明日までまだテストできませんが、以下の分析が確認され、彼が「リフレッシュ」という言葉に言及したとき、問題はすでに解決されていると思います。Z80がどのようにメモリを更新するかは知っていましたが、前日はそれを完全に忘れていました。

...双方向データバスバッファーとして、RDとNOT RDによって制御される、反対方向の別の2つの74HCT573。 "-多分これ?制御信号を示す回路図を提供してください。

各M1(オペコードフェッチ)サイクルの最後の更新が原因であると思われます。CSおよびデータバスバッファイネーブルの生成方法を正確に確認する必要があります。

-ブルース・アボット

双方向データバッファはによって制御され、RDそしてNOT RD場合はRDアクティブローであり、バッファドライブデータをCPUへ、そうでない場合、RD高く、バッファがバスを駆動し、書き込み/出力を意味します。

双方向データバッファ

それでも、Z80はオペコードフェッチの直後にDRAMリフレッシュのためにメモリ読み取りを実行します。今回RDHIGH、読み取り操作にもかかわらず、バッファーが方向を反転してバスを駆動するため、結果はバスの競合になります。そのため、DRAMリフレッシュサイクル中に奇妙な「ノッチ」が常に表示されますが、通常のメモリの読み取り/書き込みやI / Oは表示されません。これは、「ノッチ」が常に表示される理由を説明しますが、すべての論理1ではなく、一部のみに表示されます。

Z80オペコードフェッチのタイミング図

さらに、SRAMをリフレッシュする必要がないため、DRAMリフレッシュはシステムでまったく役に立ちません。このバスの競合により命令やデータが破損することはなく、システムが完全に機能しているように見えます。

解決策:とを実装(RD AND REFRESH)(NOT (RD AND REFRESH)ます。次のリビジョンでBUSACKは、DMA操作中にもデータバッファーがバスを駆動していないことを確認するためにテストする必要があります。

更新:問題と解決策を確認できます。 新しい回路図に示すように、代わりに問題を使用WRNOT WRて修正しました(これをしないでください!これも間違っています。更新2を参照してください)。

新しい回路図(間違った)

波形は正常になりました!

問題を示す新しい波形が修正されました。

Update2:上記の回路図も壊れています。もしあなたがこの答えを読んでいるなら、使わないでください!バスを想定している場合は、あるWRときRD、信号が非アクティブのバスがあると仮定すると、悪い十分にあるRDときWRアクティブではさらに悪いです。最初のテストに以前のプログラムを使用したため、システムは動作しているように見えましたが、重大な問題を見逃していました。

メモリ書き込みサイクル中に、Z80 CPU はアクティブLOWになる WRにバスの駆動を開始しますが、この時点では、データバッファーはCPUに向かってデータを駆動していたため、バス競合が発生しました。

Z80メモリの読み取り/書き込みタイミング図

ブルース・アボットは正しいです。単一のバッファーを反転するのではなく、各バッファーを制御するために常に独立して使用RDしてWR信号を送る方が良いです。

例えば、

新しい回路図(修正されたが、DMAは手つかずであるため、それを処理する必要がある

今では完全に機能します。

最後に、上記の回路図は簡略化さBUSACKれています。DMA動作中にもデータバッファーがバスを駆動していないことを確認する必要があります。


6
上位バッファを有効にするために、反転/ RDの代わりに/ WRを使用することを検討できます。そうすれば、実際の読み取りまたは書き込みが進行中でない限り、データバスは非アクティブになります。
ブルースアボット

8

すべてのICに適切なデカップリングコンデンサがあることを確認してください。各ICの電源からグランドまでの100nFセラミックは、リードを可能な限り短くし、低ESR電解は、ブレッドボード上の電源レールの100uFと言います。


デジタルICの多くの不安定性の解決策のようです:)
KingDuken

4
@KingDuken絶対に、そして私にとって少しホットな話題で、私の友人は、1つを逃したために一度解雇されました。現金処理機に多くの不安定を引き起こしました。
RoyC

2
デカップリングは重要ですが、すべてに対する答えではありません。波形から、ここで関連する可能性は低いことが明らかです。
ペリシンチオン

4

ここには2つの可能性があります。

1)D0はトライステートです

D0を駆動していたものは何でもトライステート(高インピーダンスモード)になり、D0ネットのどこかでプルダウンすると電圧がゆっくりと下がります(プルダウン抵抗とICおよびトレースの寄生容量によって定義される時定数)。波形の指数関数的な性質は、ラインが強い何かによって駆動されているのではなく、比較的弱いプルダウンによって駆動されていることを強く示しています。

別のプルダウン抵抗をラインに追加して、指数波形がより早くゼロになるかどうかを確認してください。

これは必ずしも問題ではなく、バスはこれで完全に機能する可能性があることに注意してください。

2)競合

あなたの仮説#4。D0が別のロジックラインに短絡している可能性もあります。この場合、現在のように比較的長い時定数を持つ指数波形が表示されないため、これは考えにくいです。回路内の他のネットをプローブして、別の同一の波形を探して、短絡があることを示すことができます。

幸運を!

PS-これはシグナルインテグリティの問題ではありません。パルス幅が長すぎます

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