SDRAM学习笔记
SDRAM 学习笔记
一、SDRAM介绍
SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存取存储器)是一种与时钟同步工作的存储器。它广泛应用于现代计算机系统中,具有较高的传输速率和效率。
首先,让我们聊聊“同步”。内存的工作并非随心所欲,而是需要遵循一个严格的时序——同步时钟。这个时钟就像一位严谨的指挥官,它规定了内部命令的发送与数据传输的精确时刻。无论是读取还是写入数据,都必须在这个时钟的节拍下进行,以确保数据的准确性和稳定性。这种同步机制的存在,使得内存系统能够高效、有序地处理数据请求。
接下来,我们谈谈“动态”。内存中的存储阵列并非一成不变,而是需要不断地进行刷新操作。这是因为存储单元中的电荷会随着时间的推移而逐渐减弱,导致数据丢失。为了避免这种情况的发生,内存系统必须定期进行刷新,以重新激活存储单元中的电荷。这种动态刷新的机制,保证了数据在长时间存储过程中不会丢失,为数据的持久性提供了有力保障。
最后,我们来说说“随机”。与线性存储方式不同,内存中的数据并不是按照固定的顺序依次存储的。相反,它允许用户自由指定地址进行数据读写。这种随机存取的特性,使得内存系统能够灵活地处理各种复杂的数据请求。无论是读取一个特定的数据块,还是写入一段新的数据,内存都能迅速定位到目标地址,并完成相应的操作。
主要特点:
- 同步:与CPU的时钟信号同步,减少延迟,提高访问效率。
- 多Bank架构:分为多个存储“Bank”,提升存储容量。
- 高速传输:支持最高166Mhz高频率操作,因此通常搭配PLL和FIFO进行使用。
SDRAM的内部结构包含一存储阵列,可以将其构想为一张表格形式。在向这张表格里录入数据时,首先需要确定一个行(Row)位置,接着再确定一个列(Column)位置,这样便能精确地定位到所需的“单元格”。这便是SDRAM寻址的基础机制,具体如下图所示:
SDRAM存储芯片揭秘:L-Bank、存储单元与总存储容量
在上图中,我们看到的“单元格”正是SDRAM存储芯片中的基本存储单元,而这些存储单元组成的“表格”结构,我们称之为L-Bank。通常,SDRAM的存储空间被精心划分为4个L-Bank。在进行寻址操作时,我们首先需要选定一个L-Bank,随后在这个选定的L-Bank内部,进一步选择对应的行与列来确定具体的存储单元地址(这一过程我们称之为寻址)。
对SDRAM进行读写操作,其本质是针对这些存储单元进行的数据处理。值得注意的是,对于SDRAM而言,一个存储单元的容量恰好等于其数据总线的位宽,单位以bit计。那么,如何计算SDRAM芯片的总存储容量呢?我们可以使用以下公式:
SDRAM总存储容量 = L-Bank数量 × 行数 × 列数 × 存储单元容量
那么,SDRAM是如何实现数据的存储与读取的呢?这主要得益于电容的充放电特性及其保持电荷的能力。一个大小为1bit的存储单元,其内部结构复杂而精密,主要包括行列选通三极管、存储电容以及刷新放大器。当行地址与列地址被选通时,存储电容与数据线之间会建立导通路径,从而允许进行放电操作(读取数据)或充电操作(写入数据)。这一机制,正是SDRAM实现数据存储与读取的核心所在。

