ฉันจะใช้คอนโทรลเลอร์ DRAM แบบอะซิงโครนัสอย่างง่าย ๆ ได้อย่างไร?


9

ฉันต้องการทราบวิธีสร้างตัวควบคุม DRAM แบบอะซิงโครนัสแบบกระดูกเปลือย ฉันมีโมดูล DRAM ขนาด 70 เมกะไบต์ 1 SIMM 70ns DRAM (1Mx9 with parity) ที่ฉันต้องการใช้ในโครงการคอมพิวเตอร์ย้อนยุคในโฮมบรูว์ น่าเสียดายที่ไม่มีแผ่นข้อมูลสำหรับพวกเขาดังนั้นฉันไปจากซีเมนส์ HYM 91000S-70และ"การทำความเข้าใจกับการทำงานของ DRAM"โดย IBM

อินเทอร์เฟซพื้นฐานที่ฉันต้องการจะทำคือ

  • / CS: in, เลือกชิป
  • R / W: in, อ่าน / ไม่เขียน
  • RDY: ออกสูงเมื่อข้อมูลพร้อม
  • D: เข้า / ออกบัสข้อมูล 8 บิต
  • A: ในบัส 20 บิตที่อยู่

รีเฟรชดูเหมือนตรงไปตรงมาด้วยหลายวิธีที่จะทำให้ถูกต้อง ฉันควรจะทำการกระจาย (interleaved) RAS-only refresh (ROR) ในระหว่างนาฬิกา CPU LOW (โดยที่ไม่มีการเข้าถึงหน่วยความจำในชิปนี้โดยเฉพาะ) โดยใช้ตัวนับเก่าสำหรับการติดตามที่อยู่แถว ฉันเชื่อว่าทุกแถวต้องได้รับการรีเฟรชอย่างน้อยทุก ๆ 64ms ตาม JEDEC (512 ต่อ 8ms ตามแผ่นข้อมูลของ Seimens เช่นการรีเฟรชมาตรฐานของรอบ / 15.6us) ดังนั้นควรทำงานได้ดีและถ้าฉันติดอยู่ฉันจะโพสต์ คำถามอื่น ฉันสนใจที่จะอ่านและเขียนง่าย ๆ ถูกต้องและกำหนดสิ่งที่ฉันควรคาดหวังให้ได้เร็วที่สุด

ฉันจะอธิบายอย่างรวดเร็วก่อนว่าฉันคิดว่ามันทำงานอย่างไรและวิธีแก้ปัญหาที่อาจเกิดขึ้น

โดยทั่วไปคุณแบ่งที่อยู่ 20 บิตครึ่งโดยใช้ครึ่งหนึ่งสำหรับคอลัมน์และอีกครึ่งหนึ่งสำหรับแถว คุณ strobe ที่อยู่แถวจากนั้นที่อยู่คอลัมน์ถ้า / W สูงเมื่อ / CAS ไปต่ำแล้วเป็นการอ่านมิฉะนั้นจะเป็นการเขียน ถ้าเป็นการเขียนข้อมูลจำเป็นต้องอยู่บน data bus แล้วโดยจุดนั้น หลังจากผ่านไประยะเวลาหนึ่งถ้าเป็นแบบอ่านข้อมูลจะพร้อมใช้งานหรือถ้าเป็นแบบเขียนข้อมูลจะถูกเขียนอย่างแน่นอน ดังนั้น / RAS และ / CAS จะต้องนำ HIGH อีกครั้งในช่วงเวลาที่เรียกว่า "precharge" สิ่งนี้เสร็จสิ้นรอบ

ดังนั้นโดยทั่วไปมันเป็นการเปลี่ยนแปลงในหลายรัฐที่มีความล่าช้าเฉพาะที่ไม่สม่ำเสมอระหว่างการเปลี่ยนแปลงแต่ละครั้ง ฉันได้ระบุว่ามันเป็น "ตาราง" ที่จัดทำดัชนีตามระยะเวลาของแต่ละขั้นตอนของการทำธุรกรรมตามลำดับ:

  1. t (ASR) = 0ns
    • /ผื่น
    • / CAS: H
    • A0-9: RA
    • / W: H
  2. t (RAH) = 10ns
    • / RAS: L
    • / CAS: H
    • A0-9: RA
    • / W: H
  3. t (ASC) = 0ns
    • / RAS: L
    • / CAS: H
    • 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
    • /ผื่น
    • / CAS: L
    • A0-9: X
    • / W: X
  7. t (CP) = 10ns
    • /ผื่น
    • / CAS: H
    • A0-9: X
    • / W: X

