一种用于实现基于FPGA的SDRAM控制系统的硬件装置的制作方法

文档序号:20801231发布日期:2020-05-20 01:08阅读:215来源:国知局
一种用于实现基于FPGA的SDRAM控制系统的硬件装置的制作方法

本发明涉及数字ic测试系统中sdram控制器设计领域,特别涉及一种用于实现基于fpga的sdram控制系统的硬件装置。



背景技术:

目前,在数字ic测试系统中,需要将大量的图形数据存储在外部存储器中,在芯片测试时将图形数据从外部存储器中读出、并对数字芯片功能进行测试。sdram(synchronousdynamicrandomaccessmemory,sdram)是一款高速、高容量动态存储器,与sram相比,不仅容量大得多,并且价格也相对便宜,因而在数字ic测试系统及其他工业领域获得广泛应用。目前市场上虽然有一些通用的sdram控制器,但存在设置复杂、代码可读性差、模块较多、无法针对特定的系统,发挥不了sdram的优势。并且,市场上的sdram控制器多是针对一片sdram进行设计的,在fpga(fieldprogrammablegatearray,fpga)芯片上若要同时控制多片sdram则需要重复多次例化,这样的设计对后期代码的维护和升级造成很大的困难。

例如,公开号为cn106649157a的专利文献《基于fpga的sdram控制系统》,通过一个接口转换模块实现了将不同fpga厂商的不同sdram控制器ip接口转换成一种通用的ram(randomaccessmemory,随机存取存储器)接口,从而实现在不同厂商的fpga中都可以使用sdram存储器,但这种基于xilinxsdram控制器ip的设计方案不能适应在数字ic测试系统中对sdram的复杂使用需求。

由于在数字ic测试系统中,需要实现对sdram的任意地址任意长度的写突发访问,并且其控制总线需要和上一层模块进行兼容;在读访问sdram时,需要实现任意地址任意长度的读突发访问,并要根据不同的速率将数据从sdram中读出;除此之外,在数字ic测试系统中往往需要用到多块sdram,因此控制器需要能够同时控制多块sdram,并且要满足不同访问情况下每块sdram的刷新需求。而这种在数字ic测试系统中对sdram多样且复杂的使用需求是一般的sdram控制方案所不能实现的,因此需要一种专门设计的sdram控制系统。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种用于实现基于fpga的sdram控制系统的硬件装置,通过采用一个基于三段式设计理论的状态机模块控制模块对多片sdram进行选通读写控制、同时读或同时写控制,并满足每片sdram对刷新时间的要求,且不会造成数据丢失,能够适用更广的应用场景,同时在刷新状态对读写请求进行检查,能够避免状态机模块在刷新状态无法响应读写请求,因此该状态机模块的设计能够具有较好的稳定性,具有综合效率较高、便于项目后期的维护和升级等诸多优势,同时,对多片sdram采用模块共用方式,还具有优化布局和节省资源的优势。

本发明提供的一种用于实现基于fpga的sdram控制系统的硬件装置,包括fpga单元及与其连接的若干片sdram;

所述fpga单元包括指令译码模块、状态机模块、读模块、写模块、数据总线和控制总线;

所述指令译码模块用于将来自外部总线的指令进行译码;

译码出读指令时,所述指令译码模块配置sdram地址和读模块内部缓存ram的地址范围,所述状态机模块用于接收所述读指令,根据所述sdram地址选通单片或多片对应的sdram,控制读模块从对应的sdram读出数据存入读模块的内部缓存,并根据读模块反馈的缓存状态控制其缓存的数据回读至外部总线或高速数据线;

所述读模块用于执行所述从对应的sdram读出数据并根据所述读模块内部缓存ram的地址范围存入其内部缓存、执行对所述缓存状态的反馈、执行所述缓存的数据回读至外部总线或高速数据线;

译码出写指令时,所述指令译码模块配置sdram地址和写模块内部缓存ram的地址范围,所述状态机模块用于根据所述sdram地址选通单片或多片对应的sdram,并根据写模块反馈的缓存状态控制其缓存的数据写入对应的sdram;

所述写模块用于接收所述写指令,根据所述写模块内部缓存ram的地址范围将来自外部总线的数据存入其内部缓存,执行对所述缓存状态的反馈,执行所述缓存的数据写入对应的sdram;

所述控制总线连接所述状态机模块和若干片sdram,用于所述状态机模块通过其对所述若干片sdram进行所述选通控制或多片同时控制;

