存储器控制器及相关的控制方法转让专利

申请号 : CN201510074643.5

文献号 : CN105988951B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张雅闵

申请人 : 瑞昱半导体股份有限公司

摘要 :

本发明涉及存储器控制器及相关的控制方法。一种存储器控制器包含有一地址解码器以及一协议控制器,其中该地址解码器用于对一接收信号进行译码操作以产生多个指令信号,其中该多个指令信号包含了存取一存储器中多个区块的指令信号;以及该协议控制器用于根据目前该存储器中所开启的区块及数据页,来重新决定该多个指令信号的执行顺序,以使用该多个指令信号来存取该存储器。

权利要求 :

1.一种存储器控制器,包含:

一地址解码器,用于对一接收信号进行译码操作以产生多个指令信号,其中,该多个指令信号包含了存取一存储器中多个区块的指令信号;以及一协议控制器,耦接于该地址解码器,用于根据该多个指令信号所需要存取该存储器中的区块及数据页地址,来重新决定该多个指令信号的执行顺序,以根据该多个指令信号来存取该存储器;

该多个指令信号依序包含了用来存取该存储器中一第一区块的一数据页以及存取一第二区块的一数据页的指令信号,且在该存储器控制器存取完该第一区块的该数据页的数据之前,该协议控制器便会传送指令至该存储器以开启该第二区块的该数据页,并要求存取该第二区块的该数据页;

其中,当该第二区块有其他数据页正处于开启时,该协议控制器会依序传送一第一开启指令至该存储器以开启该第一区块的该数据页、一关闭指令至该存储器以关闭该第二区块目前开启中的其他数据页、一第一读取指令至该存储器以要求存取该第一区块的该数据页、一第二开启指令至该存储器以开启该第二区块的该数据页、以及一第二读取指令至该存储器以要求存取该第一区块的该数据页。

2.根据权利要求1所述的存储器控制器,其中,该协议控制器会循序对该多个指令进行检查以判断是否有区块冲突的情形发生,并根据判断结果以将该多个指令信号分别进入一预充电阶段、一开启阶段、或是一指令序列阶段,其中,该预充电阶段为关闭相对应区块中的数据页,该开启阶段为开启相对应区块中的数据页,且该指令序列阶段为循序储存所进入的指令;该协议控制器另根据目前该存储器中所开启的区块及数据页,以决定该指令序列阶段所循序输出的指令进入一重开启阶段或是一指令运行阶段,其中,该重开启阶段为重新开启相对应区块中的数据页;以及该协议控制器根据关闭阶段、该开启阶段、该重开启阶段以及该指令运行阶段目前所对应到的指令信号,以决定需要先执行哪一个阶段的操作。

3.根据权利要求2所述的存储器控制器,其中,该协议控制器根据该预充电阶段、该开启阶段、该重开启阶段以及该指令运行阶段目前所对应到的指令信号所需要存取的区块,以决定需要先执行哪一个阶段的操作。

4.根据权利要求3所述的存储器控制器,其中,该协议控制器优先执行该预充电阶段、该开启阶段、该重开启阶段以及该指令运行阶段中所需要存取的区块不同于目前该存储器中所开启的区块的阶段操作。

5.一种存储器控制方法,包含:

对一接收信号进行译码操作以产生多个指令信号,其中,该多个指令信号包含了存取一存储器中多个区块的指令信号;以及根据目前该存储器中所开启的区块及数据页,来重新决定该多个指令信号的执行顺序,以使用该多个指令信号来存取该存储器;

该多个指令信号依序包含了用来存取该存储器中一第一区块的一数据页以及存取一第二区块的一数据页的指令信号,该方法应用于一存储器控制器中,且该方法另包含:在该存储器控制器存取完该第一区块的该数据页的数据之前,该存储器控制器便会传送指令至该存储器以开启该第二区块的该数据页,并要求存取该第二区块的该数据页;

