CN103927268B - 一种存储器的访问方法及装置 - Google Patents

一种存储器的访问方法及装置 Download PDF

Info

Publication number
CN103927268B
CN103927268B CN201410138487.XA CN201410138487A CN103927268B CN 103927268 B CN103927268 B CN 103927268B CN 201410138487 A CN201410138487 A CN 201410138487A CN 103927268 B CN103927268 B CN 103927268B
Authority
CN
China
Prior art keywords
order
visit
subcommand
visit order
interval
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410138487.XA
Other languages
English (en)
Other versions
CN103927268A (zh
Inventor
陈岚
王力玉
郝晓冉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Microelectronics of CAS
Original Assignee
Institute of Microelectronics of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Microelectronics of CAS filed Critical Institute of Microelectronics of CAS
Priority to CN201410138487.XA priority Critical patent/CN103927268B/zh
Publication of CN103927268A publication Critical patent/CN103927268A/zh
Application granted granted Critical
Publication of CN103927268B publication Critical patent/CN103927268B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Small-Scale Networks (AREA)

Abstract

本发明公开了一种存储器的访问方法和装置,所述方法包括:对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间;遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址;按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令。

Description

一种存储器的访问方法及装置
技术领域
本发明涉及存储器技术领域,尤其涉及一种存储器的访问方法及装置。
背景技术
随着人们对移动智能终端(如智能手机、平板电脑等)应用需求的不断提升,如何在保证移动终端体积小、外观灵巧等特性的前提下,降低终端功耗、提高终端性能,已经成为该领域的研究重点。近年来处理器技术不断发展,使得处理器速度明显提高,然而存储设备性能却提升较慢,导致终端性能的增长越来越受到存储设备性能的限制。LPDDR2SDRAM(LowPowerDoubleDataRate2 SDRAMSynchronousDynamicRandomAccessMemory,第二代低功耗双倍速率同步动态随机存储器)因具备低功耗、高性能等优点,已成为智能终端中应用最为广泛的存储芯片,但是,LPDDR2 SDRAM的访问速度与处理器速度相比仍然较慢,为了更好地提高智能终端的性能,需要进一步提高LPDDR2 SDRAM的访问效率。
参见图1所示的SDRAM结构示意图,SDRAM内存芯片具有多个存储阵列bank,各个bank之间互相独立,允许并行访问,每个存储单元在bank中对应一个行地址row和一个列地址column,每个bank对应一个用于存储行数据的缓冲器。每个访问存储器的访存命令可以被分解成三个子命令:分别为预充电子命令(precharge)、激活子命令(activate)和列存取子命令(columnaccess),只有这些子命令才能被SDRAM识别,其中,所述预充电子命令用于关闭所要访问的bank中先前打开的行以将先前打开行中的数据从缓冲器中清除,所述激活子命令用于激活所要访存的bank和该bank中的行以将该行数据缓存在缓冲器中,所述列存取子命令用于从缓冲器中的某一列读取数据或向缓冲器中的某一列写入数据。
为了提高访问存储器的效率,可利用控制器对SDRAM的访问操作进行调度,现有方法如下:
方式一:每次执行访问命令后,保持打开被访问bank的行,若当前访问命令用于访问当前打开的行,则只执行列存取子命令,若当前访问命令用于访问新的一行,则依次执行预充电子命令、激活子命令和列存取子命令。
方式二:对于每个访问命令,均执行一遍预充电子命令、激活子命令和列存取子命令。
方式三:结合上述两种方式,根据应用行为进行分类,对存储密集型(访存命令较多)且空间局部性高(较多访问同一行连续地址的操作)的应用采用第一种方式,对存储非密集型(访存命令较稀少)的和空间局部性较低(访存行较分散的)的应用采用第二种方式。
对于上述三种方式,分别存在以下缺陷:
对于存储非密集型的应用,若采用第一种方式,需要长时间打开当前行,将造成一定的功耗,对存储密集型且空间局部性较低的应用,若采用第一种方式,需要判断所要访问的行与当前打开行是否相同、且需要不断打开、关闭当前行,同样会造成一定的功耗;对于空间局部性高的应用,当访问连续行地址时,若采用第二种方式,如果每次都重新关闭、打开当前行,不但会造成一定的功耗,还会较大的降低访问效率;若采用第三种方式,需要在运行过程中识别应用的行为,然后把应用分类,再分别采取不同的行操作方式,这种方法步骤较复杂。
发明内容
有鉴于此,本发明实施例的主要目的在于提供一种存储器的访问方法及装置,以实现提高存储器的访问效率、节省功耗的目的。
为实现上述目的,本发明提供了一种存储器的访问方法,所述存储器包括至少两个存储阵列,每个存储阵列对应分配一个缓冲区,所述缓冲区中存储了用于访问对应存储阵列的访问命令,所述访问命令按照接收顺序依次存储于对应缓冲区中、且存储顺序与对应缓冲区中缓冲单元的排列顺序相同,所述缓冲区被划分为至少一个缓冲区间,所述方法包括:
对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间,其中,选取缓冲区间中存储有未执行的访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所述访问命令中携带了所要访问的存储阵列的行地址;
遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址;
按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令。
优先地,所述遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,包括:
按照所述选取缓冲区间中缓冲单元的排列顺序,从所述选取缓冲区间中获取第一个未执行的携带了第一行地址的第一访问命令,所述第一访问命令存储于所述选取缓冲区间中的第一缓冲单元中;
从所述第一缓冲单元后的所有缓冲单元中,依次获取携带所述第一行地址的未执行访问命令,以获取由携带所述第一行地址的所有访问命令组成的第一命令组;
判断所述选取缓冲区间中是否仍存在未执行的访问命令,如果是,则执行按照所述选取缓冲区间中缓冲单元的排列顺序从所述选取缓冲区间中获取第一个未执行的携带了第二行地址的第二访问命令的步骤,以获取由携带所述第二行地址的所有访问命令组成的第二命令组,如果否,则继续执行所述对于每个存储有未执行访问命令的缓冲区从中选取一个缓冲区间的步骤。
优先地,所述按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,包括:
获取每个缓冲区中未执行访问命令的数目,并将所述获取的数目递减排序,按照排序结果确定各个待执行命令组之间的优先级顺序;
向所述存储器发送第一命令的预充电子命令,所述第一命令为第一优先级的待执行命令组中的第一个未执行访问命令;
在所述第一命令的预充电子命令与所述第一命令的激活子命令之间的第一发送间隔时间内,向所述存储器发送第二命令的预充电子命令,所述第二命令为第二优先级的待执行命令组中的访问命令;
在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时到达所述第一发送间隔时间,则向所述存储器发送所述第一命令的激活子命令,在所述第一命令的激活子命令与所述第一命令的列存取子命令之间的第三发送间隔时间内,执行第三命令的待执行子命令,所述第三命令为在所述第一优先级待执行命令组后的所有待执行命令组中满足时序要求且优先级最高的待执行命令组,所述满足时序要求为计时到达所述待执行子命令与所述待执行子命令之前子命令之间的发送时间间隔;
在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时未到达所述第一发送间隔时间,则向所述存储器发送第四命令的预充电子命令,所述第四命令为第三优先级的待执行命令组中的访问命令;
其中,所述第一优先级、所述第二优先级和所述第三优先级的优先级别依次递减;
按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令;或者,按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令,其中,每个待执行命令组中的各个列存取子命令依次执行、且每两个列存取子命令之间满足发送间隔时间。
优先地,在所述对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间前,所述方法还包括:
从协议总线接收访问命令;
若所述访问命令用于向所述存储器写入数据,则为所述访问命令和所要写入的数据分别配置第一标识,并将配置后的访问命令发送至对应的缓冲区中且将配置后的数据发送至数据传输模块;在向所述存储器发送所述访问命令的列存取子命令时,向所述数据传输模块发送所述第一标识,以使所述数据传输模块根据所述第一标识准备所述所要写入的数据,将准备好的数据发送至所述存储器;
若所述访问命令用于读取所述存储器中的数据,则为所述访问命令配置第二标识,并将配置后的访问命令发送至对应的缓冲区中;在向所述存储器发送所述访问命令的列存取子命令后,利用所述数据传输模块接收所述存储器返回的数据并为所述返回的数据配置所述第二标识;根据所述第二标识将所述返回的数据按照所述访问命令的接收顺序发送至所述协议总线。
优先地,所述将配置后的访问命令发送至对应的缓冲区中,包括:
对所述访问命令进行译码,以提取所述访问命令中的存储阵列地址,并根据所述存储阵列地址,将所述访问命令存储于对应分配的缓冲区中。
优先地,每个缓冲区对应分配一个第一寄存器,所述第一寄存器的每个存储单元用于分别存储对应缓冲区中每个访问命令的执行状态,所述方法包括:
当将所述访问命令存储在对应缓冲区中时,在所述缓冲区对应的第一寄存器中将所述访问命令标识为未执行状态;
当所述访问命令的所有子命令被发送至所述存储器后,在所述缓冲区对应的第一寄存器中将所述访问命令标识为已执行状态。
优先地,每个缓冲区对应分配一个第二寄存器;对于从所述选取缓冲区间中获取的每个访问命令,按照下述方法分解获取的访问命令:
将获取访问命令携带的行地址与对应第二寄存器中存储的行地址进行比较,所述对应第二寄存器中存储的行地址为上次获取的访问命令的行地址;
如果比较结果不同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为预充电子命令、激活子命令和列存取子命令;
如果比较结果相同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为列存取子命令。
本发明实施例还提供了一种存储器的访问装置,所述存储器包括至少两个存储阵列,每个存储阵列对应分配一个缓冲区,所述缓冲区中存储了用于访问对应存储阵列的访问命令,所述访问命令按照接收顺序依次存储于对应缓冲区中、且存储顺序与对应缓冲区中缓冲单元的排列顺序相同,所述缓冲区被划分为至少一个缓冲区间,所述装置包括:
缓冲区选取模块,用于对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间,其中,选取缓冲区间中存储有未执行的访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所述访问命令中携带了所要访问的存储阵列的行地址;
命令组获取模块,用于遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址;
子命令调度模块,用于按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令。
优先地,所述命令组获取模块,包括:
第一获取子模块,用于按照所述选取缓冲区间中缓冲单元的排列顺序,从所述选取缓冲区间中获取第一个未执行的携带了第一行地址的第一访问命令,所述第一访问命令存储于所述选取缓冲区间中的第一缓冲单元中;
第二获取子模块,用于从所述第一缓冲单元后的所有缓冲单元中,依次获取携带所述第一行地址的未执行访问命令,以获取由携带所述第一行地址的所有访问命令组成的第一命令组;
判断子模块,用于判断所述选取缓冲区间中是否仍存在未执行的访问命令;
继续获取模块,用于当所述判断子模块判断得到的所述选取缓冲区间中仍存在未执行的访问命令时,执行按照所述选取缓冲区间中缓冲单元的排列顺序从所述选取缓冲区间中获取第一个未执行的携带了第二行地址的第二访问命令的步骤,以获取由携带所述第二行地址的所有访问命令组成的第二命令组,如果否,则继续利用所述缓冲区选取模块执行所述对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间的步骤。
优先地,所述子命令调度模块,包括:
排序子模块,用于获取每个缓冲区中未执行访问命令的数目,并将所述获取的数目递减排序,按照排序结果确定各个待执行命令组之间的优先级顺序;
第一发送子模块,用于向所述存储器发送第一命令的预充电子命令,所述第一命令为第一优先级的待执行命令组中的第一个未执行访问命令;
第二发送子模块,用于在所述第一命令的预充电子命令与所述第一命令的激活子命令之间的第一发送间隔时间内,向所述存储器发送第二命令的预充电子命令,所述第二命令为第二优先级的待执行命令组中的访问命令;
第三发送子模块,用于在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时到达所述第一发送间隔时间,则向所述存储器发送所述第一命令的激活子命令,在所述第一命令的激活子命令与所述第一命令的列存取子命令之间的第三发送间隔时间内,执行第三命令的待执行子命令,所述第三命令为在所述第一优先级待执行命令组后的所有待执行命令组中满足时序要求且优先级最高的待执行命令组,所述满足时序要求为计时到达所述待执行子命令与所述待执行子命令之前子命令之间的发送时间间隔;
第四发送子模块,用于在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时未到达所述第一发送间隔时间,则向所述存储器发送第四命令的预充电子命令,所述第四命令为第三优先级的待执行命令组中的访问命令;
其中,所述第一优先级、所述第二优先级和所述第三优先级的优先级别依次递减;
继续发送子模块,用于按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令;或者,按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令,其中,每个待执行命令组中的各个列存取子命令依次执行、且每两个列存取子命令之间满足发送间隔时间。
优先地,所述装置还包括:
命令接收模块,用于在所述缓冲区选取模块对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间前,从协议总线接收访问命令;
第一发送模块,用于若所述命令接收模块接收的访问命令用于向所述存储器写入数据,则为所述访问命令和所要写入的数据分别配置第一标识,并将配置后的访问命令发送至对应的缓冲区中且将配置后的数据发送至数据传输模块;
数据发送模块,用于在所述子命令调度模块向所述存储器发送所述命令接收模块接收的访问命令的列存取子命令时,向所述数据传输模块发送所述第一标识;
所述数据传输模块,用于根据所述数据发送模块发送的第一标识准备所述所要写入的数据,将准备好的数据发送至所述存储器;
第二发送模块,用于若所述子命令接收模块接收的访问命令用于读取所述存储器中的数据,则为所述访问命令配置第二标识,并将配置后的访问命令发送至对应的缓冲区中;
所述数据传输模块,用于在所述子命令调度模块向所述存储器发送所述命令接收模块接收的访问命令的列存取子命令后,接收所述存储器返回的数据并为所述返回的数据配置所述第二标识,根据所述第二标识将所述返回的数据按照所述访问命令的接收顺序发送至所述协议总线。
优先地,所述第一发送模块或所述第二发送模块,包括:
译码子模块,用于对所述配置后的访问命令进行译码,以提取所述访问命令中的存储阵列地址;
发送子模块,用于根据所述存储阵列地址,将所述访问命令存储于对应分配的缓冲区中。
优先地,每个缓冲区对应分配一个第一寄存器,所述第一寄存器的每个存储单元用于分别存储对应缓冲区中每个访问命令的执行状态,所述装置包括:
第一状态标记模块,用于当所述发送子模块将所述访问命令存储在对应缓冲区中时,在所述缓冲区对应的第一寄存器中将所述访问命令标识为未执行状态;
第二状态标记模块,用于当所述访问命令的所有子命令被发送至所述存储器后,在所述缓冲区对应的第一寄存器中将所述访问命令标识为已执行状态。
优先地,每个缓冲区对应分配一个第二寄存器;所述装置还包括:命令分解模块,用于对于从所述选取缓冲区间中获取的每个访问命令,按照下述方法分解获取的访问命令:
将获取访问命令携带的行地址与对应第二寄存器中存储的行地址进行比较,所述对应第二寄存器中存储的行地址为上次获取的访问命令的行地址;
如果比较结果不同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为预充电子命令、激活子命令和列存取子命令;
如果比较结果相同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为列存取子命令。
本发明实施例提供的存储器的访问方法及装置,为每个存储阵列对应分配一个缓冲区,将访问同一存储阵列的所有访问命令存储在同一缓冲区内,并把每个缓冲区划分为多个缓冲区间,对于每个缓冲区间,使其存储的具有相同行号的访问命令按顺序执行,在此期间便不必频繁关闭、打开存储阵列的当前行,这样不但可以兼顾连续访问同一行的情况,也可以在出现多行访问时先执行同一行的访问操作,从而不但提高了存储器的访问效率,而且节省了功耗。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中SDRAM结构示意图;
图2为本发明实施例存储器的控制架构示意图;
图3为本发明实施例存储器的访问方法的流程示意图;
图4为本发明实施例缓冲区划分示意图之一;
图5为本发明实施例缓冲区划分示意图之二;
图6为本发明实施例访问命令并行执行示意图;
图7为本发明实施存储器的访问装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中,被访问的存储器可以是LPDDR2 SDRAM,也可以是其它类型的存储器,在此不做限制。其中,所述存储器包括至少两个存储阵列,每个存储阵列对应分配一个缓冲区,所述缓冲区中存储了用于访问对应存储阵列的访问命令,所述访问命令按照接收顺序依次存储于对应缓冲区中、且存储顺序与对应缓冲区中缓冲单元的排列顺序相同,所述缓冲区被划分为至少一个缓冲区间。
为方便理解上述内容,参见图2所示的存储器的控制架构示意图,假设图中存储器包括8个存储阵列Bank0、Bank1……Bank7,每个存储器对应分配一个控制器,即Bank0控制器、Bank1控制器……Bank7控制器,控制器间相互独立,且每个控制器包括行调度模块、命令分解模块和子命令传输模块。每个行调度模块中有一个的缓冲区,其中,行调度模块0中的缓冲区0用于存储Bank0的访问命令,行调度模块1中的缓冲区1用于存储Bank1的访问命令……行调度模块7中的缓冲区7用于存储Bank7的访问命令。另外,每个缓冲区包含相同数量的缓冲单元(例如,缓冲单元个数为64),其中,缓冲区0的存储规律为:Bank0的第1个访问命令被存储在缓冲区0的第1个缓冲单元中,Bank0的第2个访问命令被存储在缓冲区0的第2个缓冲单元中,依次类推,当Bank0的第64个访问命令被存储在缓冲区0的第64个缓存单元中时,此时将产生满标志以暂停访问命令进入缓冲区0,只有当缓冲区0中64个访问命令全部执行完毕后,再将Bank0的第65个访问命令存储在缓冲区0的第0个缓冲单元中,其它缓冲区的缓冲规律同缓冲区0一样,在此不再赘述。
参见图3,为本发明实施例提供的存储器的访问方法的流程示意图,该方法包括:
步骤301:对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间,其中,选取缓冲区间中存储有未执行的访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所述访问命令中携带了所要访问的存储阵列的行地址。
在本发明实施例中,每个缓冲区对应分配一个第一寄存器,所述第一寄存器的每个存储单元用于分别存储对应缓冲区中每个访问命令的执行状态;当将所述访问命令存储在对应缓冲区中时,在所述缓冲区对应的第一寄存器中将所述访问命令标识为未执行状态;当所述访问命令的所有子命令被发送至所述存储器后,在所述缓冲区对应的第一寄存器中将所述访问命令标识为已执行状态。具体实现时,可以为每个缓冲区的每个缓冲单元增加一个标志位,具体地,若每个缓冲区的缓冲单元个数为64,则可以为每个缓冲区建立一个64位的寄存器,一一对应存储每个缓冲单元的标志位,标志位为1表示未执行,标志位为0表示已执行,没有使用的缓冲单元的标志位默认为0。
本发明实施例可以利用图2所示的行调度模块实现步骤301,为便于说明步骤301,参见图4所示的缓冲区划分示意图之一。按照访问命令的接收顺序,各个访问命令从左到右依次存储于该缓冲区中,1代表未执行的访问命令,0代表没有使用的缓冲单元。假设该缓冲区包括64个缓冲单元且被划分为8个缓冲区间,每个缓冲区间包括8个缓冲单元(需要说明的是,本发明实施例可以改变缓冲区的缓冲单元数,也可以改变划分的缓冲区间的缓冲单元数),则第1个缓冲区间为存储有未执行访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所以将第1个缓冲区间作为最先选取的缓冲区间,待第1个缓冲区间内的所有访问命令被执行后,再选取第2个缓冲区间,依次类推。
步骤302:遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址。
在步骤302中,主要是利用图2中的行调度模块从所述选取缓冲区间中选取用于访问同一Bank同一行的所有访问命令,以便依次执行这些访问命令。为便于说明步骤302,现举例说明,参见图4,对于最先选取的第1个缓冲区间,首先从该缓冲区间中选取第1个未执行的访问命令即第1个缓冲单元中的访问命令,并确定该访问命令携带的行地址,然后,依次遍历剩下的7个缓冲单元中访问命令携带的行地址,假设第3、5、7个缓冲单元中的访问命令携带的行地址与第1个缓冲单元中的访问命令携带的行地址相同,则将第1、3、5、7个缓冲单元中的访问命令作为一个命令组;对于每个存储有未执行访问命令的缓冲区,均按照上述方式获取命令组以作为第一个待执行命令组,待这些待执行命令组按照步骤303全部被执行后,这些访问命令的标志位均被置为0(参见图5所示的缓冲区划分示意图之二)。继续从第1个缓冲区间中选取携带另一相同行地址的命令组,参见图5,首先从该缓冲区间中选取第1个未执行的访问命令即为第2个缓冲单元中的访问命令,并确定该访问命令携带的行地址,依次遍历剩下的3个缓冲单元中访问命令携带的行地址,假设第4、6、8个缓冲单元中的访问命令携带的行地址与第2个缓冲单元中的访问命令携带的行地址相同,则将第2、4、6、8个缓冲单元中的访问命令作为一个命令组;对于每个存储有未执行访问命令的缓冲区,均按照上述方式获取命令组以作为第二个待执行命令组,待这些待执行命令组按照步骤303全部被执行后,这些访问命令的标志位均被置为0。待第1个缓存区间对应的标志位全部置0后,再将第2个缓存区间作为选取缓存区间,同样执行以上步骤,在此不再赘述。
可见,基于上述举例,本发明实施例可按照下述方式实现步骤302:
按照所述选取缓冲区间中缓冲单元的排列顺序,从所述选取缓冲区间中获取第一个未执行的携带了第一行地址的第一访问命令,所述第一访问命令存储于所述选取缓冲区间中的第一缓冲单元中;
从所述第一缓冲单元后的所有缓冲单元中,依次获取携带所述第一行地址的未执行访问命令,以获取由携带所述第一行地址的所有访问命令组成的第一命令组;
判断所述选取缓冲区间中是否仍存在未执行的访问命令,如果是,则执行按照所述选取缓冲区间中缓冲单元的排列顺序从所述选取缓冲区间中获取第一个未执行的携带了第二行地址的第二访问命令的步骤,以获取由携带所述第二行地址的所有访问命令组成的第二命令组,如果否,则继续执行步骤301。
步骤303:按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令。
在图2中,行调度模块从自身缓冲区中每获取一个访问命令,便将其送入命令分解模块分解成存储器能够识别的子命令,然后将分解后的子命令送入子命令传输模块进行排队,以等待仲裁器授权后才能执行排队在最前的子命令。
其中,每个命令分解模块主要按照下述方式分解子命令:
本发明实施例为每个行调度模块中的缓冲区对应分配一个第二寄存器,该第二寄存器设置在命令分解模块中,所述第二寄存器用来存放上次从行调度模块传入的访问命令的行地址。命令分解模块将当前传入的访问命令与寄存器中保存的行地址进行比较,根据比较结果决定如何分解当前获取的访问命令,并用当前访问命令的行地址更新第二寄存器中的行地址。其中,如果行地址的比较结果不同,说明当前访问命令想要访问的行为上次打开行以外的行,则命令分解模块将当前传入的访问命令分解成子命令预充电子命令(Precharge,简称P)、激活子命令(Activate,简称A)和列存取子命令(Columnaccess,简称C),并按照存储器SDRAM能识别的命令格式准备好每个子命令;如果行地址的比较结果相同,说明当前访问命令想要访问的行即为上次打开的行,则命令分解模块将当前传入的访问命令分解成列存取子命令(columnaccess,简称C),并按照存储器SDRAM能识别的命令格式准备好每个子命令。其中,列存取子命令C表示读操作或写操作。可见,本发明实施例可按照下述方法分解访问命令:
对于从所述选取缓冲区间中获取的每个访问命令,将获取访问命令携带的行地址与对应第二寄存器中存储的行地址进行比较,所述对应第二寄存器中存储的行地址为上次获取的访问命令的行地址;如果比较结果不同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为预充电子命令、激活子命令和列存取子命令;如果比较结果相同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为列存取子命令。
在图2中,可利用仲裁器来仲裁各个子命令传输模块间的优先级,并根据仲裁结果调度各个子命令传输模块间的子命令传输顺序,下面分别介绍所述子命令传输模块与所述仲裁器的功能。
子命令传输模块的功能如下:
子命令传输模块通过FIFO(FirstInputFirstOutput,先入先出队列)结构缓存命令分解模块传入的子命令,只有当仲裁器给予该子命令传输模块优先权(对应priority=1)且该子命令传输模块满足时序要求后才可输出缓存的子命令。其中,所述时序要求包括:从P到A需要时间间隔tRPpb,从A到具体读写操作C需要时间间隔tRCD,从读操作C到读操作C或者写操作C到写操作C需要时间间隔tCCD,从读操作C到写操作C需要时间间隔tRTW,从写操作C到读操作C需要时间间隔tWTR,从读操作C到P需要时间间隔tRTP,从写操作C到P需要时间间隔tWR。子命令传输模块在计时所述时间间隔的过程中,可通过设置timing_counter!=0来表示下一个子命令还没满足时序要求,并产生时序没准备好的信号timing_ready=0给仲裁器,以告知仲裁器该子命令传输模块还不能输出下一个子命令,此时,仲裁器可以将优先权转移给其它子命令传输模块中满足要求的子命令传输模块(即为:所有满足时序要求的子命令传输模块中优先级最高的子命令传输模块)以输出其子命令,这样就可以让不同bank同时工作,以最大化总线利用率。
所述仲裁器的功能如下:
仲裁器的工作除了分别给初始化操作、刷新操作、读写操作判别优先权外,主要工作是在不同的bank控制器间动态分配优先权。具体地,比较各个行调度模块中未执行的访问命令数num,num数最多的bank控制器的优先级最高,依次类推,num数最少的bank控制器的优先级最低,可以用一个寄存器来保存bank控制器间的优先级,需要说明的是,本发明实施例是在每执行完当前各个待执行命令组后,便进行一次num数比较以重新分配优先权,从而适应各个行调度模块中不断变化的命令数。具体实现时,首先选择num数最多的bank控制器,在其子命令传输模块满足时序要求后产生时序准备好的信号timing_ready=1给仲裁器,仲裁器给予该bank控制器优先权(priority=1),传输其子命令传输模块中排队在前的子命令,并在下次其时序满足要求(timing_ready=1)时返回给予其优先权。当该bank控制器传输完该子命令后进入时序计时过程,即设置timing_counter!=0,此时产生没准备好的信号timing_ready=0给仲裁器,仲裁器就可以将优先权转移给满足时序要求(即产生了时序准备好的信号timing_ready=1)的所有bank控制器中num最多的bank控制器,控制其子命令传输模块传输子命令。
为了更方便的理解仲裁器所实现的功能,下面举例说明:
参见图2,假设行调度模块0的缓冲区0、行调度模块1的缓冲区1和行调度模块2的缓冲区2中存储有未执行访问命令,其它行调度模块的缓冲区中没有未执行访问命令,统计这三个缓冲区中未执行的命令数num,统计结果为:缓冲区0中num数最大,缓冲区1中num数次大,缓冲区2中num数最小,因此,从缓冲区0中获取的当前待执行命令组group0的优先级为第一优先级、从缓冲区1中获取的当前待执行命令组group1的优先级为第二优先级,从缓冲区2中获取的当前待执行命令组group2的优先级为第三优先级。假设group0中的访问命令数为3,group1中的访问命令数为2,group2中的访问命令为2,则每个待执行命令组的第一个访问命令被分解成了P、A和C,剩下的访问命令被分解成了C,如图6所示访问命令并行执行示意图。
仲裁器具体按照以下方式仲裁子命令间的执行顺序:
首先执行group0的P操作,在group0的操作P和A之间需要满足一定的时序间隔,在这个时序间隔内就可以执行bank1的P操作,在group1的操作P和A之间也需要满足一定的时序间隔,在这个时序间隔内,如果group0满足了规定的时序要求就把优先权返回给bank0执行A操作,如果没满足就再转移优先权给group2执行P操作,依次类推,其中,在执行到每个组的C操作时,可以在每组两个C的间隔时间内执行其它组的子命令,也可以连续执行每组的C操作直到全部执行完再执行下一bank的C操作。按照此方式,图6中的执行顺序有两种方式,分别为:
方式一:执行顺序依次为:group0的P、group1的P、group2的P、group0的A、group1的A、group2的A、group0的第一个C、group1的第一个C、group2的第一个C、group0的第二个C、group1的第二个C、group2的第二个C、group0的第三个C,参见图6中上面的图。
方式二:执行顺序依次为:group0的P、group1的P、group2的P、group0的A、group1的A、group2的A、group0的第一个C、group0的第二个C、group0的第三个C、group1的第一个C、group1的第二个C、group2的第一个C、group2的第二个C,参见图6中下面的图。
将从读操作C到写操作C需要的时间间隔tRTW或从写操作C到读操作C需要的时间间隔tWTR,与从读操作C到读操作C或者写操作C到写操作C需要的时间间隔tCCD相比可知,tRTW大于tCCD,tWTR大于tCCD。因此,当同一组的相邻两个C分别指代读操作和写操作时,由于访问同行的C操作间隔较长,因此可转移优先权,即可以在每组两个C的间隔时间内执行其它组的子命令;当同一组的相邻两个C分别指代读操作和读操作(或写操作和写操作)时,由于访问同行的C操作间隔较短,因此可不转移优先权,即可以连续执行每组的C操作直到全部执行完再执行下一bank的C操作。
基于上述内容,本发明实施例可利用仲裁器实现步骤303,具体实现方式如下:
获取每个缓冲区中未执行访问命令的数目,并将所述获取的数目递减排序,按照排序结果确定各个待执行命令组之间的优先级顺序;即,访问命令数目最多的缓冲区中的待执行命令组的优先级最高,访问命令数目最少的缓冲区中的待执行命令组的优先级最低,按照优先级别递减命名为:第一优先级、第二优先级、第三优先级……。
向所述存储器发送第一命令的预充电子命令,所述第一命令为第一优先级的待执行命令组中的第一个未执行访问命令;
在所述第一命令的预充电子命令与所述第一命令的激活子命令之间的第一发送间隔时间内,向所述存储器发送第二命令的预充电子命令,所述第二命令为第二优先级的待执行命令组中的访问命令;
在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时到达所述第一发送间隔时间,则向所述存储器发送所述第一命令的激活子命令,在所述第一命令的激活子命令与所述第一命令的列存取子命令之间的第三发送间隔时间内,执行第三命令的待执行子命令,所述第三命令为在所述第一优先级待执行命令组后的所有待执行命令组中满足时序要求且优先级最高的待执行命令组,所述满足时序要求为计时到达所述待执行子命令与所述待执行子命令之前子命令之间的发送时间间隔;需要说明的是,由于每个待执行命令组中的各个子命令的发送顺序已经确定,因此,所述待执行子命令为对应待执行命令组中下一个需要被执行的子命令。
在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时未到达所述第一发送间隔时间,则向所述存储器发送第四命令的预充电子命令,所述第四命令为第三优先级的待执行命令组中的访问命令;
其中,所述第一优先级、所述第二优先级和所述第三优先级的优先级别依次递减;
按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令;或者,按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令,其中,每个待执行命令组中的各个列存取子命令依次执行、且每两个列存取子命令之间满足发送间隔时间。
在图2中,AXI(Advanced eXtensible Interface,高级可扩展接口)接口模块负责接收AXI协议总线的信号(包括访问命令和写数据,所述访问命令包括读访问命令和写访问命令,所述写数据为需要写入存储器的数据),AXI接口模块由两个FIFO组成,这两个FIFO分别缓冲访问命令和写数据。其中,AXI协议的特征是:地址/控制和数据通道是分离的、支持突发交易、支持乱序交易等,AXI协议给通过AXI总线发送的交易分配一个ID标签,协议要求具有相同ID的交易按顺序完成,而对具有不同ID的交易没有顺序限制,利用这一特性存储器就可以乱序返回读数据。因此,为了使具有相同ID标签交易的各个读数据按照读访问命令的接收顺序依次输出,AXI接口模块还为接收的每个读访问命令配置唯一的ID,并将配置ID号的读访问命令送入控制器,此外,AXI接口模块还为接收的每个写访问命令和写数据配置相同的唯一ID,并将配置ID号的写访问命令送入控制器且将配置ID号的写数据送入数据传输模块。其中,所述数据传输模块包括写数据通道RAM和读数据通道FIFO,因为仲裁器对访问命令的调度导致写数据乱序,所以用写数据通道RAM来缓存写数据,根据写数据ID和写访问命令ID相同这一特性,从写数据通道RAM中查找写访问命令对应的写数据。在本发明实施例中,数据传输模块具体按照下述方式读写数据:
仲裁器向存储器发送写访问命令时会生成写请求准备信号给数据传输模块以告知它准备数据,并且把写访问命令所带的ID号也发送给数据传输模块。由于写访问命令和写数据的ID号相同,写数据存入RAM时直接用ID号作为各写数据在RAM中的地址,根据仲裁器发送的写访问命令的ID号来查询该ID号对应RAM地址,就可直接取出写数据。其中,写数据通过物理层(PHY)接口写入存储器中,写数据的采样信号dqs由物理层(PHY)接口产生,dqs边沿对齐写数据中央采样。
仲裁器向存储器发送读访问命令时,向数据传输模块发送读请求准备信号和读访问命令的ID号。存储器接收到读访问命令的RL个时钟周期后才会输出数据,所述读请求准备信号用于使读输出通道FIFO计时RL个时钟周期后产生读使能信号,以在产生所述读使能信号后,在读输出通道FIFO入口处接收从SDRAM读出来的数据,然后把读访问命令的ID号附加在读出数据上并通过AXI接口模块传送出去。由于AXI总线支持乱序交易,而每个交易的ID号是唯一的且每个交易的每个读数据ID也是唯一的,即便读访问命令被乱序调度了,只要读出数据和读访问命令对应相同的ID号,就不需要对每个交易的各个读数据进行重排序,只需要根据读数据的ID号按照读访问命令的接收顺序依次返回总线即可。
进一步地,基于上述内容可知,在步骤301之间,本发明实施例还包括:
AXI接口模块从协议总线接收访问命令;
若所述访问命令用于向所述存储器写入数据,则AXI接口模块为所述访问命令和所要写入的数据分别配置第一标识,并将配置后的访问命令发送至对应的缓冲区中且将配置后的数据发送至数据传输模块;在仲裁器向所述存储器发送所述访问命令的列存取子命令时,向所述数据传输模块发送所述第一标识,以使所述数据传输模块根据所述第一标识准备所述所要写入的数据,将准备好的数据发送至所述存储器;
若所述访问命令用于读取所述存储器中的数据,则AXI接口模块为所述访问命令配置第二标识,并将配置后的访问命令发送至对应的缓冲区中;在仲裁器向所述存储器发送所述访问命令的列存取子命令后,利用所述数据传输模块接收所述存储器返回的数据并为所述返回的数据配置所述第二标识;根据所述第二标识将所述返回的数据按照所述访问命令的接收顺序发送至所述协议总线。
需要说明的是,参见图2,AXI接口模块主要通过存储阵列译码模块将访问命令发送至对应的缓冲区中的。存储阵列译码模块负责译码、提取AXI接口模块传送的访问命令中的bank地址,按照bank地址把各个命令分类到各行调度模块的缓冲区中。具体地,存储阵列译码模块在接收到访问命令后,对所述访问命令进行译码,以提取所述访问命令中的存储阵列地址,并根据所述存储阵列地址,将所述访问命令存储于对应分配的缓冲区中。
本发明实施例提供的存储器的访问方法,为每个存储阵列对应分配一个缓冲区,将访问同一存储阵列的所有访问命令存储在同一缓冲区内,并把每个缓冲区划分为多个缓冲区间,对于每个缓冲区间,使其存储的具有相同行号的访问命令按顺序执行,在此期间便不必频繁关闭、打开存储阵列的当前行,这样不但可以兼顾连续访问同一行的情况,也可以在出现交叉行访问时先执行同一行的访问操作,从而不但提高了存储器的访问效率,而且节省了功耗。
另外,图2中还包括初始化模块、刷新模块和休眠模块,这三个模块的功能分别是:
1、初始化(Initial)模块
初始化模块主要完成对SDRAM中模式寄存器的初始化参数设置,包括突发长度(burst length)、突发类型(bursttype)、读延迟时间(RL)、写延迟时间(WL)等。并控制SDRAM完成上电初始化动作,比如时钟使能信号CKE置高等待、复位(MRWReset)、ZQ校验等。初始化完成后,通过标志位init_done置高说明SDRAM初始化完成,控制器就可以进行正常的读写操作了。
2、刷新(Refresh)模块
由于LPDDR2 SDRAM的存储单元由一个晶体管连接一个电容组成,电容存放数据信息,但电容会慢慢漏电,导致数据丢失,所以SDRAM必须不断刷新。刷新操作分为自刷新和自动刷新,自动刷新又分为针对每个bank的和所有bank的。根据内存芯片的规格,例如每隔3.9us刷新所有bank一遍。刷新操作不能打断当前正在进行的读写操作,需等待当前的读写操作完成后再执行刷新操作,所以设置刷新周期时要留有一点余量,否则数据可能因为没及时刷新而丢失。本发明采用自动刷新模式,便于控制,计时结束就自动刷新所有bank。在收到刷新请求且没有读写操作正在进行时,控制器将阻止其他命令的执行,并发出预充电所有bank的命令,以保证所有bank都处于空闲(Idle)状态,经过tRPAB时间后发出刷新(Refresh)命令,刷新操作经过tRFCAB时间后刷新结束,所有bank进入Idle状态,等待接收正常命令。
3、休眠(Power Down)模块
当CKE信号置低时进入休眠模式,当CKE信号置高时退出休眠模式,比如当初始化操作结束或完成请求后,在30个周期内如果没有出现SDRAM内存请求,该休眠模块控制SDRAM进入休眠模式,在接收到访存命令后,该模块再使SDRAM退出休眠模式,进入正常读写模式,这样便可利用休眠模块实现低功耗管理。
4、物理层(PHY)接口模块
PHY(physicallayer,物理层)接口主要负责时钟的产生;为写数据产生中间对齐的采样信号dqs;为读操作时SDRAM返回的dqs信号延迟相位90°,使其与读数据中心对齐;并负责地址、数据、控制信号在控制器的单倍速率(仅上升沿或仅下降沿传输数据)和SDRAM的双倍(上升沿和下降沿都传输数据)速率之间转换。
参见图7,为本发明实施例提供的存储器的访问装置的结构示意图,所述存储器包括至少两个存储阵列,每个存储阵列对应分配一个缓冲区,所述缓冲区中存储了用于访问对应存储阵列的访问命令,所述访问命令按照接收顺序依次存储于对应缓冲区中、且存储顺序与对应缓冲区中缓冲单元的排列顺序相同,所述缓冲区被划分为至少一个缓冲区间,所述装置包括:
缓冲区选取模块701,用于对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间,其中,选取缓冲区间中存储有未执行的访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所述访问命令中携带了所要访问的存储阵列的行地址;
命令组获取模块702,用于遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址;
子命令调度模块703,用于按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令。
其中,所述命令组获取模块702,包括:
第一获取子模块,用于按照所述选取缓冲区间中缓冲单元的排列顺序,从所述选取缓冲区间中获取第一个未执行的携带了第一行地址的第一访问命令,所述第一访问命令存储于所述选取缓冲区间中的第一缓冲单元中;
第二获取子模块,用于从所述第一缓冲单元后的所有缓冲单元中,依次获取携带所述第一行地址的未执行访问命令,以获取由携带所述第一行地址的所有访问命令组成的第一命令组;
判断子模块,用于判断所述选取缓冲区间中是否仍存在未执行的访问命令;
继续获取模块,用于当所述判断子模块判断得到的所述选取缓冲区间中仍存在未执行的访问命令时,执行按照所述选取缓冲区间中缓冲单元的排列顺序从所述选取缓冲区间中获取第一个未执行的携带了第二行地址的第二访问命令的步骤,以获取由携带所述第二行地址的所有访问命令组成的第二命令组,如果否,则继续利用所述缓冲区选取模块执行所述对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间的步骤。
其中,所述子命令调度模块703,包括:
排序子模块,用于获取每个缓冲区中未执行访问命令的数目,并将所述获取的数目递减排序,按照排序结果确定每个缓冲区的待执行命令组之间的优先级顺序;
第一发送子模块,用于向所述存储器发送第一命令的预充电子命令,所述第一命令为第一优先级的待执行命令组中的第一个未执行访问命令;
第二发送子模块,用于在所述第一命令的预充电子命令与所述第一命令的激活子命令之间的第一发送间隔时间内,向所述存储器发送第二命令的预充电子命令,所述第二命令为第二优先级的待执行命令组中的访问命令;
第三发送子模块,用于在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时到达所述第一发送间隔时间,则向所述存储器发送所述第一命令的激活子命令,在所述第一命令的激活子命令与所述第一命令的列存取子命令之间的第三发送间隔时间内,执行第三命令的待执行子命令,所述第三命令为在所述第一优先级待执行命令组后的所有待执行命令组中满足时序要求且优先级最高的待执行命令组,所述满足时序要求为计时到达所述待执行子命令与所述待执行子命令之前子命令之间的发送时间间隔;
第四发送子模块,用于在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时未到达所述第一发送间隔时间,则向所述存储器发送第四命令的预充电子命令,所述第四命令为第三优先级的待执行命令组中的访问命令;
其中,所述第一优先级、所述第二优先级和所述第三优先级的优先级别依次递减;
继续发送子模块,用于按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令;或者,按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令,其中,每个待执行命令组中的各个列存取子命令依次执行、且每两个列存取子命令之间满足发送间隔时间。
进一步地,所述装置还包括:
命令接收模块,用于在所述缓冲区选取模块对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间前,从协议总线接收访问命令;
第一发送模块,用于若所述命令接收模块接收的访问命令用于向所述存储器写入数据,则为所述访问命令和所要写入的数据分别配置第一标识,并将配置后的访问命令发送至对应的缓冲区中且将配置后的数据发送至数据传输模块;
数据发送模块,用于在所述子命令调度模块向所述存储器发送所述命令接收模块接收的访问命令的列存取子命令时,向所述数据传输模块发送所述第一标识;
所述数据传输模块,用于根据所述数据发送模块发送的第一标识准备所述所要写入的数据,将准备好的数据发送至所述存储器;
第二发送模块,用于若所述子命令接收模块接收的访问命令用于读取所述存储器中的数据,则为所述访问命令配置第二标识,并将配置后的访问命令发送至对应的缓冲区中;
所述数据传输模块,用于在所述子命令调度模块向所述存储器发送所述命令接收模块接收的访问命令的列存取子命令后,接收所述存储器返回的数据并为所述返回的数据配置所述第二标识,根据所述第二标识将所述返回的数据按照所述访问命令的接收顺序发送至所述协议总线。
其中,所述第一发送模块或所述第二发送模块,包括:
译码子模块,用于对所述配置后的访问命令进行译码,以提取所述访问命令中的存储阵列地址;
发送子模块,用于根据所述存储阵列地址,将所述访问命令存储于对应分配的缓冲区中。
另外,在本发明实施例中,每个缓冲区对应分配一个第一寄存器,所述第一寄存器的每个存储单元用于分别存储对应缓冲区中每个访问命令的执行状态,所述装置包括:
第一状态标记模块,用于当所述发送子模块将所述访问命令存储在对应缓冲区中时,在所述缓冲区对应的第一寄存器中将所述访问命令标识为未执行状态;
第二状态标记模块,用于当所述访问命令的所有子命令被发送至所述存储器后,在所述缓冲区对应的第一寄存器中将所述访问命令标识为已执行状态。
另外,在本发明实施例中,每个缓冲区对应分配一个第二寄存器;所述装置还包括:命令分解模块,用于对于从所述选取缓冲区间中获取的每个访问命令,按照下述方法分解获取的访问命令:
将获取访问命令携带的行地址与对应第二寄存器中存储的行地址进行比较,所述对应第二寄存器中存储的行地址为上次获取的访问命令的行地址;如果比较结果不同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为预充电子命令、激活子命令和列存取子命令;如果比较结果相同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为列存取子命令。
本发明实施例提供的存储器的访问装置,为每个存储阵列对应分配一个缓冲区,将访问同一存储阵列的所有访问命令存储在同一缓冲区内,并把每个缓冲区划分为多个缓冲区间,对于每个缓冲区间,使其存储的具有相同行号的访问命令按顺序执行,在此期间便不必频繁关闭、打开存储阵列的当前行,这样不但可以兼顾连续访问同一行的情况,也可以在出现交叉行访问时先执行同一行的访问操作,从而不但提高了存储器的访问效率,而且节省了功耗。
需要说明的是,本发明装置实施例中的各个模块,可以按照实现功能与图2所示的功能模块进行对应,具体可参照上述方法实施例的相关介绍,在此不再赘述。
需要说明的是,对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (12)

1.一种存储器的访问方法,其特征在于,所述存储器包括至少两个存储阵列,每个存储阵列对应分配一个缓冲区,所述缓冲区中存储了用于访问对应存储阵列的访问命令,所述访问命令按照接收顺序依次存储于对应缓冲区中、且存储顺序与对应缓冲区中缓冲单元的排列顺序相同,所述缓冲区被划分为至少一个缓冲区间,所述方法包括:
对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间,其中,选取缓冲区间中存储有未执行的访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所述访问命令中携带了所要访问的存储阵列的行地址;
遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址;
按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令;
其中,所述按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,包括:
获取每个缓冲区中未执行访问命令的数目,并将所述获取的数目递减排序,按照排序结果确定各个待执行命令组之间的优先级顺序;
向所述存储器发送第一命令的预充电子命令,所述第一命令为第一优先级的待执行命令组中的第一个未执行访问命令;
在所述第一命令的预充电子命令与所述第一命令的激活子命令之间的第一发送间隔时间内,向所述存储器发送第二命令的预充电子命令,所述第二命令为第二优先级的待执行命令组中的访问命令;
在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时到达所述第一发送间隔时间,则向所述存储器发送所述第一命令的激活子命令,在所述第一命令的激活子命令与所述第一命令的列存取子命令之间的第三发送间隔时间内,执行第三命令的待执行子命令,所述第三命令为在所述第一优先级待执行命令组后的所有待执行命令组中满足时序要求且优先级最高的待执行命令组,所述满足时序要求为计时到达所述待执行子命令与所述待执行子命令之前子命令之间的发送时间间隔;
在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时未到达所述第一发送间隔时间,则向所述存储器发送第四命令的预充电子命令,所述第四命令为第三优先级的待执行命令组中的访问命令;
其中,所述第一优先级、所述第二优先级和所述第三优先级的优先级别依次递减;
按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令。
2.根据权利要求1所述的方法,其特征在于,所述遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,包括:
按照所述选取缓冲区间中缓冲单元的排列顺序,从所述选取缓冲区间中获取第一个未执行的携带了第一行地址的第一访问命令,所述第一访问命令存储于所述选取缓冲区间中的第一缓冲单元中;
从所述第一缓冲单元后的所有缓冲单元中,依次获取携带所述第一行地址的未执行访问命令,以获取由携带所述第一行地址的所有访问命令组成的第一命令组;
判断所述选取缓冲区间中是否仍存在未执行的访问命令,如果是,则执行按照所述选取缓冲区间中缓冲单元的排列顺序从所述选取缓冲区间中获取第一个未执行的携带了第二行地址的第二访问命令的步骤,以获取由携带所述第二行地址的所有访问命令组成的第二命令组,如果否,则继续执行所述对于每个存储有未执行访问命令的缓冲区从中选取一个缓冲区间的步骤。
3.根据权利要求1或2所述的方法,其特征在于,在所述对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间前,所述方法还包括:
从协议总线接收访问命令;
若所述访问命令用于向所述存储器写入数据,则为所述访问命令和所要写入的数据分别配置第一标识,并将配置后的访问命令发送至对应的缓冲区中且将配置后的数据发送至数据传输模块;在向所述存储器发送所述访问命令的列存取子命令时,向所述数据传输模块发送所述第一标识,以使所述数据传输模块根据所述第一标识准备所述所要写入的数据,将准备好的数据发送至所述存储器;
若所述访问命令用于读取所述存储器中的数据,则为所述访问命令配置第二标识,并将配置后的访问命令发送至对应的缓冲区中;在向所述存储器发送所述访问命令的列存取子命令后,利用所述数据传输模块接收所述存储器返回的数据并为所述返回的数据配置所述第二标识;根据所述第二标识将所述返回的数据按照所述访问命令的接收顺序发送至所述协议总线。
4.根据权利要求3所述的方法,其特征在于,所述将配置后的访问命令发送至对应的缓冲区中,包括:
对所述访问命令进行译码,以提取所述访问命令中的存储阵列地址,并根据所述存储阵列地址,将所述访问命令存储于对应分配的缓冲区中。
5.根据权利要求4所述的方法,其特征在于,每个缓冲区对应分配一个第一寄存器,所述第一寄存器的每个存储单元用于分别存储对应缓冲区中每个访问命令的执行状态,所述方法包括:
当将所述访问命令存储在对应缓冲区中时,在所述缓冲区对应的第一寄存器中将所述访问命令标识为未执行状态;
当所述访问命令的所有子命令被发送至所述存储器后,在所述缓冲区对应的第一寄存器中将所述访问命令标识为已执行状态。
6.根据权利要求1或2所述的方法,其特征在于,每个缓冲区对应分配一个第二寄存器;对于从所述选取缓冲区间中获取的每个访问命令,按照下述方法分解获取的访问命令:
将获取访问命令携带的行地址与对应第二寄存器中存储的行地址进行比较,所述对应第二寄存器中存储的行地址为上次获取的访问命令的行地址;
如果比较结果不同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为预充电子命令、激活子命令和列存取子命令;
如果比较结果相同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为列存取子命令。
7.一种存储器的访问装置,其特征在于,所述存储器包括至少两个存储阵列,每个存储阵列对应分配一个缓冲区,所述缓冲区中存储了用于访问对应存储阵列的访问命令,所述访问命令按照接收顺序依次存储于对应缓冲区中、且存储顺序与对应缓冲区中缓冲单元的排列顺序相同,所述缓冲区被划分为至少一个缓冲区间,所述装置包括:
缓冲区选取模块,用于对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间,其中,选取缓冲区间中存储有未执行的访问命令、且与其它缓冲区间相比为最早存储访问命令的缓冲区间,所述访问命令中携带了所要访问的存储阵列的行地址;
命令组获取模块,用于遍历所述选取缓冲区间中存储的所有未执行的访问命令,依次获取每个命令组,并将当前获取的命令组作为待执行命令组,其中,所述命令组中的所有访问命令携带了相同行地址;
子命令调度模块,用于按照预设规则将各个待执行命令组中每个访问命令的子命令,依次送入所述存储器,以便所述存储器执行获取的子命令,其中,所述待执行命令组中每个访问命令之间按获取顺序发送,所述待执行命令组中第一个获取的访问命令被分解成执行顺序为预充电子命令、激活子命令和列存取子命令的三个子命令,所述待执行命令组中其它每个访问命令均分解为列存取子命令;
其中,所述子命令调度模块,包括:
排序子模块,用于获取每个缓冲区中未执行访问命令的数目,并将所述获取的数目递减排序,按照排序结果确定各个待执行命令组之间的优先级顺序;
第一发送子模块,用于向所述存储器发送第一命令的预充电子命令,所述第一命令为第一优先级的待执行命令组中的第一个未执行访问命令;
第二发送子模块,用于在所述第一命令的预充电子命令与所述第一命令的激活子命令之间的第一发送间隔时间内,向所述存储器发送第二命令的预充电子命令,所述第二命令为第二优先级的待执行命令组中的访问命令;
第三发送子模块,用于在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时到达所述第一发送间隔时间,则向所述存储器发送所述第一命令的激活子命令,在所述第一命令的激活子命令与所述第一命令的列存取子命令之间的第三发送间隔时间内,执行第三命令的待执行子命令,所述第三命令为在所述第一优先级待执行命令组后的所有待执行命令组中满足时序要求且优先级最高的待执行命令组,所述满足时序要求为计时到达所述待执行子命令与所述待执行子命令之前子命令之间的发送时间间隔;
第四发送子模块,用于在所述第二命令的预充电子命令与所述第二命令的激活子命令之间的第二发送间隔时间内,若计时未到达所述第一发送间隔时间,则向所述存储器发送第四命令的预充电子命令,所述第四命令为第三优先级的待执行命令组中的访问命令;
其中,所述第一优先级、所述第二优先级和所述第三优先级的优先级别依次递减;
继续发送子模块,用于按照上述规律继续向所述存储器发送当前获取的各个待执行命令组中的其它子命令。
8.根据权利要求7所述的装置,其特征在于,所述命令组获取模块,包括:
第一获取子模块,用于按照所述选取缓冲区间中缓冲单元的排列顺序,从所述选取缓冲区间中获取第一个未执行的携带了第一行地址的第一访问命令,所述第一访问命令存储于所述选取缓冲区间中的第一缓冲单元中;
第二获取子模块,用于从所述第一缓冲单元后的所有缓冲单元中,依次获取携带所述第一行地址的未执行访问命令,以获取由携带所述第一行地址的所有访问命令组成的第一命令组;
判断子模块,用于判断所述选取缓冲区间中是否仍存在未执行的访问命令;
继续获取模块,用于当所述判断子模块判断得到的所述选取缓冲区间中仍存在未执行的访问命令时,执行按照所述选取缓冲区间中缓冲单元的排列顺序从所述选取缓冲区间中获取第一个未执行的携带了第二行地址的第二访问命令的步骤,以获取由携带所述第二行地址的所有访问命令组成的第二命令组,如果否,则继续利用所述缓冲区选取模块执行所述对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间的步骤。
9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括:
命令接收模块,用于在所述缓冲区选取模块对于每个存储有未执行访问命令的缓冲区,从中选取一个缓冲区间前,从协议总线接收访问命令;
第一发送模块,用于若所述命令接收模块接收的访问命令用于向所述存储器写入数据,则为所述访问命令和所要写入的数据分别配置第一标识,并将配置后的访问命令发送至对应的缓冲区中且将配置后的数据发送至数据传输模块;
数据发送模块,用于在所述子命令调度模块向所述存储器发送所述命令接收模块接收的访问命令的列存取子命令时,向所述数据传输模块发送所述第一标识;
所述数据传输模块,用于根据所述数据发送模块发送的第一标识准备所述所要写入的数据,将准备好的数据发送至所述存储器;
第二发送模块,用于若所述子命令接收模块接收的访问命令用于读取所述存储器中的数据,则为所述访问命令配置第二标识,并将配置后的访问命令发送至对应的缓冲区中;
所述数据传输模块,用于在所述子命令调度模块向所述存储器发送所述命令接收模块接收的访问命令的列存取子命令后,接收所述存储器返回的数据并为所述返回的数据配置所述第二标识,根据所述第二标识将所述返回的数据按照所述访问命令的接收顺序发送至所述协议总线。
10.根据权利要求9所述的装置,其特征在于,所述第一发送模块或所述第二发送模块,包括:
译码子模块,用于对所述配置后的访问命令进行译码,以提取所述访问命令中的存储阵列地址;
发送子模块,用于根据所述存储阵列地址,将所述访问命令存储于对应分配的缓冲区中。
11.根据权利要求10所述的装置,其特征在于,每个缓冲区对应分配一个第一寄存器,所述第一寄存器的每个存储单元用于分别存储对应缓冲区中每个访问命令的执行状态,所述装置包括:
第一状态标记模块,用于当所述发送子模块将所述访问命令存储在对应缓冲区中时,在所述缓冲区对应的第一寄存器中将所述访问命令标识为未执行状态;
第二状态标记模块,用于当所述访问命令的所有子命令被发送至所述存储器后,在所述缓冲区对应的第一寄存器中将所述访问命令标识为已执行状态。
12.根据权利要求7或8所述的装置,其特征在于,每个缓冲区对应分配一个第二寄存器;所述装置还包括:命令分解模块,用于对于从所述选取缓冲区间中获取的每个访问命令,按照下述方法分解获取的访问命令:
将获取访问命令携带的行地址与对应第二寄存器中存储的行地址进行比较,所述对应第二寄存器中存储的行地址为上次获取的访问命令的行地址;
如果比较结果不同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为预充电子命令、激活子命令和列存取子命令;
如果比较结果相同,则利用所述获取访问命令携带的行地址替换所述第二寄存器中存储的行地址,并将所述获取访问命令分解为列存取子命令。
CN201410138487.XA 2014-04-08 2014-04-08 一种存储器的访问方法及装置 Active CN103927268B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410138487.XA CN103927268B (zh) 2014-04-08 2014-04-08 一种存储器的访问方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410138487.XA CN103927268B (zh) 2014-04-08 2014-04-08 一种存储器的访问方法及装置

Publications (2)

Publication Number Publication Date
CN103927268A CN103927268A (zh) 2014-07-16
CN103927268B true CN103927268B (zh) 2017-02-15

Family

ID=51145492

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410138487.XA Active CN103927268B (zh) 2014-04-08 2014-04-08 一种存储器的访问方法及装置

Country Status (1)

Country Link
CN (1) CN103927268B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105701040B (zh) 2014-11-28 2018-12-07 杭州华为数字技术有限公司 一种激活内存的方法及装置
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
US10366013B2 (en) * 2016-01-15 2019-07-30 Futurewei Technologies, Inc. Caching structure for nested preemption
CN106502806B (zh) * 2016-10-31 2020-02-14 华为技术有限公司 一种总线协议命令处理装置及相关方法
KR20180106017A (ko) * 2017-03-17 2018-10-01 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10387336B2 (en) * 2017-03-24 2019-08-20 Micron Technology, Inc. Memory protection based on system state
CN107679620B (zh) * 2017-04-19 2020-05-26 赛灵思公司 人工神经网络处理装置
CN107704922B (zh) * 2017-04-19 2020-12-08 赛灵思公司 人工神经网络处理装置
CN107679621B (zh) 2017-04-19 2020-12-08 赛灵思公司 人工神经网络处理装置
KR20210112557A (ko) * 2020-03-05 2021-09-15 에스케이하이닉스 주식회사 메모리 장치에서 연속으로 수행되는 다수의 커맨드 동작에 필요한 파워값을 정확하게 예측할 수 있는 메모리 시스템 및 메모리 시스템의 동작방법
US20210303215A1 (en) * 2020-03-27 2021-09-30 Etron Technology, Inc. Memory controller, memory, and related memory system
CN114896182B (zh) * 2022-05-11 2023-10-20 地平线(上海)人工智能技术有限公司 存储装置、方法、电子设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1648877A (zh) * 2004-01-27 2005-08-03 精工爱普生株式会社 信息处理装置及存储器访问方法
US7088722B1 (en) * 2002-03-28 2006-08-08 Cisco Technology, Inc. Method and system for controlling flow of multiplexed data
CN1815626A (zh) * 2005-01-31 2006-08-09 上海奇码数字信息有限公司 存储器存取控制器与存储器存取方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014002557A (ja) * 2012-06-18 2014-01-09 Fujitsu Ltd 試験データ生成方法、試験方法、試験データ生成装置、および試験データ生成プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7088722B1 (en) * 2002-03-28 2006-08-08 Cisco Technology, Inc. Method and system for controlling flow of multiplexed data
CN1648877A (zh) * 2004-01-27 2005-08-03 精工爱普生株式会社 信息处理装置及存储器访问方法
CN1815626A (zh) * 2005-01-31 2006-08-09 上海奇码数字信息有限公司 存储器存取控制器与存储器存取方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
存储器访问调度的应用实现研究;吴洪涛;《中国优秀硕士学位论文全文数据库信息科技辑》;20060915(第9期);全文 *

Also Published As

Publication number Publication date
CN103927268A (zh) 2014-07-16

Similar Documents

Publication Publication Date Title
CN103927268B (zh) 一种存储器的访问方法及装置
EP3005128B1 (en) Separate memory controllers to access data in memory
CN104737144B (zh) 存储器存取的动态优先级管理
US8200882B2 (en) Memory system, access control method therefor, and computer program
CN102207916B (zh) 一种基于指令预取的多核共享存储器控制设备
CN109446125A (zh) Ddr读写仲裁器及方法
CN101788963B (zh) Dram存储控制方法及装置
CN103345451B (zh) 一种在多核处理器中缓冲数据的方法
US9336164B2 (en) Scheduling memory banks based on memory access patterns
CN104699631A (zh) Gpdsp中多层次协同与共享的存储装置和访存方法
CN107924375A (zh) 用于高速存储器接口的命令仲裁
CN107204198A (zh) 高速访问双倍速率同步动态随机存储器的控制方法及装置
CN102129412A (zh) 存取调度器
CN103198856A (zh) 一种ddr控制器及请求调度方法
CN101150485A (zh) 一种零拷贝缓冲区队列网络数据发送的管理方法
JP2016506009A (ja) 開放されたロウの好適する数をもつメモリ装置
CN102508803A (zh) 一种矩阵转置存储控制器
CN108256643A (zh) 一种基于hmc的神经网络运算装置和方法
Goossens et al. Memory-map selection for firm real-time SDRAM controllers
CN102541769B (zh) 一种存储器接口访问控制方法及装置
CN109359729A (zh) 一种在fpga上实现缓存数据的系统及方法
CN105487988B (zh) 基于存储空间复用提高sdram总线有效访问速率的方法
CN107479622A (zh) 一种基于soc的双通道任意波形发生器和产生方法
CN113360424B (zh) 基于多通路独立axi总线的rldram3控制器
Burchardt et al. A real-time streaming memory controller

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant