CN103092785B - Ddr2 sdram控制器 - Google Patents
Ddr2 sdram控制器 Download PDFInfo
- Publication number
- CN103092785B CN103092785B CN201310050849.5A CN201310050849A CN103092785B CN 103092785 B CN103092785 B CN 103092785B CN 201310050849 A CN201310050849 A CN 201310050849A CN 103092785 B CN103092785 B CN 103092785B
- Authority
- CN
- China
- Prior art keywords
- read
- order
- write requests
- ddr2sdram
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Dram (AREA)
Abstract
本发明涉及一种DDR2?SDRAM控制器,通过DDR2?SDRAM控制器遵循DDR2?SDRAM接口协议,实现DDR2?SDRAM控制器与外部DDR2?SDRAM之间的数据传输,该DDR2?SDRAM控制器包括:DDR2SDRAM接口,实现DDR2?SDRAM接口协议定义的各种信号;系统数据总线接口,实现系统数据总线侧的接口功能,该系统数据总线接口可以被复制,以满足多个数据总线的连接;针对多个数据总线请求的命令仲裁器,使得同一时间内只能有一路数据总线可以访问外部DDR2?SDRAM;命令队列及重排序模块接收命令仲裁器输出的读/写请求命令,并根据地址的相关性对读/写请求命令进行重排序,从而提高所述DDR2?SDRAM接口的利用率。
Description
技术领域
本发明涉及一种DDR2SDRAM控制器。
背景技术
目前,DDR2SDRAM用途广泛,很多应用系统都会用到DDR2SDRAM作为存储器,相比DDRSDRAM,DDR2SDRAM具有功耗小、可利用带宽高的特点,所以尤其适合在视频编解码、图像处理等需要大数据吞吐率的应用场合。
首先,DDR2SDRAM所能提供的数据带宽由下面的式1决定:
数据带宽=数据线位宽*2*时钟频率*利用率(式1)
由于DDR2SDRAM天然的属性,在进行传输数据过程中有许多的附加操作,比如根据地址激活相应的BANK,还有定时的刷新(REF)操作等等,所以DDR2SDRAM并不是每个时钟周期都能传输数据,如何最大化地利用DDR2SDRAM所提供的理论带宽成为使用DDR2SDRAM的一个问题。利用率可以用下面的式2来表示:
利用率=实际传输数据的时钟周期数/总的时钟周期数(式2)
对于一个应用系统来说,数据线位宽和时钟频率相对固定,而利用率的大小是与系统内的DDR2SDRAM控制器相关。所以,DDR2SDRAM控制器性能的高低直接影响了整个DDR2SDRAM实际所能提供数据带宽的大小。
现有的一些设计主要存在以下方面的不足:
(1)使用全同步设计方案。如果整个系统需要的数据带宽需求较大,那么DDR2SDRAM控制器就要工作在较高的时钟频率上,这样对于需要访问外部DDR2SDRAM的数据总线(DataBus)就存在时钟频率的要求,至少该数据总线输出的数据总线时钟必须与DDR2SDRAM控制器一致,虽然全同步设计较为简单,但是牺牲了使用的便利性。举例,如果外部连接了DDR2-800的SDRAM,那么该DDR2SDRAM控制器最高需要工作在400MHz的时钟频率上,才可能获得最大的数据带宽,而系统内有些数据总线并不需要这么高的工作频率,但为了访问外部DDR2SDRAM,这些数据总线就可能做一些修改,以满足时钟频率的要求。
(2)较低的带宽利用率。由于没有实现读/写请求命令的重排序功能,所以在某些情况下,降低了带宽利用率。如图1所示,现有的DDR2SDRAM控制器会把读/写请求命令直接发送,所以在这样一个命令队列里,DDR2SDRAM控制器需要3次关闭当前行(ROW)再打开下一行的操作,浪费了大量时间;而如果进行重排序之后,如图2,DDR2SDRAM接口控制器只需要一次关闭当前行(ROW)再打开下一行的操作,大大提高了总线带宽利用率。图1和图2中twR表示写恢复时间,tRP表示Precharge时间(即关闭当前行),tRCD表示激活下一行到可以进行读写的时间。
发明内容
本发明的目的在于提供一种DDR2SDRAM控制器,能够提高DDR2SDRAM接口的利用率。
为解决上述问题,本发明提供一种DDR2SDRAM控制器,包括:包括系统配置总线接口、一个或多个系统数据总线接口、控制寄存器、命令仲裁器、命令队列及重排序模块、读标志先进先出模块和DDR2SDRAM接口,其中,
所述系统配置总线接口使用异步设计,用于接收系统配置信息并存入控制寄存器内,并隔离系统配置总线时钟和DDR2SDRAM控制器时钟;
所述控制寄存器,用于根据所述系统配置信息输出工作参数;
所述一个或多个系统数据总线接口使用异步设计,用于接收来自一个或多个系统数据总线的读/写请求命令并发送给所述命令仲裁器,隔离系统数据总线时钟和DDR2SDRAM控制器时钟,及从所述命令仲裁器获取读数据并输出至一个或多个系统数据总线;
所述命令仲裁器,用于接收来自一个或多个系统数据总线接口输出的读/写请求命令,通过预设的仲裁算法,使得同一时刻只响应其中一路请求命令,把该命令中的请求地址映射成Bank/Row/Column地址后并输出至所述命令队列及重排序模块,而且根据所述读标志先进先出模块中的读标志把DDR2SDRAM接口返回的读数据分发给对应的系统数据总线接口;
所述读标志先进先出模块,用于存储从所述命令队列及重排序模块输出的读标志,并按先进先出的次序将所述读标志输出给所述命令仲裁器;
所述命令队列及重排序模块,用来所述存储命令仲裁器输出的经过所述请求地址映射的读/写请求命令,并且根据所述Bank/Row/Column地址的相关性来对读/写请求命令进行重排序,重排序后输出的读/写请求命令中,如果是读请求命令,则把相应系统数据总线接口的编号以及数据请求长度作为所述读标志存入所述读标志先进先出模块;
DDR2SDRAM接口,用于每次接收一个重排序后的读/写请求命令,并把所述重排序后的读/写请求命令解析成标准接口信号输出至外部的DDR2SDRAM,同时接收DDR2SDRAM返回的读数据并发送给所述命令仲裁器。
进一步的,在上述控制器中,所述DDR2SDRAM接口,还用于对DDR2SDRAM的初始化以及刷新操作。
进一步的,在上述控制器中,所述命令仲裁器、命令队列及重排序模块和DDR2SDRAM接口共用一个工作时钟。
进一步的,在上述控制器中,所述控制寄存器根据所述系统配置信息输出的工作参数包括:
向所述DDR2SDRAM接口输出读/写操作的突发长度和延时参数、向所述命令仲裁器输出优先级设置参数和向所述命令队列及重排序模块输出排序使能信号。
进一步的,在上述控制器中,每个系统数据总线接口包括总线桥、第一写数据先进先出模块、读数据先进先出模块、第一命令先进先出模块和命令输出模块,其中,
所述总线桥,用于接收来自系统数据总线的读/写请求命令,并将读/写请求命令转化成统一的命令格式存入所述第一命令先进先出模块,及从所述读数据先进先出模块获取所述读数据并输出至系统数据总线;
第一写数据先进先出模块,用于从所述总线桥获取写请求命令对应的写数据,并按先进先出的次序将所述写数据输出给所述命令仲裁器;
读数据先进先出模块,用于存储从所述DDR2SDRAM接口返回的读数据,并按先进先出的次序将所述读数据输出给所述总线桥;
所述第一命令先进先出模块,用于存储转化成统一的命令格式的读/写请求命令,并隔离系统总线时钟与DDR2SDRAM控制器时钟;
命令输出模块,用于向所述命令仲裁器发起访问申请,在得到所述命令仲裁器的响应后,把所述命令先进先出模块中的读/写请求命令发送给所述命令仲裁器。
进一步的,在上述控制器中,所述命令队列及重排序模块包括N个寄存器组、重排序单元和命令输出单元,N为自然数,其中,
每个寄存器组用于存储一个格式命令,所述格式命令包括经过所述请求地址映射的读/写请求命令以及与该读/写请求命令对应的系统数据总线接口的编号,每个寄存器组具有一个序号,如果某个寄存器组存储了有效的读/写请求命令,该寄存器组对应的序号的范围为0至N-1,如果某个寄存器组没有存储有效的读/写请求命令,该寄存器组对应的序号为-1,所有格式命令按照在寄存器组的序号排序形成命令队列,所述序号与存储在具有该序号的寄存器组上的经过所述请求地址映射的读/写请求命令对应;
所述重排序单元,用于根据控制寄存器输出的排序使能信号的电平高低,将从所述命令仲裁器接收到的新进的读/写请求命令插入所述命令队列中的相应位置,并更新相应寄存器组的序号;
所述命令输出单元,用于将序号为零的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,并将该寄存器组的序号设置为-1,同时更新其它寄存器组的序号。
进一步的,在上述控制器中,当所述排序使能信号为高电平时,所述重排序单元根据预设的重排序方法将新进的读/写请求命令插入所述命令队列中的相应位置,同时更新从插入位置到命令队列的末尾的对应的所有寄存器组的序号;
当所述排序使能信号为低电平时,所述重排序单元将新进的读/写请求命令按照先后顺序存入所述命令队列的末尾,同时更新存入位置对应的寄存器组的序号。
进一步的,在上述控制器中,所述重排序方法包括:
访问相同的Bank/Row地址,不在同一个Bank中频繁切换Row地址;
配合DDR2SDRAM的AdditiveLatency特性,使用交错的Bank地址;
使用连续的读请求命令或者写请求命令,不要在读/写请求命令之间频繁切换;
使用autoprecharge命令,而不是单独发送precharge命令;
需要注意的是:新进的读/写请求命令,只能插入在相同系统数据总线接口的编号和Bank/Row/Column的读/写请求命令之后。
进一步的,在上述控制器中,所述重排序方法包括:
步骤一,判断所述命令队列是否存在与新进的读/写请求命令相同系统数据总线接口的编号和Bank/Row/Column地址的读/写请求命令,若存在,则执行步骤二,若不存在,则将整个命令队列作为第一查找范围,并转到步骤三;
步骤二,从所述相同系统数据总线接口的编号以及Bank/Row/Column地址的读/写请求命令中获取对应的最大的序号,将从具有所述最大的序号的读/写请求命令至命令队列的末尾的范围作为所述第一查找范围,并转到步骤三;
步骤三,判断所述第一查找范围中是否存在与新进的读/写请求命令同为读或写,且具有相同Bank/Row地址的读/写请求命令,若具有,则执行步骤四,若不具有,则执行步骤五;
步骤四,将所述第一查找范围中与新进的读/写请求命令同为读或写,且具有相同Bank/Row地址的所有读/写请求命令作为第二查找范围,并将新进的读/写请求命令插入所述第二查找范围中具有最大的序号的读/写请求命令之后并结束;
步骤五,判断所述命令队列中是否存在与新进的读/写请求命令同为读或写,且具有不同Bank地址的读/写请求命令,若具有,则执行步骤六,若不具有,则执行步骤十六;
步骤六,从所述与新进的读/写请求命令同为读或写,且具有不同Bank地址的读/写请求命令中获取对应的最小的序号,将从具有所述最小序号的读/写请求命令至命令队列的末尾的范围作为所述第三查找范围,并将所述第三查找范围中的读/写请求命令的对应的最小的序号作为次佳位置值,然后转到步骤七;
步骤七,判断具有次佳位置值的读/写请求命令与紧排在其后的下一个读/写请求命令是否同为读或写的读/写请求命令,若是,则转到步骤八,若否,则转到步骤十二;
步骤八,判断具有次佳位置值的读/写请求命令与新进的读/写请求命令的Bank地址是否相同,若是,则将所述次佳位置值加1并转到步骤七,若否,则转到步骤九;
步骤九,判断紧排在具有次佳位置值的读/写请求命令其后的下一个读/写请求命令与新进的读/写请求命令的Bank地址是否相同,若是,则将所述次佳位置值加1并转到步骤七,若否,则转到步骤十;
步骤十,判断具有次佳位置值的读/写请求命令与紧排在其后的下一个读/写请求命令的Bank地址相同,且Row地址不同,若是,则转到步骤十三,若否,则转到步骤十一;
步骤十一,将所述次佳位置值存入次佳位置记录器中,将所述次佳位置值加1并转到步骤七;
步骤十二,判断所述次佳位置记录器是否为空,若为非空,则从所述次佳位置记录器中获取具有最大命令序号的次佳位置值并转到步骤十三,若为空,则转到步骤十四;
步骤十三,在具有次佳位置值的读/写请求命令之后插入所述新进的读/写请求命令,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后转到步骤十五;
步骤十四,将所述新进的读/写请求命令插入到所述第三查找范围中与新进命令具有相同读/写标志且具有最大序号的请求命令之后,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后,转到步骤十五;
步骤十五,清空所述次佳位置记录器后结束;
步骤十六,判断所述命令队列中是否存在与所述新进的读/写请求命令具同为读或写的读/写请求命令,若无,则转到步骤十七,若有,则转到步骤十八;
步骤十七,将所述新进的读/写请求命令插入所述命令队列的末尾,然后转到步骤十五;
步骤十八,将所述命令队列中与所述新进的读/写请求命令具同为读或写的读/写请求命令作为第四查找范围,并将所述新进的读/写请求命令插入在所述第四查找范围中具有最大序号的读/写请求命令之后,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后,转到步骤十五。
进一步的,在上述控制器中,每个寄存器组还设置有一个饥饿指数,所述饥饿指数的范围为0至预设的最大限定值,当所述重排序单元接收到所述DDR2SDRAM接口发出的更新使能信号时,判断是否有达到所述最大限定值的饥饿指数,
如果有,则所述命令输出单元把所述饥饿指数达到所述最大限定值的对应的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,同时将该寄存器组的饥饿指数清零,并将该寄存器组的序号设置为-1,同时将其它寄存器组的饥饿指数加1,并更新其它寄存器组的序号;
如果没有,则所述命令输出单元将序号为零的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,同时将该寄存器组的饥饿指数清零,并将该寄存器组的序号设置为-1,同时将其它寄存器组的饥饿指数加1,并更新其它寄存器组的序号。
进一步的,在上述控制器中,所述DDR2SDRAM接口包括主状态机、第二命令先进先出模块、第二写数据先进先出模块、预判断模块、预激活模块、时序控制模块、初始化状态机、解析模块、数据接口和DDR2物理层,其中,
所述主状态机,用于协调第二命令先进先出模块、第二写数据先进先出模块、预判断模块、预激活模块、时序控制模块、初始化状态机、解析模块、数据接口和DDR2物理层的工作并发送读/写请求命令;
所述第二命令先进先出模块,用于从所述命令队列及重排序模块获取并存储读/写请求命令,并根据先进先出的顺序将读/写请求命令发送给所述主状态机;
所述第二写数据先进先出模块,用于暂存写数据;
所述预判断模块,用于根据比较当前读/写请求命令与后续读/写请求命令的Bank/Row地址的结果来判断是否进行AutoPrecharge操作,并将判断结果发送给所述主状态机;
所述预激活模块,用于跟踪DDR2SDRAM中各个读/写请求命令的Bank的激活状态,并根据所述第二命令先进先出模块中的读/写请求命令来判断是否需要预先激活某个读/写请求命令的Bank,并将判断结果发送给所述主状态机;
时序控制模块,用于向所述主状态机发送所述读/写请求命令的延时参数以及刷新时间;
所述初始化状态机,用于进行DDR2SDRAM的初始化操作;
所述解析模块,用于把主状态机送出的读/写请求命令解析成标准的DDR2SDRAM接口信号;
所述数据接口,用于通过所述主状态机从所述第二写数据先进先出模块读入写数据,并控制写数据与写命令之间的延时,同时接收DDR2SDRAM返回的读数据并发送给所述主状态机;
所述DDR2物理层,用于将DDR2SDRAM分别与所述解析模块和所述数据接口进行连接,并将DDR2SDRAM控制器内的逻辑信号转化成标准的差分信号。
与现有技术相比,本发明通过DDR2SDRAM控制器遵循DDR2SDRAM接口协议,实现DDR2SDRAM控制器与外部DDR2SDRAM之间的数据传输,该DDR2SDRAM控制器包括:DDR2SDRAM接口,实现DDR2SDRAM接口协议定义的各种信号;系统数据总线接口,实现系统数据总线侧的接口功能,该系统数据总线接口可以被复制,以满足多个数据总线的连接;针对多个数据总线请求的命令仲裁器,使得同一时间内只能有一路数据总线可以访问外部DDR2SDRAM;命令队列及重排序模块接收所述命令仲裁器输出的读/写请求命令,并根据地址的相关性对读/写请求命令进行重排序,从而提高所述DDR2SDRAM接口的利用率。
另外,通过整个DDR2SDRAM控制器使用异步设计,其中所述命令仲裁器、命令队列及重排序模块以及DDR2SDRAM接口逻辑共用一个工作时钟,而每个系统数据总线接口都有独立的工作时钟,这样对于访问外部DDR2SDRAM就不存在时钟频率的限制,方便整个DDR2SDRAM控制器集成到SoC(SystemonChip系统级芯片)中,从而提高整个DDR2SDRAM控制器的通用性。
附图说明
图1是本未经排序的命令序列执行示意图;
图2是重排序后的命令序列的示意图;
图3是本发明一实施例的DDR2SDRAM控制器的顶层框图;
图4是本发明一实施例的系统数据总线接口框图;
图5是本发明一实施例的读/写请求命令的格式示意图;
图6是本发明一实施例的命令队列与重排序模块框图;
图7是本发明一实施例的交错的Bank地址并配合AdditiveLatency功能执行示意图;
图8是本发明一实施例的写操作之后的读操作执行示意图;
图9是本发明一实施例的重排序方法流程图;
图10是本发明一实施例的DDR2SDRAM接口框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
如图3所示,本发明提供一种DDR2SDRAM控制器,包括系统配置总线接口1、一个或多个系统数据总线接口2、控制寄存器3、命令仲裁器4、命令队列及重排序模块5、读标志先进先出模块6和DDR2SDRAM接口7。
所述系统配置总线接口1使用异步设计,用于接收配置总线(ConfigBus)系统配置信息并存入控制寄存器3内,并隔离系统配置总线时钟和DDR2SDRAM控制器时钟。
所述控制寄存器3,用于根据所述系统配置信息输出工作参数。具体的,所述控制寄存器根据所述系统配置信息输出的工作参数包括:向所述DDR2SDRAM接口7输出读/写操作的突发长度(BurstLength)和DDR2SDRAM各种延时参数、向所述命令仲裁器4输出优先级设置参数和向所述命令队列及重排序模块5输出排序使能信号。
所述一个或多个系统数据总线接口2使用异步设计,用于接收来自一个或多个系统数据总线(DataBus)的读/写请求命令并发送给所述命令仲裁器4,隔离系统数据总线时钟和DDR2SDRAM控制器时钟,及从所述命令仲裁器4获取读数据并输出至一个或多个系统数据总线。具体的,如果需要连接多个的系统数据总线,那么该系统数据总线接口2可以被复制。
优选的,如图4所示,每个系统数据总线接口2包括总线桥21、第一写数据先进先出模块22、读数据先进先出模块23、第一命令先进先出模块24和命令输出模块25。
所述总线桥21(BusBridge),用于接收来自系统数据总线(DataBus)的读/写请求命令,并将读/写请求命令转化成统一的命令格式存入所述第一命令先进先出模块24(异步FIFO),及从所述读数据先进先出模块23获取所述读数据并输出至系统数据总线。具体的,系统数据总线接口2负责连接系统内各种形式的系统数据总线,通过总线桥21可把读/写请求命令转化成如图5所示的统一的命令格式并存入所述第一命令先进先出模块24(异步FIFO),使用异步FIFO是为了隔离系统数据总线时钟与DDR2SDRAM控制器时钟,理论上,读/写请求命令的数据长度可以无限大,而访问外部的DDR2SDRAM的突发长度是有规定的,即读/写请求命令的突发长度(Burstlength)为4或者8笔(beat)数据,所以需要把读/写请求命令按照突发长度进行切割,直到剩下的请求数据长度小于Burstlength,因此,一个系统数据总线请求可能会产生多个内部请求命令。图5中,req_rw_flag表示本次数据请求是读还是写,长度为1bits;req_length表示(实际数据请求长度减1),由于访问外部DDR2SDRAM的突发长度为4或8,所以为了节约存储单元,该(实际数据请求长度减1)可以用3bits表示,req_address表示请求地址(Address),长度可以为nbits,n为正整数。
所述第一写数据先进先出模块(WriteDataFIFO)22,用于从所述总线桥21获取写请求命令对应的写数据(WriteData),并按先进先出的次序将所述写数据输出给所述命令仲裁器4。
所述读数据先进先出模块(ReadDataFIFO)23,用于存储从所述DDR2SDRAM接口7返回的读数据,并按先进先出的次序将所述读数据输出给所述总线桥21。
所述第一命令先进先出模块(CommandFIFO)24,用于存储转化成统一的命令格式的读/写请求命令,并隔离系统总线时钟与DDR2SDRAM控制器时钟。
命令输出模块25(CMDOUT),用于向所述命令仲裁器4发起访问申请(port_req),在得到所述命令仲裁器4的响应(port_grant)后,把所述命令先进先出模块24中的读/写请求命令(port_cmd)发送给所述命令仲裁器4。
所述命令仲裁器4,用于接收来自一个或多个系统数据总线接口2输出的读/写请求命令,通过预设的仲裁算法,使得同一时刻只响应其中一路请求命令,把该命令中的请求地址映射成Bank/Row/Column地址后并输出至所述命令队列及重排序模块5,而且根据所述读标志先进先出模块6中的读标志(ReadFlag)把DDR2SDRAM接口7返回的读数据分发给对应的系统数据总线接口2。具体的,命令仲裁器4接收来自多个系统数据总线接口2输出的读/写请求命令,通过预设的仲裁算法,使得只有一路读/写请求命令输出,同时把读/写请求命令中的请求地址映射成Bank/Row/Column的地址形式,并且把DDR2SDRAM接口7返回的读数据(ReadData)根据据所述读标志先进先出模块6中的读标志分发给各个系统数据总线接口2的Port端口。
所述读标志先进先出模块(ReadFlagFIFO)6,用于存储从所述命令队列及重排序模块5输出的读标志,并按先进先出的次序将所述读标志(ReadFlag)输出给所述命令仲裁器4。
所述命令队列及重排序模块5,用来存储所述命令仲裁器4输出的经过所述请求地址映射的读/写请求命令,并且根据所述Bank/Row/Column地址的相关性来对读/写请求命令进行重排序,重排序后输出的读/写请求命令中,如果是读请求命令,则把相应系统数据总线接口2的编号以及数据请求长度作为所述读标志存入所述读标志先进先出模块6。具体的,读/写请求命令经过重排序,可以提高DDR2SDRAM接口的带宽利用率。重排序后输出的读/写请求命令中,如果是读命令,那么就要把相应系统数据总线接口2的Port端口的编号以及数据请求长度存入ReadFlagFIFO中,这样仲裁器才能根据ReadFlag把返回的ReadData分发给各个Port端口。
优选的,如图6所示,所述命令队列及重排序模块5包括N个寄存器组51、重排序单元52和命令输出单元53,N为自然数。
每个寄存器组51用于存储一个格式命令,所述格式命令包括经过所述请求地址映射的读/写请求命令以及与该读/写请求命令对应的系统数据总线接口的编号(端口编号,即PortID),每个寄存器组51具有一个序号(标签,tag),tag的值的范围可以为-1,0,1,...N-1,如果某个寄存器组51存储了有效的读/写请求命令,该寄存器组对应的序号的范围为0至N-1,如果某个寄存器组51没有存储有效的读/写请求命令,该寄存器组51对应的序号为-1,如果用8bit表示序号,那该序号为FF,所有格式命令按照在寄存器组51的序号排序形成命令队列,所述序号与存储在具有该序号的寄存器组51上的经过所述请求地址映射的读/写请求命令对应。
命令队列的长度理论是越长越好,因为越长的队列长度可以增强所发送命令之间的相关性,进而提升带宽利用率,但是付出的代价就是芯片面积的增加,所以在具体实现时要权衡性能与芯片面积之间的关系。根据仿真分析,队列长度为8组命令是比较合适的,该长度兼顾了对面积的考量,同时也较大地提升了带宽利用率。如果可以适当增加面积,同时又想要得到更高的带宽利用率,那么队列长度为16组命令是不错的选择。而当队列长度大于16时,增加的命令队列长度对于提升带宽利用率已经贡献不大了。
所述命令输出单元53,用于将序号为零的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,并将该寄存器组的序号设置为-1,同时更新其它寄存器组的序号。
优选的,为了避免某些读/写请求命令一直在命令队列里等待,每个寄存器组51还设置有一个饥饿指数(starvationlevel),所述饥饿指数的范围为0至预设的最大限定值,当所述重排序单元52接收到所述DDR2SDRAM接口7发出的更新使能信号(update_en)时,判断是否有达到所述最大限定值(starvationlimitation)的饥饿指数,如果有,则所述命令输出单元53把所述饥饿指数达到所述最大限定值的对应的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口7,同时将该寄存器组51的饥饿指数清零,并将该寄存器组51的序号设置为-1,同时将其它寄存器组51的饥饿指数加1,并更新其它寄存器组51的序号;如果没有,则所述命令输出单元53将序号为零(tag=0)的寄存器组51中的读/写请求命令输出给所述DDR2SDRAM接口7,同时将该寄存器组51的饥饿指数清零,并将该寄存器组51的序号设置为-1,同时将其它寄存器组51的饥饿指数加1,并更新其它寄存器组51的序号。
饥饿指数(Starvationlimitation)可以通过控制寄存器4去设置,而且该值的大小关系到命令队列里低优先级(即Tag值较大)命令的等待时间,如果不希望这些命令等待的时间太长,那么Starvationlimitation的值应该小一些,但是这样会影响到带宽利用率。根据仿真分析,Starvationlimitation的值一般应该大于命令队列的长度。例如,如果队列长度为8组命令,那么Starvationlimitation应设为10会比较合适。
所述重排序单元52(Reordering单元),用于根据控制寄存器3输出的排序使能信号(reorder_en)的电平高低,将从所述命令仲裁器4接收到的新进的读/写请求命令(新命令,new_command)插入所述命令队列(旧命令,old_command)中的相应位置,并更新相应寄存器组51的序号。具体的,所述重排序单元52根据新进的读/写请求命令的地址以及队列里存储的读/写请求命令的地址,并通过一些预设的重排序的方法或规则把新进的读/写请求命令插入队列中,同时更新所有寄存器组的序号(tag)值。
优选的,当所述排序使能信号(reorder_en)为高电平时,所述重排序单元52根据预设的重排序方法将新进的读/写请求命令插入所述命令队列中的相应位置,同时更新从插入位置到命令队列的末尾的对应的所有寄存器组51的序号;当所述排序使能信号为低电平时,所述重排序单元52将新进的读/写请求命令按照先后顺序存入所述命令队列的末尾,即把新进的读/写请求命令按照先后顺序存入命令队列中,同时更新存入位置对应的寄存器组51的序号,以满足不需要高带宽利用率,但是要保证所述命令仲裁器4输出读/写请求命令的执行顺序。
较佳的,为了提高DDR2SDRAM接口7带宽利用率而把读/写请求命令进行重新排序,所依据的重排序方法或规则就是要尽量满足下面可以改善带宽利用率的操作:如图1和图2对比显示,访问相同的Bank/Row地址,不在同一个Bank中频繁切换Row地址;如图7所示,配合DDR2SDRAM的AdditiveLatency特性,使用交错的Bank地址,具体的,AdditiveLatency(AL)是DDR2SDRAM新增加的一项特性,它的优点在于:Bank激活命令(ACT)之后不必等待tRCD延时就可以发送读/写命令,因此DDR2SDRAM控制器有更多的“时间间隙”去自由地发送命令,图7中,由于Bank的地址是交错的,所以在等待读数据的时候,可以去激活其他Bank而进行读操作,只要这两个激活命令(ACT)之间的延时满足tRRD要求即可,CK#代表负时钟,CK代表正时钟,Command代表命令,DQS代表数据有效,DQ代表返回数据,tRRD、AL、CL为延时参数;如图8所示,使用连续的读请求命令或者写请求命令,不要在读/写请求命令之间频繁切换,图8中,写操作之后,在对同一DDR2SDRAM进行读操作之前需要一个等待时间,即tWTR,WL为延时参数;使用autoprecharge命令,而不是单独发送precharge命令;新进的读/写请求命令,只能插入在相同系统数据总线接口的编号和相同Bank/Row/Column地址的读/写请求命令之后,即为了避免读/写错误,具有相同系统数据总线接口的编号(PortID)以及相同地址的命令之间的顺序不能被打乱。
优选的,如图9所示,所述重排序方法包括:
步骤S1,判断所述命令队列是否存在与新进的读/写请求命令相同系统数据总线接口的编号和Bank/Row/Column地址的读/写请求命令,若存在,则执行步骤S2,若不存在,则将整个命令队列作为第一查找范围,并转到步骤S3,具体的,如果BurstLength=4,相同Bank/Row/Column地址是指相同的Bank地址,相同的Row地址,Column地址除低两位外相同,如果BurstLength=8,相同Bank/Row/Column地址是指相同的Bank地址,相同的Row地址,Column地址除低三位外相同;
步骤S2,从所述相同系统数据总线接口的编号以及Bank/Row/Column地址的读/写请求命令中获取对应的最大的序号,将从具有所述最大的序号的读/写请求命令至命令队列的末尾的范围作为所述第一查找范围,并转到步骤S3;
步骤S3,判断所述第一查找范围中是否存在与新进的读/写请求命令同为读或写,且具有相同Bank/Row地址的读/写请求命令,若具有,则执行步骤S4,若不具有,则执行步骤S5;
步骤S4,将所述第一查找范围中与新进的读/写请求命令同为读或写,且具有相同Bank/Row地址的所有读/写请求命令作为第二查找范围,将新进的读/写请求命令插入所述第二查找范围中具有最大的序号的读/写请求命令之后并结束;
步骤S5,判断所述命令队列中是否存在与新进的读/写请求命令同为读或写,且具有不同Bank地址的读/写请求命令,若具有,则执行步骤S6,若不具有,则执行步骤S16;
步骤S6,从所述与新进的读/写请求命令同为读或写,且具有不同Bank地址的读/写请求命令中获取对应的最小的序号,将从具有所述最小序号的读/写请求命令至命令队列末尾的范围作为所述第三查找范围,并将所述第三查找范围中的读/写请求命令的对应的最小的序号作为次佳位置值,然后执行步骤S7;
步骤S7,判断具有次佳位置值的读/写请求命令与紧排在其后的下一个读/写请求命令是否同为读或写的读/写请求命令,若是,则转到步骤S8,若否,则转到步骤S12;
步骤S8,判断具有次佳位置值的读/写请求命令与新进的读/写请求命令的Bank地址是否相同,若是,则将所述次佳位置值加1并转到步骤S7,若否,则转到步骤S9;
步骤S9,判断紧排在具有次佳位置值的读/写请求命令其后的下一个读/写请求命令与新进的读/写请求命令的Bank地址是否相同,若是,则将所述次佳位置值加1并转到步骤S7,若否,则转到步骤S10;
步骤S10,判断具有次佳位置值的读/写请求命令与紧排在其后的下一个读/写请求命令的Bank地址相同,且Row地址不同,若是,则转到步骤S13,若否,则转到步骤S11;
步骤S11,将所述次佳位置值存入次佳位置记录器中,并将所述次佳位置值加1并转到步骤S7;
步骤S12,判断所述次佳位置记录器是否为空,若为非空,则从所述次佳位置记录器中获取具有最大命令序号的次佳位置值并转到步骤S13,若为空,则转到步骤S14;
步骤S13,在具有次佳位置值的读/写请求命令之后插入所述新进的读/写请求命令,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后转到步骤S15;
步骤S14,将所述新进的读/写请求命令插入到所述第三查找范围中与新进命令具有相同读/写标志且具有最大序号的请求命令之后,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后,转到步骤S15;
步骤S15,清空所述次佳位置记录器后结束;
步骤S16,判断所述命令队列中是否存在与所述新进的读/写请求命令具同为读或写的读/写请求命令,若无,则转到步骤S17,若有,则转到步骤S18;
步骤S17,将所述新进的读/写请求命令插入所述命令队列的末尾,然后转到步骤S15;
步骤S18,将所述命令队列中与所述新进的读/写请求命令具同为读或写的读/写请求命令作为第四查找范围,并将所述新进的读/写请求命令插入在所述第四查找范围中具有最大序号的读/写请求命令之后,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后,转到步骤S15。
DDR2SDRAM接口7,用于每次接收一个重排序后的读/写请求命令,并把所述重排序后的读/写请求命令解析成标准接口信号(DDR2Signal)输出至外部的DDR2SDRAM,同时接收DDR2SDRAM返回的读数据(ReadData)并发送给所述命令仲裁器4。具体的,DDR2SDRAM接口7还可用于完成其他辅助功能,例如DDR2SDRAM的初始化以及刷新操作。
优选的,所述命令仲裁器4、命令队列及重排序模块5和DDR2SDRAM接口7共用一个工作时钟。
较佳的,如图10所示,所述DDR2SDRAM接口7包括主状态机71、第二命令先进先出模块72、第二写数据先进先出模块73、预判断模块74、预激活模块75、时序控制模块76、初始化状态机77、解析模块78、数据接口79和DDR2物理层80。
所述主状态机(MainStateMachine)71,用于协调第二命令先进先出模块72、第二写数据先进先出模块73、预判断模块74、预激活模块75、时序控制模块76、初始化状态机77、解析模块78、数据接口79和DDR2物理层80的工作并发送读/写请求命令。
所述第二命令先进先出模块(CMDFIFO模块)72,用于从所述命令队列及重排序模块5获取并存储读/写请求命令(Command),并根据先进先出的顺序将读/写请求命令发送给所述主状态机71。具体的,可以根据命令队列的非空标志(empty_flag)以及CMDFIFO的非满标志(fifo_full_flag)读入新命令并存入所述第二命令先进先出模块72中。
DDR2SDRAM接口7中CMDFIFO模块72的深度越深,那么模块Look-aheadAuto-precharge以及模块Look-aheadBankManagement可以回溯的命令数就越多,这对提升带宽利用率是有益的,但是较深的CMDFIFO会影响到前面命令队列的重排序,因为有些命令还没有经过重排序就被读入CMDFIFO中,这又影响了带宽利用率,所以CMDFIFO的深度需要折衷考虑。根据仿真分析,CMDFIFO的深度要小于命令队列长度的一半,一般来讲深度为4组命令比较合适。
所述第二写数据先进先出(WriteDataFIFO)模块73,用于暂存写数据。
所述预判断模块(Look-aheadAuto-precharge模块)74,用于根据比较当前读/写请求命令(current_cmd)与后续读/写请求命令的Bank/Row地址的结果来判断是否进行AutoPrecharge操作,并将判断结果发送给所述主状态机71,具体的,即比较CMDFIFO模块中最先送出的命令(即当前命令)与之后命令的Bank和Row地址,如果没有相同的Bank/Row地址,那么产生的图10所示的auto_prechg_en信号为高电平。另外,即便有相同Bank/Row地址的命令,如果该同地址命令与当前命令之间存在一个相同Bank但不同Row地址的命令,则auto_prechg_en信号也应该为高电平,指示当前命令结束后需要关闭对应的Bank和Row,至于检查后面几个命令则可由控制寄存器3输出的配置参数look_ahead_depth_a决定。这里预先判断是否执行autoprecharge操作,有利于提高DDR2SDRAM接口的带宽利用率。
所述预激活模块(Look-aheadBankManagement模块)75,用于跟踪DDR2SDRAM中各个读/写请求命令的Bank的激活状态,并根据所述第二命令先进先出模块(CMDFIFO)72中的读/写请求命令来判断是否需要预先激活某个读/写请求命令的Bank,并将判断结果发送给所述主状态机71。具体的,所述预激活模块75可以记录各个Bank的激活状态,并且根据CMDFIFO中的命令来判断是否需要预先激活某个Bank。同样地,该模块检查几个命令则由控制寄存器3输出的配置参数look_ahead_depth_b来决定。预先激活后续命令需要访问的Bank也能提高DDR2SDRAM接口的带宽利用率。
时序控制模块(TimingControl)76,用于向所述主状态机71发送所述读/写请求命令的延时参数以及刷新时间。
所述初始化状态机(InitializationStateMachine)77,用于进行DDR2SDRAM的初始化操作。
所述解析模块(AddressandCommandParsing)78,用于把主状态机71送出的读/写请求命令解析成标准的DDR2SDRAM接口信号。
所述数据接口(DataInterface)79,用于通过所述主状态机71从所述第二写数据先进先出模块73读入写数据,并控制写数据与写命令之间的延时,同时接收DDR2SDRAM返回的读数据(ReadData)并发送给所述主状态机71。
所述DDR2物理层80,用于将DDR2SDRAM分别与所述解析模块78和所述数据接口79进行连接,并将DDR2SDRAM控制器内的逻辑信号转化成标准的差分信号。
更详细的,下面通过举例说明采用本实施例的DDR2SDRAM控制器对读/写请求命令进行重排序对于提升带宽利用率的作用。
假设AL=2,CASLatency(CL,列地址脉冲选通潜伏期)=3,BurstLength=8,命令仲裁器输出的命令序列如下:
ReadBank0Row0→ReadBank0Row1→ReadBank0Row0→ReadBank1Row1,如果不经过重排序,那么该命令序列执行情况如表-1:
Cycle | Command | Data |
1 | ACT Bank0/Row0 | |
2 | Read with auto precharge | |
... | NOP | |
7 | NOP | Data0(Burst0,Burst1) |
8 | NOP | Data0(Burst2,Burst3) |
9 | NOP | Data0(Burst4,Burst5) |
10 | NOP | Data0(Burst6,Burst7) |
11 | ACT Bank0/Row1 | |
12 | Read with auto precharge | |
... | NOP | |
17 | NOP | Data1(Burst0,Burst1) |
18 | NOP | Data1(Burst2,Burst3) |
19 | NOP | Data1(Burst4,Burst5) |
20 | NOP | Data1(Burst6,Burst7) |
21 | ACT Bank0/Row0 | |
22 | Read with auto precharge | |
... | NOP | |
25 | ACT Bank1/Row1 | |
26 | Read with auto precharge | |
27 | NOP | Data2(Burst0,Burst1) |
28 | NOP | Data2(Burst2,Burst3) |
29 | NOP | Data2(Burst4,Burst5) |
30 | NOP | Data2(Burst6,Burst7) |
31 | NOP | Data3(Burst0,Burst1) |
32 | NOP | Data3(Burst2,Burst3) |
33 | NOP | Data3(Burst4,Burst5) |
34 | NOP | Data3(Burst6,Burst7) |
表-1未经重排序的命令执行
通过计算可知,表-1中未经重排序的命令执行的带宽利用率为:16/34=47%。
如果经过如图9所描述的重排序方法重新排序后,命令序列如下:
ReadBank0Row0→ReadBank0Row0→ReadBank1Row1→ReadBank0Row1,那么该命令序列的执行情况如表-2:
Cycle | Command | Data |
1 | ACT Bank0/Row0 | |
2 | Read without auto precharge | |
3 | NOP | |
4 | NOP | |
5 | NOP | |
6 | Read with auto precharge | |
7 | NOP | Data0(Burst0,Burst1) |
8 | NOP | Data0(Burst2,Burst3) |
9 | ACT Bank1/Row1 | Data0(Burst4,Burst5) |
10 | Read with auto precharge | Data0(Burst6,Burst7) |
11 | NOP | Data1(Burst0,Burst1) |
12 | NOP | Data1(Burst2,Burst3) |
13 | NOP | Data1(Burst4,Burst5) |
14 | NOP | Data1(Burst6,Burst7) |
15 | ACT Bank0/Row1 | Data2(Burst0,Burst1) |
16 | Read with auto precharge | Data2(Burst2,Burst3) |
17 | NOP | Data2(Burst4,Burst5) |
18 | NOP | Data2(Burst6,Burst7) |
19 | NOP | |
20 | NOP | |
21 | NOP | Data3(Burst0,Burst1) |
22 | NOP | Data3(Burst2,Burst3) |
23 | NOP | Data3(Burst4,Burst5) |
24 | NOP | Data3(Burst6,Burst7) |
表-2经过重排序后的命令执行
通过计算可知,表-2中经过重排序后的命令执行的带宽利用率为:16/24=66.7%,相比未经重排序的命令序列,提高了19.7%的带宽利用率。
综上所述,本发明通过DDR2SDRAM控制器遵循DDR2SDRAM接口协议,实现DDR2SDRAM控制器与外部DDR2SDRAM之间的数据传输,该DDR2SDRAM控制器包括:DDR2SDRAM接口,实现DDR2SDRAM接口协议定义的各种信号;系统数据总线接口,实现系统数据总线侧的接口功能,该系统数据总线接口可以被复制,以满足多个数据总线的连接;针对多个数据总线请求的命令仲裁器,使得同一时间内只能有一路数据总线可以访问外部DDR2SDRAM;命令队列及重排序模块接收所述命令仲裁器输出的读/写请求命令,并根据地址的相关性对读/写请求命令进行重排序,从而提高所述DDR2SDRAM接口的利用率。
另外,通过整个DDR2SDRAM控制器使用异步设计,其中所述命令仲裁器、命令队列及重排序模块以及DDR2SDRAM接口逻辑共用一个工作时钟,而每个系统数据总线接口都有独立的工作时钟,这样对于访问外部DDR2SDRAM就不存在时钟频率的限制,方便整个DDR2SDRAM控制器集成到SoC(SystemonChip系统级芯片)中,从而提高整个DDR2SDRAM控制器的通用性。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (7)
1.一种DDR2SDRAM控制器,其特征在于,包括系统配置总线接口、一个或多个系统数据总线接口、控制寄存器、命令仲裁器、命令队列及重排序模块、读标志先进先出模块和DDR2SDRAM接口,其中,
所述系统配置总线接口使用异步设计,用于接收系统配置信息并存入控制寄存器内,并隔离系统配置总线时钟和DDR2SDRAM控制器时钟;
所述控制寄存器,用于根据所述系统配置信息输出工作参数;
所述一个或多个系统数据总线接口使用异步设计,用于接收来自一个或多个系统数据总线的读/写请求命令并发送给所述命令仲裁器,隔离系统数据总线时钟和DDR2SDRAM控制器时钟,及从所述命令仲裁器获取读数据并输出至一个或多个系统数据总线;
所述命令仲裁器,用于接收来自一个或多个系统数据总线接口输出的读/写请求命令,通过预设的仲裁算法,使得同一时刻只响应其中一路请求命令,把该命令中的请求地址映射成Bank/Row/Column地址后并输出至所述命令队列及重排序模块,而且根据所述读标志先进先出模块中的读标志把DDR2SDRAM接口返回的读数据分发给对应的系统数据总线接口;
所述读标志先进先出模块,用于存储从所述命令队列及重排序模块输出的读标志,并按先进先出的次序将所述读标志输出给所述命令仲裁器;
所述命令队列及重排序模块,用来存储所述命令仲裁器输出的且经过所述请求地址映射的读/写请求命令,并且根据所述Bank/Row/Column地址的相关性来对读/写请求命令进行重排序,重排序后输出的读/写请求命令中,如果是读请求命令,则把相应系统数据总线接口的编号以及数据请求长度作为所述读标志存入所述读标志先进先出模块;
DDR2SDRAM接口,用于每次接收一个重排序后的读/写请求命令,并把所述重排序后的读/写请求命令解析成标准接口信号输出至外部的DDR2SDRAM,同时接收DDR2SDRAM返回的读数据并发送给所述命令仲裁器;
所述命令队列及重排序模块包括N个寄存器组、重排序单元和命令输出单元,N为自然数,其中,
每个寄存器组用于存储一个格式命令,所述格式命令包括经过所述请求地址映射的读/写请求命令以及与该读/写请求命令对应的系统数据总线接口的编号,每个寄存器组具有一个序号,如果某个寄存器组存储了有效的读/写请求命令,该寄存器组对应的序号的范围为0至N-1,如果某个寄存器组没有存储有效的读/写请求命令,该寄存器组对应的序号为-1,所有格式命令按照在寄存器组的序号排序形成命令队列,所述序号与存储在具有该序号的寄存器组上的经过所述请求地址映射的读/写请求命令对应;
所述重排序单元,用于根据控制寄存器输出的排序使能信号的电平高低,将从所述命令仲裁器接收到的新进的读/写请求命令插入所述命令队列中的相应位置,并更新相应寄存器组的序号;
所述命令输出单元,用于将序号为零的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,并将该寄存器组的序号设置为-1,同时更新其它寄存器组的序号;
当所述排序使能信号为高电平时,所述重排序单元根据预设的重排序方法将新进的读/写请求命令插入所述命令队列中的相应位置,同时更新从插入位置到命令队列的末尾的对应的所有寄存器组的序号;
当所述排序使能信号为低电平时,所述重排序单元将新进的读/写请求命令按照先后顺序存入所述命令队列的末尾,同时更新存入位置对应的寄存器组的序号;
所述重排序方法包括:
步骤一,判断所述命令队列是否存在与新进的读/写请求命令相同系统数据总线接口的编号和Bank/Row/Column地址的读/写请求命令,若存在,则执行步骤二,若不存在,则将整个命令队列作为第一查找范围,并转到步骤三;
步骤二,从所述相同系统数据总线接口的编号以及Bank/Row/Column地址的读/写请求命令中获取对应的最大的序号,将从具有所述最大的序号的读/写请求命令至命令队列的末尾的范围作为所述第一查找范围,并转到步骤三;
步骤三,判断所述第一查找范围中是否存在与新进的读/写请求命令同为读或写,且具有相同Bank/Row地址的读/写请求命令,若具有,则执行步骤四,若不具有,则执行步骤五;
步骤四,将所述第一查找范围中与新进的读/写请求命令同为读或写,且具有相同Bank/Row地址的所有读/写请求命令作为第二查找范围,并将新进的读/写请求命令插入所述第二查找范围中具有最大的序号的读/写请求命令之后并结束;
步骤五,判断所述命令队列中是否存在与新进的读/写请求命令同为读或写,且具有不同Bank地址的读/写请求命令,若上述两个条件同时满足,则执行步骤六,若上述两个条件不同时满足,则执行步骤十六;
步骤六,从所述与新进的读/写请求命令同为读或写,且具有不同Bank地址的读/写请求命令中获取对应的最小的序号,将从具有所述最小序号的读/写请求命令至命令队列的末尾的范围作为第三查找范围,并将所述第三查找范围中的读/写请求命令的对应的最小的序号作为次佳位置值,然后转到步骤七;
步骤七,判断具有次佳位置值的读/写请求命令与紧排在其后的下一个读/写请求命令是否同为读或写的读/写请求命令,若是,则转到步骤八,若否,则转到步骤十二;
步骤八,判断具有次佳位置值的读/写请求命令与新进的读/写请求命令的Bank地址是否相同,若是,则将所述次佳位置值加1并转到步骤七,若否,则转到步骤九;
步骤九,判断紧排在具有次佳位置值的读/写请求命令其后的下一个读/写请求命令与新进的读/写请求命令的Bank地址是否相同,若是,则将所述次佳位置值加1并转到步骤七,若否,则转到步骤十;
步骤十,判断具有次佳位置值的读/写请求命令是否与紧排在其后的下一个读/写请求命令的Bank地址相同,且Row地址不同,若上述两个条件同时满足,则转到步骤十三,若上述两个条件不同时满足,则转到步骤十一;
步骤十一,将所述次佳位置值存入次佳位置记录器中,将所述次佳位置值加1并转到步骤七;
步骤十二,判断所述次佳位置记录器是否为空,若为非空,则从所述次佳位置记录器中获取具有最大命令序号的次佳位置值并转到步骤十三,若为空,则转到步骤十四;
步骤十三,在具有次佳位置值的读/写请求命令之后插入所述新进的读/写请求命令,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后转到步骤十五;
步骤十四,将所述新进的读/写请求命令插入到所述第三查找范围中与新进命令具有相同读/写标志且具有最大序号的请求命令之后,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后,转到步骤十五;
步骤十五,清空所述次佳位置记录器后结束;
步骤十六,判断所述命令队列中是否存在与所述新进的读/写请求命令具同为读或写的读/写请求命令,若不存在,则转到步骤十七,若存在,则转到步骤十八;
步骤十七,将所述新进的读/写请求命令插入所述命令队列的末尾,然后转到步骤十五;
步骤十八,将所述命令队列中与所述新进的读/写请求命令具同为读或写的读/写请求命令作为第四查找范围,并将所述新进的读/写请求命令插入在所述第四查找范围中具有最大序号的读/写请求命令之后,同时更新从插入位置到命令队列的末尾的所有读/写请求命令的序号后,转到步骤十五。
2.如权利要求1所述的DDR2SDRAM控制器,其特征在于,所述DDR2SDRAM接口,还用于对DDR2SDRAM的初始化以及刷新操作。
3.如权利要求1所述的DDR2SDRAM控制器,其特征在于,所述命令仲裁器、命令队列及重排序模块和DDR2SDRAM接口共用一个工作时钟。
4.如权利要求1所述的DDR2SDRAM控制器,其特征在于,所述控制寄存器根据所述系统配置信息输出的工作参数包括:
向所述DDR2SDRAM接口输出读/写操作的突发长度和延时参数、向所述命令仲裁器输出优先级设置参数和向所述命令队列及重排序模块输出排序使能信号。
5.如权利要求1所述的DDR2SDRAM控制器,其特征在于,每个系统数据总线接口包括总线桥、第一写数据先进先出模块、读数据先进先出模块、第一命令先进先出模块和命令输出模块,其中,
所述总线桥,用于接收来自系统数据总线的读/写请求命令,并将读/写请求命令转化成统一的命令格式存入所述第一命令先进先出模块,及从所述读数据先进先出模块获取所述读数据并输出至系统数据总线;
第一写数据先进先出模块,用于从所述总线桥获取写请求命令对应的写数据,并按先进先出的次序将所述写数据输出给所述命令仲裁器;
读数据先进先出模块,用于存储从所述DDR2SDRAM接口返回的读数据,并按先进先出的次序将所述读数据输出给所述总线桥;
所述第一命令先进先出模块,用于存储转化成统一的命令格式的读/写请求命令,并隔离系统总线时钟与DDR2SDRAM控制器时钟;
命令输出模块,用于向所述命令仲裁器发起访问申请,在得到所述命令仲裁器的响应后,把所述命令先进先出模块中的读/写请求命令发送给所述命令仲裁器。
6.如权利要求1所述的DDR2SDRAM控制器,其特征在于,每个寄存器组还设置有一个饥饿指数,所述饥饿指数的范围为0至预设的最大限定值,当所述重排序单元接收到所述DDR2SDRAM接口发出的更新使能信号时,判断是否有达到所述最大限定值的饥饿指数,
如果有,则所述命令输出单元把所述饥饿指数达到所述最大限定值的对应的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,同时将该寄存器组的饥饿指数清零,并将该寄存器组的序号设置为-1,同时将其它寄存器组的饥饿指数加1,并更新其它寄存器组的序号;
如果没有,则所述命令输出单元将序号为零的寄存器组中的读/写请求命令输出给所述DDR2SDRAM接口,同时将该寄存器组的饥饿指数清零,并将该寄存器组的序号设置为-1,同时将其它寄存器组的饥饿指数加1,并更新其它寄存器组的序号。
7.如权利要求1所述的DDR2SDRAM控制器,其特征在于,所述DDR2SDRAM接口包括主状态机、第二命令先进先出模块、第二写数据先进先出模块、预判断模块、预激活模块、时序控制模块、初始化状态机、解析模块、数据接口和DDR2物理层,其中,
所述主状态机,用于协调第二命令先进先出模块、第二写数据先进先出模块、预判断模块、预激活模块、时序控制模块、初始化状态机、解析模块、数据接口和DDR2物理层的工作并发送读/写请求命令;
所述第二命令先进先出模块,用于从所述命令队列及重排序模块获取并存储读/写请求命令,并根据先进先出的顺序将读/写请求命令发送给所述主状态机;
所述第二写数据先进先出模块,用于暂存写数据;
所述预判断模块,用于根据比较当前读/写请求命令与后续读/写请求命令的Bank/Row地址的结果来判断是否进行AutoPrecharge操作,并将判断结果发送给所述主状态机;
所述预激活模块,用于跟踪DDR2SDRAM中各个读/写请求命令的Bank的激活状态,并根据所述第二命令先进先出模块中的读/写请求命令来判断是否需要预先激活某个读/写请求命令的Bank,并将判断结果发送给所述主状态机;
时序控制模块,用于向所述主状态机发送所述读/写请求命令的延时参数以及刷新时间;
所述初始化状态机,用于进行DDR2SDRAM的初始化操作;
所述解析模块,用于把主状态机送出的读/写请求命令解析成标准的DDR2SDRAM接口信号;
所述数据接口,用于通过所述主状态机从所述第二写数据先进先出模块读入写数据,并控制写数据与写命令之间的延时,同时接收DDR2SDRAM返回的读数据并发送给所述主状态机;
所述DDR2物理层,用于将DDR2SDRAM分别与所述解析模块和所述数据接口进行连接,并将DDR2SDRAM控制器内的逻辑信号转化成标准的差分信号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310050849.5A CN103092785B (zh) | 2013-02-08 | 2013-02-08 | Ddr2 sdram控制器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310050849.5A CN103092785B (zh) | 2013-02-08 | 2013-02-08 | Ddr2 sdram控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103092785A CN103092785A (zh) | 2013-05-08 |
CN103092785B true CN103092785B (zh) | 2016-03-02 |
Family
ID=48205377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310050849.5A Active CN103092785B (zh) | 2013-02-08 | 2013-02-08 | Ddr2 sdram控制器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103092785B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6388654B2 (ja) * | 2013-12-26 | 2018-09-12 | インテル・コーポレーション | メモリアクセス中のデータ並べ替え |
CN105681789B (zh) * | 2014-11-20 | 2018-07-17 | 炬芯(珠海)科技有限公司 | 一种参考帧数据读取命令的重排方法及装置 |
CN105045722B (zh) * | 2015-08-26 | 2018-06-05 | 东南大学 | 一种ddr2-sdram控制器及其低延迟优化方法 |
KR102648180B1 (ko) * | 2016-07-19 | 2024-03-18 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그 동작 방법 |
CN108763116B (zh) * | 2018-05-21 | 2021-08-06 | 南京大学 | 一种基于贪婪式算法的多通道ddr控制器 |
CN109582615B (zh) * | 2018-11-27 | 2022-04-12 | 浙江双成电气有限公司 | 一种ddr3控制系统 |
KR20220085989A (ko) * | 2020-12-16 | 2022-06-23 | 에스케이하이닉스 주식회사 | 오토프리차지동작을 수행하는 반도체장치 및 반도체시스템 |
CN113032303A (zh) * | 2021-04-25 | 2021-06-25 | 无锡芯思维科技有限公司 | 一种fpga内的ddr4 sdram访问效率优化方法 |
CN113641603A (zh) * | 2021-10-15 | 2021-11-12 | 南京芯驰半导体科技有限公司 | 一种基于axi协议的ddr仲裁与调度方法及系统 |
CN116680230B (zh) * | 2023-05-22 | 2024-04-09 | 无锡麟聚半导体科技有限公司 | 一种硬件加速电路及芯片 |
CN117440273B (zh) * | 2023-12-18 | 2024-03-22 | 厦门鹏芯半导体有限公司 | 一种xgspon olt上行数据拼包的系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101639817A (zh) * | 2009-03-13 | 2010-02-03 | 青岛海信信芯科技有限公司 | 一种存储器的控制方法、存储器控制器和存储器控制系统 |
US7975164B2 (en) * | 2008-06-06 | 2011-07-05 | Uniquify, Incorporated | DDR memory controller |
CN102339261A (zh) * | 2011-09-16 | 2012-02-01 | 上海智翔信息科技股份有限公司 | 一种ddr2 sdram控制器 |
-
2013
- 2013-02-08 CN CN201310050849.5A patent/CN103092785B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7975164B2 (en) * | 2008-06-06 | 2011-07-05 | Uniquify, Incorporated | DDR memory controller |
CN101639817A (zh) * | 2009-03-13 | 2010-02-03 | 青岛海信信芯科技有限公司 | 一种存储器的控制方法、存储器控制器和存储器控制系统 |
CN102339261A (zh) * | 2011-09-16 | 2012-02-01 | 上海智翔信息科技股份有限公司 | 一种ddr2 sdram控制器 |
Non-Patent Citations (1)
Title |
---|
张永志.DDR2内存控制器的模块设计和验证平台技术研究.《合肥工业大学硕士学位论文》.2009, * |
Also Published As
Publication number | Publication date |
---|---|
CN103092785A (zh) | 2013-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092785B (zh) | Ddr2 sdram控制器 | |
CN1977336B (zh) | 改善支持多存储器访问延迟的计算机存储器系统的性能的系统和方法 | |
US8041871B2 (en) | System and method for providing address decode and virtual function (VF) migration support in a peripheral component interconnect express (PCEI) multi-root input/output virtualization (IOV) environment | |
US8244971B2 (en) | Memory circuit system and method | |
EP3364298B1 (en) | Memory circuit system and method | |
US8209479B2 (en) | Memory circuit system and method | |
US8667312B2 (en) | Performing power management operations | |
US8122207B2 (en) | Apparatus and method for power management of memory circuits by a system or component thereof | |
US7472220B2 (en) | Interface circuit system and method for performing power management operations utilizing power management signals | |
EP1488323B1 (en) | Memory system with burst length shorter than prefetch length | |
CN105518784B (zh) | 具有用于高可靠性操作的存储控制器的数据处理器和方法 | |
US20110055495A1 (en) | Memory Controller Page Management Devices, Systems, and Methods | |
JP5666722B2 (ja) | メモリ・インターフェース | |
CN105283918A (zh) | 使用多周期命令实现存储器装置访问的设备、方法和系统 | |
CN103226383A (zh) | 具有多个存储器管芯和控制器管芯的半导体存储装置 | |
US20140068125A1 (en) | Memory throughput improvement using address interleaving | |
CN102681946A (zh) | 内存访问方法和装置 | |
CN102339261B (zh) | 一种ddr2sdram控制器 | |
CN104252420B (zh) | 数据写入方法及内存系统 | |
CN117501230A (zh) | 多存储列存储器控制器中的高效存储列切换 | |
US20040006666A1 (en) | Methods and structure for using a memory model for efficient arbitration | |
US10372337B2 (en) | Write request processing method and memory controller | |
Jeong et al. | A technique to improve garbage collection performance for NAND flash-based storage systems | |
JP2018500697A (ja) | トランザクションコンフリクトを検出するための方法および装置、ならびにコンピュータシステム | |
CN101021783A (zh) | 面向流数据的重排序访存缓冲方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |