Làm cách nào để triển khai bộ điều khiển DRAM không đồng bộ rất đơn giản?


9

Tôi muốn biết cách xây dựng bộ điều khiển DRAM không đồng bộ xương trần. Tôi có một số mô-đun DRAM 70ns SIMM 70ns (1Mx9 với tính chẵn lẻ) mà tôi muốn sử dụng trong dự án máy tính retro homebrew. Thật không may, không có bảng dữ liệu nào cho họ nên tôi đã đến từ Siemens HYM 91000S-70"Tìm hiểu hoạt động DRAM" của IBM.

Giao diện cơ bản mà tôi muốn kết thúc là

  • / CS: trong, chọn chip
  • R / W: trong, đọc / không viết
  • RDY: hết, CAO khi dữ liệu đã sẵn sàng
  • D: vào / ra, bus dữ liệu 8 bit
  • A: trong, bus địa chỉ 20 bit

Làm mới có vẻ khá đơn giản với một số cách để làm cho đúng. Tôi có thể thực hiện phân phối (ROR) chỉ phân tán (xen kẽ) trong đồng hồ CPU THẤP (trong đó không có quyền truy cập bộ nhớ được thực hiện trong chip cụ thể này) bằng cách sử dụng bất kỳ bộ đếm cũ nào để theo dõi địa chỉ hàng. Tôi tin rằng tất cả các hàng cần được làm mới ít nhất cứ sau 64ms theo JEDEC (512 trên 8ms theo bảng dữ liệu Seples tức là làm mới tiêu chuẩn của chu kỳ / 15.6us), vì vậy điều này sẽ hoạt động tốt và nếu tôi gặp khó khăn, tôi sẽ chỉ đăng câu hỏi khác. Tôi quan tâm nhiều hơn đến việc đọc và viết đơn giản, chính xác và xác định những gì tôi sẽ mong đợi về tốc độ.

Trước tiên tôi sẽ nhanh chóng mô tả cách tôi nghĩ nó hoạt động và các giải pháp tiềm năng mà tôi đã đưa ra cho đến nay.

Về cơ bản, bạn chia một địa chỉ 20 bit thành một nửa, sử dụng một nửa cho cột và nửa còn lại cho hàng. Bạn nhấp vào địa chỉ hàng, sau đó là địa chỉ cột, nếu / W ở mức CAO khi / CAS ở mức THẤP thì đó là đọc, nếu không thì là ghi. Nếu đó là ghi, dữ liệu cần phải có trên bus dữ liệu vào thời điểm đó. Sau một khoảng thời gian, nếu đó là dữ liệu đọc thì dữ liệu có sẵn hoặc nếu đó là ghi, dữ liệu chắc chắn đã được ghi. Sau đó / RAS và / CAS cần được đưa trở lại CAO trong khoảng thời gian "nạp tiền" được đặt tên trực quan. Điều này hoàn thành chu trình.

Vì vậy, về cơ bản, đó là một quá trình chuyển đổi qua một số trạng thái với độ trễ cụ thể không đồng nhất giữa mỗi lần chuyển đổi. Tôi đã liệt kê nó ra dưới dạng "bảng" được lập chỉ mục theo thời lượng của từng giai đoạn của giao dịch theo thứ tự:

  1. t (ASR) = 0ns
    • / RAS: H
    • / 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 (dữ liệu có sẵn)
  6. t (RP) = 40ns
    • / RAS: H
    • / CAS: L
    • A0-9: X
    • / W: X
  7. t (CP) = 10ns
    • / RAS: H
    • / CAS: H
    • A0-9: X
    • / W: X

Những lần tôi đang đề cập đến là trong sơ đồ sau.

sơ đồ thời gian

(CA = địa chỉ cột, RA = địa chỉ hàng, X = không quan tâm)

