提高双倍数据速率同步随机存储器读写速率的方法及装置
技术领域
本发明涉及数据通信领域,由于涉及一种提高双倍数据速率同步随机存储器读写速率的方法及装置。
背景技术
双倍数据速率同步随机存储器(简称DDR SDRAM)是电子设备工程联合委员会(JEDEC)于2004年发布的新生代内存技术标准。
因其低廉的价格,高带宽的数据吞吐率以及低功耗的优势,双倍数据速率同步随机存储器被广泛用于存储需求高的数据通信领域。然而在数据通信芯片领域,芯片的关键性能指数每秒处理包数(pps)决定了用于数据包缓存的双倍数据速率同步随机存储器必须达到最低的读写效率以满足芯片的处理能力。同时,因为成本因素,又不能单纯的以增加双倍数据速率同步随机存储器物理片数的方法来提高整个芯片的数据吞吐率。
以DDR SDRAM的第二代产品(DDR2 SDRAM)为例,DDR2 SDRAM为最大程度地降低功耗,以存储体(bank)为单位组织内部的存储结构,分为4个bank,每个bank又分行和列。
DDR SDRAM的读写操作以行为单位,因为SDRAM的工艺特性,每次读写之前,需要先激活对应读写地址所在的行后才能对其进行读写操作,如果需要读写同一bank的不同行,必须将之前已经激活的同bank的行关闭,再激活待读写的行。如果2行不属于同一bank,则不需要关闭先前激活的行再进行后续行的读写操作,即不同bank的行可以同时保持激活状态。DDR SDRAM的行关闭激活时间相对都比较长,同时,如果是读写操作间隔,读->写的切换和写->读的切换时都需要有一定的时间间隔,正是因为这些固有时间间隔的限制,导致DDR SDRAM的读写效率往往是数据通信项目的性能瓶颈。
现有技术中,有针对双倍数据速率同步随机存储器的读写地址分别做排序的方法,该方法将用户发出的读写命令在DDR控制器内部做出排序,以求在送给双倍数据速率同步随机存储器之前将读写命令排成一个比较理想的读写序列,尽量将同bank不同行的地址错开,该技术最大的隐患在于,重排序力度过大有可能导致数据包还未写入DDR SDRAM之前就被发起读请求。目前有技术可以实现8个左右的读写命令进行重排序,以达到隐藏DDR SDRAM前后2个命令的行关闭时间,该技术虽然可以在8个命令之间进行bank间以及同一bank不同行的命令的顺序调整,但是命令的顺序调整功能以及针对DDR读出数据的重排序比较复杂,很难在硬件频率上有大的突破,且消耗的资源较大,调整能力有限,在现场可编程门阵列(FPGA)项目上不具备太好的可行性。
发明内容
为了解决上述技术问题,本发明提供了一种提高DDR SDRAM读写速率的方法及装置,以降低实现难度,提高现场可编程门阵列(FPGA)项目的可实现性和调整力度,利用有限的资源大大提高DDR SDRAM的读写效率。
本发明提供了一种提高DDR SDRAM读写速率的方法,该方法包括:
接收对应数据包读请求的读地址,将所述读地址按存储体(bank)号缓存在对应的第一先进先出队列(FIFO)中;
从所述第一FIFO中的一个第一FIFO首次读出一个读地址后,如该第一FIFO中的下一个读地址与首次读出的该读地址属于同行地址,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO。
优选地,上述方法可具有如下特点:
从一个第一FIFO首次读出一个读地址后,如从该第一FIFO连续读出读地址,按以下方式处理:
从该第一FIFO每次读出一个读地址后,如该第一FIFO的下一个读地址与本次读出的读地址属于同行地址,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO;或者
从该第一FIFO每次读出一个读地址后,如该第一FIFO的下一个读地址与本次读出的读地址属于同行地址,且从该第一FIFO连续读出读地址的累计时间不超过设定的累计时间门限,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO;或者
从该第一FIFO每次读出一个读地址后,如该第一FIFO的下一个读地址与本次读出的读地址属于同行地址,且从该第一FIFO连续读出读地址的个数不超过设定的个数门限,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO。
优选地,上述方法还可具有如下特点:
所述累计时间门限为DDR SDRAM的行关闭时间的0.5~2倍。
优选地,上述方法还可具有如下特点:
当有限状态机的 FIFO中缓存的同bank换行地址的数据量达到预定值时,给仲裁器发送反压信号,使仲裁器停止从该bank对应的第一FIFO中读出读地址。
优选地,上述方法还可具有如下特点:
在读第一FIFO之后,所述方法还包括:
按顺序记录读出的每个读地址的bank标识;
将返回的第N个读数据写入该读数据所属读地址对应的bank标识的第二FIFO中;
按用户读出读地址的顺序缓存记录每个读地址的bank标识;
根据缓存的读地址的bank标识将对应的第二FIFO中的数据返回给用户。
优选地,上述方法还可具有如下特点:
在从所述第一FIFO中的一个第一FIFO首次读出一个读地址之前,所述方法还包括:
接收数据包的写请求,按bank轮询的方式为所述数据包分配写地址。
优选地,上述方法还可具有如下特点:
在为所述数据包分配写地址之前,所述方法还包括:
通过链表管理所述DDR SDRAM的逻辑地址。
本发明还提供了一种提高双倍数据速率(DDR)同步随机存储器(SDRAM)读写速率的装置,该装置包括:
接收缓存模块,用于接收对应数据包读请求的读地址,将所述读地址按存储体(bank)号缓存在对应的第一先进先出队列(FIFO)中;
读调序模块,用于从所述第一FIFO中的一个第一FIFO首次读出一个读地址后,如该第一FIFO中的下一个读地址与首次读出的该读地址属于同行地址,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO。
优选地,上述装置可具有如下特点:
所述装置还包括有限状态机(FSM)和仲裁器,该FSM,用于在自己的FIFO中缓存的同bank换行地址的数据量达到预定值时,向所述仲裁器发射反压信号,使所述仲裁器停止从该bank对应的第一FIFO中读地址。
优选地,上述装置还可具有如下特点:
所述装置还包括:
接收分配模块,用于在所述读调序模块从所述第一FIFO中的一个第一FIFO首次读出一个读地址之前,接收数据包的写请求,按bank轮询的方式为所述数据包分配写地址。
附图说明
图1为本发明的提高DDR SDRAM读写效率的装置示意图;
图2为本发明中包管理模块采用链表管理DDR2 SDRAM逻辑地址的示意图;
图3为本发明中DDR控制器的结构示意图。
具体实施方式
下面将结合本发明的说明附图,对本发明中的技术方案进行清楚完整的描述。
本发明提出一种利用链表方式管理DDR SDRAM逻辑地址的方法,当有数据包写入DDR SDRAM的请求时,采用按bank轮询分配DDR SDRAM逻辑写地址的方法,当有数据包的读出请求时,将数据包的读地址进行调序。 本发明轮询分配数据包写地址的策略,从根本上保证了写地址在送入DDR SDRAM之前已经是按bank错开的良性序列,从而不会有因为排序的原因,导致相同数据包的读地址先于写地址被送达DDR SDRAM的情况;本发明提出的对读地址进行调序的方案,相对现有技术中针对所有读地址完全乱序调整的方案,降低了实现难度,提高了FPGA项目的可实现性和调整力度,利用有限的资源大大提高了DDR SDRAM的读写效率。
本发明还提供了一种提高DDR SDRAM读写速率的方法,该方法包括:
接收对应数据包读请求的读地址,将所述读地址按存储体(bank)号缓存在对应的第一先进先出队列(FIFO)中;
从所述第一FIFO中的一个第一FIFO首次读出一个读地址后,如该第一FIFO中的下一个读地址与首次读出的该读地址属于同行地址,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO。
下面以DDR SDRAM的第二代产品DDR2 SDRAM为例,对本发明中的技术方案进行清楚完整的描述。
本发明使用的提高DDR SDRAM读写效率的装置如图1所示,当有入包申请时,包管理(packet management)模块11按bank轮询的方式缓存数据包的逻辑映射地址,将其解析成物理地址送给双倍数据速率(DDR)控制器,当有出包请求时,包管理模块将其出包的逻辑地址解析成物理地址送给DDR控制器,DDR控制器针对读命令做出调整,当用户输入的读地址连续都是同bank换行地址时,DDR控制器通过反压操作达到提高效率的目的,以DDR2 SDRAM为例,分别描述提高写速率和读速率的技术方案:
一、提高写效率的方法如下:
将DDR2 SDRAM的物理地址映射成逻辑地址,DDR2 SDRAM物理地址中的1行对应2个逻辑地址,即每个逻辑地址涵盖DDR2 SDRAM中半行,之后采用链表的方式,按bank初始化这些逻辑地址,分4条链,每条链表管理一个bank的DDR2 SDRAM逻辑地址,具体可参见图2;当有数据包写入DDR2 SDRAM的请求时,按轮询(round robin)方式给数据包分配写地址。
上述方案易实现,且有效地提供了DDR SDRAM的写速率。
二、提高读效率的方法如下:
当收到用户的DDR2 SDRAM数据包读请求时,用户的读地址首先进入DDR控制器中的读调序模块(可参见图3),该模块包含4个先进先出队列(FIFO),分别按bank号缓存用户的读地址,之后利用读调序模块中的仲裁器在4个FIFO间做出读仲裁。仲裁的机制为:如果当前被读出的读地址的下一个读地址和当前的读地址属于同行地址,则连续读该FIFO,如果属于不同行的地址,则利用轮询(round robin)的方式读下一FIFO。同时为了避免很长一段时间内的读地址都是同bank同行地址而发生长时间的读同一FIFO,导致后续读数据重排序资源过大的情况,读调序模块采用了一种保护机制,当某一bank的连续被读出的读地址累计的执行时间超过DDR2 SDRAM的行关闭时间的0.5-2倍(优选值为1倍,即当某一bank的连续被读出的读地址累计的执行时间超过DDR2 SDRAM的行关闭时间)后,将终止本FIFO的连续读,转读下一FIFO;或者,当某一bank的连续被读出的读地址累计的个数超过设定的个数门限后,将终止本FIFO的连续读,转读下一FIFO;等等。
当DDR2 SDRAM返回读数据的时候,因为返回读数据的顺序是经过调整后的,在返回给用户之前,首先进入读数据重排序模块(可参见图3),重排序的思想为:按顺序记录读出的每个读地址的bank标识;将返回的第N个读数据写入该读数据所属的读地址对应的bank标识的第二FIFO中;按用户读出读地址的顺序缓存记录每个读地址的bank标识;根据缓存的读地址的bank标识将对应的第二FIFO中的数据返回给用户,其中N为正整数。
需要说明的是,缓存地址的FIFO为第一FIFO,缓存数据的FIFO为第二FIFO。
正常情况下,4个bank的读地址进入DDR控制器的概率是相等的,出现连续n个地址都是同bank换行的地址的概率是 ,当出现为概率小于1/256(连续5个同bank换行)的恶性读包申请序列时,即认为此时出现了小概率事件,此种序列必然会导致图3中状态机FSM模块里面缓存命令的FIFO中的数据量累加,当该FIFO缓存的数据量超过20(4个bank中 FIFO的数据量总数)的时候,即认为此时读地址出现了上述小概率序列,此时有限状态机(FSM)给仲裁器发送反压信号,使得仲裁器停止读该FIFO的数据,反压产生的效果将会使4个FIFO所输入的读命令相当,最终达到各个bank间读请求数量的动态平衡,从而达到读命令按bank间插的目的。
另外,为了降低读写间的切换时间,图3中的读写命令均衡模块可以控制在第一预定时间段内执行写操作,然后在第二预定时间段内执行读操作,其中,第一预定时间段和第二预定时间段可以相同,也可以不同,且可以动态调整;例如可以在前5分钟内集中执行写操作,然后在后3分钟内集中执行读操作,等等。
需要说明的是,上述读数据重排序模块和读写均衡模块实施例中可依据DDR2 SDRAM的不同型号、时间参数的配置采用动态调整的实现方式,从而利用较少的资源大大提高了DDR SDRAM的带宽利用率。
上述方案易实现,且有效地提供了DDR SDRAM的读写速率。
本发明还提供了一种提高双倍数据速率(DDR)同步随机存储器(SDRAM)读写速率的装置,该装置包括接收缓存模块和读调序模块,其中:接收缓存模块,用于接收对应数据包读请求的读地址,将所述读地址按存储体(bank)号缓存在对应的第一先进先出队列(FIFO)中;读调序模块,用于从所述第一FIFO中的一个第一FIFO首次读出一个读地址后,如该第一FIFO中的下一个读地址与首次读出的该读地址属于同行地址,则继续读该第一FIFO,否则,按轮询的方式读下一第一FIFO。
该提高DDR SDRAM读写速率的装置还可以包括:有限状态机(FSM)和仲裁器,该FSM,用于在自己的FIFO中缓存的同bank换行地址的数据量达到预定值时,向所述仲裁器发射反压信号,使所述仲裁器停止从该bank对应的第一FIFO中读地址。
该提高DDR SDRAM读写速率的装置还可以包括读数据重排序模块,对返回的数据进行重排序,并返回给用户。
该提高DDR SDRAM读写速率的装置还可以包括接收分配模块,其用于在所述读调序模块从所述第一FIFO中的一个第一FIFO首次读出一个读地址之前,接收数据包的写请求,按bank轮询的方式为所述数据包分配写地址。
该提高DDR SDRAM读写速率的装置可以有效提高读写速率。
以上所述仅以DDR2 SDRAM为例作为优选实施例说明而已,并不用于限制本发明,对于本领域的技术人员来说,本发明所述装置可以适用于DDR SDRAM的各代产品读写带宽的提高,如DDR/DDR2/DDR3 SDRAM。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。