เวลาที่ฉันพูดถึงอยู่ในแผนภาพต่อไปนี้

แผนภาพเวลา

(CA = ที่อยู่คอลัมน์ RA = ที่อยู่แถว X = ไม่สนใจ)

แม้ว่ามันจะไม่ได้เป็นอย่างนั้น แต่มันก็เป็นอย่างนั้นและฉันคิดว่าวิธีแก้ปัญหาแบบเดียวกันจะใช้ได้ ดังนั้นฉันจึงคิดไอเดียสองสามอย่าง แต่ฉันคิดว่าสุดท้ายเท่านั้นที่มีศักยภาพและฉันกำลังมองหาไอเดียที่ดีกว่า ฉันไม่สนใจการตรวจสอบ / สร้างเพจใหม่อย่างรวดเร็วและเท่าเทียมกันที่นี่

วิธีแก้ปัญหาที่ง่ายที่สุดคือใช้ตัวนับและ ROM ที่ตัวนับเอาต์พุตเป็นอินพุตแอดเดรส ROM และแต่ละไบต์มีสถานะเอาต์พุตที่เหมาะสมสำหรับช่วงเวลาที่แอดเดรสสอดคล้องกัน สิ่งนี้จะไม่ทำงานเนื่องจาก ROM ช้า แม้แต่ SRAM ที่โหลดไว้ล่วงหน้าก็ดูเหมือนว่าจะช้าเกินไปที่จะคุ้มค่า

ความคิดที่สองคือการใช้ GAL16V8 หรือบางอย่าง แต่ฉันไม่คิดว่าฉันเข้าใจพวกเขาดีพอโปรแกรมเมอร์มีราคาแพงมากและซอฟต์แวร์การเขียนโปรแกรมปิดแหล่งที่มา & Windows เท่าที่ฉันรู้

ความคิดสุดท้ายของฉันคือสิ่งเดียวที่ฉันคิดว่าอาจใช้งานได้จริง ตระกูลตรรกะ 74ACT มีความล่าช้าในการแพร่กระจายต่ำและยอมรับความถี่สัญญาณนาฬิกาสูง ฉันคิดว่าการอ่านและการเขียนสามารถทำได้ด้วยบางCD74ACT164Eทะเบียน shift และSN74ACT573N

โดยทั่วไปแต่ละสถานะที่ไม่ซ้ำกันจะได้รับกลอนที่ตั้งโปรแกรมแบบคงที่โดยใช้ราง 5V และ GND เอาต์พุต shift register แต่ละตัวจะไปที่หนึ่ง / OE ของสลัก ถ้าฉันเข้าใจแผ่นข้อมูลถูกต้องการหน่วงเวลาระหว่างแต่ละรัฐอาจเป็น 1 / SCLK เท่านั้น แต่นั่นดีกว่าโซลูชัน PROM หรือ 74HC มาก

ดังนั้นวิธีการสุดท้ายมีแนวโน้มที่จะทำงานหรือไม่ มีวิธีที่เร็วกว่าเล็กกว่าหรือโดยทั่วไปดีกว่าในการทำเช่นนี้หรือไม่? ฉันคิดว่าฉันเห็นว่า IBM PC / XT ใช้ชิป 7400 สำหรับสิ่งที่เกี่ยวข้องกับ DRAM แต่ฉันเห็นเฉพาะภาพบนกระดานเท่านั้นดังนั้นฉันจึงไม่แน่ใจว่าวิธีการนี้ทำงานอย่างไร

ป.ล. ฉันต้องการให้มันเป็นไปได้ในกรมทรัพย์สินทางปัญญาและไม่ "โกง" โดยใช้ FPGA หรือ uC ที่ทันสมัย

