如何实现非常简单的异步DRAM控制器?


9

我想知道如何构建一个简单的异步DRAM控制器。我有一些30针1MB SIMM 70ns DRAM(带奇偶校验的1Mx9)模块,我想在自制的复古计算机项目中使用。不幸的是,没有适用于他们的数据表,因此我一直在研究IBM 的Siemens HYM 91000S-70“了解DRAM操作”

我想要结束的基本界面是

  • / CS:输入,片选
  • 读/写:读,不写
  • RDY:数据准备就绪时,输出为高
  • D:输入/输出,8位数据总线
  • 答:在20位地址总线中

刷新似乎很简单,有几种方法可以解决问题。我应该能够使用任何旧计数器进行行地址跟踪,在CPU时钟低(在该特定芯片中不进行内存访问)的情况下,进行分布式(交织)纯RAS刷新(ROR)。我相信根据JEDEC的要求,至少每64ms刷新所有行(根据Seimens数据表每8ms刷新512,即标准的周期刷新为15.6us),所以这应该工作正常,如果遇到问题,我将发布另一个问题。我对获得简单,正确的阅读和确定以及确定我应该达到的速度更感兴趣。

首先,我将快速描述一下我认为它是如何工作的以及到目前为止我提出的潜在解决方案。

基本上,您将20位地址分成两半,其中一半用于列,另一半用于行。您先选通行地址,然后选列地址,如果/ CAS变为低电平时/ W为高电平,则为读操作,否则为写操作。如果是写操作,则此时数据必须已经在数据总线上。一段时间后,如果是读操作,则表明数据可用,或者如果是写操作,则表明数据已被写入。然后,需要在与直觉相反的“预充电”期间将/ RAS和/ CAS重新设置为高电平。这样就完成了循环。

因此,基本上,这是一个跨越多个状态的过渡,每个过渡之间存在特定的特定延迟。我将其列为“表”,该表按事务的每个阶段的持续时间进行索引:

  1. t(ASR)= 0 ns
    • / RAS:H
    • / CAS:H
    • A0-9:RA
    • / W:高
  2. t(RAH)= 10 ns
    • / RAS:L
    • / CAS:H
    • A0-9:RA
    • / W:高
  3. t(ASC)= 0纳秒
    • / RAS:L
    • / CAS:H
    • A0-9:CA
    • / W:高
  4. t(CAH)= 15 ns
    • / RAS:L
    • / CAS:L
    • A0-9:CA
    • / W:高
  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)= 10 ns
    • / RAS:H
    • / CAS:H
    • A0-9:X
    • / W:X

下图是我指的时间。

时序图

(CA =列地址,RA =行地址,X =无关)

即使不是完全一样,也是如此,我认为相同的解决方案也会起作用。因此,到目前为止,我已经提出了一些想法,但是我认为只有最后一个有潜力,我正在寻找更好的想法。我在这里忽略刷新,快速页面和奇偶校验/生成。

最简单的解决方案是使用一个计数器和一个ROM,其中计数器的输出是ROM地址输入,并且每个字节在该地址对应的时间段内都有适当的状态输出。由于ROM速度慢,因此无法使用。即使是预加载的SRAM似乎也太慢了,不值得。

第二个想法是使用GAL16V8之类的东西,但我认为我不太了解它们,程序员非常昂贵,而据我所知,该编程软件是封闭源代码和Windows操作系统。

我的最后一个想法是我认为可能真正起作用的唯一想法。74ACT逻辑系列具有低传播延迟,并接受高时钟频率。我认为可以使用一些CD74ACT164E移位寄存器和SN74ACT573N进行读写。

基本上,每个唯一状态都有一个使用5V和GND轨静态编程的自己的锁存器。每个移位寄存器的输出均到达一个锁存器的/ OE引脚。如果我正确地理解了数据手册,则每个状态之间的延迟只能是1 / SCLK,但这比PROM或74HC解决方案要好得多。

那么,最后一种方法是否可行?是否有更快,更小或通常更好的方法来做到这一点?我想我看到IBM PC / XT使用了7400芯片来处理与DRAM有关的东西,但是我只看到了顶板照片,所以我不确定那是如何工作的。

ps我希望这可以在DIP中使用,而不是使用FPGA或现代uC进行“欺骗”。

pps也许直接将门延迟与相同的锁存方法一起使用是一个更好的主意。我意识到移位寄存器和直接门/传播延迟方法都会随温度而变化,但是我接受这一点。

对于将来发现此问题的任何人,Bil Herd和AndréFachat之间的讨论涵盖了该主题中提到的几种设计,并讨论了其他问题,包括DRAM测试。


1
您的复古计算机将使用哪个CPU?
匿名

6502,内存将明显存储。
安东尼

是否有可能不为您发明自行车,是否已有使用DRAM的设计?我对这一系列机器不熟悉,但是C64必须很好。但是,它最初使用6567“ VIC”芯片来控制RAM。但是,我可以肯定的是,从那时起,就有一些与您想要做的事情有关的项目。
匿名的

