मैं एक बहुत ही सरल अतुल्यकालिक DRAM नियंत्रक को कैसे लागू कर सकता हूं?


9

मैं जानना चाहता हूं कि नंगे हड्डियों के अतुल्यकालिक DRAM नियंत्रक का निर्माण कैसे करें। मैं कुछ 30-पिन 1MB SIMM 70ns DRAM (1Mx9 समता के साथ) मॉड्यूल है कि मैं एक homebrew रेट्रो कंप्यूटर परियोजना में उपयोग करना चाहते हैं। दुर्भाग्य से उनके लिए कोई डेटाशीट नहीं है इसलिए मैं IBM HYM 91000S-70 और "अंडरस्टैंडिंग DRAM ऑपरेशन" से जा रहा हूं ।

मूल इंटरफ़ेस जिसे मैं समाप्त करना चाहता हूं, वह है

  • / सीएस: में, चिप का चयन करें
  • R / W: में, पढ़ना / लिखना नहीं है
  • RDY: डेटा तैयार होने पर HIGH,
  • डी: में / बाहर, 8-बिट डेटा बस
  • एक: में, 20-बिट पता बस

ताज़ा यह सही पाने के लिए कई तरीकों से बहुत सीधा-सीधा लगता है। मैं पंक्ति पता ट्रैकिंग के लिए किसी भी पुराने काउंटर का उपयोग करके सीपीयू घड़ी LOW (जहां इस विशेष चिप में कोई मेमोरी एक्सेस नहीं किया जाता है) के दौरान आरएएस-ओनली रिफ्रेशिंग (आरओआर) को वितरित करने में सक्षम होना चाहिए। मेरा मानना ​​है कि सभी पंक्तियों को कम से कम हर 64ms को JEDEC (512 प्रति 8ms के हिसाब से सीनेंस डेटशीट के अनुसार यानी साइकिल के स्टैंडर्ड रिफ्रेशमेंट / 15.6us) के हिसाब से रिफ्रेश करने की जरूरत है, इसलिए यह ठीक काम करना चाहिए और अगर मैं फंस गया तो मैं बस पोस्ट कर दूंगा। एक और प्रश्न। मैं पढ़ने और लिखने में अधिक रुचि रखता हूं, सरल, सही और यह निर्धारित करता हूं कि मुझे गति के रूप में कितनी उम्मीद करनी चाहिए।

मैं सबसे पहले यह बताता हूं कि मुझे लगता है कि यह कैसे काम करता है और संभावित समाधान जो मैं अब तक ले चुका हूं।

मूल रूप से, आपने आधे में 20-बिट पते को विभाजित किया है, एक कॉलम के लिए और दूसरा पंक्ति के लिए। आप पंक्ति पते को स्ट्रोब करते हैं, फिर स्तंभ का पता, यदि / W अधिक है जब / CAS कम हो जाता है तो यह एक रीड है, अन्यथा यह एक लेखन है। यदि यह एक लेखन है, तो डेटा को उस बिंदु से पहले से ही डेटा बस पर होना चाहिए। समय की अवधि के बाद, यदि यह पढ़ा जाता है तो डेटा उपलब्ध है या यदि यह एक लेखन है, तो डेटा निश्चित रूप से लिखा गया है। तब / आरएएस और / सीएएस को काउंटर में सहज रूप से "प्रीचार्ज" अवधि के नाम से उच्च फिर से लाने की आवश्यकता है। यह चक्र पूरा करता है।