在该存储器控制器存取完该第一区块的该数据页的数据之前,该存储器控制器便会传送指令至该存储器以开启该第二区块的该数据页,并要求存取该第二区块的该数据页的步骤包含:当该第二区块有其他数据页正处于开启时,依序传送一第一开启指令至该存储器以开启该第一区块的该数据页、一关闭指令至该存储器以关闭该第二区块目前开启中的其他数据页、一第一读取指令至该存储器以要求存取该第一区块的该数据页、一第二开启指令至该存储器以开启该第二区块的该数据页、以及一第二读取指令至该存储器以要求存取该第一区块的该数据页。

6.根据权利要求5所述的存储器控制方法,其中,根据目前该存储器中所开启的区块及数据页,来重新决定该多个指令信号的执行顺序的步骤包含:循序对该多个指令进行检查以判断是否有区块冲突的情形发生,并根据判断结果以将该多个指令信号分别进入一预充电阶段、一开启阶段、或是一指令序列阶段,其中,该预充电阶段为关闭相对应区块中的数据页,该开启阶段为开启相对应区块中的数据页,且该指令序列阶段为循序储存所进入的指令;

根据目前该存储器中所开启的区块及数据页,以决定该指令序列阶段所循序输出的指令进入一重开启阶段或是一指令运行阶段,其中,该重开启阶段为重新开启相对应区块中的数据页;以及根据关闭阶段、该开启阶段、该重开启阶段以及该指令运行阶段目前所对应到的指令信号,以决定需要先执行哪一个阶段的操作。

7.根据权利要求6所述的存储器控制方法,其中,根据该预充电阶段、该开启阶段、该重开启阶段以及该指令运行阶段目前所对应到的指令信号,以决定需要先执行哪一个阶段的操作的步骤另包含:根据该预充电阶段、该开启阶段、该重开启阶段以及该指令运行阶段目前所对应到的指令信号所需要存取的区块,以决定需要先执行哪一个阶段的操作。

8.根据权利要求7所述的存储器控制方法,其中,根据该预充电阶段、该开启阶段、该重开启阶段以及该指令运行阶段目前所对应到的指令信号,以决定需要先执行哪一个阶段的操作的步骤另包含:优先执行该预充电阶段、该开启阶段、该重开启阶段以及该指令运行阶段中所需要存取的区块不同于目前该存储器中所开启的区块的阶段操作。

说明书 :

存储器控制器及相关的控制方法

技术领域

[0001] 本发明涉及存储器,尤其涉及一种动态随机存取存储器控制器及相关的控制方法。

背景技术

[0002] 在同步动态随机存取存储器(Synchronous Dynamic Random-Access Memory,SDRAM)中,对数据的存取(Read/Wrtie data)程序,包含以下动作:(1)若未设定对应区块(Bank)的数据页(non-active page),则需要先发出有效指令(Active command)以开启其存取对应区块特定的数据页,再发出读取/写入指令(Read/Write command)以执行数据读取/写入动作;(2)若已设定对应区块的数据页(active page),则当对应到区块的相同数据页(page hit)时,可直接执行操作存取;而当对应的数据页不同时(page miss),则需要先发出预充电指令(Precharge command)以关闭目前对应的数据页,再发出有效指令(Active command)以设定准备要存取的数据页,最后再发出读取/写入指令(Read/Write command)以进行数据存取;(3)每隔一段时间都须执行自动更新/更新指令(Auto-Refresh/Refresh command),以维持SDRAM中的数据内容值不变。
[0003] 以上所叙述的控制操作流程,每次存取时都需确认相对应区块中的数据页的状态,亦即判断非有效数据页(non-active page)、有效数据页(active page)、数据页命中(page hit)或是数据页错失(page miss)等,并针对其目前的状态执行相对应的操作,才可正确地对SDRAM进行写入或读取操作。由于操作流程是固定且例行性的判断,所以在处理的设计上大多利用有限状态机(Finite State Machine,FSM)的作法来控制SDRAM。但通过有限状态机作法,在系统执行上通常效率上会有其限制,无法提高执行指令频率,并且也会延迟执行周期,这都会使得存储器存取操作效能降低。
[0004] 为了提升SDRAM效能的问题,一般而言利用优化判别程序流程,及在硬件上改为管线化(pipeline)的设计,可以优化SDRAM指令操作,进而有效达到提升存储器的带宽,但其缺点是在控制上会加深其复杂化及设计难度,因此硬件的设计成本也会增加。

