本文主要介绍一下DDR SDRAM的基本组成以及工作过程,方便大家更好的理解和掌握DDR的控制与读写。
一、DDR SDRAM的基本组成
1、SDRAM的基本单元
SDRAM的基本单元是一个CMOS晶体管和一个电容组成的电路。
晶体管最上面的一端,称作栅极,通过加上电压或取消电压,可以控制CMOS晶体管的开和关,进而控制流入小电容的电流。
小电容可以存储电荷,有电荷时表示存储1bit的1,无电荷时表示存储1bit的0。
当要写入存储1bit的1时,在R/W端加上高电压,并在栅极端加高电压保持一段时间后断开,即可写入。
当要写入存储1bit的1时,在R/W端接地,并在栅极端加高电压保持一段时间后断开,即可写入。
2、存储阵列
为了存储大量信息,需要将基本单元构成存储阵列,如下图所示:
word line表示字线,对应行,连接是每个单元的栅极。
bit line表示位线,对应列,连接的是每个单元的R/W端。
存储阵列读写数据时,当某一行的字线上通电后,这一行就打开了,通过控制位线上的电压变化,就能读取存储信息或写入数据。
读取数据时由于电容很小,所以读取数据时,产生的电压波动也很小,要经过sense amplifier进行放大,另外在读取位线上的数据后,小电容上的电荷会发生了改变,这会丢失原本的信息,是一种破坏性读出。
3、SDRAM动态刷新
为什么SDRAM要做动态刷新?
SDRAM基本单元的小电容的电容值很小,存储电荷不多,而CMOS晶体管有“电流泄漏”问题,即使字线不打开,小电容也会缓慢损失电荷,慢慢的信息就丢失了。
这就需要定时将电容的旧值重新向小电容写入数据,也就是动态刷新电容。
动态刷新电容如何实现的?
这里简单介绍一下,存储阵列中放大器可以暂存信息。
每个单元行,每隔一段时间,放大器暂存好信息后,就立刻将信息写回电容。
二、SDRAM读写过程
1、SDRAM读数据
-
激活命令:在向SDRAM发送读命令之前,必须先打开指定块中的指定行,并将其复制到行缓冲器中。这个操作由激活命令(ACTIVE)完成,激活命令通过片选信号(CS)、块地址信号(BA)和行地址信号(A)来确定要激活的块和行。激活命令还需要一个行地址选通信号(RAS),用来选通行地址。
-
读命令:在激活命令之后,需要等待一定的时间间隔(tRCD),才能发送读命令(READ)。读命令通过列地址信号(A)来确定要读取的列,并通过列地址选通信号(CAS)来选通列地址。读命令还需要一个写使能信号(WE),用来指示读操作。
-
数据输出:在读命令之后,还需要等待一定的时间间隔(tCL),才能从数据总线上获取数据。这个时间间隔被称为CAS等待时间或读取潜伏期,是指提供一个列地址与接收到相关数据之间的间隔。数据输出可以是单个或突发的,突发长度由模式寄存器设置。
-
预充电命令:在读操作完成后,需要对打开的行进行预充电操作,以恢复其电荷状态。这个操作由预充电命令(PRECHARGE)完成,预充电命令通过片选信号(CS)、块地址信号(BA)和预充电信号(A10)来确定要预充电的块和行。预充电命令还需要一个行地址选通信号(RAS)和一个列地址选通信号(CAS),用来指示预充电操作。
2、SDRAM读数据
-
激活命令:在向SDRAM发送写命令之前,必须先打开指定块中的指定行,并将其复制到行缓冲器中。这个操作由激活命令(ACTIVE)完成,激活命令通过片选信号(CS)、块地址信号(BA)和行地址信号(A)来确定要激活的块和行。激活命令还需要一个行地址选通信号(RAS),用来选通行地址。
-
写命令:在激活命令之后,需要等待一定的时间间隔(tRCD),才能发送写命令(WRITE)。写命令通过列地址信号(A)来确定要写入的列,并通过列地址选通信号(CAS)来选通列地址。写命令还需要一个写使能信号(WE),用来指示写操作。
-
数据输入:在写命令之后,可以立即从数据总线上输入数据。数据输入可以是单个或突发的,突发长度由模式寄存器设置。
-
预充电命令:在写操作完成后,需要对打开的行进行预充电操作,以恢复其电荷状态。这个操作由预充电命令(PRECHARGE)完成,预充电命令通过片选信号(CS)、块地址信号(BA)和预充电信号(A10)来确定要预充电的块和行。预充电命令还需要一个行地址选通信号(RAS)和一个列地址选通信号(CAS),用来指示预充电操作。
3、突发读写模式
SDRAM的burst突发模式是指当SDRAM接收到一个读或写命令后,不需要再次寻址,而是按照预设的长度和顺序连续地传输数据。这样可以节省寻址时间,提高数据传输效率。
突发长度(burst length)和突发类型(burst type)可以通过模式寄存器(mode register)来设置。突发长度(burst length)是指每次突发传输的数据量,一般有1、2、4、8和全页(fullpage)五种选择。全页指的是打开行中剩余的所有列地址。突发长度越大,传输速度越快,但也会占用总线时间越长,影响其他设备的访问。突发类型(burst type)是指每次突发传输的数据顺序,一般有顺序(sequential)和交替(interleave)两种选择。
顺序指的是按照列地址从低到高或从高到低的顺序传输数据,速度较快。
交替指的是按照列地址以某种规律跳跃地传输数据,速度较慢。
不同的突发类型对应不同的应用场景,一般来说,顺序适合于连续访问相邻地址的情况,交替适合于随机访问不连续地址的情况。
4、bank并行和内存交错
让一个 chip 内的不同 bank 并行工作,提升读写效率。
连续向不同的 bank 发送读取指令,同一时间内很多 bank 都在并行工作,比如第一个 bank 可能在输出,第二个 bank 可能在放大电压,第三个 bank 可能在开启单元行。这样当第一个 bank 突发输出完毕,第二个 bank 刚好可以输出,当第二个 bank 猝发输出完毕,第三个 bank 刚好可以输出。
这种通过“ bank 间并行”实现“连续泵出数据”的方法,就是所谓的“内存交错”。
本文将不断定期更新中,码字不易,点⭐️赞,收⭐️藏一下,不走丢哦
本文由FPGA入门到精通原创,有任何问题,都可以在评论区和我交流哦
您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。