法律状态公告日
法律状态信息
法律状态
2019-01-18
授权
授权
2016-09-28
实质审查的生效 IPC(主分类):G06F3/06 申请日:20160412
实质审查的生效
2016-08-31
公开
公开
技术领域
本发明属于计算机系统结构技术领域,特别涉及一种PM的访存请求解析装置与方法。
背景技术
在计算机体系结构设计中,由于PM的读写时间严重不对称,所以,PM控制器对来自最后一级缓存的读写访存请求进行解析的方法很大程度上决定了系统的性能,拙劣的读写访存请求解析方法将导致PM控制器很难对所述请求进行合理的调度,甚至可能成为整个系统的瓶颈。然而,现有技术中鲜有专门针对PM的特性进行访存请求解析的方法和装置。
在本技术领域,涉及的一下一些技术术语:
DIMM:Dual Inline Memory Module,即双列直插式存储模块。
DRAM:Dynamic Random Access Memory,动态随机存储器,即现阶段广泛使用的内存,其特点是断电后信息丢失,理论上读写寿命不受限制,并且需要周期性的对其内部电容进行充电操作,这个操作称为刷新(refresh)。
PM:Persistent Memory,非易失性内存或持久性内存,STTRAM,PCM,RRAM都属于PM,其特点是断电后信息不丢失,可字节寻址;但读写次数受限制,并且读写不均衡,根据材料的不同,PM写耗费时间大概是其读耗费时间的4到10倍,PM读的时间比DRAM慢1到4倍,PM不需要刷新操作。
Rank:指的是连接到同一个片选信号的一组存储芯片,内存控制器能够同时对一个Rank中的所有芯片进行读写操作,这些芯片共享同样的控制信号。一个DIMM中可以包含多个Rank。
Bank:内存芯片中的存储模块。每一个存储芯片有一组Bank。
tAL:为了提高控制总线的利用率,PM控制器会提前将READ、WRITE、READ_P或WRITE_P命令发送到PM执行模块,PM执行模块接收到该命令,经过tAL时间的延迟后,才会执行该命令。
tBURST:数据突发所占据数据线的时间。
tCAS:列选通访问延迟,指从发出READ或READ_P,到数据线出现稳定数据的延迟。
tCCD:列对列延迟,指对同一行进行连续读取所发出列地址的最短时间。
tCMD:命令传输时间。指一条命令从PM控制器发送到PM执行部件所占据命令线的时间。
tCWD:写延迟,指从发出WRITE或WRITE_P,到真正将数据发送到数据线上的延迟。
tFAW:4个Bank同时激活的窗口时间。指在长度为tFAW的时间段内,PM设备最多只能接收四条ACTIVATE命令。
tRC:行周期。指在同一个Bank中访问不同行所发出行激活命令的最短时间间隔。
tRCD:指从发出行激活命令到数据稳定存储于读出放大器的时间间隔。
tRP:预充电时间,将处于激活状态的一行进行预充电操作的时间。
tRRD:指连续发出两条ACTIVATE命令的时间间隔。
tRTP:指对某一行发出读命令到对该行进行预充电命令的时间间隔
tRTRS:Rank到Rank的访存转换时间。
tWR:写入数据在数据线上传输完毕到对相应的一行发出PRECHARGE命令的时间间隔。
tWTR:写入数据在数据线上传输完毕到发出READ或READ_P命令的时间间隔.
tAWD:向一个Bank发出ACTIVATE命令到向另一个Bank发送WRITE或WRITE_P命令的时间间隔。
tWAD::向一个Bank发出WRITE命令到向另一个Bank发送ACTIVATE命令的时间间隔。
ACTIVATE:行激活命令,又称行选通命令,指在向PM设备读出或写入数据之前,将PM阵列中的一行数据读出并保存到读出放大器(行缓冲)中。
PRECHARGE:预充电命令,对于读出放大器和PM阵列中的字线进行重位置,以便进行下一次行激活操作。
READ:读命令,用于读取PM阵列中的数据。
WRITE:写命令,用于向PM阵列中写入数据。
READ_P:读后立即预充电命令,为复合命令,等价于向PM执行部件发送了两条命令:READ和PRECHARGE命令,由PM执行部件在不同的时间点依次分别执行读操作和预充电操作。
WRITE_P:写后立即预充电命令,为复合命令,等价于向PM执行部件发送了两条命令:WRITE和PRECHARGE命令,由PM执行部件在不同的时间点依次分别执行写操作和预充电操作。
在现有技术条件下,ACTIVATE,READ,WRITE,READ_P,WRITE_P,PRECHARGE执行时彼此间的约束规程和时间参数如表1、表2所示。
表1
表2
OPEN_PAGE_POLICY:开放行缓存管理策略,当PM阵列中的一行被读出或写入数据后,PM控制器可以不必立即发送PRECHARGE操作。该行可以保持激活状态。
CLOSE_PAGE_POLICY:关闭行缓存管理策略,PM控制器向PM执行部件发出READ_P或WRITE_P命令后,当PM阵列中的一行被读出或写入数据,执行部件对这一行立即进行预充电操作。
FR-FCFS:一种访存请求调度策略。两条请求在访问主存阵列的不同行时,若其中只有一行已经处于激活状态,则优先调度访问该行的访存请求,在其他情况下,按照先到先服务的调度策略进行。
访存请求:当一个访存请求到达PM控制器时,在物理上以比特流串的形式存在,在逻辑上这个比特流串的语义格式如下:
其中,请求类别(R/W)表示本次访存请求是读(R)或者写(W),行地址(row)在语义上表示PM阵列中行的编号,列地址(col)在语义上表示PM阵列中列的编号,在后文中,Bank号(b)在语义上表示PM阵列中的第b个Bank,为了后文描述方便,符号row、符号b、符号col分别表示行地址、Bank号、列地址占用的二进制位的个数。该访存请求格式称为第一访存请求格式。
在实际工程实践中,有时也会采用第二访存请求格式,在逻辑上比特流串的的语义格式如下:
。
发明内容
本发明的目的是提供一种面向PM的访存请求解析装置与方法。
本发明的技术方案是,一种面向PM的访存请求解析装置,所述解析装置包括访存请求解析模块、优先级解析模块、命令解析模块和执行模块,
访存请求经过解析装置的访存请求解析模块、优先级解析模块、命令解析模块和执行模块的依次处理后,从PM阵列读出数据队列,
访存请求解析模块,用于将访存请求根据所述的列地址、行地址、Bank号、读写标志的统计特征分发到不同特性的请求队列中,以便所述访存请求能够被合理调度;
优先级解析模块,用于将访存请求解析模块中所述不同特性的请求队列按照被调度的次序进行优先级划分,在所述不同特性的请求队列内部按照FR-FCFS调度;
命令解析模块,用于将来自优先级解析模块的访存请求转化为访存操作命令,然后,结合PM阵列当前的状态信息将所述操作命令发送出去;
执行模块,用于根据命令解析模块中发出的操作命令对PM阵列执行操作。
所述访存请求解析模块的处理流程包括:
地址解析单元A按照访存请求特征将其分发到访存请求队列Q1与访存请求队列Q2,所述的访存请求特征的确定依据是:设在所述访存请求中Bank号对应的二进制值为为Bank_Value所述访存请求中行地址对应的二进制值为Row_Value,若Bank_Value+Row_Value≥1,则将本次请求分发到访存请求队列Q2,否则,则将本次请求分发到访存请求队列Q1;
地址解析单元B按照访存请求特征把访存请求队列Q2中的访存请求分发到访存请求队列Q21与访存请求队列Q22,所述的访存请求特征的确定依据是:在地址解析单元B中设置组件DS1,DS1的逻辑结构为,
其中,C0,C1,C2...,Cn分别统计对第0,1,2,...2b-1个Bank的访问次数,在地址解析单元B中设置组件DS2,DS2的逻辑结构为,
其中,LEFT表示当C0+C1+C2+...+Cn<2col时,所有的访存请求都分发到访存请求队列Q21,当C0+C1+C2+...+Cn>=2col时,对于每个从访存请求队列Q2分发过来的访存请求做如下的操作:
更新DS1,然后判定针对某个Bank的访存次数Cx是否满足若满足,更新DS2中针对对应Bank的分发标志为RIGHT,同时将本次请求分发到访存请求队列Q22中;若不满足,更新DS2中针对对应Bank的分发标志为LEFT,同时将本次请求分发到访存请求队列Q21中;
标志解析单元C1按照访存请求特征把访存请求队列Q21中的访存请求分发到读访存请求队列RQ21与写访存请求队列WQ21,所述的访存请求特征的确定依据是:设某次访存请求中所述请求类别(R/W)若为R,则将本次请求分发到读访存请求队列RQ21,否则,则将本次请求分发到写访存请求队列WQ21;
标志解析单元C2按照访存请求特征把访存请求队列Q22中的访存请求分发到读访存请求队列RQ22与写访存请求队列WQ22,所述的访存请求特征的确定依据是:设某次访存请求中所述请求类别(R/W)若为R,则将本次请求分发到读访存请求队列RQ22,否则,则将本次请求分发到写访存请求队列WQ22,
所述优先级解析模块的处理流程包括:
访存请求解析模块中的访存请求队列Q1与访存请求队列Q2,访存请求队列Q21与访存请求队列Q22,读访存请求队列RQ21与写访存请求队列WQ21,读访存请求队列RQ22与写访存请求队列WQ22,
由于,访存请求队列Q2划分成为读访存请求队列RQ21与写访存请求队列WQ21,读访存请求队列RQ22与写访存请求队列WQ22,
所以设定:访存请求队列Q1>读访存请求队列RQ21>读访存请求队列RQ22>写访存请求队列WQ21>写访存请求队列WQ22,符号“>”含义为“优先于”,在所述的每种访存请求队列内部采用FR-FCFS调度;
所述命令解析模块中包括:
命令控制逻辑,用于将优先级解析模块中所述的每种访存请求队列的访存请求解析为具体的原子命令,所述请求类别R/W解析为:{ACTIVATE,READ,[PRECHARGE]},或为:{ACTIVATE,READ_P},或为:{ACTIVATE,WRITE,[PRECHARGE]},或为:{ACTIVATE,WRITE_P},符号"{}"包含的ACTIVATE、READ、READ_P、WRITE、WRITE_P、PRECHARGE即为所述的具体的原子命令,符号"[]"表示在OPEN_PAGE_POLICY下,PRECHARGE命令不立即执行。
状态信息表,其逻辑结构为:
状态信息表内容包括:当前每个Bank的状态信息、命令控制逻辑发出的上一条命令类型、命令控制逻辑发出的上一条命令时间、ACTIVATE命令时间记录表,
每个Bank的状态信息的内容包括:是否存在激活行、激活行地址、本Bank接受到的上一条命令的类型、本Bank接受到的上一条命令的发出时间,
ACTIVATE命令时间记录表记录了在一个tFAW窗口时间内的各个ACTIVATE命令的发出时间,ACTIVATE命令时间记录表最多记录4条ACTIVATE命令的发出时间,“NULL”表示当前内容为空,不存在相应的状态信息,
命令控制逻辑需要根据状态信息表的内容选择在何时将上述所述的原子命令发送给执行模块;
所述执行模块的处理流程包括:
根据命令解析模块发送来的访存命令执行一个具体的业务逻辑,然后对PM阵列执行具体的操作。
一种面向PM的访存请求解析方法,包含以下步骤:
步骤A:将访存请求按照所述的请求类别(R/W)和所述的行地址和列地址的统计特征分类;
步骤B:将不同类的访存请求分发到不同优先级的队列中;
步骤C:将不同优先级的队列中的访存请求解析为可执行的操作命令;
步骤D:在PM阵列及其控制器上执行操作命令。
本发明主要针对PM读写访存请求,提供一种实时的比特流层面的动态解析方法,同时提供一种装置,所述装置能够方便快捷的添加到专门针对PM内存控制器或PM和DRAM的混合控制器中。
附图说明
图1是本发明面向PM的访存请求解析装置示意图;
图2是本发明图1中访存请求解析模块示意图;
图3是本发明图1中优先级解析模块的判优流程示意图;
图4是本发明图1中命令解析模块流程示意图;
图5是本发明图1中执行模块实施例的流程示意图。
具体实施方式
本发明实施例中采用了第一种访存请求的格式。(R/W)的比特值为0时代表读请求,比特值为1时代表写请求,所述的行地址row为15个二进制位,所述的列地址col为10个二进制位,所述的Bank号b为3个二进制位,共计8个Bank。
本发明的面向PM的访存请求解析装置,如附图1所示,所述装置包括访存请求解析模块、优先级解析模块、命令解析模块和执行模块。
访存请求解析模块,主要是将访存请求根据其内部的列地址、行地址、Bank号、读写标志的统计特征分发到不同特性的请求队列中,以便所述访存请求能够被合理调度;
优先级解析模块,主要是将访存请求解析模块中所述不同特性的请求队列按照被调度的次序进行优先级划分,在所述不同特性的请求队列内部按照FR-FCFS调度;
命令解析模块,主要是将来自优先级解析模块的访存请求转化为具体的访存操作命令,然后,结合PM阵列当前的状态信息将所述操作命令发送出去;
执行模块,主要是根据命令解析模块中发出的操作命令对PM阵列执行具体的操作。
如附图2所示,在访存请求解析模块中:
地址解析单元A按照访存请求特征将其分发到访存请求队列Q1与访存请求队列Q2,所述的访存请求特征的确定依据是:设在所述访存请求中Bank号对应的二进制值为为Bank_Value所述访存请求中行地址对应的二进制值为Row_Value,若Bank_Value+Row_Value≥1,则将本次请求分发到访存请求队列Q2,否则,则将本次请求分发到访存请求队列Q1;
地址解析单元B按照访存请求特征把访存请求队列Q2中的访存请求分发到访存请求队列Q21与访存请求队列Q22,所述的访存请求特征的确定依据是:在地址解析单元B中设置组件DS1,DS1的逻辑结构为,
其中,C0,C1,C2...,Cn分别统计对第0,1,2,..2b-1个Bank的访问次数,
在地址解析单元B中设置组件DS2,DS2的逻辑结构为,
其中,LEFT表示当C0+C1+C2+...+Cn<2col时,所有的访存请求都分发到访存请求队列Q21,当C0+C1+C2+...+Cn>=2col时,对于每个从访存请求队列Q2分发过来的访存请求做如下的操作:更新DS1,然后判定针对某个Bank的访存次数Cx是否满足若满足,更新DS2中针对对应Bank的分发标志为RIGHT,同时将本次请求分发到访存请求队列Q22中。若不满足,更新DS2中针对对应Bank的分发标志为LEFT,同时将本次请求分发到访存请求队列Q21中;
标志解析单元C1按照访存请求特征把访存请求队列Q21中的访存请求分发到读访存请求队列RQ21与写访存请求队列WQ21,所述的访存请求特征的确定依据是:设某次访存请求中所述请求类别(R/W)若为R,则将本次请求分发到读访存请求队列RQ21,否则,则将本次请求分发到写访存请求队列WQ21。
标志解析单元C2按照访存请求特征把访存请求队列Q22中的访存请求分发到读访存请求队列RQ22与写访存请求队列WQ22,所述的访存请求特征的确定依据是:设某次访存请求中所述请求类别(R/W)若为R,则将本次请求分发到读访存请求队列RQ22,否则,则将本次请求分发到写访存请求队列WQ22。
如附图3所示,在优先级解析模块中:
所述的访存请求解析模块中的访存请求队列Q1与访存请求队列Q2,访存请求队列Q21与访存请求队列Q22,读访存请求队列RQ21与写访存请求队列WQ21,读访存请求队列RQ22与写访存请求队列WQ22,由于,访存请求队列Q2最终划分成为读访存请求队列RQ21与写访存请求队列WQ21,读访存请求队列RQ22与写访存请求队列WQ22,所以设定:访存请求队列Q1>读访存请求队列RQ21>读访存请求队列RQ22>写访存请求队列WQ21>写访存请求队列WQ22,符号“>”含义为“优先于”,在所述的每种访存请求队列内部采用FR-FCFS调度。
如附图4所示,在命令解析模块中:
命令控制逻辑,用于将优先级解析模块中所述的每种访存请求队列的访存请求解析为具体的原子命令,所述请求类别R/W解析为:{ACTIVATE,READ,[PRECHARGE]},或为:{ACTIVATE,READ_P},或为:{ACTIVATE,WRITE,[PRECHARGE]},或为:{ACTIVATE,WRITE_P},符号"{}"包含的ACTIVATE、READ、READ_P、WRITE、WRITE_P、PRECHARGE即为所述的具体的原子命令,符号"[]"表示在OPEN_PAGE_POLICY下,PRECHARGE命令不立即执行。
状态信息表,其逻辑结构为
其中内容包括:当前每个Bank的状态信息、命令控制逻辑发出的上一条命令类型、命令控制逻辑发出的上一条命令时间、ACTIVATE命令时间记录表。每个Bank的状态信息的内容主要包括:是否存在激活行、激活行地址、本Bank接受到的上一条命令的类型、本Bank接受到的上一条命令的发出时间。ACTIVATE命令时间记录表记录了在一个tFAW窗口时间内的各个ACTIVATE命令的发出时间。ACTIVATE命令时间记录表最多记录4条ACTIVATE命令的发出时间。“NULL”表示当前内容为空,不存在相应的状态信息。
命令控制逻辑需要根据状态信息表的内容选择在何时将上述所述的原子命令发送给执行模块。
如附图5所示,在执行模块中:
根据命令解析模块发送来的访存命令如{ACTIVATE,READ,[PRECHARGE]},或如:{ACTIVATE,READ_P},或如:{ACTIVATE,WRITE,[PRECHARGE]},或如:{ACTIVATE,WRITE_P}执行一个具体的业务逻辑,然后对PM阵列执行具体的操作。
实施例一是采用OPEN_PAGE_POLICY策略的解析装置,刚开始启动时接收到3个连续访存请求的执行逻辑。
实施例二是采用CLOSE_PAGE_POLICY策略的解析装置,在处理完成1023个访存请求后接收到5个连续访存请求的执行逻辑。
实施例一:
以“1>10000>00010>”、“0>00000>00010>00100”和“001000>00010>”3条访存请求的比特流串为例,本装置刚启动时,访存请求解析模块的组件DS1的内容为
本装置刚启动时,访存请求解析模块的组件DS2的内容为
本装置刚启动时,命令解析模块中状态信息表的内容为:
其中,“NULL”表示当前内容为空,不存在相应的状态信息。
具体阐述步骤如下:
步骤A.1:地址解析单元A接收到的所述第一条访存请求获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为00000 00000>00000,因Bank_Value+Row_Value<1,将第一条访存请求分发到访存请求队列Q1;
步骤A.2:地址解析单元A接收到的所述第二条访存请求获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为10000 00000>00000,因Bank_Value+Row_Value≥1,将第二条访存请求分发到访存请求队列Q2;
步骤A.3:地址解析单元A接收到的所述第三条访存请求获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为01000 00000>00000,因Bank_Value+Row_Value≥1,将第三条请求分发到访存请求队列Q2;
步骤A.4:地址解析单元B从访存请求队列Q2中取出访存请求“1>10000 00000>0000000010>”,再次获取访存地址中Bank号位对应的二进制值Bank_Value为由于此时在DS1内所有Bank对应的访存次数总和为零,即总和小于210,因此,将访存请求“1>10000>000 10>”分发到访存请求队列Q21,更新DS1,将第1个Bank对应的访存次数加1;
步骤A.5:地址解析单元B从队列Q2中取出访存请求“001000>00010>”,再次获取访存地址中Bank号位对应的二进制值Bank_Value为此时在所述DS1内所有Bank对应的访存次数总和为1,即总和小于210,将访存请求“001000 00000>0000000010>”分发到访存请求队列Q21,更新DS1,即将第1个Bank对应的访存次数再次加1;
步骤A.6:标志解析模块C1取出访存请求队列Q21内的一条访存请求,“1>10000>00000>00010>”,获取其请求类别(R/W)位为1,即本请求为写访存请求,将其分派给读请求队列WQ21;
步骤A.7:标志解析模块C1再次取出访存请求队列Q21内的一条访存请求,“001000>00000>00010>”,获取其请求类别(R/W)位为0,即本请求为读访存请求,将其分派给读请求队列RQ21。
步骤B.1:优先级解析模块优先从Q1中取出访存请求:“0>00000>00010>”,发送给命令解析模块,如果Q1内还有访存请求,依次取出发送给命令解析单元,直至Q1队列为空;
步骤B.2:优先级解析模块从RQ21中取出读访存请求“001000>00010>”,发送给命令解析模块,如果RQ21内还有访存请求,依次取出发送给命令解析模块,直至RQ21队列为空;
骤B.3:优先级解析模块从WQ21中取出读访存请求“1>10000>00010>”,发送给命令解析模块,如果WQ21内还有访存请求,依次取出发送给命令解析模块,直至WQ21队列为空。
步骤C.1:更新所述状态信息表的ACTIVATE命令时间记录信息表,若所述记录信息表为空,转到步骤C.2,若所述记录信息表非空,找到由命令控制逻辑最早发出的ACTIVATE命令的发出时间Activate_Time,且其满足Activate_Time+tFAW≤Current_time,则删除ACTIVATE命令时间记录表中有关本ACTIVATE命令的时间信息,所述Current_time表示当前时间;
步骤C.2:当命令控制逻辑接收到第一条访存请求为“0>0000000000>00010>”为例,获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为00000>、列地址位对应的二进制值Col_Value为00010>以及请求类别(R/W)为读请求;
步骤C.3:查找状态信息表内容发现第Bank_Value个Bank当前不存在激活行,命令控制逻辑发出的上一条命令类型为空,因此所述命令控制逻辑先向执行部件发送ACTIVATE命令以及Bank_Value和Address_Value,修改状态信息表的内容,如下表所示:
所述“Time0”表示发出ACTIVATE命令的时间。
步骤C.4:在状态信息表中查找Bank 0的状态信息,Bank0接受到的最后一条命令为ACTIVATE,时间为time0;(由表1知,相同Bank的ACTIVATE和READ命令的最小时间间隔为tRCD-tAL,由表2知,不同Bank的ACTIVATE和READ命令不存在最小时间间隔)
步骤C.4.1:若time0+tRCD-tAL≤Current_Time,将READ命令、Bank_Value、Col_Value发送至命令执行模块,再次修改状态信息表的内容如下表所示,接着,转至步骤D.1;
步骤C.4.2:若time0+tRCD-tAL>Current_Time,跳转至执行步骤C.4。
步骤D.1:若执行部件接收到ACTIVATE命令、Bank_Value、Row_Value后,激活第Bank_Value个Bank上行地址为Row_Value的一行;
步骤D.2.若执行部件接收到READ命令、Bank_Value、Col_Value后,读出第Bank_Value个Bank上行地址为Row_Value列地址为Col_Value的数据。
实施例二:
以本装置在处理完成1023个访存请求后接收到5个连续访存请求:“1>10000>00000>000 10>”、“0>1100>00010>”、“111100 00000>0000000010>”、“100000>00010>”和“011110>00010>”为例,假设此时访存请求解析模块的组件DS1的内容为:
访存请求解析模块的组件DS2的内容为:
具体阐述步骤如下:
步骤A.1:地址解析单元A接收到第一条访存请求,获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为10000>,因Bank_Value+Row_Value≥1,将第一条访存请求分发到访存请求队列Q2;
步骤A.2:地址解析单元A接收到第二条访存请求,获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为1100>,因Bank_Value+Row_Value≥1,将第二条访存请求分发到访存请求队列Q2;
步骤A.3:地址解析单元A接收到第三条访存请求,获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为11100>,因Bank_Value+Row_Value≥1,将第三条请求分发到访存请求队列Q2;
步骤A.4:地址解析单元A接收到第四条访存请求获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为00000>,因Bank_Value+Row_Value<1,将第四条请求分发到访存请求队列Q1;
步骤A.5:地址解析单元A接收到第五条访存请求获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为11110>,因Bank_Value+Row_Value≥1,将第五条请求分发到访存请求队列Q2;
步骤A.6:地址解析单元B从访存请求队列Q2中取出访存请求“1>10000 00000>0000000010>”,获取访存地址中Bank号位对应的二进制值Bank_Value为由于此时在DS1内所有Bank对应的访存次数总和为1023,即总和小于210,因此,将访存请求“1>10000>00010>”分发到访存请求队列Q21,更新DS1,即将第1个Bank对应的访存次数加1;
步骤A.7:地址解析单元B从队列Q2中取出访存请求“0>1100>0000000010>”,再次获取访存地址中Bank号位对应的二进制值Bank_Value为由于此时在DS1内所有Bank对应的访存次数总和为1024,即总和大于等于210,更新DS1,即将第7个Bank对应的访存次数加1,而第7个Bank对应的访存次数为215,显然215>1024/23,更新DS2中针对对应Bank的分发标志为RIGHT,将本次请求分发到访存请求队列Q22中;
步骤A.8:以类似步骤A.7的方式处理将“1>11100>00010>”发到访存请求队列Q22,将“011110>00010>”发送到访存请求队列Q21,更新DS1,DS2;
步骤A.9:标志解析模块C1取出访存请求队列Q21内的一条访存请求:“110000>00000>00010>”,获取其请求类别(R/W)位为1,即本请求为写访存请求,将其分派给读请求队列WQ21;
步骤A.10:标志解析模块C1再次取出访存请求队列Q21内的一条访存请求:“011110>00010>”,获取其请求类别(R/W)位:0,因此该请求为读访存请求,将其分派给读请求队列RQ21;
步骤A.11:标志解析模块C2取出访存请求队列Q22内的一条访存请求:“0>1100>00000>00010>”,获取其请求类别(R/W)位为0,即本请求为读访存请求,将其分派给读请求队列WQ22;
步骤A.12:标志解析模块C2再次取出访存请求队列Q22内的一条访存请求:“1>11100>00010>”,获取其请求类别(R/W)位为1,即本请求为写访存请求,将其分派给读请求队列WQ22。
步骤B.1:优先级解析模块优先从Q1中取出访存请求:“0>00000>00010>”,发送给命令解析模块,如果Q1内还有访存请求,依次取出发送给命令解析单元,直至Q1队列为空;
步骤B.2:优先级解析模块从RQ21中取出读访存请求“011110>00010>”,发送给命令解析模块,如果RQ21内还有访存请求,依次取出发送给命令解析模块,直至RQ21队列为空;
步骤B.3:优先级解析模块从RQ22中取出读访存请求“0>1100>00010>”,发送给命令解析模块,如果RQ22内还有访存请求,依次取出发送给命令解析模块,直至RQ22队列为空;
步骤B.4:优先级解析模块从WQ21中取出写访存请求“1>10000>00010>”,发送给命令解析模块,如果WQ21内还有访存请求,依次取出发送给命令解析模块,直至WQ21队列为空;
步骤B.5:优先级解析模块从WQ22中取出写访存请求“1>11100>00010>”,发送给命令解析模块,如果WQ22内还有访存请求,依次取出发送给命令解析模块,直至WQ22队列为空,转至步骤C.1。
假设此时命令解析模块中状态信息表的内容为:
其中,“NULL”表示当前内容为空,不存在相应的状态信息。
步骤C.1:更新状态信息表的ACTIVATE命令时间记录表信息,若所述记录表为空,转到步骤C.2,若所述记录表不为空,找到由所述命令控制逻辑最早发出的ACTIVATE命令的发出时间Time1,当Time1+tFAW≤Current_time时,删除ACTIVATE命令时间记录表中有关该ACTIVATE命令的时间信息,其中,“Current_time”表示当前时间;
以下步骤以命令控制逻辑接收到访存请求:“100000>00010>00110”为例,继续描述,
步骤C.2:获取访存地址中Bank号位对应的二进制值Bank_Value为行地址位对应的二进制值Row_Value为00000>、列地址位对应的二进制值Col_Value为00010>以及请求类别(R/W)为写请求,查找状态信息表内容,第Bank_Value个Bank当前不存在激活行,转至步骤C.3;
步骤C.3:检查ACTIVATE命令时间记录表,若所述时间记录表内的元素大于等于4条,代表当前不能发送ACTIVATE命令,跳转至步骤C.1,若所述时间记录表内的元素小于4条,顺序执行步骤C.4;
步骤C.4:查找状态信息表内容,发现命令控制逻辑发出的上一条命令类型为ACTIVATE,发出时间为time3;(由表2知,不同Bank的ACTIVATE和ACTIVATE命令的最小时间间隔tRRD)
步骤C.4.1:若time3+tRRD>Current_Time,则当前不能发送ACTIVATE命令,跳转至步骤C.4;
步骤C.4.2:若time3+tRRD≤Current_Time,继续查找Bank 0的状态信息发现Bank0接受到的最后一条命令为READ_P,时间为time1(由表1知,READ_P和ACTIVATE命令的最小时间间隔为tAL+tBURST+tRTP-tCCD+tRP),转至步骤步骤C.4.2.1;
步骤C.4.2.1:若time1+(tAL+tBURST+tRTP-tCCD+tRP)>Current_Time,跳转至步骤C.4;
步骤C.4.2.2:若time1+(tAL+tBURST+tRTP-tCCD+tRP)≤Current_Time,将ACTIVATE命令和Bank号为Bank_Value和行地址为Row_Value发送至命令执行模块,再次修改状态信息表的内容如下表所示,转至步骤C.5;
所述“Time5”表示发出ACTIVATE命令的时间。
步骤C.5:在状态信息表中查找Bank 0的状态信息,Bank0接受到的最后一条命令为ACTIVATE,时间为time5;(由表1知,相同Bank的ACTIVATE和WRITE_P命令的最小时间间隔为tRCD-tAL,由表2知,不同Bank的ACTIVATE和WRITE_P命令不存在最小时间间隔)
步骤C.5.1:若time5+tRCD-tAL≤Current_Time,将WRITE_P命令、Bank_Value、Col_Value发送至命令执行模块,再次修改状态信息表的内容如下表所示,转至步骤D.1;
步骤C.5.2:若time5+tRCD-tAL>Current_Time,跳转至步骤C.5。
步骤D.1.若执行部件接收到ACTIVATE命令、Bank_Value、Row_Value后,激活第Bank_Value个Bank上行地址为Row_Value的一行。
步骤D.2:若执行部件接收到WRITE_P命令、Bank_Value、Col_Value后,将数据写入到第Bank_Value个Bank上行地址为Row_Value列地址为Col_Value的存储空间,接着,从接收WRITE_P命令后,经过(tWR+tAL+tCWD+tBURST)的时间,对第Bank_Value个Bank进行预充电操作。
机译: 一种使用称为Fetch的移动应用程序进行在线访存安排的系统和方法
机译: 具有具有语法元素解析的视频解码功能的方法和装置,该语法和语法解析用于获得应用于以投影格式表示的360度图像内容或360度视频内容的面向内容的旋转的旋转信息
机译: 识别机器生成的请求的请求以解析文本标识符的方法和装置