इसलिए, मूल रूप से यह प्रत्येक संक्रमण के बीच गैर-समान विशिष्ट देरी के साथ कई राज्यों के माध्यम से एक संक्रमण है। मैंने इसे लेन-देन के प्रत्येक चरण की अवधि के क्रम में अनुक्रमित एक "तालिका" के रूप में सूचीबद्ध किया है:

  1. t (ASR) = 0ns
    • /जल्दबाज
    • /नकद
    • A0-9: आरए
    • / डब्ल्यू: एच
  2. t (RAH) = 10ns
    • / आरएएस: एल
    • /नकद
    • A0-9: आरए
    • / डब्ल्यू: एच
  3. t (ASC) = 0ns
    • / आरएएस: एल
    • /नकद
    • A0-9: सीए
    • / डब्ल्यू: एच
  4. t (CAH) = 15ns
    • / आरएएस: एल
    • / कैस: एल
    • A0-9: सीए
    • / डब्ल्यू: एच
  5. t (CAC) - t (CAH) =?
    • / आरएएस: एल
    • / कैस: एल
    • A0-9: X
    • / डब्ल्यू: एच (उपलब्ध डेटा)
  6. t (RP) = 40ns
    • /जल्दबाज
    • / कैस: एल
    • A0-9: X
    • / डब्ल्यू: एक्स
  7. t (CP) = 10ns
    • /जल्दबाज
    • /नकद
    • A0-9: X
    • / डब्ल्यू: एक्स

मैं जिस समय का उल्लेख कर रहा हूं वह निम्नलिखित चित्र में है।

समय आरेख

(CA = स्तंभ पता, RA = पंक्ति पता, X = परवाह नहीं)

यहां तक ​​कि अगर यह वास्तव में ऐसा नहीं है, तो यह कुछ ऐसा है और मुझे लगता है कि एक ही तरह का समाधान काम करेगा। इसलिए मैं अब तक दो विचारों के साथ आया हूं, लेकिन मुझे लगता है कि केवल अंतिम क्षमता है और मैं बेहतर विचारों की तलाश कर रहा हूं। मैं यहां रिफ्रेशिंग, फास्ट पेज और पैरिटी चेकिंग / जनरेटिंग को नजरअंदाज कर रहा हूं।

सबसे सरल समाधान सिर्फ एक काउंटर और एक रॉम का उपयोग करना है जहां काउंटर आउटपुट रॉम एड्रेस इनपुट है और प्रत्येक बाइट में समयावधि के लिए उपयुक्त स्टेट आउटपुट है जो एड्रेस से मेल खाती है। यह काम नहीं करेगा क्योंकि रोम धीमे हैं। यहां तक ​​कि एक पूर्व-लोडेड SRAM ऐसा लगता है कि यह इसके लायक होने के लिए बहुत धीमा होगा।

दूसरा विचार एक GAL16V8 या कुछ और का उपयोग करना था, लेकिन मुझे नहीं लगता कि मैं उन्हें अच्छी तरह से समझता हूं, प्रोग्रामर बहुत महंगे हैं और प्रोग्रामिंग सॉफ़्टवेयर बंद स्रोत और विंडोज-जहां तक ​​मुझे पता है।

मेरा अंतिम विचार केवल एक ही है जो मुझे लगता है कि वास्तव में काम कर सकता है। 74ACT लॉजिक परिवार में कम प्रसार देरी है और उच्च घड़ी आवृत्तियों को स्वीकार करता है। मुझे लगता है कि पढ़ना और लिखना कुछ CD74ACT164E शिफ्ट रजिस्टर और SN74ACT573N के साथ किया जा सकता है ।

मूल रूप से, प्रत्येक अद्वितीय राज्य को 5 वी और जीएनडी रेल का उपयोग करके अपने स्वयं के कुंडी को सांख्यिकीय रूप से प्रोग्राम किया जाता है। प्रत्येक शिफ्ट रजिस्टर आउटपुट एक कुंडी / OE पिन पर जाता है। यदि मैं डेटा शीट को सही समझता हूं, तो प्रत्येक राज्य के बीच देरी केवल 1 / SCLK हो सकती है, लेकिन यह PROM या 74% समाधान से बहुत बेहतर है।

तो, क्या अंतिम दृष्टिकोण काम करने की संभावना है? क्या ऐसा करने का कोई तेज़, छोटा या आम तौर पर बेहतर तरीका है? मुझे लगता है कि मैंने देखा कि आईबीएम पीसी / एक्सटी ने डीआरएएम से संबंधित किसी चीज के लिए 7400 चिप्स का उपयोग किया था, लेकिन मैंने केवल टॉप-बोर्ड तस्वीरें देखीं, इसलिए मुझे यकीन नहीं है कि यह कैसे काम करता है।