Ngay cả khi nó không chính xác như vậy, nó cũng giống như vậy và tôi nghĩ rằng loại giải pháp tương tự sẽ hoạt động. Vì vậy, tôi đã đưa ra một vài ý tưởng cho đến nay nhưng tôi nghĩ chỉ có ý tưởng cuối cùng mới có tiềm năng và tôi đang tìm kiếm những ý tưởng tốt hơn. Tôi đang bỏ qua việc làm mới, Trang nhanh và Kiểm tra chẵn lẻ ở đây.

Giải pháp đơn giản nhất là sử dụng bộ đếm và ROM trong đó đầu ra của bộ đếm là đầu vào địa chỉ ROM và mỗi byte có đầu ra trạng thái thích hợp trong khoảng thời gian mà địa chỉ tương ứng. Điều này sẽ không hoạt động vì ROM chậm. Ngay cả một SRAM được tải sẵn có vẻ như nó sẽ quá chậm để có giá trị.

Ý tưởng thứ hai là sử dụng GAL16V8 hoặc một cái gì đó nhưng tôi không nghĩ rằng tôi hiểu chúng đủ rõ, các lập trình viên rất đắt tiền và phần mềm lập trình là nguồn đóng & chỉ có Windows theo như tôi biết.

Ý tưởng cuối cùng của tôi là người duy nhất tôi nghĩ có thể thực sự hoạt động. Họ logic 74ACT có độ trễ lan truyền thấp và chấp nhận tần số xung nhịp cao. Tôi nghĩ rằng đọc và viết có thể được thực hiện với một số thanh ghi thay đổi CD74ACT164ESN74ACT573N .

Về cơ bản, mỗi trạng thái duy nhất có chốt riêng được lập trình tĩnh bằng cách sử dụng đường ray 5V và GND. Mỗi đầu ra thanh ghi thay đổi đi đến một chốt / OE chốt. Nếu tôi hiểu đúng các bảng dữ liệu, độ trễ giữa mỗi trạng thái chỉ có thể là 1 / SCLK nhưng điều đó tốt hơn nhiều so với giải pháp PROM hoặc 74HC.

Vì vậy, là cách tiếp cận cuối cùng có khả năng làm việc? Có cách nào nhanh hơn, nhỏ hơn hay nói chung là tốt hơn để làm điều này? Tôi nghĩ rằng tôi đã thấy rằng IBM PC / XT đã sử dụng 7400 chip cho một cái gì đó liên quan đến DRAM nhưng tôi chỉ thấy những bức ảnh hàng đầu, vì vậy tôi không chắc nó hoạt động như thế nào.

ps Tôi muốn điều này có thể thực hiện được trong DIP và không "gian lận" bằng cách sử dụng một GPU hoặc uC hiện đại.

pps Có thể sử dụng độ trễ cổng trực tiếp với cùng một cách tiếp cận chốt là một ý tưởng tốt hơn. Tôi nhận ra cả hai thanh ghi thay đổi và phương pháp trì hoãn truyền / cổng trực tiếp sẽ thay đổi theo nhiệt độ nhưng tôi chấp nhận điều này.

Đối với bất kỳ ai tìm thấy điều này trong tương lai, cuộc thảo luận giữa Bil Herd và André Fachat bao gồm một số thiết kế được đề cập trong chủ đề này và thảo luận về các vấn đề khác bao gồm thử nghiệm DRAM.


1
CPU nào mà máy tính retro của bạn sẽ sử dụng?
Ẩn danh

6502, bộ nhớ sẽ được đánh dấu rõ ràng.
Anthony

Có thể không phát minh ra xe đạp cho bạn, đã có thiết kế có sẵn bằng DRAM không? Tôi không quen thuộc với gia đình máy móc này, nhưng C64 phải là một kết hợp tốt. Tuy nhiên, ban đầu nó sử dụng chip 6567 "VIC" để kiểm soát RAM. Nhưng một lần nữa, tôi chắc chắn kể từ đó đã có những dự án liên quan đến những gì bạn muốn làm.
Ẩn danh

3
Một gợi ý hơi bị vênh: Z80 có đủ bộ điều khiển DRAM tích hợp để xử lý logic làm mới. (Mặc dù vậy, bạn vẫn cần bộ ghép địa chỉ)
Brian Drumond