3
一个稍微扭曲的建议:Z80内置了足够的DRAM控制器来处理刷新逻辑。(尽管您仍然需要地址多路复用器)
Brian Drummond

3
@BrianDrummond请不要建议去黑暗的一面。没有什么可以解决的。
管道

Answers:


6

《 IBM个人计算机XT技术参考手册》(附录D)中有IBM PC / XT的完整原理图,您可以在线找到这些原理图。

这里的问题是,给定一个选通线,该选通线在读取或写入存储器时被激活,您希望为地址多路复用器生成RAS,CAS和控制线(称为MUX)。为简单起见,我将不切实际地假设频闪,RAS和CAS均为高电平有效。

在这段时间看一下PC / XT原理图和其他计算机的原理图,我看到了三种基本策略,大致如下:

  • 将闪光灯用于RAS。在RAS上使用延迟线(其输出为其输入的时间延迟版本的部分)来生成MUX,并在另一条延迟线上生成用于CAS的RAS的更高版本。PC / XT和TRS-80 Model II使用此策略。

    Maxim DS1100是一个示例(现代)延迟线部件。

  • 对RAS使用选通脉冲,对MUX和CAS使用选通脉冲,但是使用高速移位寄存器而不是延迟线来完成。TRS-80 Model I和Apple II使用此策略。

  • 使用定制IC。这是Commodore 64的策略。


显然,昨天我只找到了没有附录D的XT TR。我现在知道了,这很棒。我不知道这些延迟线IC是否存在,并且想知道它们如何处理温度。感谢您提及现代示例。+1也适用于多种解决方案。
安东尼

5

您的问题非常复杂,我什至不确定您的实际问题是什么,但我会尽力的!

我可以从Commodore PET 2001-N中找到“最干净的”基于6502的DRAM设计。它具有以1 MHz运行的6502,但DRAM逻辑的时钟为16 MHz,可能会产生所有时序。

我没有分析细节,但是主要动作似乎发生在将74191 4位计数器连接到74164移位寄存器上时。这将输出8条单独的线,进入由R / W线控制的74157 MUX。MUX的输出进入7474触发器和一些离散逻辑,以生成最终的RAS / CAS信号。这是摘录,链接到参考示意图中的相关页面。

PET 2001-N参考页6

刷新由单独的计数器处理,每条地址线都连接到一个多路复用器,该多路复用器选择“实际”地址或刷新地址。

此逻辑的某些部分似乎也为视频子系统生成了时序。我相信可以根据您的特定需求对其进行简化,但是我认为类似的用法也很有用:高频计数器,移位寄存器和多路复用器。


这就是我的想法,但我愚蠢到可以集思广益,而不是一两个MUX。16Mhz时钟使我不寒而栗,因为a)它比我刚刚发现的CPU时钟高很多,但是这是有道理的; b)相位可能最少为〜62ns,加上传播延迟,我认为这很慢,但现在我看到的顺序与IBM PC / XT的顺序相同。
安东尼

Apple II非常相似,它使用14.318 MHz的视频时钟来定时和在CPU和视频之间以交替的半周期共享内存,而不会发生争用。它甚至不需要单独的刷新计数器,因为视频刷新活动还可以使内存保持刷新。
戴夫·特威德

-2

ps我希望这可以在DIP中使用,而不是使用FPGA或现代uC进行“欺骗”。

虽然我完全了​​解您的项目的精神以及您使用非必要部件的愿望,但如果您是我,我一定会采用FPGA方式

几个原因:

  1. 这是一个完美的学习机会。设计DRAM控制器不是一个“ hello-world”项目,此后您可以放心地说您“可以”使用FPGA。
  2. 您可以从该内存中挤出所有性能,尤其是如果它是较旧的DRAM芯片。您不仅拥有自己的基于6502的PC,而且可能拥有最快的 PC。的基于6502的PC。
  3. 调试问题或统计CPU发出的内存操作会容易得多。您可以在并行总线上使用逻辑分析仪,但是这从来都不是一件有趣的事(我的一个朋友按照这些思路做了一些事情-他想编写一个精确的8088周期仿真,因此他需要收集有关内存访问和时序的统计信息他使用原始的芯片组(8288、8280、8237),并使用具有很多通道的逻辑分析仪,但根据他的经验,我可以告诉你这麻烦。

2
我不确定这是答案而不是评论。1)他没有说他想学习FPGA。2)80年代的DRAM已经足够慢以支持离散逻辑。3)调试可能很困难。为什么不在FPGA中甚至在软件中实现所有功能呢?为什么甚至使用RAM在所有... :)

1
@pipes:是的,完全是。我现在不想花时间学习FPGA。我已经有了另一个无关的模拟项目,可以满足我的需求。尽管有一天我将学习如何使用它们,但FPGA和PLD通常感觉到它们只是阻碍了这一点。
安东尼

1
@pipe:重新布线板通常很困难,耗时且令人沮丧,特别是如果不是特别熟练的话。在设计的某些部分使用一些相当简单的PLD(例如22V10)将使调整变得更加容易。
超级猫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.