ps मुझे यह पसंद है कि यह DIP में उल्लेखनीय हो और FPGA या आधुनिक UC का उपयोग करके "धोखा" न दे।

pps शायद एक ही कुंडी दृष्टिकोण के साथ सीधे गेट देरी का उपयोग करना बेहतर विचार है। मुझे लगता है कि दोनों शिफ्ट रजिस्टर और डायरेक्ट गेट / प्रचार देरी के तरीके तापमान के साथ अलग-अलग होंगे, लेकिन मैं यह स्वीकार करता हूं।

भविष्य में इसे खोजने वाले किसी भी व्यक्ति के लिए, बिल हेरड और एंड्रे फेशट के बीच यह चर्चा इस धागे में वर्णित कई डिजाइनों को शामिल करती है और DRAM परीक्षण सहित अन्य समस्याओं पर चर्चा करती है।


1
आपका रेट्रो कंप्यूटर कौन सा CPU उपयोग करने वाला है?
बेनामी

6502, मेमोरी जाहिर तौर पर बांकी होगी।
एंथनी

क्या आपके लिए साइकिल का आविष्कार करना संभव नहीं है, क्या डीआरएएम का उपयोग करके पहले से उपलब्ध डिज़ाइन हैं? मैं मशीनों के इस परिवार से परिचित नहीं हूं, लेकिन C64 एक अच्छा मैच होना चाहिए। हालांकि यह मूल रूप से रैम को नियंत्रित करने के लिए 6567 "वीआईसी" चिप का उपयोग करता है। लेकिन फिर, मुझे यकीन है कि तब से संबंधित परियोजनाएं थीं जो आप करना चाहते हैं।
बेनामी

3
थोड़ा विकृत सुझाव: Z80 में ताज़ा तर्क को संभालने के लिए एक DRAM कंट्रोलर बिल्ट-इन था। (आपको अभी भी एड्रेस मल्टीप्लेक्स की जरूरत है)
ब्रायन ड्रमंड

3
@BrianDrummond कृपया, अंधेरे पक्ष में जाने की अनुशंसा न करें। इससे अच्छा कुछ नहीं निकल सकता।
पाइप

जवाबों:


6

आईबीएम पर्सनल कंप्यूटर एक्सटी तकनीकी संदर्भ मैनुअल (परिशिष्ट डी) में आईबीएम पीसी / एक्सटी के लिए पूरी योजनाएं हैं, जो आप लाइन पर पा सकते हैं।

यहाँ समस्या यह है कि, एक स्ट्रोब लाइन दी गई है जो पढ़ने या लिखने की मेमोरी में सक्रिय है, आप एड्रेस मल्टीप्लेक्सर के लिए RAS, CAS और एक कंट्रोल लाइन (इसे MUX कहते हैं) जेनरेट करना चाहते हैं। सादगी के लिए, मैं अनुचित रूप से मान लूंगा कि स्ट्रोब, आरएएस और कैस सभी सक्रिय-उच्च हैं।

इस समय के आसपास कुछ अन्य कंप्यूटरों से पीसी / एक्सटी योजनाबद्ध और योजनाबद्ध को देखते हुए, मैं तीन बुनियादी रणनीतियों को देखता हूं, जो लगभग निम्नलिखित हैं:

  • आरएएस के लिए स्ट्रोब का उपयोग करें। MUX उत्पन्न करने के लिए RAS पर एक विलंब रेखा (एक भाग जिसका आउटपुट उसके इनपुट का एक समय विलंबित संस्करण है) का उपयोग करें, और RAS का एक बाद का संस्करण बनाने के लिए एक और विलंब रेखा का उपयोग करें, जो CAS के लिए उपयोग किया जाता है। इस रणनीति का उपयोग पीसी / एक्सटी और टीआरएस -80 मॉडल II द्वारा किया जाता है।

    एक उदाहरण (आधुनिक) विलंब लाइन भाग मैक्सिम DS1100 है।

  • आरएएस के लिए स्ट्रोब का उपयोग करें और इसे एमयूएक्स और कैस के लिए देरी करें, लेकिन एक विलंब लाइन के बजाय एक हाई-स्पीड शिफ्ट रजिस्टर का उपयोग करें। इस रणनीति का उपयोग TRS-80 मॉडल I और Apple II द्वारा किया जाता है।

  • कस्टम आईसी का उपयोग करें। यह कमोडोर 64 की रणनीति है।