3
@BrianDrummond Xin vui lòng, không khuyên bạn nên đi vào mặt tối. Không có gì tốt có thể đi ra từ đó.
đường ống

Câu trả lời:


6

Có các sơ đồ hoàn chỉnh cho IBM PC / XT trong tài liệu tham khảo kỹ thuật Máy tính cá nhân của IBM (Phụ lục D), mà bạn có thể tìm thấy trên mạng.

Vấn đề ở đây là, với một dòng nhấp nháy được kích hoạt khi đọc hoặc ghi bộ nhớ, bạn muốn tạo RAS, CAS và một dòng điều khiển (gọi nó là MUX) cho bộ ghép địa chỉ. Để đơn giản, tôi sẽ giả sử một cách phi thực tế rằng các nét, RAS và CAS đều hoạt động ở mức cao.

Nhìn vào sơ đồ và sơ đồ PC / XT từ một số máy tính khác trong thời gian này, tôi thấy ba chiến lược cơ bản, đại khái như sau:

  • Sử dụng nhấp nháy cho RAS. Sử dụng một dòng trì hoãn (một phần có đầu ra là phiên bản trễ của thời gian đầu vào) trên RAS để tạo MUX và sử dụng một dòng trễ khác để tạo RAS phiên bản mới hơn, được sử dụng cho CAS. Chiến lược này được sử dụng bởi PC / XT và TRS-80 Model II.

    Một phần dòng trễ (hiện đại) là Maxim DS1100.

  • Sử dụng nhấp nháy cho RAS và trì hoãn nó cho MUX và CAS, nhưng thực hiện việc này bằng cách sử dụng thanh ghi dịch chuyển tốc độ cao thay vì đường trễ. Chiến lược này được sử dụng bởi TRS-80 Model I và Apple II.

  • Sử dụng IC tùy chỉnh. Đây là chiến lược của Commodore 64.


Rõ ràng tôi chỉ tìm thấy một TR TR mà không có Phụ lục D ngày hôm qua. Tôi đã có nó bây giờ, điều này là tuyệt vời. Tôi không biết các IC dòng trễ này tồn tại và đang tự hỏi làm thế nào chúng xử lý nhiệt độ. Cảm ơn bạn đã đề cập đến ví dụ hiện đại. +1 cho nhiều giải pháp quá.
Anthony

5

Câu hỏi của bạn đủ phức tạp đến nỗi tôi thậm chí không chắc vấn đề thực sự của bạn là gì, nhưng tôi sẽ thử!

Thiết kế DRAM dựa trên 6502 "sạch nhất" mà tôi có thể tìm thấy là từ Commodore PET 2001-N . Nó có 6502 chạy ở 1 MHz, nhưng logic DRAM có tốc độ 16 MHz, có khả năng tạo ra tất cả các định thời.

Tôi chưa phân tích chi tiết, nhưng hành động chính dường như xảy ra với bộ đếm 4 bit 74191 được kết nối với thanh ghi thay đổi 74164. Điều này tạo ra 8 dòng riêng biệt đi vào 74157 MUX, được điều khiển bởi dòng R / W. Đầu ra từ MUX đi vào một flip-flop 7474 và một số logic riêng biệt để tạo ra các tín hiệu RAS / CAS cuối cùng. Đây là một đoạn trích liên kết đến trang có liên quan trong sơ đồ tham khảo.

Tài liệu tham khảo PET 2001-N 6

Làm mới được xử lý với một bộ đếm riêng và mỗi dòng địa chỉ được nối với một bộ ghép kênh chọn địa chỉ "thực" hoặc địa chỉ làm mới.

Các phần của logic này dường như cũng tạo ra thời gian cho hệ thống con video. Tôi chắc chắn rằng nó có thể được đơn giản hóa cho các nhu cầu cụ thể của bạn, nhưng tôi nghĩ rằng một cái gì đó tương tự có thể hữu ích: Bộ đếm tần số cao, thanh ghi thay đổi và bộ ghép kênh.


