どうすれば非常にシンプルな非同期DRAMコントローラを実装できますか?


9

必要最低限​​の非同期DRAMコントローラーを構築する方法を教えてください。自作のレトロコンピュータプロジェクトで使用したい30ピン1MB SIMM 70ns DRAM(1Mx9パリティ付き)モジュールがあります。残念ながらそれらのデータシートはないので、私はSiemens HYM 91000S-70とIBMの「DRAMの動作を理解する」から行ってきました。

私が終わらせたい基本的なインターフェースは

  • / CS:入力、チップセレクト
  • R / W:読み取り、書き込みなし
  • RDY:出力、データの準備ができるとHIGH
  • D:イン/アウト、8ビットデータバス
  • A:入力、20ビットアドレスバス

更新を正しく行うには、いくつかの方法があります。行アドレスの追跡に古いカウンターを使用して、CPUクロックLOW(この特定のチップでメモリアクセスが行われない)中に分散(インターリーブ)RASのみの更新(ROR)を実行できるはずです。JEDECによると、すべての行を少なくとも64ミリ秒ごとに更新する必要があると思います(Seimensのデータシートによると、8ミリ秒ごとに512、つまり標準的な周期の更新/15.6us)。別の質問。読み書きをシンプルで正確にして、スピードまで何を期待すべきかを決定することに、もっと興味があります。

最初に、それがどのように機能するか、そしてこれまでに思いついた解決策について簡単に説明します。

基本的に、20ビットのアドレスを半分に分割し、半分を列に、もう半分を行に使用します。/ CASがLOWになったときに/ WがHIGHの場合、行アドレス、次に列アドレスをストローブします。それが読み取り、それ以外の場合は書き込みです。書き込みの場合、データはその時点ですでにデータバス上にある必要があります。しばらくすると、それが読み取りの場合、データは利用可能です。または、書き込みの場合、データは確実に書き込まれています。次に、/ RASと/ CASを、直観に反して名付けられた「プリチャージ」期間に再びHIGHにする必要があります。これでサイクルは完了です。

したがって、基本的には、各遷移間で不均一な特定の遅延があるいくつかの状態を介した遷移です。トランザクションの各フェーズの継続時間で索引付けされた「テーブル」としてリストアップしました。

  1. t(ASR)= 0ns
    • / RAS:H
    • /現金
    • A0-9:RA
    • / W:H
  2. t(RAH)= 10ns
    • / RAS:L
    • /現金
    • A0-9:RA
    • / W:H
  3. t(ASC)= 0ns
    • / RAS:L
    • /現金
    • A0-9:CA
    • / W:H
  4. t(CAH)= 15ns
    • / RAS:L
    • / CAS:L
    • A0-9:CA
    • / W:H
  5. t(CAC)-t(CAH)=?
    • / RAS:L
    • / CAS:L
    • A0-9:X
    • / W:H(利用可能なデータ)
  6. t(RP)= 40ns
    • / RAS:H
    • / CAS:L
    • A0-9:X
    • / W:X
  7. t(CP)= 10ns
    • / RAS:H
    • /現金
    • A0-9:X
    • / W:X

私が参照している時間は次の図にあります。

タイミング図

(CA =列アドレス、RA =行アドレス、X =気にしない)

正確にそうではなくても、そのようなものであり、同じ種類のソリューションが機能すると思います。だから私はこれまでにいくつかのアイデアを考え出しましたが、最後のものだけが潜在的な可能性があると思い、より良いアイデアを探しています。ここでは、リフレッシュ、高速ページ、パリティチェック/生成は無視しています。

最も単純な解決策は、カウンタとROMを使用することです。この場合、カウンタ出力はROMアドレス入力であり、各バイトには、アドレスが対応する期間に適切な状態出力があります。ROMが遅いため、これは機能しません。プリロードされたSRAMでさえ、速度が遅すぎて価値がないように思えます。

2番目のアイデアはGAL16V8か何かを使用することでしたが、私はそれらを十分に理解していないと思います、プログラマーは非常に高価で、プログラミングソフトウェアは私が知る限りクローズドソースであり、Windowsのみです。