pps บางทีการใช้เกทเวย์โดยตรงกับวิธีการสลักแบบเดียวกันนั้นเป็นความคิดที่ดีกว่า ฉันรู้ว่าทั้งการลงทะเบียนกะและวิธีการหน่วงเวลาเกต / การแพร่กระจายโดยตรงจะแตกต่างกันไปตามอุณหภูมิ แต่ฉันยอมรับสิ่งนี้

สำหรับใครก็ตามที่พบสิ่งนี้ในอนาคตการสนทนาระหว่าง Bil Herd และAndré Fachat นี้ครอบคลุมการออกแบบหลายอย่างที่กล่าวถึงในหัวข้อนี้และกล่าวถึงปัญหาอื่น ๆ รวมถึงการทดสอบ DRAM


1
ซีพียูคอมพิวเตอร์เรโทรของคุณจะใช้งานแบบไหน
ไม่เปิดเผยตัว

6502 หน่วยความจำจะถูกแบงอย่างชัดเจน
แอนโทนี่

เป็นไปได้หรือไม่ที่จะไม่คิดค้นจักรยานให้กับคุณมีการออกแบบที่มีอยู่แล้วโดยใช้ DRAM หรือไม่ ฉันไม่คุ้นเคยกับตระกูลของเครื่องจักรนี้ แต่ C64 จะต้องตรงกับที่ดี อย่างไรก็ตามเดิมใช้ชิป 6567 "VIC" เพื่อควบคุม RAM แต่อีกครั้งฉันมั่นใจตั้งแต่นั้นมามีโครงการที่เกี่ยวข้องกับสิ่งที่คุณอยากทำ
ไม่เปิดเผยตัว

3
คำแนะนำที่บิดเบี้ยวเล็กน้อย: Z80 มีตัวควบคุม DRAM ในตัวเพียงพอที่จะรองรับตรรกะการรีเฟรช (คุณยังต้องการที่อยู่มัลติเพล็กเซอร์ที่อยู่)
Brian Drummond

3
@BrianDrummond กรุณาไม่แนะนำให้ไปด้านมืด ไม่มีอะไรที่ดีสามารถออกมาจากที่
ท่อ

คำตอบ:


6

มีแผนงานที่สมบูรณ์สำหรับ IBM PC / XT ในคู่มืออ้างอิงทางเทคนิคของ IBM Personal Computer XT (ภาคผนวก D) ซึ่งคุณสามารถค้นหาได้ทางออนไลน์

ปัญหาที่เกิดขึ้นคือเมื่อใช้สายแฟลชซึ่งเปิดใช้งานเมื่อหน่วยความจำอ่านหรือเขียนคุณต้องการสร้าง RAS, CAS และสายควบคุม (เรียกว่า MUX) สำหรับมัลติเพล็กเซอร์ที่อยู่ เพื่อความเรียบง่ายฉันจะถือว่าไม่สมจริงว่า strobe, RAS และ CAS ทั้งหมดแอ็คทีฟสูง

เมื่อดูที่วงจร PC / XT และแผนผังจากคอมพิวเตอร์อื่น ๆ ในช่วงเวลานี้ฉันเห็นกลยุทธ์พื้นฐานสามประการซึ่งมีดังต่อไปนี้:

  • ใช้แฟลชสำหรับ RAS ใช้ไลน์การหน่วงเวลา (ส่วนที่เอาต์พุตเป็นเวอร์ชันการหน่วงเวลาของอินพุต) บน RAS เพื่อสร้าง MUX และใช้ไลน์การหน่วงเวลาอื่นเพื่อสร้าง RAS รุ่นต่อไปซึ่งใช้สำหรับ CAS PC / XT และ TRS-80 Model II ใช้กลยุทธ์นี้

    ส่วนของเส้นหน่วงเวลาตัวอย่าง (ทันสมัย) คือ Maxim DS1100

  • ใช้แฟลชสำหรับ RAS และหน่วงเวลาสำหรับ MUX และ CAS แต่ทำได้โดยใช้การลงทะเบียนกะความเร็วสูงแทนสายการหน่วงเวลา กลยุทธ์นี้ใช้โดย TRS-80 Model I และ Apple II

  • ใช้ไอซีที่กำหนดเอง นี่คือกลยุทธ์ของ Commodore 64