Đây là những gì tôi đã suy nghĩ nhưng tôi đã đủ ngu ngốc để động não lên nhiều chốt thay vì một hoặc hai MUX. Đồng hồ 16Mhz làm tôi thất vọng vì a) nó cao hơn nhiều so với đồng hồ CPU mà tôi chỉ thấy kỳ lạ nhưng nó có ý nghĩa và b) Các pha có thể tối thiểu ~ 62ns cộng với độ trễ lan truyền mà tôi nghĩ là chậm nhưng bây giờ tôi thấy điều đó theo cùng thứ tự với IBM PC / XT.
Anthony

Apple II rất giống nhau, sử dụng đồng hồ video 14.318 MHz để định thời gian và chia sẻ bộ nhớ giữa CPU và video trên nửa chu kỳ thay thế mà không có sự tranh chấp. Nó thậm chí không cần một bộ đếm làm mới riêng biệt, bởi vì hoạt động làm mới video cũng có tác dụng giữ cho bộ nhớ được làm mới.
Dave Tweed

-2

ps Tôi muốn điều này có thể thực hiện được trong DIP và không "gian lận" bằng cách sử dụng một GPU hoặc uC hiện đại.

Trong khi tôi hoàn toàn hiểu được tinh thần của dự án của bạn và mong muốn của bạn để sử dụng các phần không ưa thích, tôi chắc chắn sẽ đi theo con đường FPGA nếu tôi là bạn .

Nhiều lý do:

  1. Đó là một cơ hội học tập hoàn hảo. Thiết kế bộ điều khiển DRAM không phải là một dự án "hello-world" và sau đó bạn có thể tự tin nói rằng bạn "có thể làm được" FPGA;
  2. Bạn có thể vắt kiệt mọi hiệu năng trong bộ nhớ này, đặc biệt nếu đó là chip DRAM cũ. Không chỉ bạn có PC dựa trên 6502 được xây dựng tại nhà, có thể bạn có PC dựa trên 6502 nhanh nhất ;
  3. Có thể dễ dàng hơn nhiều để gỡ lỗi các vấn đề hoặc thống kê các hoạt động bộ nhớ mà CPU của bạn đưa ra. Bạn có thể sử dụng máy phân tích logic trên các xe buýt song song, nhưng điều đó không bao giờ thú vị (một người bạn của tôi làm gì đó dọc theo những dòng này - anh ta muốn viết một mô phỏng chính xác theo chu kỳ của 8088 và vì lý do đó anh ta cần thu thập số liệu thống kê về truy cập bộ nhớ và thời gian Anh ta sử dụng bộ chip gốc (8288, 8280, 8237) và sử dụng bộ phân tích logic với rất nhiều kênh, nhưng từ kinh nghiệm của anh ta, tôi có thể nói với bạn rằng đó một lực cản).

2
Tôi không chắc đây là câu trả lời thay vì bình luận. 1) Anh ta không nói rằng anh ta muốn học các đồ họa. 2) DRAM từ những năm 80 đã đủ chậm để logic rời rạc. 3) Gỡ lỗi có thể khó khăn. Tại sao không thực hiện mọi thứ trong FPGA, hoặc thậm chí chỉ trong phần mềm? Tại sao thậm chí sử dụng RAM cả ... :)
đường ống

1
@pipes: Vâng, chính xác. Hiện tại tôi không muốn dành thời gian cho việc học hỏi về đồ họa. Tôi đã có đủ trên đĩa của mình với một dự án tương tự thứ hai không liên quan. Nhìn chung, các GPU và PLD cảm thấy như chúng chỉ cản trở vào thời điểm này mặc dù một ngày nào đó tôi sẽ học cách sử dụng chúng.
Anthony

1
@pipe: Các bảng thưởng thường rất khó khăn, tốn thời gian và bực bội, đặc biệt nếu một người không đặc biệt giỏi về nó. Sử dụng một số PLD khá đơn giản (ví dụ 22V10) cho một số phần của thiết kế sẽ giúp điều chỉnh mọi thứ dễ dàng hơn.
supercat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.