SDRAM结构深度解析:从框图到操作的奥秘
下图为我们揭开了SDRAM(同步动态随机存取存储器)结构的神秘面纱,一幅结构框图跃然眼前。这幅图不仅清晰地展示了SDRAM的内部构成,更引领我们深入探索其工作原理。
从图中我们可以发现,SDRAM的构造犹如一座精密的城堡,主要由时钟缓冲器(CLK BUFFER)、指令解码器(COMMAND DECODER)、地址缓冲器(ADDRESS BUFFER)、模式寄存器(MODE REGISTER)、控制信号生成器(CONTROL SIGNAL GENERATOR)、四个存储BANK(BANK#0至BANK#3)以及数据控制电路(DATA CONTROL CIRCUIT)等关键组件组成。
时钟缓冲器如同时间的守护者,精准地接收并传递外部时钟信号,为整个SDRAM系统提供稳定的时序基准。指令解码器则扮演着指挥官的角色,它负责接收并解析外部输入的控制命令,这些命令如同军令一般,指导着SDRAM进行后续的操作。
地址缓冲器则是一个忠诚的信使,它接收并存储外部输入的地址信息,为寻址操作提供精确的指引。而模式寄存器则更像是一个记忆的宝库,它存储着SDRAM的工作模式设置,这些设置决定了SDRAM如何响应外部命令,如何进行数据存取。
控制信号生成器是SDRAM的智囊团,它根据指令解码器的解析结果和模式寄存器的设置,生成一系列控制信号,这些信号如同神经系统的指令,驱动着SDRAM的各个部件协同工作。
四个存储BANK(BANK#0至BANK#3)则是SDRAM的数据仓库,它们以矩阵的形式存储着大量的数据。这些BANK如同四片广袤的土地,每一片都蕴藏着无尽的信息宝藏。而数据控制电路则是这片宝藏的守护者,它负责在读写操作时,将数据在外部总线与存储BANK之间高效地传输。
在指令解码器的指挥下,SDRAM能够执行寻址、读写、刷新、预充电等一系列复杂的操作。寻址操作如同在茫茫信息海洋中定位一颗珍珠,读写操作则是将这颗珍珠取出或放入,刷新操作则是为了保持数据的持久性,而预充电操作则是为了准备下一次的读写操作。
深入剖析SDRAM结构框图:核心控制器与指令解析
接下来,让我们一同细致入微地探索SDRAM的结构框图。首先映入眼帘的是其核心控制器——时钟缓冲器与指令解码器,这一组合如同SDRAM的大脑,掌控着整个存储器的运作。通过这一核心控制器,我们能够向SDRAM发送指令,引导其执行相应的功能。
从结构框图中,我们可以清晰地看到时钟缓冲器与指令解码器之间连接着六根关键的线路。其中,一根时钟线(CLK)如同脉搏般为整个SDRAM提供着稳定的工作时钟,它是SDRAM运行的基础。而时钟使能线(CKE)则扮演着开关的角色,当CKE处于低电平时,SDRAM会进入休眠模式,所有指令都将失效;只有当CKE为高电平时,SDRAM才能正式启动并正常工作。
除了时钟线与时钟使能线外,还有四根至关重要的指令线,它们分别是CS、WE、RAS和CAS。CS作为SDRAM芯片的片选信号,当其为低电平时,意味着该芯片被选中,准备接收指令。WE则是读写指令的切换开关,低电平代表写指令,高电平则代表读指令。而RAS和CAS则是行地址选通信号和列地址选通信号,它们同样以低电平有效。由于SDRAM的行列地址线是复用的,因此我们需要借助RAS和CAS来明确当前地址是行地址还是列地址。
在驱动SDRAM时,我们会巧妙地利用这四根指令线,将它们组合成不同的指令发送给SDRAM。SDRAM在接收到正确的指令后,会迅速响应并执行相应的功能。具体的指令组合方式,如下图所示,它们如同密码一般,解锁着SDRAM的各种功能。
综上所述,时钟缓冲器与指令解码器作为SDRAM的核心控制器,通过六根关键的线路,实现了对SDRAM的精准控制。而指令线的巧妙组合,则让SDRAM能够执行各种复杂的功能,满足我们的存储需求。
SDRAM结构深入解读与关键操作预览
从前面的图中,我们可以窥见SDRAM的指令组合确实相当丰富。但别担心,我们并不需要掌握每一个指令,具体会使用到哪些指令,我们将在后续的程序设计部分为大家逐一揭晓。
在探讨了功能框图中的时钟缓冲器和指令解码器之后,让我们继续深入,来看看SDRAM的地址缓冲器。SDRAM配备了13根行列地址线(A0A12)和两根BANK地址线(BS0BS1)。其中,BANK地址线的主要职责是定位BANK地址,整片SDRAM共设有四个BANK。例如,若我们想要对BANK1执行读写操作,只需将BANK地址线设置为“2’b01”即可。而13根行列地址线,则用于精准定位行地址和列地址。这里要特别留意地址线A10,它还肩负着参与自动预充电指令的重任。在我们执行读写指令时,若拉高A10,便可使SDRAM自动进入预充电模式,关于这一操作的具体细节,我们将在下文的预充电操作内容部分进行详尽阐述。
接下来,让我们将目光转向模式寄存器。模式寄存器无疑是SDRAM中不可或缺的控制器。在SDRAM上电初始化的阶段,我们就需要对其进行配置,主要包括突发长度、突发传输方式、CAS潜伏期和操作模式的设定。一旦配置完成,SDRAM便会按照既定的模式运行。关于如何具体配置,下文将为大家提供详尽的指导。
最后,我们再来简要了解一下控制信号生成器(CONTROL SIGNAL GENERATOR)、四个存储BANK(BANK#0~BANK#3)和数据控制电路(DATA CONTROL CIRCUIT)。这几个部分的功能相对直观:控制信号生成器主要负责根据指令和模式寄存器的配置,生成相应的控制信号,以实现对SDRAM存储BANK的精准控制;存储BANK,顾名思义,就是数据存储的载体;而数据控制电路,则主要负责数据的接收和发送。值得一提的是,它可以与数据掩码器(DQM)协同工作,在数据传输过程中,将我们不需要的数据进行屏蔽。
至此,我们对SDRAM的整体结构进行了简要的介绍。若大家希望深入了解其细节,不妨阅读SDRAM的数据手册。接下来,我们将为大家讲解SDRAM的几个关键操作。
二、SDRAM的工作原理
SDRAM的工作包括芯片初始化、行激活、列读写、数据传输等多个步骤。以下是SDRAM(W9825G6KH芯片)工作的主要过程:
1. 芯片初始化
在系统加电后,SDRAM芯片需要进行初始化操作,这一步非常关键。初始化步骤通常包括:
- 稳定期:SDRAM上电后要有200us的输入稳定期,在这个时间内不可以对SDRAM的接口做任何操作 。
- 预充电:对所有存储行进行预充电,确保它们处于非激活状态。
- 刷新周期:W9825G6KH芯片是8个刷新周期,需要查阅指定芯片手册,有的芯片2个周期就可以。
- 模式寄存器设置:通过设置模式寄存器来确定SDRAM的工作模式,比如突发长度、数据访问顺序等。
上图展示了模式寄存器的配置过程,其中,配置所需的参数是通过地址线来提供的。这些地址线的不同位各自代表着不同的参数设置。
在SDRAM中,模式寄存器的配置至关重要,因为它决定了芯片的工作模式。具体来说,通过配置模式寄存器,我们可以确定SDRAM的突发长度(Burst Length)、寻址方式(Addressing Mode)、潜伏期(CAS Latency)以及突发传输模式(也称为写入模式,Write Mode)等关键参数。
为了更直观地理解这些参数如何影响SDRAM的工作,我们可以参考其时序图。
观察上图,我们可以发现配置模式寄存器的过程相对简便。只需将四根指令线全部拉低(即发送指令4’b0000),同时在地址线上输入相应的配置值,即可完成配置。但在此过程中,有一个细节需要注意:在发出模式寄存器设置指令后,我们需要等待一段时间,才能向SDRAM发送新的指令。这段时间被称为模式寄存器设置周期(tRSC,即Register Set Cycle)。查阅数据手册可知,tRSC至少需要2个时钟周期。此外,还有两个重要的时间参数,分别是tCMS(指令建立时间)和tCMH(指令保持时间),它们也需要在配置过程中予以考虑。
2. 行激活(Activate)
初始化完成后,无论是读操作还是写操作,都要先激活( Active) SDRAM 中的一行,使之处于活动状态(又称行有效)。在此之前还要进行 SDRAM 芯片的片选和 Bank 的定址,不过它们与行激活可以同时进行。
在片选信号CS#(#表示低电平有效)和Bank定址信号生效的同时,RAS(Row Address Strobe,行地址选通脉冲)也处于激活状态。此时,An地址线会传输具体的行地址信息。我们板上搭载的SDRAM拥有13条地址线,采用二进制表示,因此总共有8192行(2^13=8192,但原文中8192被误写为4096,这里已更正),A0-A12的不同组合可以确定具体的行地址。由于行激活的同时也会激活对应的Bank,因此行激活也可以被视作Bank有效。
3. 列读写(Read/Write)
行地址激活之后,就要对列地址进行寻址了。由于在 SDRAM 中,地址线是行列共用的,因此列寻址时地址线仍然是 A0-A12。在寻址时,利用 RAS( Row Address Strobe,行地址选通脉冲)与 CAS( Column Address Strobe,列地址选通脉冲)来区分行寻址与列寻址,简单的来讲就是 RAS 拉低 CAS 拉高代表行地址,反过来就代表列地址,如下图所示。还有一点很重要就是在列寻址的时候地址线 A10 可以用来控制是否进行预充电(列地址最大只能用到地址线第 9 位,所以不用担心 A10 会不会和列地址冲突),因为已经都进入列寻址了那么此时就可以发送读写指令进行读写操作了,但是读写操作结束后我想读写下一行的时候就必须先进行预充电(关于预充电下文会有详细描述),因此我们一般会在列寻址的时候直接拉高 A10地址线,这样每完成一次读写操作就会自动进行一次预充电,这样读写下一行之前就不用再特地去进行预充电操作了。 但是需要注意的是如果突发设置是全页突发,则发出自动预充电指令是非法的。
另外,列寻址信号与读写命令是同时发出的,读/写命令是通过 WE( Write Enable,写使能)信号来控制的, WE 为低时是写命令,为高时是读命令。
然而,在发送列读写命令时必须要与行激活命令有一个时间间隔(其实就是行激活命令和列激活命令之间要间隔一段时间),这个间隔被定义为 tRCD,即 RAS to CAS Delay( RAS 至 CAS 延迟)。这是因为在行激活命令发出之后,芯片存储阵列电子元件响应需要一定的时间。 tRCD 是 SDRAM 的一个重要时序参数,广义的 tRCD 以时钟周期( tCK, Clock Time)数为单位,比如 tRCD=3,就代表 RAS 至 CAS 延迟为三个时钟周期,如下图所示。具体到确切的时间,则要根据时钟频率而定。
4. 数据输出
在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据 I/O 通道( DQ)输出到内存总线上了。但是在 CAS 发出之后,仍要经过一定的时间才能有数据输出,从 CAS 与读取命令发出到第一笔数据输出的这段时间,被定义为 CL( CAS Latency, CAS 潜伏期)。 CL 时间越短,读数据时SDRAM 响应就越快。由于 CL 只在读取时出现,所以 CL 又被称为读取潜伏期( RL, Read Latency)。 CL的单位与 tRCD 一样,为时钟周期数,具体耗时由时钟频率决定。
5. 数据输入
数据写入的操作也是在 tRCD 之后进行,但此时没有了 CL(记住, CL 只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时, WE#为有效状态。
从上图中可见,数据与写指令同时发送。不过,数据并不是即时地写入存储单元,数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间( tWR, Write Recovery Time),这个操作也被称作写回( Write Back)。 tWR 至少占用一个时钟周期或再多一点(时钟频率越高, tWR 占用周期越多)。
6. 突发长度(Burst Length)
突发( Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度( Burst Lengths,简称 BL)。 在芯片初始化是配置突发长度由地址总线低三位A0-A2 控制。上文讲到的读/写操作,都是一次对一个存储单元进行寻址。然而在现实中很少只对 SDRAM 中的单个存储空间进行读写,一般都需要完成连续存储空间中的数据传输。在连续读/写操作时,为了对当前存储单元的下一个单元进行寻址,需要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。
虽然由于读延迟相同可以让数据的传输在 I/O 端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的延时即可获得。如下图所示:
至于 BL 的数值,也是不能随便设或在数据进行传输前临时决定。在上文讲到的初始化过程中的模式寄存器配置( MRS)阶段就要对 BL 进行设置。突发长度( BL)可以为 1、2、4、8 和“全页( Full Page)”,其中“全页”是指突发传输一整行的数据量。具体数值视芯片而定,本次实验的突发长度为整页,也即512 个字节。另外,在 MRS 阶段除了要设定 BL 数值之外,还需要确定“读/写操作模式”以及“突发传输模式”。读/写操作模式分为“突发读/突发写”和“突发读/单一写”。 突发读/突发写表示读和写操作都是突发传输的,每次读/写操作持续 BL 所设定的长度,这也是常规的设定。突发读/单一写表示读操作是突发传输,写操作则只是一个个单独进行。突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序。顺序传输是指从起始单元开始顺序读取。假如 BL=4,起始存储单元编号是 n,突发传输顺序就是 n、n+1、n+2、n+3。交错传输就是打乱正常的顺序进行数据传输(比如第一个进行传输的单元是 n,而第二个进行传输的单元是 n+2 而不是 n+1)。由于交错传输很少用到,它的传输规则在这里就不详细介绍了,大家可以参考所选用的 SDRAM 芯片手册。
7. 预充电(Precharge)
在对 SDRAM 某一存储地址进行读写操作结束后,如果要对同一 L-Bank 的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。 L-Bank 关闭现有工作行,准备打开新行的操作就是预充电( Precharge)。在读写过程中,工作行内的存储体由于“行激活”而使存储电容受到干扰,因此在关闭工作行前需要对本行所有存储体进行重写。预充电实际上就是对工作行中所有存储体进行数据重写,并对行地址进行复位,以准备新行工作的过程。
预充电命令(Precharge)命令包括两类:全部预充电(Precharge All)和指定 L-Bank 预充电(Precharge Bank),控制指令均为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0010,通过地址总线中的 A10 和 L-Bank 地址线 BA[1:0]辅助控制预充电类型,当 A10 为高电平时,执行全部预充电命令,对所有的 L-Bank 进行预充电,无需关心 BA[1:0]信号的输入;当 A10 为低电平时,只对由 BA[1:0]选定的 L-Bank 进行预充电。当某个 L-Bank执行预充电操作后,该 L-Bank 处于空闲状态,在下次读写操作之前必须重新激活。在本实验中我们仅对对指定 L-Bank 进行预充电操作,所以我们此处的 A10 设置为 0。但在后续 SDRAM 的使用中我们会对多个 Bank 进行乒乓操作,所以我们会将 A10 设置为 1,对全部 Bank 进行预充电。
在发出预充电命令之后,要经过一段时间才能发送行激活命令打开新的工作行,这个间隔被称为 tRP( Precharge command Period,预充电有效周期),如下图所示。和 tRCD、CL 一样, tRP 的单位也是时钟周期数,具体值视时钟频率而定。
自动预充电的开始时间与上图一样,只是没有了单独的预充电命令,并在发出读取命令时, A10 地址线要设为高电平(允许自动预充电)。可见控制好预充电启动时间很重要,它可以在读取操作结束后立刻进入新行的寻址,保证运行效率。需要注意的是如果突发设置是全页突发,则自动预充电指令是不可用的。
写操作时,由于每笔数据的真正写入则需要一个足够的周期来保证,这段时间就是写回周期( tWR)。所以预充电不能与写操作同时进行,必须要在 tWR 之后才能发出预充电命令,以确保数据的可靠写入,否则重写的数据可能出错,如下图所示。
下面是不同CAS潜伏期(CAS Latency)以及触发长度(Burst Length)下的tWR与给预充电指令的时间。
8. 刷新(Refresh)
SDRAM 之所以称为同步“动态”随机存储器,是因为它要不断进行刷新( Refresh)才能保留住数据,因此刷新是 SDRAM 最重要的操作。
刷新操作与预充电类似,都是重写存储体中的数据。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有 L-Bank 中的工作行(处于激活状态的行)操作,并且是不定期的;而刷新则是有固定的周期,并依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。
那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms,也就是说每一行刷新的循环周期是 64ms。我们在看 SDRAM 芯片参数时,经常会看到 4096 Refresh Cycles/64ms 或 8192 Refresh Cycles/64ms 的标识,这里的 4096 与 8192 就代表这个芯片中每个 L-Bank 的行数。刷新命令一次仅对一行有效,也就是说在 64ms 内这两种规格的芯片分别需要完成 4096 次和 8192 次刷新操作。因此, L-Bank为4096行时刷新命令的发送间隔为64ms/4096=15.625μs,8192行时为 64ms/8192=7.8125μs
刷新操作分为两种:自动刷新( Auto Refresh,简称 AR)与自刷新( Self Refresh,简称 SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于自动刷新( AR), SDRAM 内部有一个行地址生成器(也称刷新计数器)用来自动生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说 CAS 在 RAS 之前有效。所以, AR 又称 CBR( CAS Before RAS,列提前于行定位)式刷新。
在自动刷新过程中,所有 L-Bank 都停止工作。每次刷新操作所需要的时间为自动刷新周期( tRC),在自动刷新指令发出后需要等待 tRC 才能发送其他指令。 64ms 之后再次对同一行进行刷新操作,如此周而复始进行循环刷新。显然,刷新操作肯定会对 SDRAM 的性能造成影响,但这是没办法的事情,也是DRAM 相对于 SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。 下面是自动刷新时序图:
自刷新( SR)主要用于休眠模式低功耗状态下的数据保存。在发出 AR 命令时,将 CKE 置于无效状态,就进入了 SR 模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在 SR 期间除了CKE 之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使 CKE 有效才能退出自刷新模式并进入正常工作状态。 下面是自刷新时序图:
9. 数据掩码(Data Mask,DQM)
在讲述读/写操作时,我们谈到了突发长度。如果 BL=4,那么也就是说一次就传送 4 笔数据。但是,如果其中的第二笔数据是不需要的,怎么办?还要传输吗?为了屏蔽不需要的数据,人们采用了数据掩码( Data I/O Mask,简称 DQM)技术。通过 DQM,内存可以控制 I/O 端口取消哪些输出或输入的数据。为了精确屏蔽一个数据总线位宽中的每个字节,每个 DQM 信号线对应一个字节( 8bit)。因此,对于数据总线为 16bit 的 SDRAM 芯片,就需要两个 DQM 引脚。SDRAM 官方规定,在读取时 DQM 发出两个时钟周期后生效,如下图所示。
而在写入时, DQM 与写入命令一样是立即成效,如下图所示。
三、关键程序设计思路
前面我们提到SDRAM的控制器:SDRAM的构造犹如一座精密的城堡,主要由时钟缓冲器(CLK BUFFER)、指令解码器(COMMAND DECODER)、地址缓冲器(ADDRESS BUFFER)、模式寄存器(MODE REGISTER)、控制信号生成器(CONTROL SIGNAL GENERATOR)、四个存储BANK(BANK#0至BANK#3)以及数据控制电路(DATA CONTROL CIRCUIT)等关键组件组成。
我们在真正用起来,编写代码的时候可以把以上结构抽象并化简为下面的模块图:
可以看到图中状态控制模块中是有两个状态机,一个是初始化状态机,另一个是工作状态机,下面是两个状态机的状态图:
(初始化状态机)
(工作状态机)
四、总结与声明
SDRAM通过与时钟同步的工作方式,极大提高了数据访问速度和数据处理能力。它的突发长度、预充电、刷新机制,以及数据掩码功能,使得SDRAM在多任务处理、连续数据传输等场景中表现出色。SDRAM在现代电子设备中的广泛应用,尤其在计算机和嵌入式设备中,成为了性能提升的关键。
本篇博客记录了我在学习SDRAM过程中所做的笔记,目的是为了方便自己回顾与梳理所学知识。通过对SDRAM的工作原理、数据传输流程等方面的学习,我对其有了更深入的理解。
声明:
本文中的绝大部分内容参考了《新起点之FPGA开发指南 V3.1》
,我结合自己的学习过程,参考了W9825G6KH的数据手册,对相关图示进行了调整与标记,以更贴合自己的理解。博客中的内容仅为学习笔记,用于分享学习经验和供自己查阅,并不用于其他用途。
如你对SDRAM的具体开发或应用感兴趣,强烈推荐阅读《新起点之FPGA开发指南 V3.1》
,文档提供了非常详尽的开发流程和技术细节。
参考资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库