जाहिरा तौर पर मैं कल ही अपेंडिक्स डी के बिना एक एक्सटी टीआर पा सकता था। मुझे अब मिल गया है, यह बहुत अच्छा है। मुझे नहीं पता था कि ये देरी लाइन आईसी मौजूद थी और सोच रही थी कि वे तापमान से कैसे निपटेंगे। आधुनिक उदाहरण का उल्लेख करने के लिए धन्यवाद। कई समाधानों के लिए भी +1।
एंथोनी

5

आपका प्रश्न काफी जटिल है कि मुझे यकीन भी नहीं है कि आपकी वास्तविक समस्या क्या है, लेकिन मैं कोशिश करूँगा!

"सबसे साफ" 6502-आधारित DRAM डिज़ाइन जो मुझे मिल सकता है वह कमोडोर PET 2001-N से है । 1 मेगाहर्ट्ज पर यह 6502 चल रहा है, लेकिन DRAM लॉजिक को 16 मेगाहर्ट्ज पर देखा गया है, जो सभी समय उत्पन्न करने की संभावना है।

मैंने विवरणों का विश्लेषण नहीं किया है, लेकिन मुख्य कार्रवाई 74191 4-बिट काउंटर के साथ 74164 शिफ्ट रजिस्टर से जुड़ी हुई लगती है। यह 74157 MUX में जाने वाली 8 अलग-अलग लाइनों को आउटपुट करता है जिसे R / W लाइन द्वारा नियंत्रित किया जाता है। MUX से आउटपुट 7474 फ्लिप-फ्लॉप और अंतिम RAS / CAS संकेतों को उत्पन्न करने के लिए कुछ असतत तर्क देता है। यहाँ एक अंश है जो संदर्भ योजनाबद्ध में प्रासंगिक पृष्ठ से जोड़ता है।

पीईटी 2001-एन संदर्भ पेज 6

रिफ्रेश को एक अलग काउंटर के साथ संभाला जाता है, और प्रत्येक एड्रेस लाइन को एक मल्टीप्लेकर के साथ जोड़ा जाता है जो "वास्तविक" पते या रिफ्रेश एड्रेस का चयन करता है।

इस तर्क के कुछ हिस्सों को वीडियो सबसिस्टम के लिए समय भी उत्पन्न होता है। मुझे यकीन है कि यह आपकी विशेष जरूरतों के लिए सरल किया जा सकता है, लेकिन मुझे लगता है कि कुछ समान उपयोगी हो सकता है: एक उच्च आवृत्ति काउंटर, शिफ्ट रजिस्टर और मल्टीप्लेयर।


यह वही है जिसके बारे में मैं सोच रहा था, लेकिन मैं एक MUX या दो के बजाय कई लेचियों का मंथन करने के लिए पर्याप्त गूंगा था। 16Mhz घड़ी मुझे बंद कर देती है, क्योंकि a) यह CPU घड़ी की तुलना में बहुत अधिक है, जो मुझे अभी भी अजीब लगी है, लेकिन यह समझ में आता है और b) चरण कम से कम ~ 62ns प्लस प्रसार विलंब हो सकते हैं, जो मुझे लगता था कि धीमा था लेकिन अब मैं आईबीएम पीसी / एक्सटी के समान ही देखें।
एंथनी