所述数据总线连接所述读模块、写模块和若干片sdram。

由上,本发明通过采用一个基于三段式设计理论的状态机模块控制模块对多片sdram进行选通读写控制、同时读或同时写控制,并满足每片sdram对刷新时间的要求,且不会造成数据丢失,能够适用更广的应用场景,同时在刷新状态对读写请求进行检查,能够避免状态机模块在刷新状态无法响应读写请求,因此该状态机模块的设计能够具有较好的稳定性,具有综合效率较高、便于项目后期的维护和升级等诸多优势,同时,对多片sdram采用模块共用方式,还具有优化布局和节省资源的优势。

其中,所述状态机模块采用三段式状态机,状态机模块的第一段是利用全局系统时钟对状态寄存器逻辑进行描述,状态机模块的第二段是采用组合逻辑对状态转移进行描述,状态机模块的第三段是在全局系统时钟的驱动下对输出逻辑进行描述。

由上,三段式状态机的描述方式虽然编码不是很方便,需要在不同的位置编写输出逻辑和状态转移逻辑,但由于其是分段描述,具有综合器理解准确、综合效率较高的优势,同时也消除了采用组合逻辑输出存在的不稳定性。

其中,所述写模块的内部缓存包括构成乒乓缓存机制的两片缓存ram。

由上,写模块通过内部的两片缓存ram,可以乒乓接收外部总线的数据,并乒乓写入sdram,传输速率较高且传输稳定。

其中,所述读模块的内部缓存包括两倍于所述sdram数量的缓存ram。

由上,读模块内部也包括若干片缓存ram,并且支持高速连续读缓存数据和低速读缓存数据两种功能,在高速读缓存模式下,由两片缓存ram负责乒乓接收一片sdram传输的数据,并乒乓送至高速数据线;在低速读缓存模式下,由一片缓存ram负责接收一片sdram传输的数据,并送至外部总线。

其中,所述控制总线包括与所述状态机模块连接的cmd_bus控制总线和ref_bus控制总线,该cmd_bus控制总线和ref_bus控制总线通过多路器选择开关与所述若干片sdram的管脚连接;

所述cmd_bus控制总线采用三段式状态机进行描述,用于控制一片或若干片sdram的读写和刷新访问;

所述ref_bus控制总线用于控制sdram进行一次自刷新总线,即在cmd_bus控制总线读写访问一片或若干片sdram时,该ref_bus控制总线用以控制其他片sdram的刷新功能。

由上,可实现对多片sdram实现选通读写功能、同时选通读写功能。

其中,所述数据总线包括双向三态数据总线,其数据输入端连接所述写模块,其数据输出端连接所述读模块,其io端连接所述若干片sdram。

由上,读模块和写模块通过双向三态数据总线与若干片sdram连接,其中,数据输入端连接所述写模块,数据输出端连接所述读模块,io端既可以进行数据写入也可以进行数据输出,从而在读模块和写模块的控制下,实现sdram的读写。

本发明还提供了一种基于fpga的sdram的数据读取控制方法,采用上述控制系统,包括如下步骤:

a1、指令译码模块将来自外部总线的的指令进行译码,并配置sdram地址发送至状态机模块和配置读模块内部缓存ram的地址范围发送至读模块;

a2、译码出读指令时,执行如下读步骤:

状态机模块接收该读指令,根据所述sdram地址选通单片或多片对应的sdram,

状态机模块控制读模块从对应的sdram读出数据存入读模块的内部缓存,

状态机模块根据读模块反馈的缓存状态控制其缓存的数据回读至外部总线或高速数据线。

由上,本方法通过采用三段式状态机设计,并使多片sdram共用一套控制模块,从而实现对多片sdram的数据读取控制,具有优化布局和节省资源的优势。

其中,步骤a2所述读步骤包括:

所述状态机模块接收读指令进入读开始状态,在全局系统时钟的驱动下,根据所述sdram地址选通对应的sdram并依次发送激活、空操作指令和相应的地址;

所述状态机模块进入读中间状态,给对应的sdram发送读指令和读地址,给读模块发送写入其缓存ram的写使能;所述读模块据此读取对应的sdram的数据并存入内部缓存ram,当缓存写满时,发送缓存满上升沿至状态机模块;

