SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操做。这使得
SDRAM与没有同步接口的异步DRAM相比,能够有一个更复杂的操做模式。下面宇芯电子介绍关于静态SDRAM和动态SDRAM的区别。
静态记忆
假设咱们要将16Mb存储器链接到FPGA。
16Mb表示内存可容纳1600万位(准确地说是16777216位)。如今,不多对比特进行单独寻址,而是一般以8或16的数据包(咱们称其为字)进行寻址。所以,若是咱们的16Mb存储器被组织为16位的1M字,则须要20位地址总线和16位数据总线,以及一些可写和可读信号。
实际的存储器也将具备CS(片选),若是存储器是同步的,则为时钟(为清晰起见,在图片中将其省略)。
如今,若是该内存是一个Blockram(在FPGA内部),它将看起来有所不一样(假设存在如此大的16Mb Blockram ...典型的Blockram要小得多)。
如您所见,它仍然是一块内存,可是有两条地址总线。那是由于现代FPGA中的Blockram是双端口的……这意味着两个代理能够同时访问存储器。一般,一个代理写入内存,而另外一个则读取。所以,每一个代理的内存都有独立的地址和数据总线。上面的图片在顶部显示了第一个(写)代理,在底部显示了第二个(读)代理。更高级的Blockram容许每一个代理读取和写入,可是上面显示的体系结构是最经常使用的。一样,blockram一般也被同步使用,所以每一个代理都必须提供一个时钟(未在图片中显示)。
到目前为止,所显示的内存是静态的,这意味着仅经过对其施加电源便可保存其内容。另外,静态存储器能够看做是一个长字形的线性数组(您只需提供一个地址便可访问匹配的数据...无需复杂)。须要权衡的是每比特成本要比...高得多。
动态记忆
咱们将使用SDRAM,它是动态内存(SDRAM中的“ D”)。在动态内存中,内存不被视为单词的长线性数组,而是被组织为单词的矩阵(行/列)。
上图显示行的12位和列的8位,如前所述总共有20个地址位...很容易。
有一种复杂性:为了提升性能,将内存分红相等的块(称为“存储体”)。那是由于某些动态内存操做速度很慢,所以拥有存储体能够在等待另外一个存储体的同时使用它。
所以,若是咱们的16Mb SDRAM有2个存储区,则每一个存储区拥有8Mb。
访问SDRAM时,FPGA必须选择存储体(1位),行(如今只有11位)和列(8位),总共须要20位。但这是一个两步过程:首先是行+库,而后是列:
•FPGA选择一个存储区并激活其行之一。而后它等待几个时钟(等待行准备就绪)。
•如今,该行处于活动状态,FPGA只需提供列地址便可访问(读取和/或写入)该行中所需的任何数据。
•FPGA处理完该行后,必须先关闭该行,而后再打开新行。
为了得到最佳性能,用户(= FPGA)但愿避免过多地打开和关闭行,而是在关闭行以前尽量多地完成工做,并在不一样存储体中进行交错操做,以避免浪费时钟周期。大多数SDRAM实际上有4或8个存储体,每一个存储体都是独立的,所以能够激活本身的行。