ऐप्पल II बहुत समान है, समय के लिए 14.318 मेगाहर्ट्ज वीडियो घड़ी का उपयोग करता है और सीपीयू और वीडियो के बीच मेमोरी को बिना किसी विवाद के वैकल्पिक आधा चक्रों में साझा करता है। इसके लिए अलग रिफ्रेश काउंटर की भी आवश्यकता नहीं है, क्योंकि वीडियो रिफ्रेश गतिविधि मेमोरी को तरोताजा रखने के लिए कार्य करती है।
डेव

-2

ps मुझे यह पसंद है कि यह DIP में उल्लेखनीय हो और FPGA या आधुनिक UC का उपयोग करके "धोखा" न दे।

जबकि मैं आपके प्रोजेक्ट की भावना और गैर-फैंसी भागों का उपयोग करने की आपकी इच्छा को पूरी तरह से समझता हूं, अगर मैं आप होता तो मैं निश्चित रूप से एफपीजीए रास्ते में जाता ।

कई कारण:

  1. यह सीखने का एक आदर्श अवसर है। डीआरएएम नियंत्रक को डिजाइन करना एक "हैलो-वर्ल्ड" परियोजना नहीं है और इसके बाद आप आत्मविश्वास से कह सकते हैं कि आप "एलपीजीए" कर सकते हैं;
  2. आप इस मेमोरी से हर तरह के प्रदर्शन को निचोड़ सकते हैं, खासकर अगर यह एक पुरानी DRAM चिप है। न केवल आपके पास अपना घर-निर्मित 6502-आधारित पीसी होगा, यह संभव है कि आपके पास सबसे तेज़ 6502-आधारित पीसी हो;
  3. आपके CPU द्वारा जारी किए गए मेमोरी ऑपरेशंस के डिबग या आंकड़े बनाना बहुत आसान हो सकता है। आप समानांतर बसों पर लॉजिक एनालाइज़र का उपयोग कर सकते हैं, लेकिन यह कभी मज़ेदार नहीं है (मेरा एक दोस्त इन पंक्तियों के साथ कुछ करता है - वह 8088 का एक चक्र-सटीक सिमुलेशन लिखना चाहता है और इस कारण से उसे मेमोरी एक्सेस और टाइमिंग के बारे में उन आंकड़ों को इकट्ठा करना होगा। पैटर्न। वह मूल चिप सेट (8288, 8280, 8237) का उपयोग करता है और चैनलों की एक बहुत कुछ के साथ एक तर्क विश्लेषक का उपयोग करता है, लेकिन अपने अनुभव से मैं आपको बता सकता है कि यह है एक खींचें)।

2
मुझे यकीन नहीं है कि यह एक टिप्पणी के बजाय एक उत्तर कैसे है। 1) वह यह नहीं कहता कि वह FPGAs सीखना चाहता है। 2) 80 के दशक से DRAMs पहले से ही असतत तर्क के लिए काफी धीमी हैं। 3) डिबगिंग कठिन हो सकता है। FPGA में सब कुछ लागू क्यों नहीं किया गया, या सिर्फ सॉफ्टवेयर में ही क्यों? यहां तक ​​कि रैम का उपयोग क्यों करें ... :)
पाइप

1
@ पाइप्स: हाँ, बिल्कुल। मैं फिलहाल FPGAs सीखने में समय नहीं बिताना चाहता। मैं पहले ही अपनी प्लेट पर दूसरे असंबंधित एनालॉग प्रोजेक्ट के साथ पर्याप्त हो गया हूं। FPGAs और PLD सामान्य रूप से महसूस करते हैं जैसे वे इस बिंदु पर रास्ते में मिलते हैं भले ही किसी दिन मैं सीखूंगा कि उनका उपयोग कैसे करना है।
एंथनी

1
@ पका: पुरस्कृत बोर्ड अक्सर मुश्किल होता है, समय लगता है, और निराशा होती है, खासकर अगर कोई विशेष रूप से कुशल नहीं है। डिजाइन के कुछ हिस्सों के लिए काफी सरल PLDs (जैसे 22V10) का उपयोग करके चीजों को ट्विक करना आसान हो जाएगा।
सुपरकैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.