所述状态机模块接收到读模块的读缓存满上升沿信号时,控制读模块缓存的数据回读至外部总线或高速数据线,数据回读完成后,发送读缓存空上升沿至状态机模块。

由上,本步骤可根据sdram地址选通对应的sdram进行激活、刷新,并将读地址和读指令发送至对应的sdram,将写入其缓存ram的写使能发送至读模块,控制读模块对sdram中的数据并进行读取,并反馈缓存状态至状态机模块,状态机模块根据缓存状态可实现对读模块的控制,将数据传输出去。

其中,步骤a2所述读步骤还包括:

所述读模块处于低速读缓存模式时,利用其内部的一片缓存ram存储对应的sdram的数据,当该一片缓存ram存满时,发送缓存满上升沿至状态机模块,所述状态机模块进入读结束状态,在外部总线时钟驱动下,读模块将数据送到外部总线,等待所述外部总线的下一次读指令;

所述读模块处于高速读缓存模式时,利用其内部的两片缓存ram乒乓存储对应的sdram的数据,并回读至高速数据线,当数据回读完成时,发送缓存空上升沿至状态机模块,所述状态机模块再次进入读开始状态,进行下一次数据读取流程。

由上,读模块支持两种数据读取传输方式,并且由于数据读取方式的不同,状态机读状态的启动方式也存在两种方式,即外部总线启动或硬件自启动。

本发明还提供了一种基于fpga的sdram的数据写入控制方法,采用上述控制系统,包括如下步骤:

b1、指令译码模块将来自外部总线的的指令进行译码,并配置sdram地址发送至状态机模块和配置写模块内部缓存ram的地址范围发送至写模块;

b2、译码出写指令时,执行如下写步骤:

写模块接收该写指令,将来自外部总线的数据存入其内部缓存,并将缓存状态反馈至状态机模块:

状态机模块根据所述sdram地址选通单片或多片对应的sdram,根据写模块的缓存状态控制其缓存的数据写入对应的sdram。

由上,本方法通过采用三段式状态机设计,并使多片sdram共用一套控制模块,从而实现对多片sdram的数据选通写入控制或同时写入控制,具有优化布局和节省资源的优势。

其中,步骤b2所述写步骤包括:

所述写模块通过缓存ram乒乓接收并缓存来自外部总线的数据,当缓存满时,发送缓存满上升沿至状态机模块;

所述状态机模块接收到所述缓存满上升沿信号,启动状态机模块进入写开始状态,在全局系统时钟驱动下,根据sdram地址选择对应的sdram并依次发送激活、空操作指令和相应的地址;

所述状态机模块进入写中间状态,给对应的sdram发送写指令和写地址,给写模块发送读取其缓存ram的读使能,控制将写模块缓存的数据写入对应的sdram中;

当所述写模块将内部缓存ram存储的数据全部写入对应的sdram时,发送缓存空上升沿至状态机模块,所述状态机模块进入写结束状态。

由上,实现了通过写模块的内部缓存空上升沿关闭状态机模块的写状态,完成对sdram的数据写入。

综上,本发明相比于现有技术具有以下优点:

通过指令译码模块来兼容上层的外部总线控制端口,并将外部总线的控制指令进行译码,产生相应的控制信号送给状态机模块、读模块和写模块;同时,该模块还需要给sdram及读模块和写模块的缓存ram提供相应的访问地址;

通过状态机模块实现对多片sdram和对其他模块的集中且统一的控制,这种设计方法使控制逻辑较为清晰,便于代码的板卡测试等验证工作;通过对状态机采用三段式的描述方式,使得代码具有较高的可读性、编译器可综合性;通过两种不同的刷新策略,实现控制器具有更广的sdram驱动时钟频率范围;

通过写模块两块缓存的乒乓机制,能够实现外部总线连续对sdram的写访问,提高了数据传输效率;

通过读模块内部多块缓存ram,来实现多片sdram中数据的并行和同步读取,并能够随不同的频率送出;

通过状态机模块、读模块、写模块、控制总线的协同工作,能够实现选通读写访问单片sdram或同时读写访问多片sdram;

附图说明

图1为本发明基于fpga的sdram控制系统的原理示意图;

图2为本发明状态机模块的状态转移示意图;

图3为本发明状态机模块的设计流程图;

图4为本发明控制sdram进行读写时状态跳转示意图;

图5为本发明基于fpga的sdram的数据读取控制方法的流程图;