เห็นได้ชัดว่าฉันเพิ่งพบ XT TR โดยไม่มีภาคผนวก D เมื่อวานนี้ ฉันได้แล้วตอนนี้ดีมาก ฉันไม่ทราบว่ามีวงจรรวมสายหน่วงเวลาเหล่านี้อยู่และสงสัยว่าจะจัดการกับอุณหภูมิได้อย่างไร ขอบคุณสำหรับการกล่าวถึงตัวอย่างที่ทันสมัย +1 สำหรับโซลูชั่นหลายรายการเช่นกัน
แอนโทนี่

5

คำถามของคุณซับซ้อนพอที่ฉันไม่แน่ใจว่าปัญหาจริงของคุณคืออะไร แต่ฉันจะลอง!

"ความสะอาด" 6502 ตามการออกแบบ DRAM ฉันสามารถหามาจากพลเรือจัตวาเล้าโลม 2001-N มันมี 6502 ทำงานที่ 1 MHz แต่ตรรกะ DRAM นั้นโอเวอร์คล็อกที่ 16 MHz ซึ่งมีแนวโน้มที่จะสร้างการกำหนดเวลาทั้งหมด

ฉันไม่ได้วิเคราะห์รายละเอียด แต่การกระทำหลักดูเหมือนว่าจะเกิดขึ้นกับตัวนับ 4 บิต 74191 ที่เชื่อมต่อกับ 74164 shift register เอาต์พุตนี้แยก 8 บรรทัดไปที่ 74157 MUX ซึ่งควบคุมโดยสาย R / W เอาท์พุทจาก MUX ไปสู่ ​​7474 flip-flop และตรรกะที่ไม่ต่อเนื่องบางส่วนเพื่อสร้างสัญญาณ RAS / CAS ขั้นสุดท้าย นี่คือข้อความที่ตัดตอนมาซึ่งเชื่อมโยงไปยังหน้าเว็บที่เกี่ยวข้องในแผนผังอ้างอิง

PET 2001-N หน้าอ้างอิง 6

การรีเฟรชได้รับการจัดการโดยมีตัวแยกต่างหากและแต่ละบรรทัดที่อยู่จะถูกรวมเข้ากับตัวทวีคูณที่เลือกที่อยู่ "ของจริง" หรือที่อยู่ของการฟื้นฟู

ส่วนของตรรกะนี้ก็ดูเหมือนว่าจะสร้างการกำหนดเวลาสำหรับระบบย่อยวิดีโอ ฉันแน่ใจว่ามันง่ายสำหรับความต้องการของคุณโดยเฉพาะ แต่ฉันคิดว่าสิ่งที่คล้ายกันนั้นมีประโยชน์: ตัวนับความถี่สูง, shift register และ multiplexers


นี่คือสิ่งที่ฉันคิด แต่ก็โง่พอที่จะระดมสมองขึ้นแลตช์หลาย ๆ ตัวแทนที่จะเป็น MUX หรือสองตัว นาฬิกา 16Mhz ช่วยฉันด้วยเพราะก) มันสูงกว่านาฬิกาซีพียูที่ฉันเพิ่งพบแปลก แต่มันก็สมเหตุสมผลและข) ขั้นตอนอาจน้อย ~ 62ns บวกกับความล่าช้าในการแพร่กระจายซึ่งฉันคิดว่าช้า แต่ตอนนี้ฉัน ดูว่าเป็นไปในลำดับเดียวกันกับ IBM PC / XT
แอนโทนี่

Apple II นั้นคล้ายกันมากโดยใช้นาฬิกาวิดีโอ 14.318 MHz สำหรับกำหนดเวลาและแบ่งปันหน่วยความจำระหว่าง CPU และวิดีโอในรอบครึ่งทางเลือกโดยไม่มีการโต้แย้ง ไม่จำเป็นต้องมีตัวนับการรีเฟรชแยกต่างหากเพราะกิจกรรมการรีเฟรชวิดีโอจะทำหน้าที่เก็บหน่วยความจำให้รีเฟรชเช่นกัน
Dave Tweed