发明内容

[0005] 因此,本发明的目的之一在于提供一种SDRAM的控制器及相关的控制方法,其简化了存储器的控制设计,并可优化存储器的操作效能,以解决现有技术的问题。
[0006] 依据本发明一实施例,一种存储器控制器包含有一地址解码器以及一协议控制器,其中该地址解码器用于对一接收信号进行译码操作以产生多个指令信号,其中该多个指令信号包含了存取一存储器中多个区块的指令信号;以及该协议控制器用于根据目前该存储器中所开启的区块及数据页,来重新决定该多个指令信号的执行顺序,以使用该多个指令信号来存取该存储器。
[0007] 依据本发明另一实施例,一种存储器控制方法包含有:对一接收信号进行译码操作以产生多个指令信号,其中该多个指令信号包含了存取一存储器中多个区块的指令信号;以及根据目前该存储器中所开启的区块及数据页,来重新决定该多个指令信号的执行顺序,以使用该多个指令信号来存取该存储器。

附图说明

[0008] 图1所示为依据本发明一实施例的存储器控制器的示意图。
[0009] 图2为依据本发明一实施例的存储器控制器存取存储器的流程图。
[0010] 图3为依据本发明一实施例的硬件架构图。
[0011] 图4为存取指令的格式的示意图。
[0012] 图5为现有技术存取不同区块的数据页的时序图。
[0013] 图6为依据本发明一实施例的存取不同区块的数据页的时序图。

具体实施方式