图6为本发明基于fpga的sdram的数据写入控制方法的流程图。

具体实施方式

在fpga逻辑设计中,有限状态机模块fsm(finitestatemachine,fsm)被用于描述各种复杂的时序行为,是使用hdl(hardwaredescriptionlanguage,hdl)进行数字逻辑设计的最重要的方法之一。有限状态机模块按照描述方法的不同,可以分为三种类型:一段式状态机模块、两段式状态机模块和三段式状态机。由于一段式状态机模块的描述方式不符合将时序和组合逻辑分开描述的代码风格,而且代码冗长、不清晰,不利于附加约束,不利于综合器和布局布线器对设计的优化,所以该描述方式在应用上存在局限。两段式状态机模块的描述方式相比一段式状态机模块具有综合效率较好等优势,但也存在局限,即其输出是采用组合逻辑进行描述,而组合逻辑存在易产生毛刺等不稳定特性,并且在fpga/cpld(complexprogrammablelogicdevice,cpld)等逻辑器件中过多的组合逻辑会影响实现的速率。三段式状态机的描述方式虽然编码不是很方便,需要在不同的位置编写输出逻辑和状态转移逻辑,但由于其是分段描述,具有综合器理解准确、综合效率较高的优势,同时也消除了采用组合逻辑输出存在的不稳定性。

基于此,本发明提供了一种基于fpga的sdram控制系统,通过采用三段式状态机控制方式,并对多片sdram共用相同的状态机模块、读模块、写模块、指令译码模块。采用一个基于三段式设计理论的状态机模块对多片sdram芯片进行选通读写控制、同时读或同时写控制,具有综合器理解准确、综合效率较高、便于项目后期的维护和升级等诸多优势;对多片sdram采用模块公共方式,能够优化布局和节省资源。在sdram的刷新策略选择上,采用是的每进行1024个数据长度以内的连续读写访问后执行六次自刷新、若无读写命令则每计数到一定时间后执行一次自动刷新,这样的策略不但能最大化的实现高速数据的传输通信、还能满足sdram对刷新时间的要求,并且能够降低整体方案的功耗。该设计采用全局时钟同步设计,各模块都是采用全局系统时钟驱动。写模块内部具有两块缓存ram,能够乒乓接收外部总线数据,并依次启动状态机将数据搬入sdram里。读模块内部具有多片缓存ram,每两片ram乒乓接收一片sdram传输的数据,并连续高速输出数据,并且能够支持不同的读缓存速率。

下面参照如下附图,对本发明的工作原理进行详细描述。

如图1所示,本发明的一个实施例提供了一种基于fpga的sdram控制系统,包括fpga单元,该fpga单元外部连接五片sdram,并对其进行读写控制;

其中,fpga单元内部包括指令译码模块100、状态机模块200、读模块300、写模块400、三态数据总线500和控制总线600;

所述指令译码模块100用于将来自外部总线的指令进行译码;

译码出读指令时,所述指令译码模块100配置sdram地址和读模块300内部缓存ram的地址范围,所述状态机模块200用于接收所述读指令,根据所述sdram地址选通单片或多片对应的sdram,控制读模块300从对应的sdram读出数据存入读模块300的内部缓存,并根据读模块300反馈的缓存状态控制其缓存的数据回读至外部总线或高速数据线;

所述读模块300用于执行所述从对应的sdram读出数据并根据所述读模块内部缓存ram的地址范围存入其内部缓存、执行对所述缓存状态的反馈、执行所述缓存的数据回读至外部总线或高速数据线;

译码出写指令时,所述指令译码模块100配置sdram地址和写模块400内部缓存ram的地址范围,所述状态机模块200用于根据所述sdram地址选通单片或多片对应的sdram,并根据写模块400反馈的缓存状态控制其缓存的数据写入对应的sdram;

所述写模块400用于接收所述写指令,根据所述写模块内部缓存ram的地址范围将来自外部总线的数据存入其内部缓存,执行对所述缓存状态的反馈,执行所述缓存的数据写入对应的sdram;

所述控制总线600连接所述状态机模块200和五片sdram,用于所述状态机模块200通过其对所述五片sdram进行所述选通控制,具体包括cmd_bus控制总线和ref_bus控制总线,其中cmd_bus是采用三段式状态机进行描述,用以控制一片或若干片sdram的读写和刷新访问;ref_bus是控制sdram进行一次自刷新总线,即在状态机模块控制器读写访问一片或多片sdram时,ref_bus用以控制其他片sdram的刷新功能,cmd_bus和ref_bus在输出到sdram管脚之前是经过多路器选择开关使能控制,以对五片sdram实现选通读写功能、同时读或同时写功能;

