内存控制器的制作方法

文档序号:6782499阅读:177来源:国知局
专利名称:内存控制器的制作方法
技术领域
本发明涉及计算机领域,并且特别地,涉及一种内存控制器。

背景技术
内存是计算机上重要的存储设备之一,在计算机的运行过程中,通常会频繁地对内存进行访问。
为了保证计算机的正常运行,通常需要设置内存控制器对内存进行控制。具体的控制主要包括对内存设备进行初始化、根据内存的状态向内存发送各种命令,从而对内存的运行状态进行控制并实现内存的访问等。
在实际应用中,内存控制器决定了计算机系统所能使用的最大内存容量、内存bank数、内存类型、内存速度和数据宽度等重要参数。在内存控制器参数确定的情况下,考虑到成本、技术等方面的原因,内存控制器可支持的内存条数目是有限的,通常情况下,一个内存控制器只能控制一根或两根内存条。为了支持更多内存的并行访问,目前主要的实现方式是对每个内存均设置一个相应的内存控制器。
在大容量、高带宽访问的存储环境中,所需求的内存容量很大,通常会使内存的容量成为系统运行的瓶颈。此时就需要对内存进行扩容。但是,原有的内存控制器已经固化集成,无法满足内存的扩容需求,如果对内存进行扩容就需要重新设计系统,添加或更换新的内存控制器,这样才能达到提高存储容量的目的。由于内存控制器是固化集成的,所以这种方式不仅设计灵活性很差,而且会增加内存扩容的成本。
针对相关技术中内存控制器配置不够灵活导致内存更新成本高的问题,目前尚未提出有效的解决方案。


发明内容
考虑到相关技术中内存控制器配置不够灵活导致内存更新成本高的问题,本发明的目的在于提供一种内存控制器,以解决上述问题。
根据本发明的内存控制器基于现场可编程门阵列实现,该内存控制器包括 数据通道接口模块,用于根据内存所选用的颗粒规格将来自内存读引擎和/或内存写引擎的访问请求的线性地址转换为段地址形式的地址,并控制访问请求、待写入数据的存储; 地址存储模块,用于在数据通道接口模块的控制下存储由数据通道接口模块转换后的访问请求; 数据存储模块,用于在数据通道接口模块的控制下存储来自内存写引擎的待写入数据; 状态机模块,用于根据内存的内部状态发送内存操作命令以及地址存储模块中存储的访问请求,其中,在发送的访问请求为写请求的情况下,状态机模块进一步控制数据存储模块中存储的待写入数据的调度; 物理接口模块,用于根据内存的数据要求对状态机模块发送的访问请求和待写入数据进行转换处理并发送至内存,并且用于根据内存控制器的数据要求对来自内存的数据进行转换并发送至数据通道接口模块。
其中,数据通道接口模块还可用于根据内存的突发长度要求,对来自自内存读引擎和/或内存写引擎的访问请求进行分解。
并且,数据通道接口模块还可用于对地址存储模块和数据存储模块的存储状态进行监控。
此外,状态机模块还可用于在内存启动之前,根据内存的参数对内存进行初始化,并在内存启动后对内存进行周期性刷新。
此外,状态机模块还可用于保持内存中指定数目的bank处于活动状态。
此外,状态机模块还可用于对地址存储模块中存储的访问请求的地址进行译码,并发送译码后的访问请求。
优选地,数据存储模块和地址存储模块均可以为先入先出存储器。
另外,上述段地址形式的地址可包括以下信息内存的bank地址、行地址、列地址、以及片选信号。
借助于本发明的技术方案,通过现场可编程门阵列实现了内存控制器,不仅降低了内存控制器本身的实现成本,而且能够借助现场可编程门阵列的特性提高系统设计的灵活度,以简单的方式对内存实现一对多的管理,有效降低了内存扩容所需的成本。



图1是根据本发明实施例的内存控制器的结构框图; 图2是根据本发明实施例的内存控制器对多条内存进行管理的示意图。

