SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线 同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM相比,可以有一个更复杂的操作模式。
管线 意味着芯片可以在处理完之前的指令前,接受一个新的指令 。在一个写入的管线 中,写入命令在另一个指令执行完之后可以立刻执行,而不需要等待数据写入存储队列的时间。在一个读取的流水线中,需要的数据 在读取指令发出之后固定数量的时钟频率后到达,而这个等待的过程可以发出其它附加指令。这种延迟被称为等待时间(Latency),在为计算机购买内存时是一个很重要的参数。
SDRAM在计算机中被广泛使用,从起初的SDRAM到之后一代的DDR(或称DDR1),然后是DDR2 和DDR3 进入大众市场,2015年开始DDR4进入消费市场。如UMI型号 UD408G5S1AF的一款8Gb 32位 DDR4 SDRAM,是一款支持使用在英特尔Arria 10 SoC FPGA以及Kintex Ultrascale FPGA中的存储器。32位 DDR4 SDRAM非常适合边缘类计算,或对PCB面积有紧凑要求的深度学习计算设备。
动态内存的驱动比静态内存的驱动更加复杂...我们需要行,列和存储体以及刷新周期来处理。但是由于SDRAM的高速性和低单位成本使其引人注目。
因此我们需要的是一种访问SDRAM的方法,但是要易于使用静态内存。这就是创建内存控制器的原因。它们充当转换层:一方面,它们为用户提供了易于使用的内存接口,然后进行了繁琐的工作来驱动真实的SDRAM信号。
如果我们看一下SDRAM的引脚,那么会有一些新来者。
地址和数据总线仍然存在,但是地址总线只有11位(用于提供要打开的行,然后提供列地址)。BA引脚指定了存储区(由于在我们的示例中只有2个存储区,因此我们仅需要一个引脚)。WE,CAS和RAS一起用作命令引脚,因此我们可以向SDRAM发送8个不同的命令(命令包括“打开行”,“读取”,“写入”和“关闭行”)。使用了其他一些引脚(但未在图片上显示),例如时钟,片选,字节使能...
请注意,在动态内存中,“打开行”称为激活,“关闭行”称为预充电。
刷新
SDRAM是动态存储器:由于每个存储器位值(0或1)都保存在一个微小的电容器中,电荷随时间衰减,因此需要定期刷新其内容。但是衰减率足够低,只要定期对其进行读取和重新写入(“刷新”),制造商就可以保证不会丢失任何数据。
有两种刷新机制
· FPGA将“自动刷新”命令发送到SDRAM。
只要确保它定期完成(SDRAM数据表会告诉您最小刷新频率)。
· FPGA“经常”访问每一行。
打开一行会导致SDRAM中的“感测放大器”获得该行所有电容器电荷的副本。然后,当该行关闭时,较早检测到的值将被复制回电容器中,从而刷新过程中的数据。