私の最後のアイデアは、実際に機能する可能性があると私が思う唯一のものです。74ACTロジックファミリは、伝播遅延が少なく、高いクロック周波数を受け入れます。一部のCD74ACT164EシフトレジスタとSN74ACT573Nで読み取りと書き込みを実行できると思います。

基本的に、各固有の状態は、5VおよびGNDレールを使用して静的にプログラムされた独自のラッチを取得します。各シフトレジスタ出力は、1つのラッチの/ OEピンに送られます。データシートを正しく理解していれば、各状態間の遅延は1 / SCLKに過ぎない可能性がありますが、それはPROMまたは74HCソリューションよりもはるかに優れています。

それで、最後のアプローチはうまくいくでしょうか?これを行うには、より速く、小さく、一般的にはより良い方法がありますか?IBM PC / XTがDRAMに関連する何かのために7400チップを使用しているのを見たと思いますが、トップボードの写真しか見なかったので、それがどのように機能したのかわかりません。

psこれは、DIPで実行可能であり、FPGAまたは最新のuCを使用した「チート」ではありません。

pps同じラッチアプローチで直接ゲート遅延を使用することをお勧めします。シフトレジスタと直接ゲート/伝搬遅延の方法は温度によって変化することを認識していますが、これは受け入れます。

将来これを見つけた人のために、Bil HerdとAndréFachatの間のこの議論は、このスレッドで言及された設計のいくつかをカバーし、DRAMテストを含む他の問題について議論します。


1
レトロコンピュータが使用するCPUはどれですか。
匿名

6502、メモリは明らかにバンクされます。
アンソニー

自転車を発明しないことは可能ですか?DRAMを使用したデザインはすでに利用可能ですか?私はこのマシンファミリに精通していませんが、C64が適しています。ただし、元々はRAMの制御に6567 "VIC"チップを使用しています。しかし、繰り返しますが、それ以来、あなたがやりたいことに関連するプロジェクトがあったと確信しています。
匿名

3
少し歪んだ提案:Z80には、リフレッシュロジックを処理するのに十分なDRAMコントローラが組み込まれていました。(ただし、まだアドレスマルチプレクサが必要でした)
ブライアンドラモンド

3
@BrianDrummondください、ダークサイドに行くことをお勧めしません。そこから良いものは生まれません。
パイプ

回答:


6

IBM PC / XTの完全な回路図は、IBMパーソナルコンピューターXTテクニカルリファレンスマニュアル(付録D)にあります。オンラインで見つけることができます。

ここでの問題は、メモリの読み取りまたは書き込み時にアクティブになるストローブラインが与えられた場合、アドレスマルチプレクサ用にRAS、CAS、および制御ライン(MUXと呼ぶ)を生成することです。簡単にするために、ストロボ、RAS、およびCASがすべてアクティブHighであると非現実的に想定します。

この頃、PC / XTの回路図と他のいくつかのコンピューターの回路図を見ると、3つの基本的な戦略がわかります。

  • RASにはストロボを使用。RASで遅延線(その出力が入力の時間遅延バージョンである部分)を使用してMUXを生成し、別の遅延線を使用してCASに使用されるさらに新しいバージョンのRASを生成します。この戦略は、PC / XTおよびTRS-80モデルIIで使用されます。

    (最新の)遅延ライン部品の例はMaxim DS1100です。

  • ストロボをRASに使用し、MUXとCASに遅延させますが、これは遅延ラインの代わりに高速シフトレジスタを使用して行います。この戦略は、TRS-80モデルIおよびApple IIで使用されます。

  • カスタムICを使用します。これがコモドール64の戦略です。


どうやら、昨日は付録DがないXT TRしか見つけなかったようです。私は今それを持っています、これは素晴らしいです。私はこれらの遅延線ICが存在することを知らなかったので、それらがどのように温度に対処するのか疑問に思いました。現代の例に言及していただきありがとうございます。複数のソリューションの場合も+1。
アンソニー

5

あなたの質問は、あなたの実際の問題が何であるかさえわからないほど複雑ですが、私はやってみます!