-2

ป.ล. ฉันต้องการให้มันเป็นไปได้ในกรมทรัพย์สินทางปัญญาและไม่ "โกง" โดยใช้ FPGA หรือ uC ที่ทันสมัย

ในขณะที่ผมเข้าใจจิตวิญญาณของโครงการของคุณและความปรารถนาของคุณที่จะใช้ชิ้นส่วนที่ไม่แฟนซีแน่นอนฉันจะไปทางงาน FPGA ถ้าฉันเป็นคุณ

หลากหลายเหตุผล:

  1. มันเป็นโอกาสการเรียนรู้ที่สมบูรณ์แบบ การออกแบบตัวควบคุม DRAM ไม่ใช่โครงการ "สวัสดีโลก" และหลังจากนั้นคุณสามารถพูดได้อย่างมั่นใจว่าคุณ "สามารถทำ" FPGA;
  2. คุณสามารถบีบประสิทธิภาพออกจากหน่วยความจำนี้ได้ทุกบิตโดยเฉพาะอย่างยิ่งถ้าเป็นชิป DRAM รุ่นเก่า ไม่เพียง แต่คุณจะมีพีซีที่ใช้งานในบ้าน 6502 เป็นไปได้ว่าคุณจะมีพีซีที่ใช้ 6502 ที่เร็วที่สุด
  3. สามารถดีบักปัญหาได้ง่ายขึ้นหรือสร้างสถิติการดำเนินงานหน่วยความจำที่ CPU ของคุณออกให้ คุณสามารถใช้เครื่องวิเคราะห์เชิงตรรกะบนรถเมล์คู่ขนาน แต่มันก็ไม่สนุก (เพื่อนของฉันทำบางอย่างตามเส้นเหล่านี้ - เขาต้องการเขียนแบบจำลองวัฏจักรที่แน่นอนที่ 8088 และด้วยเหตุนี้เขาจึงจำเป็นต้องรวบรวมสถิติเหล่านั้นเกี่ยวกับการเข้าถึงหน่วยความจำ รูปแบบ. เขาใช้ชุดชิปเดิม (8288, 8280, 8237) และใช้การวิเคราะห์ตรรกะที่มีจำนวนมากของช่อง แต่จากประสบการณ์ของเขาที่ผมสามารถบอกคุณได้ว่ามันคือการลาก)

2
ฉันไม่แน่ใจว่านี่เป็นคำตอบอย่างไรแทนที่จะเป็นความเห็น 1) เขาไม่ได้บอกว่าเขาต้องการเรียนรู้ FPGA 2) DRAMs จากยุค 80 ช้าพอสำหรับตรรกะที่ไม่ต่อเนื่อง 3) การแก้ไขข้อบกพร่องอาจเป็นเรื่องยาก ทำไมไม่ใช้ทุกอย่างใน FPGA หรือเพียงแค่ซอฟต์แวร์ ทำไมถึงใช้ RAM เลย ... :)
ไปป์

1
@ ท่อ: ใช่แน่นอน ฉันไม่ต้องการใช้เวลาในการเรียนรู้ FPGA ในขณะนี้ ฉันได้รับเพียงพอแล้วในจานของฉันกับโครงการอะนาล็อกที่สองที่ไม่เกี่ยวข้อง โดยทั่วไปแล้ว FPGAs และ PLD จะรู้สึกเหมือนว่าพวกเขาเข้ามาถึงจุดนี้แม้ว่าบางวันฉันจะเรียนรู้วิธีใช้พวกเขา
แอนโทนี่

1
@pipe: กระดานให้รางวัลมักจะยากใช้เวลานานและทำให้หงุดหงิดโดยเฉพาะหากไม่มีทักษะเฉพาะ การใช้ PLD ที่ค่อนข้างเรียบง่าย (เช่น 22V10) สำหรับบางส่วนของการออกแบบจะทำให้ง่ายต่อการปรับแต่งสิ่งต่าง ๆ
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.