[0014] 在说明书及权利要求书当中使用了某些词汇来指称特定的组件。所属领域普通技术人员应可理解,硬件制造商可能会用不同的名词来称呼同一个组件。本说明书及权利要求书并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。在通篇说明书及权利要求书当中所提及的“包含”为一开放式的用语,故应解释成“包含但不限定于”。此外,“耦接”一词在此包含任何直接及间接的电气连接手段,因此,若文中描述一第一装置耦接于一第二装置,则代表该第一装置可直接电气连接于该第二装置,或者通过其他装置或连接手段间接地电气连接至该第二装置。
[0015] 请参考图1,图1所示为依据本发明一实施例的存储器控制器100的示意图,如图1所示,存储器控制器100耦接于存储器108,且通过总线101连接到中央处理器102、图形处理器104、高清晰度多媒体接口(High Definition Multimedia Interface,HDMI)组件106等需要存取存储器108的组件。存储器控制器100主要的功能是控制读取存储器108的数据内容以及将数据写入到存储器108,并每隔一段时间执行自动更新以维持存储器108中的数据内容值不变。此外,在图1中,为了简洁起见,存储器控制器100中只绘示了与本发明较为相关的地址解码器110以及协议控制器120,但本领域普通技术人员应能了解到存储器控制器100也包含了其他必须的电路组件。
[0016] 在本实施例中,存储器控制器100为一SDRAM控制器,而存储器108则为一SDRAM。在许多SDRAM的相关规格书中,例如JESD79F、JESD79-2C、JESD79-3D等,均有规定在对存储器108进行写入/读取的控制上,需要遵守的操作,举例来说:(1)针对写入/读取区块的数据页/列地址(row address),若对未开启的区块执行开启指令(active),则下一个指令所需等待相对应时间如下:(1.1)若下一个指令为开启指令且不同区块,等待时间为tRRD;(1.2)若下一个指令为开启指令且相同区块,等待时间为tRC;(1.3)若下一个指令为预充电,等待时间为tRAS。(2)若对应的区块已开启了数据页,则需要确认数据页是否相同,若不同数据页则需执行预充电指令(precharge)以关闭目前的数据页,之后才可再度开启所需的数据页,而若执行行预充电指令,下一个指令皆需等待tRP的时间。(3)开启对应区块的数据页后,才可执行写入/读取指令,而下一个写入/读取指令皆需等待tCCD的时间,详细来说,若目前执行读取指令,则当下一个指令为写入指令时,等待时间为tRTW,而当下一个指令为预充电指令时其等待时间为tRTP;另一方面,若目前执行写入指令,则当下一个指令为读取指令时,等待时间为tWTR,而下一个指令为预充电指令时其等待时间为tWR。(4)由于存储器
108每隔tREFI时间内需对每列地址进行充电的动作,以维持在存储器108内容值的正确性,否则数据会有被遗失的风险,此时需执行自动更新/更新指令,且下一个指令皆需等待tRFC的时间;而执行自动更新/更新指令前,必须先执行全部预充电(Precharge all)/预充电指令。
[0017] 根据上述的操作指令中,可以发现执行不同指令时,对下一个执行的指令会有不同的时间限制(等待时间),而在这些不同的时间限制中,又可以发现某些指令彼此之间是没有关联的。此外,存储器108中会具有多个区块(bank),其中每一个区块可具有不同的数据页地址(列地址),彼此间并不互相影响。除此之外,在每次读取/写入数据时,都需确认相对应区块的数据页是否已开启。
[0018] 因此,本发明根据存取存储器108的指令及其控制特性,提出一个存取存储器108方法,使得架构设计可以管线化及平行处理多个指令操作。请参考图2,图2为依据本发明一实施例的存储器控制器100存取存储器108的流程图。参考图2,流程如下所述。
[0019] 在步骤200中,存储器控制器100接收到新的存取指令,以要求写入/读取存储器108中的一区块中的至少一数据页。接着,在步骤201中,存储器控制器100检查该数据页的状况,其中若是该区块中该数据页尚未开启,则进入步骤203以开启该数据页;若是该区块中该数据页已经开启,则进入步骤204中以在指令序列(command queue)中等待被执行;若是该区块中已经有其他数据页被开启,且先前也没有该区块的指令在等待或是正在执行,则进入步骤202中以关闭目前的数据页;以及,若是该区块中已经有其他数据页被开启,且有该区块的指令在等待或是正在执行,则进入步骤204中以在指令序列中等待。
[0020] 在步骤202中,在确认无违反指令时间限制后,执行预充电指令以关闭该区块中目前开启的数据页,接着进入步骤203。
[0021] 在步骤203中,在确认无违反指令时间限制后,执行开启指令以开启数据页,接着进入步骤204。
[0022] 在步骤204中,进入指令序列中的指令,会遵循先进先出(First in first out)的作法,当下一笔指令(Next command)在出口端等待进入步骤205以进行执行操作时,此时会进行判别是否需要重新开启对应区块的数据页。进一步来说,若是此下一个指令和目前所执行的指令所存取的数据页是位于不同的区块,流程会进入步骤207以重新开启数据页,亦即会执行预充电操作和开启指令,并等待目前指令执行结束后进入步骤205;而若是此下一个指令和目前所执行的指令所存取的数据页是位于相同的区块,则流程会等待目前指令执行结束后,再进入步骤207以重新开启数据页,亦即会执行预充电操作和开启指令,并进入步骤205。
[0023] 在步骤205中,执行目前的指令,且当目前的指令执行结束后,若步骤204中的指令序列中有指令在等待执行,则会将等待的指令进入步骤205以执行其指令。接着,进入步骤206以结束流程。
[0024] 此外,存储器108每隔一段时间需维持数据的正确性,因此,会触发步骤202以关闭全部区块或是对应的区块,之后才会执行步骤208中的更新指令。
[0025] 根据图2所示的操作流程,在硬件架构上可以轻易管线化设计,此外,可以再搭配相关所需的硬件信息,使得每步骤流程都需确认是否被允许提出存储器指令控制,并再加上优化排序后选出该被执行的指令。而关于指令的优化排序,请参考图式图3及以下相关叙述。
[0026] 图3为依据本发明一实施例的硬件架构图,其中图3中的阶段302-307是由存储器控制器100中的协议控制器120中的电路来实际执行,组件308可为一缓存器,其用来储存目前正在开启中的区块及数据页,SDRAM计时器309用来决定何时触发自动更新/更新指令,区块计时器310用来决定何时需要发出预充电指令,而更新控制器311用来根据SDRAM计时器309的计时结果来决定何时触发自动更新/更新指令。此外,组件308、309、310、311设置于存储器控制器100中。
[0027] 在图3中,首先,在步骤300中,收到新的存取指令,其中存取指令的格式可如图4所示,包含了读取/写入信息400、突发长度信息(burst length)401、地址信息402以及区块冲突信息(Bank conflict)403。
[0028] 在数据页检查阶段301中,需通过组件308中所记录的目前正在开启中的区块及数据页,以及存取指令中的地址信息402,来确认相对应区块的数据页(列地址)是否冲突。之后,根据不同的状态,进入预充电阶段302、开启阶段303以及指令序列阶段304,并在存取指令中的区块冲突信息403记录是否需要重新开启数据页(列地址)。
[0029] 在预充电阶段302、开启阶段303以及指令序列阶段304中,均需要通过SDRAM计时器309及区块计时器310来确定是否可以执行此步骤指令,以避免违反SDRAM各个指令时间限制。
[0030] 关于指令序列阶段304,在硬件设计上,是使用类似FIFO的架构的缓存器以储存指令信息。由于指令序列阶段304的储存空间有限,因此,当缓存器还有储存空间时,才能接收上面步骤所传来的指令;而若是缓存器中等待执行的指令数量已到达最大储存数量,则上游步骤中的指令则需等待被接收。
[0031] 此外,在指令序列阶段304中,在出口端的指令定义为下一笔指令313,若下一笔指令313需要重新开启数据页(列地址),则会和在指令运行阶段306中的指令比对是否位于相同区块,若不同,则会进入重开启阶段305以提前执行重新开启数据页的操作,而当开启结束后,就会将下一笔指令313从指令序列阶段304推出并进入指令运行阶段306。反之,若下一笔指令313需要重新开启的数据页与在指令运行阶段306中的指令所存取的数据页位于相同区块,则会等待指令运行阶段306的目前执行指令操作结束后,才会进行重新开启的动作,以避免影响在指令运行阶段306的正在读取/写入地址的指令。
[0032] 此外,在指令序列阶段304中,要先判断是否须要开启数据页。因为若执行自动更新/更新指令,会先执行预充电指令(precharge all/precharge)会将所有的区块或是特定的区块关闭,若先前已关闭区块的数据页,则在指令序列阶段304会再提出开启动作。之后根据组件308及区块冲突信息403以执行一次或多次连续同为读取/写入指令。当执行结束时,确认下一笔指令313是否提出流入需求,以利下次连续执行读取/写入。
[0033] 在执行选择阶段307中,会根据预充电阶段302、开启阶段303、重开启阶段305、指令运行阶段306所处理到的指令来进行执行优先权的排序,以使得存储器控制器100可处理多个读取/写入的需求,并根据不同的区块,提前判断执行相对应列地址设定的操作,以使得当需要执行读取/写入指令操作时,可以缩短等待时间。此外,在执行的优先级上,大致上依序是自动更新/更新指令、指令运行阶段306、重开启阶段305、开启阶段303以及预充电阶段302。
[0034] 举一例来说明图3所示的架构如何可以改善存储器控制器100存取存储器108效率。请参考图5及图6,其中图5为现有技术存取不同区块的数据页的时序图,而图6为依据本发明一实施例的存取不同区块的数据页的时序图。
[0035] 请先参考图5所示的时序图,假设存储器控制器100需要先读取第一区块中第0数据页的数据,之后再读取第二区块中第0数据页中的数据,且第二区块中的第1数据页正在开启中,则在现有技术的作法中,存储器控制器100会先通过指令引脚(command pins)传送开启指令501(open_b1p0)至存储器108以开启第一区块的第0数据页,之后再发送读取指令502(rd_cmd0)至存储器108以通过数据引脚(data pins)自存储器108中读取数据data0_0、data0_1、data0_2、data0_3,接着,存储器控制器100再传送关闭指令503(close_b2p1)至存储器108以关闭第二区块的第1数据页,接着,存储器控制器100传送开启指令504(open_b2p0)至存储器108以开启第二区块的第0数据页,之后再发送读取指令505(rd_cmd1)至存储器108以自存储器108中读取数据data1_0、data1_1、data1_2、data1_3。在图5所示的操作中,由于每一个指令之间会有必需的等待时间,且读取指令与开始读取数据之间也有需要的等待时间,因此,在数据的读取上会比较没有效率。
[0036] 请参考图6所示的时序图,假设存储器控制器100需要先读取第一区块中第0数据页的数据,之后再读取第二区块中第0数据页中的数据,且第二区块中的第1数据页正在开启中,则在根据本发明实施例的作法中,存储器控制器100会先通过指令引脚传送开启指令601(open_b1p0)至存储器108以开启第一区块的第0数据页,紧接着,由于关闭第二区块中第1数据页的关闭指令602与开启指令601之间不需要长的等待时间,因此,在开启指令601之后,存储器控制器100可立即传送关闭指令602(close_b2p1)至存储器108以关闭第二区块的第1数据页。接着,存储器控制器100再发送读取指令603(rd_cmd0)至存储器108以要求读取存储器108中的数据,再接着,由于开启第二区块中第0数据页的开启指令604与读取指令603之间不需要长的等待时间,因此,在读取指令603之后,存储器控制器100可立即传送开启指令604(open_b2p0)至存储器108以开启第二区块的第0数据页。接着,存储器108开始根据读取指令603以通过数据引脚回传数据data0_0、data0_1、data0_2、data0_3,而在数据data0_0、data0_1、data0_2、data0_3的回传过程中,存储器控制器100可再发送读取指令
605(rd_cmd1)至SDRAM 108以要求读取存储器108中第二区块中第0数据页中的数据,因此,在数据data0_0、data0_1、data0_2、data0_3传送完毕之后,存储器108可以立即地根据读取指令605以通过数据引脚回传数据data1_0、data1_1、data1_2、data1_3。
[0037] 与图5所示的现有技术相比,在图6的流程中,由于关闭第二区块第1数据页与开启第二区块中第0数据页的步骤被提前执行,因此,存储器108在根据读取指令603回传数据data0_0、data0_1、data0_2、data0_3之后,可以立即地根据读取指令605回传数据data1_0、data1_1、data1_2、data1_3,使存储器控制器100可以通过数据引脚不断地接收到所需的数据,增加存储器控制器100的存取效率。
[0038] 简要归纳本发明,在本发明的存储器控制器及相关的控制方法中,通过协议控制器的对于存取指令的重新排序,优化存储器的操作效能,尤其是可以提前开启其后等待存取的数据页,使得存储器控制器与存储器之间的数据传递可以尽可能的连续,以提升存储器带宽的使用率。
[0039] 以上所述仅为本发明的较佳实施例,凡根据本发明权利要求书所做的同等变化与修饰,皆应属本发明的覆盖范围。
[0040] 【符号说明】
[0041] 100                            存储器控制器
[0042] 101                            总线
[0043] 102                            中央处理器
[0044] 104                            图形处理器
[0045] 106                            高清晰度多媒体接口组件
[0046] 108                            存储器
[0047] 110                            地址解码器
[0048] 120                            协议控制器
[0049] 200-208                        步骤
[0050] 300                            收到新的存取指令
[0051] 301                            数据页检查阶段
[0052] 302                            预充电阶段
[0053] 303                            开启阶段
[0054] 304                            指令序列阶段
[0055] 305                            重开启阶段
[0056] 306                            指令运行阶段
[0057] 307                            执行选择阶段
[0058] 308                            缓存器
[0059] 309                            SDRAM计时器
[0060] 310                            区块计时器
[0061] 311                            更新控制器
[0062] 313                            下一笔指令
[0063] 400                            读取/写入信息
[0064] 401                            突发长度信息
[0065] 402                            地址信息
[0066] 403                            区块冲突信息
[0067] 501、504、601、604              开启指令
[0068] 502、505、603、605              读取指令
[0069] 503、602                        关闭指令。