所述三态数据总线500连接所述读模块300、写模块400和五片sdram,用于进行读模块300或写模块400与该五片sdram之间的数据传输,其中,该读模块300由指令译码模块100控制配置其内部的缓存初始化地址范围,然后在状态机模块200的控制下,将一片sdram传输的数据存入读模块300的内部缓存ram中,该读模块300支持高速连续读缓存数据和低速读缓存数据两种功能,在高速读缓存模式下,其内部包含十片缓存ram,其中每两片缓存ram负责乒乓接收一片sdram传输的数据,并乒乓送出去;在低速读缓存模式下,其内部包含五片缓存ram,由一片缓存ram负责接收一片sdram传输的数据,并由外部总线在低速速率下将缓存数据回读到外部;该写模块400内部有两片缓存ram,能够乒乓接收来自外部总线的数据,并依次启动状态机模块200将数据搬入sdram里,写模块只输出一路数据five_bus,该路数据five_bus连接到五片sdram的数据输出口,在进行数据写入时,只需要将控制总线cmd_bus和ref_bus选通送到sdram控制管脚上,即可实现对五片sdram的选通读写和同时选通读写功能。

如图2所示,上述状态机模块200的设计理念采用三段式描述方式,该状态机模块200的第一段是利用全局系统时钟对状态寄存器逻辑进行描述,第二段是采用组合逻辑对状态转移进行描述,状态机模块的第三段是在全局系统时钟的驱动下对输出逻辑进行描述。其工作状态可细分为七个状态,分别是复位状态(rst)、上电状态(init)、1次刷新状态(ref_1)、6次刷新状态(ref_6)、等待状态(idle)、读状态(rd)、写状态(wr);

如图3所示,上述状态机模块200的复位状态(rst)是使fpga单元内部程序回归到初始化的状态;复位结束后进入上电状态,即完成对sdram的上电初始化操作;在上电状态结束后,进入一次刷新状态,在该状态中对所有sdram进行一次自刷新;若在一次刷新状态中检测到读写请求时,会等待刷新结束后直接跳转到对应的读状态或写状态;在一次刷新状态结束后,进入等待状态,等待读写请求;在等待状态下,若无读写请求且计时到一定时间后,进入一次刷新状态执行一次自刷新操作,之后返回等待状态。当有读请求或写请求时,进入对应的读状态或写状态;待读或写操作结束后,进入六次刷新状态,对读或写操作对应的sdram执行六次自刷新;待六次自刷新结束后,返回等待状态;

如图4所示,上述状态机模块200的写状态(wr)设计中,将写状态(wr)细分为写开始状态(wr_s)、写中间状态(wr_m)、写结束状态(wr_e)。外部总线负责将外部数据存入写模块400内部缓存,缓存起到数据传输跨时钟域的作用,然后由缓存满标志的上升沿来启动状态机模块200的写状态(wr),并进入写开始状态(wr_s);在写开始状态(wr_s)下,状态机模块200在全局系统时钟(sys_clk)驱动下,给sdram顺序发出激活(act)、空操作(nop)指令和相应的地址,然后由写开始状态(wr_s)跳转到写中间状态(wr_m);在写中间状态(wr_m)下,状态机模块发出写指令和写地址,上述写模块400内部缓存的数据按照写指令和写地址存入对应的sdram中,当写模块400内部缓存读空时,由缓存空标志的上升沿结束写状态,即由写中间状态(wr_m)进入写结束状态(wr_e);在写结束状态(wr_e)状态,状态机模块200依次发出预充电(precharge)、空指令(nop),关闭当前行并产生写结束标志;

如图4所示,上述状态机模块200的读状态(rd)设计中,将读状态(rd)细分为读开始状态(rd_s)、读中间状态(rd_m)、读结束状态(rd_e)。状态机模块200负责将sdram中的数据存入读模块300内部缓存,缓存起到跨时钟域的作用。在读开始状态(rd_s),状态机模块200在全局系统时钟(sys_clk)驱动下,给sdram顺序发出激活(act)、空操作(nop)指令和相应的地址,然后由读开始状态(rd_s)跳转到读中间状态(rd_m);在读中间状态(rd_m)状态,状态机模块200发出读指令(rd)和读地址,通过控制总线600选定读地址对应的sdram,将sdram中的数据存入读模块300内部缓存,当缓存满标志的上升沿到来时,由缓存满标志的上升沿结束读状态,即由读中间状态(rd_m)进入读结束状态(rd_e),在读结束状态(rd_e)状态,状态机模块200依次发出空指令(nop)、空指令(nop)、预充电(precharge)、空指令(nop),并产生读结束标志;