具体实施例方式 针对相关技术中相关技术中内存控制器配置不够灵活导致内存更新成本高的问题,本发明提出通过现场可编程门阵列(Field Programmable GateArray,简称为FPGA)实现内存控制器,从而对内存进行控制,由于FPGA本身具有很强的可配置性,因此能够适应内存的配置更新,并且还能够同时管理多个内存条,有效提高设计的灵活性。
下面将结合附图详细描述本发明的实施例。
在本发明实施例中,提供了一种内存控制器。根据本发明的内存控制器可基于FPGA实现。
如图1所示,根据本发明实施例的内存控制器包括 数据通道接口模块(可称为DDR2Controller DCI(Data ChannelInterface))1,用于根据内存所选用的颗粒规格将来自内存读引擎和/或内存写引擎的访问请求的线性地址转换为(DDR2SDRAM的)段地址形式的地址,并控制访问请求、待写入数据的存储;具体地,在内存写引擎需要访问内存的情况下,数据通道接口模块1可以对访问请求进行地址转换,并将转换后的访问请求存储在地址存储模块2中,在来自内存写引擎的访问请求为写请求时情况下,该数据通道接口模块1还需要向数据存储模块3发送写使能信号,从而将来自内存写引擎的待写入数据写入数据存储模块3中;此外,数据通道接口模块1还可用于对地址存储模块2和数据存储模块3的存储状态进行监控,在地址存储模块2和数据存储模块3没有空余存储空间时则停止向地址存储模块2和数据存储模块3继续进行数据的写入。
地址存储模块2,连接至数据通道接口模块1,用于在数据通道接口模块1的控制下存储由数据通道接口模块1转换后的访问请求; 数据存储模块3,连接至数据通道接口模块1,用于在数据通道接口模块1的控制下存储来自内存写引擎的待写入数据; 状态机模块4(可称为DDR2Controller FSM),连接至地址存储模块2和数据存储模块3,用于根据内存的内部状态发送各种内存操作命令以及地址存储模块2中存储的访问请求,其中,在发送的访问请求为写请求的情况下,状态机模块4需要进一步控制数据存储模块3中存储的待写入数据的调度;具体地,对于来自地址存储模块2的访问请求,在状态机模块4检测到这些操作请求以后,状态机需要根据内存芯片内部的状态发出适当的命令,具体地,状态机模块4可以向地址存储模块2和数据存储模块3发送访问命令,可以将地址存储模块2中的请求以及地址读出并发送至内存,其中,在需要对内存进行数据写入时,状态机模块4需要向数据存储模块3发送读请求,将待写入数据读出,之后就可以发送读出的待写入数据,达到对待写入数据进行调度的目的,并且,待写入数据的传输不经过状态机模块; 物理接口模块5(可称为DDR2Interface),连接至状态机模块4、地址存储模块2、和数据存储模块3,用于根据内存的数据要求对状态机模块4发送的操作命令及写入数据进行转换以满足DDR2的信号时序,并对从DDR2读回的数据进行转换。也就是说,由于内存控制器与内存对数据的要求不同,物理接口模块5能够根据内存的数据要求对状态机模块4发送的访问请求和待写入数据进行转换处理并发送至内存(使得内存控制器发送至内存的数据符合内存的数据要求),并且用于根据内存控制器的数据要求对来自内存的数据进行转换并发送至数据通道接口模块1(使得内存发送至内存控制器的数据符合内存控制器的数据要求)。
对于由内存发送出来的数据,物理接口模块5对该数据进行转换后可以直接发送至数据通道接口模块1,数据通道接口模块1对该数据进行简单处理后就能发送给内存读引擎。
在根据本发明的内存控制器中,地址存储模块2和数据存储模块3均可以是先入先出(First In First Out,简称为FIFO)存储器。
根据本发明的内存控制器可以对第二代双倍数据速率同步动态随机访问存储器(Double Data Rate Two Synchronous Dynamic Random AccessMemory,简称为DDR2 SDRAM)进行控制,根据本发明的内存控制器能够响应外部对DDR2小型双列直插内存模块(Small Outline Dual In-lineMemory Module,简称为SODIMM)大容量、多内存、高带宽内存条模组的读、写请求,根据读、写请求的地址向地址命中的内存条发出相应的操作命令,完成对内存条数据的正确读写。
本发明可以通过多种FPGA作为载体。例如,考虑到Virtex5系列FPGA芯片XC5VLX50T的驱动能力,8根内存条可以用两个控制器进行控制,每个控制器分别控制其中4根内存条,每个内存条容量为512MB(也可以为其他数值,并且可扩展至4GB或更大),控制器模块在发出操作命令之前需要对地址命中的内存条的工作状态进行查询(可以由状态机模块实现查询),再根据该内存条当前bank的工作状态进行跳转,完成相应的操作。
下面将详细描述上述各个模块的功能。
(1)数据通道接口模块 数据通道接口模块用来与DDR2 Read Engine、DDR2 Write Engine两个功能模块的数据接口进行交互,同时根据用户指定的配置方式将内部数据通道的访问请求的线性访问地址转换成内存(即,DDR2 SDRAM)的段地址形式。基于DDR2 SDRAM的数据突发(猝发)长度(Burst Length,简称为BL)不同,数据通道接口模块可以将数据通道操作分解成多个DDR2SDRAM访问请求,这些请求会保存到专用地址FIFO(即,上述的地址存储模块)中,每次写请求的数据保存在专用数据FIFO(即,上述的数据存储模块)中,在请求和数据都存储完成后,其他模块就可以从相应的存储模块中进行调用。此外,数据通道接口模块还可以用于控制数据FIFO,并向数据FIFO发送控制信号。
其中,在数据通道接口模块对读/写请求的地址进行转换后,通过译码得到内存中正确的bank号(bank Address)、行地址(Row Address)、列地址(Column Address)、以及片选信号。数据通道接口模块还能够监视和处理地址存储模块和数据存储模块存储空间的满和空状态。
(2)状态机模块 状态机模块负责根据DDR2SDRAM芯片内部的状态向DDR2SDRAM发出相应的命令,并且能够根据读、写请求向地址FIFO取址进行译码处理。
具体地,根据本发明的内存控制器内部其它功能模块的DDR2SDRAM访问操作请求都保存在地址FIFO中,状态机模块需要将这些访问请求发送给DDR2SDRAM器件。如果是写请求,还需要读取数据存储器中的数据,并且将这些数据发送到DDR2SDRAM器件。
为了提高内存总线数据传输的效率,同时降低流水线设计的难度,在设计时可以将Burst Length确定为8,并且不支持Burst操作被打断的操作模式,这样状态机模块就能够在4个时钟周期进行译码,保证译码时间充足。
此外,在使用DDR2SDRAM器件之前,状态机模块还需要根据DDR2SDRAM器件的参数进行初始化。并且,根据DDR2SDRAM器件的物理机制,在使用的过程中,状态机模块还需要对DDR2SDRAM器件进行周期性的刷新,以避免内存断电后数据丢失。
在本发明实施例中的内存控制器支持DDR2SDRAM器件4bank及8bank设计,因此可以将DDR2SDRAM器件内部存储空间被分割成4/8个bank,外界对DDR2SDRAM器件的访问基于bank进行。根据bank当前所处状态的不同,允许接收的命令不同。
状态机模块需要对8根DDR2SODIMM内存条进行读写控制,每个内存条SDRAM颗粒有4个bank,操作时需要记录总共32个bank的工作状态,每次接收到读写请求时都需要比较本次请求地址和当前活动bank的地址,根据不同的比较结果发送相应的命令。根据FPGA的驱动能力,通常可以用2个控制器来管理这8根内存条,每个控制器管理其中的4根内存条,即,如图2所示的管理方式。如图2所示,一个FPGA中实现了两个内存控制器,每个内存控制器分别管理4个DIMM内存条,此时,可以8条内存地址进行统一编址,按照内存条的地址组织方式对读写访问地址进行译码,根据译码结果进行片选,发送操作命令完成相应操作。
可选地,也可以采用两个FPGA管理8个内存条,每个FPGA管理其中的4个内存条。
根据DDR2SDRAM的数据手册,为了降低本发明的内存控制器的设计难度,在内存控制器中可以只记录4个活动bank的状态,如果所寻址的bank与当前活动bank地址一致,则可以直接寻址,若地址未命中活动bank地址,则需要判断当前有几个bank已打开,若不足4个bank被打开,则可以继续打开新的bank,若已有4个bank被打开,则需要关闭掉其中的某个活动bank,用新的bank地址将其替换,激活新bank,再发出操作命令。
对于打开bank、关闭bank、读取、写入等操作的实现可以参照下面的表1所示。
表1
如表1所示,在进行内存控制时主要需要以下命令加载模式(LOADMODE)、刷新(REPRESH)、自刷新开始(SELF REPRESH entry)、自刷新结束(SELF REPRESH exit)、单个bank预充电(Single bankPRECHARGE)、所有bank预充电(All bank PRECHARGE)、bank激活(bank activate)、写(WRITE)、读(READ)、通过自动预充电写(WRITEwith auto PRECHARGE)、通过自动预充电读(READ with autoPRECHARGE)、不操作(NO OPERATION)、设备去选择(DeviceDESELECT)、断电开始(Power-down entry)、断电结束(Power-down exit);此外,表1中BA表示bank地址,H表示高电平,L表示低电平,X表示未定义(各个厂商可以根据实际需求自行配置)。
由于根据本发明实施例的内存控制器能够对内存设备进行刷新、充电、预充电、断电(关闭bank)等操作,因此,根据本发明的内存控制器可以不支持自刷新开始(SELF REPRESH entry)、自刷新结束(SELF REPRESHexit)、通过自动预充电写(WRITE with auto PRECHARGE)、通过自动预充电读(READ with auto PRECHARGE)、断电开始(Power-down entry)、断电结束(Power-down exit)等命令,可选地,对于设备去选择(DeviceDESELECT),由于其作用和不操作(NO OPERATION)类似,所以既可以支持也可以不支持。
DDR2控制器需要完成初始化和任务调度,在状态机模块的具体设计中可以采用三个有限状态机来实现,即,主状态机,初始化状态机、和译码状态机。
其中,主状态机主要用于根据命令请求和当前bank所处的状态产生相应的操作命令,包括读命令、写命令,刷新、预充电等操作命令。由于DDR2访问的时序比较复杂,每次命令的时序要求严格,因此需要严格按照数据手册的要求设计主状态机对给出的参数进行访问,避免数据出错。
初始化状态机主要用于在系统复位后进入初始化部分时对DDR2内存条进行初始化和参数配置,在初始化完成后DDR2内存将进入InitRst状态并等待发送命令。初始化部分由13个状态依次构成并顺序执行,实现时可以另外组成一个小的状态机。本发明的初始化状态机可以按照内存技术手册中规定的初始化方式对内存进行初始化,其具体处理过程类似,这里不再重复。
译码状态机主要用于实现命令译码,并根据译码的结果确定发送相应内存操作指令的时间。具体地,译码状态机需要根据地址FIFO取址对地址进行译码,例如,在对DDR2 SODIMM内存进行管理时,可以将每次读写请求的线性地址转换为DDR2 SODIMM的段地址形式,并将当前访问的bank号以及行地址与记录的bank号和行地址进行比较,判断是否一致,并根据比较结果发送相应的操作请求。
(3)地址存储模块和数据存储模块 地址存储模块和数据存储模块可以统称为存储模块,其中包含若干专用缓冲区,用来保存操作的DDR2 SDRAM地址以及写数据。
其中,地址存储模块用于保存每次DDR2 SDRAM访问的地址及命令(例如,读/写命令)。数据FIFO用于保存对DDR2 SDRAM写访问的数据,而读访问的数据则无需缓存。该存储模块模块必须记录FIFO的空、满等状态信息供其他模块查询,而对数据存储模块、地址存储模块的写控制信号需要由数据通道接口模块产生,读信号由状态机模块产生。
(4)物理接口模块 物理接口模块负责将内存控制的内部信号转换成DDR2SDRAM的接口信号形式,并且还需要转换来自内存设备的信号和数据。为了对不同数据线延时分别进行补偿,在正式启动数据传输之前,物理接口模块首先需要进行训练。
具体地,根据本发明实施例的内存控制器的接口数据可以设计为128位宽(位宽也可以是其他值),而通常DDR2 SDRAM的每次访问是64bit、上下沿输出,因此,在物理接口模块向DDR2 SDRAM写入访问的地址(例如,包括bank号、行地址、和列地址)、访问的命令、访问的数据及相应的选通信号时,均需要根据DDR2 SDRAM的要求进行转换。
此外,在物理接口模块的电路部分需要考虑各信号间的时序问题,具体地,需要使内存控制内部时钟、接口伴随时钟、以及DDR2 SDRAM的时钟一致,接口上命令用内部时钟下降沿输出,DQ采用270度相移时钟输出,以满足伴随时钟在与命令的写对齐要求。并且,物理接口模块的电路部分需要满足DQS信号的preamble和postamble,以及实现所有双向信号的三态使能信号生成。
应当注意,本发明的内存控制器可用于对各种类型的内存进行控制,具体的控制方式与上述方式类似,本文不再一一描述。
此外,如何对FPGA进行编程使其能够具有上述模块的功能、如何根据FPGA的性能选择FPGA作为内存控制器、以及如何根据内存控制器的性能将相应数量的内存条分配给各个控制器,均是本领域技术人员所公知的,本文不一一详述。
综上所述,借助于本发明的技术方案,通过FPGA实现了内存控制器,从而对内存进行控制,由于FPGA本身具有很强的可配置性,因此使内存控制器能够适应内存的配置更新,并且还能够同时管理多个内存条,有效提高设计的灵活性,降低了成本。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种内存控制器,其特征在于,所述内存控制器基于现场可编程门阵列实现,所述内存控制器包括
数据通道接口模块,用于根据内存所选用的颗粒规格将来自内存读引擎和/或内存写引擎的访问请求的线性地址转换为段地址形式的地址,并控制所述访问请求、所述待写入数据的存储;
地址存储模块,用于在所述数据通道接口模块的控制下存储由所述数据通道接口模块转换后的所述访问请求;
数据存储模块,用于在所述数据通道接口模块的控制下存储来自所述内存写引擎的待写入数据;
状态机模块,用于根据所述内存的内部状态发送内存操作命令以及所述地址存储模块中存储的所述访问请求,其中,在发送的所述访问请求为写请求的情况下,所述状态机模块进一步控制所述数据存储模块中存储的所述待写入数据的调度;
物理接口模块,用于根据所述内存的数据要求对所述状态机模块发送的所述访问请求和所述待写入数据进行转换处理并发送至所述内存,并且用于根据所述内存控制器的数据要求对来自所述内存的数据进行转换并发送至所述数据通道接口模块。
2.根据权利要求1所述的内存控制器,其特征在于,所述数据通道接口模块还用于根据所述内存的突发长度要求,对来自所述自内存读引擎和/或所述内存写引擎的所述访问请求进行分解。
3.据权利要求1所述的内存控制器,其特征在于,所述数据通道接口模块还用于对所述地址存储模块和所述数据存储模块的存储状态进行监控。
4.根据权利要求1所述的内存控制器,其特征在于,所述段地址形式的地址包括以下信息所述内存的bank地址、行地址、列地址、以及片选信号。
5.根据权利要求1所述的内存控制器,其特征在于,所述状态机模块还用于在所述内存启动之前,根据所述内存的参数对所述内存进行初始化,并在所述内存启动后对所述内存进行周期性刷新。
6.根据权利要求1所述的内存控制器,其特征在于,所述状态机模块还用于保持所述内存中指定数目的bank处于活动状态。
7.根据权利要求1所述的内存控制器,其特征在于,所述状态机模块还用于对所述地址存储模块中存储的访问请求的地址进行译码,并发送译码后的所述访问请求。
8.根据权利要求1至7中任一项所述的内存控制器,其特征在于,
所述数据存储模块和所述地址存储模块均为先入先出存储器。
全文摘要
一种内存控制器,包括数据通道接口模块,用于根据内存所选用的颗粒规格将来自内存读引擎和/或内存写引擎的访问请求的线性地址转换为段地址形式的地址,并控制访问请求、待写入数据的存储;地址存储模块,用于存储由数据通道接口模块转换后的访问请求;数据存储模块,用于存储来自内存写引擎的待写入数据;状态机模块,用于根据内存的内部状态发送内存操作命令以及地址存储模块存储的访问请求,且能够控制数据存储模块中存储的待写入数据的调度;物理接口模块,用于根据内存的数据要求对状态机模块发送的访问请求和待写入数据进行转换处理并发送至内存,并且用于根据内存控制器的数据要求对来自内存的数据进行转换并发送至数据通道接口模块。
文档编号G11C7/10GK101702326SQ20091023680
公开日2010年5月5日 申请日期2009年10月30日 优先权日2009年10月30日
发明者聂华, 邵宗有, 历军, 李静, 刘新春, 窦晓光 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1