基于fpga的ddr控制器及控制方法
【技术领域】
[0001]本发明涉及一种基于FPGA的DDR控制器、以及一种基于FPGA的DDR控制方法。
【背景技术】
[0002]DDR存储器具有小型化和大容量等特点,作为数据存储器广泛应用于CPU系统、数据采集系统等领域。在数据采集系统领域主要用作数据缓存,如何实现对DDR存储器的控制,使其能够满足数据缓存要求,通常采用FPGA内核生成器,实现对DDR存储器的控制,完成DDR存储器的读写、刷新、预充、上电配置等操作。FPGA内核作为厂家自带专用IP核,一方面会向用户收取费用,增加用户成本,另一方面使用起来不够灵活,只能作为通用数据缓存控制接口使用,对于特殊使用很难满足要求,同时采用IP核FPGA的管脚固定,不能灵活配置,对于印制版布局布线提出了很高的要求。
【发明内容】
[0003]针对现有技术中存在的上述技术问题,本发明提出了一种基于FPGA的DDR控制器,其采用如下技术方案:
[0004]基于FPGA的DDR控制器,包括:
[0005]状态机,被配置为用于完成DDR控制器的时序控制功能,实现对DDR存储器的访问,并根据访问要求在相应的状态之间进行切换;
[0006]配置控制单元,被配置为用于对DDR存储器寄存器在开机上电时进行配置;
[0007]激活控制单元,被配置为用于对DDR存储器的数据阵列进行激活;
[0008]读写控制单元,被配置为用于对外部访问进行同步处理,给出读写标志,并判断是猝发读写还是单周期读写;
[0009]预充控制单元,被配置为用于完成对激活后的行单元进行无效操作;
[0010]刷新控制单元,被配置为用于对数据阵列进行充电;
[0011]端口控制单元,被配置为用于实现数据总线、地址总线和控制总线的端口锁存。
[0012]进一步,所述状态机包括九种状态,即预充状态、刷新状态、配置状态、激活状态、初始状态、空操作状态、读写状态、猝发读写状态及激活缓冲状态。
[0013]进一步,所述配置包括配置内容和配置过程;配置内容包括DDR存储器的猝发长度、猝发起始地址、猝发类型及读缓冲周期的配置,配置内容由配置命令和地址设置组合完成。
[0014]进一步,所述猝发读写是指外部连续访问,通过一次操作实现对DDR存储器多个地址单元进行读写数据;单周期读写是指外部访问只对一个地址单元进行读写。
[0015]此外,本发明还对应于上述基于FPGA的DDR控制器提出了一种基于FPGA的DDR控制方法,其采用如下技术方案:
[0016]基于FPGA的DDR控制方法,包括:
[0017]用于完成DDR控制器的时序控制功能,实现对DDR存储器的正确访问,并根据访问要求在相应的状态之间进行切换的步骤;
[0018]用于对DDR存储器寄存器在开机上电时进行配置的步骤;
[0019]用于对DDR存储器的数据阵列进行激活的步骤;
[0020]用于对外部访问进行同步处理,给出读写标志,并判断是猝发读写还是单周期读写的步骤;
[0021]用于完成对激活后的行单元进行无效操作的步骤;
[0022]用于对数据阵列进行充电的步骤;
[0023]用于实现数据总线、地址总线和控制总线的端口锁存的步骤。
[0024]此外,本发明还提出了一种状态机访问方法,其采用上述的基于FPGA的DDR控制器,该方法包括如下步骤:
[0025]步骤1:系统在上电时对状态机进行复位,将状态机复位到初始状态;
[0026]步骤2:初始状态是各个控制单元请求进入状态机的初始入口 ;
[0027]步骤3:配置状态用来完成上电配置,占用3个时钟周期,直接跳转到空操作状态,同时给出应答信号到配置控制单元;
[0028]步骤4:在激活状态发出应答信号给激活控制单元,同时进行猝发读写判断;
[0029]步骤4 - 1:激活状态的猝发读写判断,根据读写控制单元控制命令,检测是否是猝发读写:如果不是猝发读写,直接到空操作状态,在空操作状态检测到激活结束命令后,回到初始状态;如果是猝发读写,进入激活缓冲状态;
[0030]步骤5:读写状态是外部访问DDR存储器的状态,外部访问在初始激活后由读写控制单元发出读写请求,进入读写状态,同时发出应答信号到读写控制单元;
[0031]步骤5 — 1:读写状态的猝发读写判断,根据读写控制单元判断外部访问是单周期访问还是猝发访问;如果是单周期访问,直接跳转到空操作状态;如果是猝发访问,读写状态进入猝发读写状态;
[0032]步骤6:预充状态在外部读写访问结束后,由预充控制单元发出预充请求,进入预充状态,在预充状态发出应答信号到预充控制单元;
[0033]步骤6 - 1:预充状态猝发读写判断:如果是单周期读写,在读写完成后进入空操作状态,使得当前激活的行单元进入关闭状态;如果是猝发读写,不能进行关闭,进入猝发读与状态;
[0034]步骤7:刷新由刷新控制单元通过定时器周期性发出,当状态机检测到刷新请求时,进入初始刷新状态,同时给出应答信号;
[0035]步骤7 - 1:刷新状态的猝发读写判断:当检测到猝发读写时,刷新任务进入到猝发读写状态;如果是单周期读写,直接跳转到空操作状态。
[0036]本发明具有如下优点:
[0037]本发明通过在FPGA内部自主设计DDR控制器,利于解决DDR存储器的控制问题,实现采集数据的缓存;本发明中DDR控制流程在FPGA中完成,占用资源少、修改方便、可移植性强;通过本发明设计的DDR控制器及其控制方法,利于降低技术风险,进而提高印制板布局布线的灵活性,利于解决FPGA内部IP核不可控的技术问题。
【附图说明】
[0038]图1为本发明中DDR控制器原理方案框图;
[0039]图2为本发明中状态机的访问流程框图。
【具体实施方式】
[0040]下面结合附图以及【具体实施方式】对本发明作进一步详细说明:
[0041 ] 结合图1所示,基于FPGA的DDR控制器,包括:
[0042]状态机,被配置为用于完成DDR控制器的时序控制功能,实现对DDR存储器的正确访问,并根据访问要求在相应的状态之间进行切换;
[0043]配置控制单元,被配置为用于对DDR存储器寄存器在开机上电时进行配置;
[0044]激活控制单元,被配置为用于对DDR存储器的数据阵列进行激活;
[0045]读写控制单元,被配置为用于对外部访问进行同步处理,给出读写标志,并判断是猝发读写还是单周期读写;
[0046]预充控制单元,被配置为用于完成对激活后的行单元进行无效操作;
[0047]刷新控制单元,被配置为用于对数据阵列进行充电;
[0048]端口控制单元,被配置为用于实现数据总线、地址总线和控制总线的端口锁存。
[0049]其中,状态机根据访问命令不同,产生不同的时序组合,实现相应的功能。具体的,
[0050]状态机包括九种状态,即预充状态、刷新状态、配置状态、激活状态、初始状态、空操作状态、读写状态、猝发读写状态及激活缓冲状态。
[0051 ] 配置包括配置内容和配置过程,配置内容包括存储器的猝发长度、猝发起始地址、猝发类型、读缓冲周期的配置,配置内容由配置命令和地址设置组合完成。配置过程是指配置流程,需要按一定的操作顺序才能实现寄存器的正确配置。
[0052]猝发读写是指外部连续访问,通过一次操作实现对DDR存储器多个地址单元进行读写数据;单周期读写是指外部访问只对一个地址单元进行读写。
[0053]刷新控制单元用来对数据阵列进行充电。为防止DDR存储器的存储数据丢失,需要定时对DDR存储器的存储单元电荷进行充电,根据刷新周期要求,每隔固定时间启动一次刷新,在相应的时间实现所有行的刷新,刷新操作占用6个时钟周期。
[0054]只有当激活控制单元的激活命令有效时,读写控制单元才可以对DDR存储器进行读写操作,每次读写之前都要对所访问的行单元激活。
[0055]当预充控制单元的预充命令有效后,不能对行单元进行读写操作,行单元只有预充后,刷新命令才起作用,预充操作占用3个时钟周期。
[0056]端口控制单元用来保证总线布线延迟的一致性。对于高速传输设计布线延迟是时序同步的关键,在FPGA内部通过采用同步设计,总线延迟可以保证。通过端口锁存总线,可以有效降低FPGA和存储器的布线难度,在基本等长的情况下,确保多路总线的信号完整性,使得总线时序满足设计要求,能够正确捕获。
[0057]上述六个控制单元对状态机访问采用三级结构访问模式,即访问请求、访问应答、访问结束。访问请求由各个控制单元发出,当状态机检测到访问请求时,并且自己处于访问初始状态时,给出访问应答,控制单元检测到访问应答握手信号后,根据自己状态需要占