上述状态机模块200的读状态(rd)设计支持两种启动读状态(rd)方式:外部总线控制启动读状态和状态机模块自动启动读状态;

第一种方式:是由外部总线发出读使能启动读状态,即进入读开始状态(rd_s);然后由读开始状态(rd_s)进入读中间状态(rd_m),利用内部的一片缓存ram读取sdram中的数据;当缓存写满标志的上升沿到来时,退出读状态,即由读中间状态(rd_m)进入读结束状态(rd_e),等待来自外部总线的下一次读指令;

第二种方式:该方式要依托于第一种方式,即第一次启动状态机模块的读状态是由外部总线的读使能进行启动,进入读开始状态(rd_s),在外部总线的控制下将sdram中的数据高速存入读模块300的两片内部缓存ram,当缓存写满时,由缓存满标志的上升沿控制退出读状态,即由读中间状态(rd_m)进入读结束状态(rd_e);第二次及以后启动状态机模块的读状态是当缓存数据读空后,由缓存空标志的上升沿启动读状态,即进入读开始状态(rd_s);同样,也是由缓存满标志的上升沿控制退出读状态,即进入读结束状态(rd_e)。

上述状态机模块的读写设计,使得该sdram控制系统具有较大的驱动时钟范围,并满足每片sdram对刷新时间的要求,且不会造成数据丢失,能够适用更广的应用场景,同时在刷新状态对读写请求进行检查,能够避免状态机模块在刷新状态无法响应读写请求,因此该状态机模块的设计能够具有较好的稳定性。

如图5所示,基于上述sdram控制系统,本发明的另一实施例提供了一种基于fpga的sdram的数据读取控制方法,包括如下步骤:

s101:指令译码模块对接收自外部总线的读指令进行译码并发送至状态机模块,并配置sdram地址发送至状态机模块和读模块;

本步骤包括以下子步骤:

外部总线发出的读指令经过译码之后,发送至状态机模块,并配置sdram地址发送至状态机模块和配置读模块内部缓存ram的地址范围发送至读模块;

状态机模块根据读指令进入读开始状态,并在全局系统时钟驱动下,给读取地址对应的sdram发出激活、空操作指令和相应的地址。

本步骤中,状态机模块接收来自指令译码模块的读指令和sdram地址后,进入读开始状态,并根据sdram地址控制cmd_bus控制总线选择该sdram地址对应的一片或多片sdram,并依次发送激活、空操作指令和相应的地址,其余的sdram在cmd_ref控制总线的控制下进行自刷新,仍处于等待状态,并不发送激活等指令。

s102:所述状态机模块接收所述读指令进入读状态,读模块根据所述内部缓存ram的地址范围读取sdram的数据存入读模块的内部缓存ram并反馈缓存状态至状态机模块;

本步骤包括以下子步骤:

所述状态机模块接收外部总线指令进入读开始状态,在全局系统时钟的驱动下,根据sdram地址选择sdram并依次发送激活、空操作指令和相应的地址;

所述状态机模块进入读中间状态,给对应的sdram发送读指令和读地址,给读模块发送写入其缓存ram的写使能;

所述读模块接收状态机模块发送的写使能,通过缓存ram存储sdram的数据,当缓存写满时,发送缓存满上升沿至状态机模块;

所述状态机模块接收到读模块的读缓存满上升沿信号时,进入读结束状态。

本步骤中,读模块支持高速连续读缓存数据和低速读缓存数据两种功能,在高速读缓存模式下,由两片缓存ram负责乒乓接收sdram传输的数据,并乒乓送至高速数据线,以供fpga单元内部的其他模块对数据进行处理;在低速读缓存模式下,由一片缓存ram负责接收sdram传输的数据,并由外部总线在低速速率下将缓存数据回读到pc端。

s103:所述状态机模块控制读模块将内部缓存的数据回读至外部总线或高速数据线;