私が見つけた「最もクリーンな」6502ベースのDRAM設計は、Commodore PET 2001-Nによるものです。1 MHzで動作する6502がありますが、DRAMロジックは16 MHzでクロックされ、すべてのタイミングを生成する可能性があります。

詳細は分析していませんが、主なアクションは74164シフトレジスタに接続された74191 4ビットカウンタで発生するようです。これは、R / Wラインによって制御される74157 MUXに入る8つの個別のラインを出力します。MUXからの出力は、最終的なRAS / CAS信号を生成するために7474フリップフロップといくつかの個別ロジックに送られます。以下は、リファレンス回路図の関連ページにリンクする抜粋です。

PET 2001-Nリファレンスページ6

リフレッシュは個別のカウンターで処理され、各アドレスラインは「実際の」アドレスまたはリフレッシュアドレスのいずれかを選択するマルチプレクサーに接続されます。

このロジックの一部は、ビデオサブシステムのタイミングを生成するようにも見えます。特定のニーズに合わせて簡略化できると思いますが、高周波カウンタ、シフトレジスタ、マルチプレクサなど、同様のものが役立つと思います。


これは私が考えていたものですが、MUXや2つではなく複数のラッチをブレインストーミングするのに十分なほどに馬鹿げていました。16Mhzクロックは私を思いとどまらせましたが、それはa)奇妙なCPUクロックよりもはるかに高いですが、それは理にかなっています。 IBM PC / XTと同じ順序であることがわかります。
アンソニー

Apple IIは非常によく似ており、タイミングに14.318 MHzのビデオクロックを使用し、CPUとビデオ間でメモリを競合なしの代替の半サイクルで共有します。ビデオリフレッシュアクティビティはメモリのリフレッシュも維持するため、別個のリフレッシュカウンターは必要ありません。
Dave Tweed

-2

psこれは、DIPで実行可能であり、FPGAまたは最新のuCを使用した「チート」ではありません。

私はあなたのプロジェクトの精神と派手ではない部品を使用したいというあなたの願望を完全に理解していますが、私があなただったら間違いなくFPGAの方法を採用します

いくつかの理由:

  1. それは完璧な学習機会です。DRAMコントローラの設計は「hello-world」プロジェクトではないため、FPGAを「実行できる」と自信を持って言うことができます。
  2. 特に古いDRAMチップである場合は、このメモリからあらゆるパフォーマンスを引き出すことができます。自作の6502ベースのPCだけでなく、最速の 6502 ベースのPCを使用することもできます。
  3. 問題をデバッグしたり、CPUが発行したメモリ操作の統計を作成したりする方がはるかに簡単です。パラレルバスでロジックアナライザーを使用できますが、それは決して楽しいものではありません(私の友人はこれらのラインに沿って何かをします-彼は8088のサイクル正確なシミュレーションを書きたいと思っており、そのためメモリアクセスとタイミングに関する統計を収集する必要があります彼は元のチップセット(8288、8280、8237)を使用し、多くのチャネルを備えたロジックアナライザーを使用していますが、彼の経験から、それドラッグである言えます)。

2
これがコメントではなく、答えであるかどうかはわかりません。1)彼はFPGAを学びたいと言っていません。2)80年代のDRAMは、ディスクリートロジックに対してすでに十分低速です。3)デバッグは難しい場合があります。すべてをFPGAに、またはソフトウェアだけに実装しないのはなぜですか?なぜRAMをまったく使用しないのか... :)
パイプ

1
@pipes:そうだね。現在、FPGAの学習に時間を費やしたくありません。私はもう2つの無関係なアナログプロジェクトで十分に満足しています。FPGAとPLDは、いつの日かそれらの使用方法を学習しますが、一般に、現時点で邪魔になるように感じます。
アンソニー

1
@pipe:特にボードに特に熟練していない場合、ボードの再配線は困難で時間がかかり、イライラすることがよくあります。デザインの一部にかなり単純なPLD(22V10など)を使用すると、調整が容易になります。
スーパーキャット2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.