本步骤包括:

所述读模块处于低速读缓存模式时,利用其内部的一片缓存ram存储对应的sdram的数据,当该一片缓存ram存满时,发送缓存满上升沿至状态机模块,所述状态机模块进入读结束状态,在外部总线时钟驱动下,读模块将数据送到外部总线,等待所述外部总线的下一次读指令;

所述读模块处于高速读缓存模式时,利用其内部的两片缓存ram乒乓存储对应的sdram的数据,并回读至高速数据线,当数据回读完成时,发送缓存空上升沿至状态机模块,所述状态机模块再次进入读开始状态,进行下一次数据读取流程。

本步骤中,读模块将缓存满的数据回读至外部总线或高速数据线,当数据回读完成,读模块的内部缓存处于缓存空标志,此时若已完成sdram全部测试图形数据的读取,即可控制状态机模块进入读结束状态,对sdram进行六次自刷新;若未完成sdram全部测试图形数据的读取,此时状态机模块根据缓存空上升沿,重新进入读开始状态,并重复上述步骤,直至完成所有测试图形数据的读取。

本方法支持同时对多片sdram的数据同时读取,通过在读模块中设置多片缓存ram,并由控制总线cmd_bus进行多路器选择和开关使能控制,同时选择读取地址对应的sdram进行刷新、激活等动作即可,使其同时响应数据读取请求。

如图6所示,基于上述sdram控制系统,本发明的又一实施例提供了一种基于fpga的sdram的数据写入控制方法,包括如下步骤:

s201:指令译码模块对接收自外部总线的写指令进行译码发送至写模块,并配置sdram地址发送至状态机模块和配置写模块内部缓存ram的地址范围发送至写模块;

本步骤中,指令译码模块对来自外部总线的写指令进行译码之后,发送至写模块,并配置sdram地址发送至状态机模块和配置写模块内部缓存ram的地址范围发送至写模块。

s202:写模块根据写指令将来自外部总线的数据存入内部缓存,并通过缓存满上升沿启动状态机模块进入写状态;

本步骤包括以下子步骤:

所述写模块通过缓存ram乒乓接收并缓存来自外部总线的数据,当缓存满时,发送缓存满上升沿至状态机模块;

所述状态机模块接收到所述缓存满上升沿信号,启动状态机模块进入写开始状态,在全局系统时钟驱动下,根据sdram地址选择对应的sdram并依次发送激活、空操作指令和相应的地址。

本步骤中,写模块通过内部的两片缓存ram乒乓接收来自外部总线的数据,当缓存满时,发送缓存满上升沿至状态机模块,状态机模块接收写模块的缓存满上升沿,进入写开始状态,并在全局系统时钟驱动下,根据写入地址控制cmd_bus控制总线选择该写入地址对应的sdram,依次发送激活、空操作指令和相应的地址,其余的sdram在cmd_ref控制总线的控制下进行自刷新,仍处于等待状态,并不发送激活等指令。

s203:所述状态机模块控制写模块,将缓存的数据写入对应的sdram;

本步骤包括以下子步骤:

所述状态机模块进入写中间状态,给对应的sdram发送写指令和写地址,给写模块发送读取其缓存ram的读使能,控制将写模块缓存的数据写入对应的sdram中;

当所述写模块将内部缓存ram存储的数据全部写入对应的sdram时,发送缓存空上升沿至状态机模块,所述状态机模块进入写结束状态,等待外部总线发送下一次数据至写模块,然后由写模块的缓存满上升沿控制状态机模块进入下一次写开始状态。

本步骤中,状态机模块进入写中间状态,给对应的sdram发送写指令和写地址,给写模块发送读取其缓存ram的读使能,控制写模块将缓存满的数据,乒乓发送至选择的sdram中,当数据发送完成,写模块产生缓存空标志,发送缓存空的上升沿至状态机模块,状态机模块进入写结束状态,依次发送预充电(precharge)、空指令(nop),关闭当前行并产生写结束标志。

综上,本发明实现了对多片sdram的选通读写控制、同时读或同时写控制,满足每片sdram对刷新时间的要求,且不会造成数据丢失,同时在刷新状态对读写请求进行检查,能够避免状态机模块在刷新状态无法响应读写请求,具有综合效率较高、便于项目后期的维护和升级等诸多优势,同时,对多片sdram采用模块共用方式,还具有优化布局和节省资源的优势。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1