CN103853675A - 一种访问内存的方法和设备 - Google Patents

一种访问内存的方法和设备 Download PDF

Info

Publication number
CN103853675A
CN103853675A CN201210520124.3A CN201210520124A CN103853675A CN 103853675 A CN103853675 A CN 103853675A CN 201210520124 A CN201210520124 A CN 201210520124A CN 103853675 A CN103853675 A CN 103853675A
Authority
CN
China
Prior art keywords
value
memory address
data cell
external device
device access
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.)
Granted
Application number
CN201210520124.3A
Other languages
English (en)
Other versions
CN103853675B (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.)
HiSilicon Technologies Co Ltd
Original Assignee
HiSilicon Technologies Co Ltd
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 HiSilicon Technologies Co Ltd filed Critical HiSilicon Technologies Co Ltd
Priority to CN201210520124.3A priority Critical patent/CN103853675B/zh
Publication of CN103853675A publication Critical patent/CN103853675A/zh
Application granted granted Critical
Publication of CN103853675B publication Critical patent/CN103853675B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Static Random-Access Memory (AREA)

Abstract

本发明公开了一种访问内存的方法和设备,属于计算机领域。方法包括:第一步,接收外部设备发送的访问内存的命令,命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据总线空闲的带宽,确定第一数值和第二数值;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,读取或写入第二数值个数据单元,减少数据单元的个数,增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍,数据单元个数小于第二数值且大于或等于1,将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。本发明提高了访问内存的效率。

Description

一种访问内存的方法和设备
技术领域
本发明涉及计算机领域,特别涉及一种访问内存的方法和设备。
背景技术
在计算机***中,计算机对内存频繁的进行访问,而访问内存的操作包括读操作和写操作。
目前,访问内存的方法具体为:接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址,如果该命令对应的操作为读操作,外部设备访问的内存地址是4个总线位宽之和的整数倍,以及外部设备需要访问的数据单元的个数大于或等于4,则在内存中从外部设备所访问的内存地址开始读取4个数据单元,如果外部设备访问的内存地址不是4个总线位宽之和的整数倍,或外部设备需要访问的数据单元的个数小于4,则在内存中从外部设备访问的内存地址开始读取1个数据单元;如果该命令对应的操作为写操作且外部设备需要访问的数据单元的个数大于或等于1,则在内存中从外部设备所访问的内存地址开始写入1个数据单元。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
如果外部设备所访问的内存地址不是4个总线位宽之和的整数倍或外部设备需要访问的数据单元的个数小于4时,则在内存中从外部设备所访问的内存地址开始读取1个数据单元,如果外部设备需要访问的数据单元的个数大于或等于1,则在内存中从外部设备所访问的内存地址开始写入1个数据单元,这样访问内存的方式会降低访问内存的效率。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种访问内存的方法和设备。所述技术方案如下:
第一方面,一种访问内存的方法,所述方法包括:
第一步,接收外部设备发送的访问内存的命令,所述命令中携带所述外部设备需要访问的数据单元的个数和访问的内存地址;
第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,所述第一数值和所述第二数值都大于或等于1且都为2的指数次方;
第三步,如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,将所述第二数值更新为所述第一数值,返回本步骤;
第四步,如果所述内存地址不是所述第二数值个总线位宽之和的整数倍或所述数据单元的个数小于所述第二数值且大于或等于1,则将所述第二数值除以2得到第三数值,将所述第二数值更新为所述第三数值,返回第三步。
结合第一方面,在上述第一方面的第一种可能的实现方式中,所述根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,包括:
根据终端内总线空闲的带宽,确定所述总线空闲的带宽所属于的带宽范围;
根据所述总线空闲的带宽所属于的带宽范围,从已存储的带宽范围和第一数值的对应关系中确定所述总线空闲的带宽对应的第一数值,并确定第二数值,所述第一数值等于所述第二数值。
结合第一方面,在上述第一方面的第二种可能的实现方式中,所述根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,包括:
将所述外部设备需要访问的数据单元的个数减少所述第二数值,得到减少后的所述外部设备需要访问的数据单元的个数;
根据所述第二数值、所述外部设备访问的内存地址和总线位宽,根据如下公式增加所述外部设备访问的内存地址,
Addr2=Addr1+buswidth/8*n
其中,在所述公式中,Addr2为增加后的所述外部设备访问的内存地址,Addr1为增加前的所述外部设备访问的内存地址,buswidth为所述总线位宽,n为所述第二数值。
结合第一方面至第一方面的第二种可能的实现方式的任一种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述接收外部设备发送的访问内存的命令之后,还包括:
将所述外部设备需要访问的数据单元的个数存储在第一寄存器中;
将所述外部设备访问的内存地址存储在第二寄存器中。
结合第一方面的第三种可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述根据所述第二数值减少所述数据单元的个数以及增加所述内存地址之后,还包括:
将所述第一寄存器中存储的所述数据单元的个数更新为减少后的所述数据单元的个数;
将所述第二寄存器中存储的所述内存地址更新为增加后的所述内存地址。
第二方面,一种访问内存的设备,所述设备包括:
接收模块,用于接收外部设备发送的访问内存的命令,所述命令中携带所述外部设备需要访问的数据单元的个数和访问的内存地址;
确定模块,用于根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,所述第一数值和所述第二数值都大于或等于1且都为2的指数次方;
读取或写入模块,用于如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,将所述第二数值更新为所述第一数值,返回本模块;
减少模块,用于如果所述内存地址不是所述第二数值个总线位宽之和的整数倍或所述数据单元的个数小于所述第二数值且大于或等于1,则将所述第二数值除以2得到第三数值,将所述第二数值更新为所述第三数值,返回读取或写入模块。
结合第二方面,在上述第二方面的第一种可能的实现方式中,所述确定模块包括:
第一确定单元,用于根据终端内总线空闲的带宽,确定所述总线空闲的带宽所属于的带宽范围;
第二确定单元,用于根据所述总线空闲的带宽所属于的带宽范围,从已存储的带宽范围和第一数值的对应关系中确定所述总线空闲的带宽对应的第一数值,并确定第二数值,所述第一数值等于所述第二数值。
结合第二方面,在上述第二方面的第二种可能的实现方式中,所述读取或写入模块包括:
读取或写入单元,用于如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,将所述第二数值更新为所述第一数值;
第一减少单元,用于将所述外部设备需要访问的数据单元的个数减少所述第二数值,得到减少后的所述外部设备需要访问的数据单元的个数;
增加单元,用于根据所述第二数值、所述外部设备访问的内存地址和总线位宽,根据如下公式增加所述外部设备访问的内存地址,
Addr2=Addr1+buswidth/8*n
其中,在所述公式中,Addr2为增加后的所述外部设备访问的内存地址,Addr1为增加前的所述外部设备访问的内存地址,buswidth为所述总线位宽,n为所述第二数值。
结合第二方面至第二方面的第二种可能的实现方式的任一种可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述设备还包括:
第一存储模块,用于将所述外部设备需要访问的数据单元的个数存储在第一寄存器中;
第二存储模块,用于将所述外部设备访问的内存地址存储在第二寄存器中。
结合第二方面的第三种可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述设备还包括:
第一更新模块,用于将所述第一寄存器中存储的所述数据单元的个数更新为减少后的所述数据单元的个数;
第二更新模块,用于将所述第二寄存器中存储的所述内存地址更新为增加后的所述内存地址。
第三方面,一种访问内存的设备,所述设备包括存储器和处理器,用于执行所述一种访问内存的方法。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是所述第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据所述内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
附图说明
图1是本发明实施例提供的一种访问内存的方法流程图;
图2是本发明实施例提供的另一种访问内存的方法流程图;
图3是本发明实施例提供的另一种访问内存的方法流程图;
图4是本发明实施例提供的另一种访问内存的方法流程图;
图5是本发明实施例提供的另一种访问内存的方法流程图;
图6是本发明实施例提供的另一种访问内存的方法流程图;
图7是本发明实施例提供的一种访问内存的装置结构示意图;
图8是本发明实施例提供的另一种访问内存的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例提供了一种访问内存的方法,参见图1,方法流程包括:
步骤101:接收外部设备发送的访问内存的命令,该命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
步骤102:根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;
步骤103:如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;
步骤104:如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回步骤103。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的方法,参见图2,方法流程包括:
步骤201:接收外部设备发送的访问内存的命令,该访问内存的命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
其中,外部设备需要访问的数据单元的个数存在一个最大值,在本实施例中将外部设备需要访问的数据单元的个数的最大值以16为例进行说明。
其中,在本实施例中,外部设备需要访问的数据单元的个数大于或等于1且小于或等于16。
其中,将该访问内存的命令中携带的该外部设备需要访问的数据单元的个数存储在第一寄存器中,将外部设备访问的内存地址存储在第二寄存器中。
其中,一个数据单元的大小和一个总线位宽的大小相等。
步骤202:根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,假如第一数值和第二数值均为16;
具体地,根据终端内总线空闲的带宽,确定终端内总线空闲的带宽所属于的带宽范围,根据确定的总线空闲的带宽所属于的带宽范围从已存储的带宽范围和第一数值的对应关系中,获取该总线空闲的带宽对应的第一数值,并确定第二数值,第一数值和第二数值相等,第一数值和第二数值都大于或等于1且都为2的指数次方,假如第一数值和第二数值均为16。
其中,事先保存第一数值和控制信号的对应关系,当确定的第一数值为16时,向CPU发送第一数值16对应的控制信号,使CPU执行第一数值16对应的block16操作,block16操作为从内存中读取或写入16个数据单元。
步骤203:判断外部设备访问的内存地址是否是16个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否等于第二数值16,如果外部设备访问的内存地址是16个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数等于第二数值16,则执行步骤204,否则,执行步骤205;
具体地,将外部设备访问的内存地址和16个总线位宽之和进行比较,判断外部设备访问的内存地址是否是16个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否等于16,如果外部设备访问的内存地址是16个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数等于16,则执行步骤204,否则,执行步骤205。
例如,总线的位宽为128bit,即为16Byte,外部设备需要访问的数据单元的个数为16,16个总线位宽之和为16*16Byte,即16个总线位宽之和为196Byte,将总线所访问的内存地址和16个总线位宽之和196Byte比较,判断总线所访问的内存地址是否是16个总线位宽之和196Byte的整数倍,并且判断外部设备需要访问的数据单元的个数等于第二数值16,如果总线所访问的内存地址是16个总线位宽之和196Byte的整数倍,则执行步骤204。
步骤204:根据外部设备访问的内存地址读取或写入第二数值16个数据单元,结束操作;
其中,当外部设备访问内存的命令对应的操作为读操作时,外部设备访问内存的命令中携带外部设备需要访问的数据单元的个数和访问的内存地址。
其中,当外部设备访问内存的命令对应的操作为写操作时,外部设备访问内存的命令中除了携带外部设备需要访问的数据单元的个数和访问的内存地址之外,该命令中还携带外部设备需要访问的数据单元。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取16个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入16个数据单元。
其中,在内存中从外部设备访问的内存地址开始读取16个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的16个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入16个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的16个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入第二数值16个数据单元之后,将第一寄存器和第二寄存器中的数据清零。
其中,在本实施例中,外部设备需要访问的数据单元的个数的最大值为16,根据外部设备访问的内存地址读取或写入16个数据单元之后,外部设备访问的数据单元为0,则结束操作。
步骤205:将第二数值16除以2,得到第三数值为8,将第二数值更新为第三数值8;
其中,将第二数值更新为第三数值8后,第二数值就变为8。
步骤206:判断外部设备访问的内存地址是否是8个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值8,如果外部设备访问的内存地址是8个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值8,则执行步骤207,否则,执行步骤208;
具体地,将外部设备访问的内存地址和8个总线位宽之和进行比较,判断外部设备访问的内存地址是否是8个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于8,如果外部设备访问的内存地址是8个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于8,则执行步骤207,否则,执行步骤208。
步骤207:根据外部设备访问的内存地址读取或写入8个数据单元,并根据第二数值8减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值8更新为第一数值16,返回步骤203;
具体地,从外部设备访问的内存地址开始读取或写入8个数据单元,根据第二数值8减少外部设备需要访问的数据单元的个数,并根据第二数值8和总线位宽,按照如下的公式(1)增加外部设备访问的内存地址,将第二数值8更新为第一数值16,返回步骤203,
Addr2=Addr1+buswidth/8*8    (1)
其中,在公式(1)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值8减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值8。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取8个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入8数据单元。
其中,在内存中从外部设备访问的内存地址开始读取8个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的8个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入8个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的8个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入8个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤208:将第二数值8除以2,得到第三数值为4,将第二数值更新为第三数值4;
其中,将第二数值更新为第三数值4后,第二数值就变为4。
步骤209:判断外部设备访问的内存地址是否是4个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值4,如果外部设备访问的内存地址是4个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值4,则执行步骤210,否则,执行步骤211;
具体地,将外部设备访问的内存地址和4个总线位宽之和进行比较,判断外部设备访问的内存地址是否是4个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于4,如果外部设备访问的内存地址是4个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于4,则执行步骤210,否则,执行步骤211。
步骤210:根据外部设备访问的内存地址读取或写入4个数据单元,并根据第二数值4减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值4更新为第一数值16,返回步骤203;
具体地,从外部设备访问的内存地址开始读取或写入4个数据单元,根据第二数值4减少外部设备需要访问的数据单元的个数,并根据第二数值4和总线位宽,按照如下公式(2)增加外部设备访问的内存地址,将第二数值4更新为第一数值16,返回步骤203,
Addr2=Addr1+buswidth/8*4    (2)
其中,在公式(2)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值4减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值4。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取4个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入4数据单元。
其中,在内存中从外部设备访问的内存地址开始读取4个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的4个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入4个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的4个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入4个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤211:将第二数值4除以2,得到第三数值为2,将第二数值更新为第三数值2;
其中,将第二数值更新为第三数值2后,第二数值就变为2。
步骤212:判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值2,则执行步骤213,否则,执行步骤214;
具体地,将外部设备访问的内存地址和2个总线位宽之和进行比较,判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于2,则执行步骤213,否则,执行步骤214。
步骤213:根据外部设备访问的内存地址读取或写入2个数据单元,并根据第二数值2减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值2更新为第一数值16,返回步骤203;
具体地,从外部设备访问的内存地址开始读取或写入2个数据单元,根据第二数值2减少外部设备需要访问的数据单元的个数,并根据第二数值2和总线位宽,按照如下公式(3)增加外部设备访问的内存地址,将第二数值2更新为第一数值16,返回步骤203,
Addr2=Addr1+buswidth/8*2    (3)
其中,在公式(3)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值2减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值2。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取2个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入2数据单元。
其中,在内存中从外部设备访问的内存地址开始读取2个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的2个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入2个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的2个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入2个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤214:将第二数值2除以2,得到第三数值为1,将第二数值更新为第三数值1;
其中,将第二数值更新为第三数值1后,第二数值就变为1。
步骤215:判断外部设备需要访问的数据单元的个数是否大于或等于第二数值1,如果是,则执行步骤216,否则,结束操作;
具体地,将外部设备需要访问的数据单元的个数和第二数值1进行比较,如果外部设备需要访问的数据单元的个数大于或等于1,则执行步骤216,否则,结束操作。
步骤216:根据外部设备访问的内存地址读取或写入1个数据单元,并根据第二数值1减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值1更新为第一数值16,返回步骤203。
具体地,从外部设备访问的内存地址开始读取或写入1个数据单元,根据第二数值1减少外部设备需要访问的数据单元的个数,并根据第二数值1和总线位宽,按照如下公式(4)增加外部设备访问的内存地址,将第二数值1更新为第一数值16,返回步骤203,
Addr2=Addr1+buswidth/8*1    (4)
其中,在公式(4)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值1减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值1。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取1个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入1数据单元。
其中,在内存中从外部设备访问的内存地址开始读取1个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的1个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入1个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的1个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入1个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的方法,参见图3,方法流程包括:
步骤301:接收外部设备发送的访问内存的命令,该访问内存的命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
其中,外部设备需要访问的数据单元的个数存在一个最大值,在本实施例中将外部设备需要访问的数据单元的个数的最大值以16为例进行说明。
其中,在本实施例中,外部设备需要访问的数据单元的个数大于或等于1且小于或等于16。
其中,将该访问内存的命令中携带的该外部设备需要访问的数据单元的个数存储在第一寄存器中,将外部设备访问的内存地址存储在第二寄存器中。
步骤302:根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,假如第一数值和第二数值均为8;
具体地,根据终端内总线空闲的带宽,确定终端内总线空闲的带宽所属于的带宽范围,根据确定的总线空闲的带宽所属于的带宽范围从已存储的带宽范围和第一数值的对应关系中,获取该总线空闲的带宽对应的第一数值,并确定第二数值,第一数值和第二数值相等,第一数值和第二数值都大于或等于1且都为2的指数次方,假如第一数值和第二数值均为8。
其中,事先保存第一数值和控制信号的对应关系,当确定的第一数值为8时,向CPU发送第一数值8对应的控制信号,使CPU执行第一数值8对应的block8操作,block8操作为从内存中读取或写入8个数据单元。
步骤303:判断外部设备访问的内存地址是否是8个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值8,如果外部设备访问的内存地址是8个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值8,则执行步骤304,否则,执行步骤305;
具体地,将外部设备访问的内存地址和8个总线位宽之和进行比较,判断外部设备访问的内存地址是否是8个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于8,如果外部设备访问的内存地址是8个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于8,则执行步骤304,否则,执行步骤305。
步骤304:根据外部设备访问的内存地址读取或写入8个数据单元,并根据第二数值8减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将确定的第二数值8更新为第一数值8,返回步骤303;
具体地,从外部设备访问的内存地址开始读取或写入8个数据单元,根据第二数值8减少外部设备需要访问的数据单元的个数,并根据第二数值8和总线位宽,按照如下公式(5)增加外部设备访问的内存地址,将第二数值8更新为第一数值8,返回步骤303,
Addr2=Addr1+buswidth/8*8    (5)
其中,在公式(5)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,当外部设备访问内存的命令对应的操作为读操作时,外部设备访问内存的命令中携带外部设备需要访问的数据单元的个数和访问的内存地址。
其中,当外部设备访问内存的命令对应的操作为写操作时,外部设备访问内存的命令中除了携带外部设备需要访问的数据单元的个数和访问的内存地址之外,该命令中还携带外部设备需要访问的数据单元。
其中,根据第二数值8减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值8。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取8个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入8数据单元。
其中,在内存中从外部设备访问的内存地址开始读取8个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的8个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入8个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的8个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入8个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤305:将第二数值8除以2,得到第三数值为4,将第二数值更新为第三数值4;
其中,将第二数值更新为第三数值4后,第二数值就变为4。
步骤306:判断外部设备访问的内存地址是否是4个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值4,如果外部设备访问的内存地址是4个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值4,则执行步骤307,否则,执行步骤308;
具体地,将外部设备访问的内存地址和4个总线位宽之和进行比较,判断外部设备访问的内存地址是否是4个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于4,如果外部设备访问的内存地址是4个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于4,则执行步骤307,否则,执行步骤308。
步骤307:根据外部设备访问的内存地址读取或写入4个数据单元,并根据第二数值4减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值4更新为第一数值8,返回步骤303;
具体地,从外部设备访问的内存地址开始读取或写入4个数据单元,根据第二数值4减少外部设备需要访问的数据单元的个数,并根据第二数值4和总线位宽,按照如下公式(6)增加外部设备访问的内存地址,将第二数值4更新为第一数值8,返回步骤303,
Addr2=Addr1+buswidth/8*4    (6)
其中,在公式(6)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值4减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值4。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取4个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入4数据单元。
其中,在内存中从外部设备访问的内存地址开始读取4个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的4个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入4个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的4个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入4个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤308:将第二数值4除以2,得到第三数值为2,将第二数值更新为第三数值2;
其中,将第二数值更新为第三数值2后,第二数值就变为2。
步骤309:判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值2,则执行步骤310,否则,执行步骤311;
具体地,将外部设备访问的内存地址和2个总线位宽之和进行比较,判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于2,则执行步骤310,否则,执行步骤311。
步骤310:根据外部设备访问的内存地址读取或写入2个数据单元,并根据第二数值2减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值2更新为第一数值8,返回步骤303;
具体地,从外部设备访问的内存地址开始读取或写入2个数据单元,根据第二数值2减少外部设备需要访问的数据单元的个数,并根据第二数值2和总线位宽,按照如下公式(7)增加外部设备访问的内存地址,将第二数值2更新为第一数值8,返回步骤303,
Addr2=Addr1+buswidth/8*2    (7)
其中,在公式(7)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值2减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值2。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取2个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入2数据单元。
其中,在内存中从外部设备访问的内存地址开始读取2个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的2个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入2个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的2个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入2个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤311:将第二数值2除以2,得到第三数值为1,将第二数值更新为第三数值1;
其中,将第二数值更新为第三数值1后,第二数值就变为1。
步骤312:判断外部设备需要访问的数据单元的个数是否大于或等于第二数值1,如果是,则执行步骤313,否则,结束操作;
具体地,将外部设备需要访问的数据单元的个数和第二数值1进行比较,如果外部设备需要访问的数据单元的个数大于或等于1,则执行步骤313,否则,结束操作。
步骤313:根据外部设备访问的内存地址读取或写入1个数据单元,并根据第二数值1减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值1更新为第一数值8,返回步骤303。
具体地,从外部设备访问的内存地址开始读取或写入1个数据单元,根据第二数值1减少外部设备需要访问的数据单元的个数,并根据第二数值1和总线位宽,按照如下公式(8)增加外部设备访问的内存地址,将第二数值1更新为第一数值8,返回步骤303,
Addr2=Addr1+buswidth/8*1    (8)
其中,在公式(8)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值1减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值1。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取1个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入1数据单元。
其中,在内存中从外部设备访问的内存地址开始读取1个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的1个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入1个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的1个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入1个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的方法,参见图4,方法流程包括:
步骤401:接收外部设备发送的访问内存的命令,该访问内存的命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
其中,外部设备需要访问的数据单元的个数存在一个最大值,在本实施例中将外部设备需要访问的数据单元的个数的最大值以16为例进行说明。
其中,在本实施例中,外部设备需要访问的数据单元的个数大于或等于1且小于或等于16。
其中,将该访问内存的命令中携带的该外部设备需要访问的数据单元的个数存储在第一寄存器中,将外部设备访问的内存地址存储在第二寄存器中。
步骤402:根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,假如第一数值和第二数值均为4;
具体地,根据终端内总线空闲的带宽,确定终端内总线空闲的带宽所属于的带宽范围,根据确定的总线空闲的带宽所属于的带宽范围从已存储的带宽范围和第一数值的对应关系中,获取该总线空闲的带宽对应的第一数值,并确定第二数值,第一数值和第二数值相等,第一数值和第二数值都大于或等于1且都为2的指数次方,假如第一数值和第二数值均为4。
其中,事先保存第一数值和控制信号的对应关系,当确定的第一数值为4时,向CPU发送第一数值4对应的控制信号,使CPU执行第一数值4对应的block4操作,block4操作为从内存中读取或写入4个数据单元。
步骤403:判断外部设备访问的内存地址是否是4个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值4,如果外部设备访问的内存地址是4个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值4,则执行步骤404,否则,执行步骤405;
具体地,将外部设备访问的内存地址和4个总线位宽之和进行比较,判断外部设备访问的内存地址是否是4个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于4,如果外部设备访问的内存地址是4个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于4,则执行步骤404,否则,执行步骤405。
步骤404:根据外部设备访问的内存地址读取或写入4个数据单元,并根据第二数值4减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将确定的第二数值4更新为第一数值4,返回步骤403;
具体地,从外部设备访问的内存地址开始读取或写入4个数据单元,根据第二数值4减少外部设备需要访问的数据单元的个数,并根据第二数值4和总线位宽,按照如下公式(9)增加外部设备访问的内存地址,将第二数值4更新为第一数值4,返回步骤403,
Addr2=Addr1+buswidth/8*4    (9)
其中,在公式(9)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,当外部设备访问内存的命令对应的操作为读操作时,外部设备访问内存的命令中携带外部设备需要访问的数据单元的个数和访问的内存地址。
其中,当外部设备访问内存的命令对应的操作为写操作时,外部设备访问内存的命令中除了携带外部设备需要访问的数据单元的个数和访问的内存地址之外,该命令中还携带外部设备需要访问的数据单元。
其中,根据第二数值4减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值4。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取4个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入4数据单元。
其中,在内存中从外部设备访问的内存地址开始读取4个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的4个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入4个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的4个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入4个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤405:将第二数值4除以2,得到第三数值为2,将第二数值更新为第三数值2;
其中,将第二数值更新为第三数值2后,第二数值就变为2。
步骤406:判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值2,则执行步骤407,否则,执行步骤408;
具体地,将外部设备访问的内存地址和2个总线位宽之和进行比较,判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于2,则执行步骤407,否则,执行步骤408。
步骤407:根据外部设备访问的内存地址读取或写入2个数据单元,并根据第二数值2减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值2更新为第一数值4,返回步骤403;
具体地,从外部设备访问的内存地址开始读取或写入2个数据单元,根据第二数值2减少外部设备需要访问的数据单元的个数,并根据第二数值2和总线位宽,按照如下公式(10)增加外部设备访问的内存地址,将第二数值2更新为第一数值4,返回步骤403,
Addr2=Addr1+buswidth/8*2    (10)
其中,在公式(10)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值2减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值2。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取2个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入2数据单元。
其中,在内存中从外部设备访问的内存地址开始读取2个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的2个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入2个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的2个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入2个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤408:将第二数值2除以2,得到第三数值为1,将第二数值更新为第三数值1;
其中,将第二数值更新为第三数值1后,第二数值就变为1。
步骤409:判断外部设备需要访问的数据单元的个数是否大于或等于第二数值1,如果是,则执行步骤410,否则,结束操作;
具体地,将外部设备需要访问的数据单元的个数和第二数值1进行比较,如果外部设备需要访问的数据单元的个数大于或等于1,则执行步骤410,否则,结束操作。
步骤410:根据外部设备访问的内存地址读取或写入1个数据单元,并根据第二数值1减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值1更新为第一数值4,返回步骤403。
具体地,从外部设备访问的内存地址开始读取或写入1个数据单元,根据第二数值1减少外部设备需要访问的数据单元的个数,并根据第二数值1和总线位宽,按照如下公式(11)增加外部设备访问的内存地址,将第二数值1更新为第一数值4,返回步骤403,
Addr2=Addr1+buswidth/8*1    (11)
其中,在公式(11)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值1减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值1。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取1个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入1数据单元。
其中,在内存中从外部设备访问的内存地址开始读取1个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的1个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入1个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的1个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入1个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的方法,参见图5,方法流程包括:
步骤501:接收外部设备发送的访问内存的命令,该访问内存的命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
其中,外部设备需要访问的数据单元的个数存在一个最大值,在本实施例中将外部设备需要访问的数据单元的个数的最大值以16为例进行说明。
其中,在本实施例中,外部设备需要访问的数据单元的个数大于或等于1且小于或等于16。
其中,将该访问内存的命令中携带的该外部设备需要访问的数据单元的个数存储在第一寄存器中,将外部设备访问的内存地址存储在第二寄存器中。
步骤502:根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,假如第一数值和第二数值均为2;
具体地,根据终端内总线空闲的带宽,确定终端内总线空闲的带宽所属于的带宽范围,根据确定的总线空闲的带宽所属于的带宽范围从已存储的带宽范围和第一数值的对应关系中,获取该总线空闲的带宽对应的第一数值,并确定第二数值,第一数值和第二数值相等,第一数值和第二数值都大于或等于1且都为2的指数次方,假如第一数值和第二数值均为2。
其中,事先保存第一数值和控制信号的对应关系,当确定的第一数值为2时,向CPU发送第一数值2对应的控制信号,使CPU执行第一数值2对应的block2操作,block2操作为从内存中读取或写入2个数据单元。
步骤503:判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于第二数值2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于第二数值2,则执行步骤504,否则,执行步骤505;
具体地,将外部设备访问的内存地址和2个总线位宽之和进行比较,判断外部设备访问的内存地址是否是2个总线位宽之和的整数倍,并且判断外部设备需要访问的数据单元的个数是否大于或等于2,如果外部设备访问的内存地址是2个总线位宽之和的整数倍并且外部设备需要访问的数据单元的个数大于或等于2,则执行步骤504,否则,执行步骤505。
步骤504:根据外部设备访问的内存地址读取或写入2个数据单元,并根据第二数值2减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将确定的第二数值2更新为第一数值2,返回步骤503;
具体地,从外部设备访问的内存地址开始读取或写入2个数据单元,根据第二数值2减少外部设备需要访问的数据单元的个数,并根据第二数值2和总线位宽,按照如下公式(12)增加外部设备访问的内存地址,将第二数值2更新为第一数值2,返回步骤503,
Addr2=Addr1+buswidth/8*2    (12)
其中,在公式(12)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,当外部设备访问内存的命令对应的操作为读操作时,外部设备访问内存的命令中携带外部设备需要访问的数据单元的个数和访问的内存地址。
其中,当外部设备访问内存的命令对应的操作为写操作时,外部设备访问内存的命令中除了携带外部设备需要访问的数据单元的个数和访问的内存地址之外,该命令中还携带外部设备需要访问的数据单元。
其中,根据第二数值2减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值2。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取2个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入2数据单元。
其中,在内存中从外部设备访问的内存地址开始读取2个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的2个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入2个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的2个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入2个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
步骤505:将第二数值2除以2,得到第三数值为1,将第二数值更新为第三数值1;
其中,将第二数值更新为第三数值1后,第二数值就变为1。
步骤506:判断外部设备需要访问的数据单元的个数是否大于或等于第二数值1,如果是,则执行步骤507,否则,结束操作;
具体地,将外部设备需要访问的数据单元的个数和第二数值1进行比较,如果外部设备需要访问的数据单元的个数大于或等于1,则执行步骤507,否则,结束操作。
步骤507:根据外部设备访问的内存地址读取或写入1个数据单元,并根据第二数值1减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将第二数值1更新为第一数值2,返回步骤503。
具体地,从外部设备访问的内存地址开始读取或写入1个数据单元,根据第二数值1减少外部设备需要访问的数据单元的个数,并根据第二数值1和总线位宽,按照如下公式(13)增加外部设备访问的内存地址,将第二数值1更新为第一数值2,返回步骤503,
Addr2=Addr1+buswidth/8*1    (13)
其中,在公式(13)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,根据第二数值1减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值1。
其中,根据外部设备访问的内存地址读取或写入1个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的方法,参见图6,方法流程包括:
步骤601:接收外部设备发送的访问内存的命令,该访问内存的命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
其中,外部设备需要访问的数据单元的个数存在一个最大值,在本实施例中将外部设备需要访问的数据单元的个数的最大值以16为例进行说明。
其中,在本实施例中,外部设备需要访问的数据单元的个数大于或等于1且小于或等于16。
其中,将该访问内存的命令中携带的该外部设备需要访问的数据单元的个数存储在第一寄存器中,将外部设备访问的内存地址存储在第二寄存器中。
步骤602:根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,假如第一数值和第二数值均为1;
具体地,根据终端内总线空闲的带宽,确定终端内总线空闲的带宽所属于的带宽范围,根据确定的总线空闲的带宽所属于的带宽范围从已存储的带宽范围和第一数值的对应关系中,获取该总线空闲的带宽对应的第一数值,并确定第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方,假如第一数值和第二数值均为1。
其中,事先保存第一数值和控制信号的对应关系,当确定的第一数值为1时,向CPU发送第一数值1对应的控制信号,使CPU执行第一数值1对应的single操作,single操作为从内存中读取或写入1个数据单元。
步骤603:判断外部设备需要访问的数据单元的个数是否大于或等于第二数值1,如果是,则执行步骤604,否则,结束操作;
具体地,将外部设备需要访问的数据单元的个数和数值1进行比较,判断外部设备需要访问的数据单元的个数是否大于或等于1,如果外部设备需要访问的数据单元的个数大于或等于1,则执行步骤604,否则,结束操作。
步骤604:根据外部设备访问的内存地址读取或写入1个数据单元,并根据第二数值1减少外部设备需要访问的数据单元的个数以及增加外部设备访问的内存地址,将确定的第二数值1更新为第一数值1,返回步骤603;
具体地,从外部设备访问的内存地址开始读取或写入1个数据单元,根据第二数值1减少外部设备需要访问的数据单元的个数,并根据第二数值1和总线位宽,按照如下公式(14)增加外部设备访问的内存地址,将第二数值1更新为第一数值1,返回步骤603,
Addr2=Addr1+buswidth/8*1    (14)
其中,在公式(14)中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽。
其中,当外部设备访问内存的命令对应的操作为读操作时,外部设备访问内存的命令中携带外部设备需要访问的数据单元的个数和访问的内存地址。
其中,当外部设备访问内存的命令对应的操作为写操作时,外部设备访问内存的命令中除了携带外部设备需要访问的数据单元的个数和访问的内存地址之外,该命令中还携带外部设备需要访问的数据单元。
其中,根据第二数值1减少外部设备需要访问的数据单元的个数的具体操作为:将外部设备需要访问的数据单元的个数减去第二数值1。
其中,当外部设备访问内存的命令对应的操作为读操作时,则在内存中从外部设备访问的内存地址开始读取1个数据单元,当外部设备访问内存的命令对应的操作为写操作时,则在内存中从外部设备访问的内存地址开始写入1数据单元。
其中,在内存中从外部设备访问的内存地址开始读取1个数据单元具体为:在内存中,将从外部设备访问的内存地址开始的1个数据单元通过终端内的总线传输给外部设备。
其中,在内存中从外部设备访问的内存地址开始写入1个数据单位具体为:在内存中,将外部设备访问内存的命令中携带的1个数据单元通过终端内的总线从外部设备访问的内存地址开始传输给内存。
其中,根据外部设备访问的内存地址读取或写入1个数据单元之后,将第一寄存器中的外部设备需要访问的数据单元的个数更新为减少后的数据单元的个数,将第二寄存器中的外部设备访问的内存地址更新为增加后的内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的设备,参见图7,该设备包括:
接收模块701,用于接收外部设备发送的访问内存的命令,该命令中携带该外部设备需要访问的数据单元的个数和访问的内存地址;
确定模块702,用于根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,所述第一数值和所述第二数值都大于或等于1且都为2的指数次方;
读取或写入模块703,用于如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,将所述第二数值更新为所述第一数值,返回本模块703;
减少模块704,用于如果所述内存地址不是所述第二数值个总线位宽之和的整数倍或所述数据单元的个数小于所述第二数值且大于或等于1,则将所述第二数值除以2得到第三数值,将所述第二数值更新为所述第三数值,返回读取或写入模块。
其中,确定模块702包括:
第一确定单元,用于根据终端内总线空闲的带宽,确定该总线空闲的带宽所属于的带宽范围;
第二确定单元,用于根据所述总线空闲的带宽所属于的带宽范围,从已存储的带宽范围和第一数值的对应关系中确定所述总线空闲的带宽对应的第一数值,并确定第二数值,所述第一数值等于所述第二数值。
其中,读取或写入模块703包括:
读取或写入单元,用于如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,将所述第二数值更新为所述第一数值;
第一减少单元,用于将所述外部设备需要访问的数据单元的个数减少所述第二数值,得到减少后的所述外部设备需要访问的数据单元的个数;
增加单元,用于根据第二数值、该外部设备访问的内存地址和总线位宽,根据如下公式增加该外部设备访问的内存地址,
Addr2=Addr1+buswidth/8*n
其中,在公式中,Addr2为增加后的外部设备访问的内存地址,Addr1为增加前的外部设备访问的内存地址,buswidth为总线位宽,n为第二数值。
进一步地,所述设备还包括:
第一存储模块,用于将外部设备需要访问的数据单元的个数存储在第一寄存器中;
第二存储模块,用于将外部设备访问的内存地址存储在第二寄存器中。
进一步地,所述设备还包括:
第一更新模块,用于将第一寄存器中存储的数据单元的个数更新为减少后的数据单元的个数;
第二更新模块,用于将第二寄存器中存储的所述内存地址更新为增加后的内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本发明实施例提供了一种访问内存的设备,参见图8,该设备包括:
存储器801和处理器802,用于执行如下访问内存的方法:
第一步,接收外部设备发送的访问内存的命令,所述命令中携带所述外部设备需要访问的数据单元的个数和访问的内存地址;
第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,所述第一数值和所述第二数值都大于或等于1且都为2的指数次方;
第三步,如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,将所述第二数值更新为所述第一数值,返回本步骤;
第四步,如果所述内存地址不是所述第二数值个总线位宽之和的整数倍或所述数据单元的个数小于所述第二数值且大于或等于1,则将所述第二数值除以2得到第三数值,将所述第二数值更新为所述第三数值,返回第三步。
其中,所述根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,包括:
根据终端内总线空闲的带宽,确定所述总线空闲的带宽所属于的带宽范围;
根据所述总线空闲的带宽所属于的带宽范围,从已存储的带宽范围和第一数值的对应关系中确定所述总线空闲的带宽对应的第一数值,并确定第二数值,所述第一数值等于所述第二数值。
其中,所述根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,包括:
将所述外部设备需要访问的数据单元的个数减少所述第二数值,得到减少后的所述外部设备需要访问的数据单元的个数;
根据所述第二数值、所述外部设备访问的内存地址和总线位宽,根据如下公式增加所述外部设备访问的内存地址,
Addr2=Addr1+buswidth/8*n
其中,在所述公式中,Addr2为增加后的所述外部设备访问的内存地址,Addr1为增加前的所述外部设备访问的内存地址,buswidth为所述总线位宽,n为所述第二数值。
进一步地,所述接收外部设备发送的访问内存的命令之后,还包括:
将所述外部设备需要访问的数据单元的个数存储在第一寄存器中;
将所述外部设备访问的内存地址存储在第二寄存器中。
进一步地,所述根据所述第二数值减少所述数据单元的个数以及增加所述内存地址之后,还包括:
将所述第一寄存器中存储的所述数据单元的个数更新为减少后的所述数据单元的个数;
将所述第二寄存器中存储的所述内存地址更新为增加后的所述内存地址。
在本发明实施例中,第一步,接收外部设备发送的访问内存的命令,该命令中携带外部设备需要访问的数据单元的个数和访问的内存地址;第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,第一数值等于第二数值,第一数值和第二数值都大于或等于1且都为2的指数次方;第三步,如果内存地址是第二数值个总线位宽之和的整数倍且数据单元的个数大于或等于第二数值,则根据内存地址读取或写入第二数值个数据单元,根据第二数值减少数据单元的个数以及增加内存地址,将第二数值更新为第一数值,返回本步骤;第四步,如果内存地址不是第二数值个总线位宽之和的整数倍或数据单元的个数小于第二数值且大于或等于1,则将第二数值除以2得到第三数值,将第二数值更新为第三数值,返回第三步。其中,当外部设备访问的内存地址不是第二数值个总线位宽之和的整数倍或该数据单元的个数小于第二数值时,不会立即将确定第二数值减少为1并读取或写入1个数据单元,如此,可以提高访问内存的效率。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种访问内存的方法,其特征在于,所述方法包括:
第一步,接收外部设备发送的访问内存的命令,所述命令中携带所述外部设备需要访问的数据单元的个数和访问的内存地址;
第二步,根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,所述第一数值和所述第二数值都大于或等于1且都为2的指数次方;
第三步,如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,将所述第二数值更新为所述第一数值,返回本步骤;
第四步,如果所述内存地址不是所述第二数值个总线位宽之和的整数倍或所述数据单元的个数小于所述第二数值且大于或等于1,则将所述第二数值除以2得到第三数值,将所述第二数值更新为所述第三数值,返回第三步。
2.根据权利要求1所述的方法,其特征在于,所述根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,包括:
根据终端内总线空闲的带宽,确定所述总线空闲的带宽所属于的带宽范围;
根据所述总线空闲的带宽所属于的带宽范围,从已存储的带宽范围和第一数值的对应关系中确定所述总线空闲的带宽对应的第一数值,并确定第二数值,所述第一数值等于所述第二数值。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,包括:
将所述外部设备需要访问的数据单元的个数减少所述第二数值,得到减少后的所述外部设备需要访问的数据单元的个数;
根据所述第二数值、所述外部设备访问的内存地址和总线位宽,根据如下公式增加所述外部设备访问的内存地址,
Addr2=Addr1+buswidth/8*n
其中,在所述公式中,Addr2为增加后的所述外部设备访问的内存地址,Addr1为增加前的所述外部设备访问的内存地址,buswidth为所述总线位宽,n为所述第二数值。
4.根据权利要求1至3任一权利要求所述的方法,其特征在于,所述接收外部设备发送的访问内存的命令之后,还包括:
将所述外部设备需要访问的数据单元的个数存储在第一寄存器中;
将所述外部设备访问的内存地址存储在第二寄存器中。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第二数值减少所述数据单元的个数以及增加所述内存地址之后,还包括:
将所述第一寄存器中存储的所述数据单元的个数更新为减少后的所述数据单元的个数;
将所述第二寄存器中存储的所述内存地址更新为增加后的所述内存地址。
6.一种访问内存的设备,其特征在于,所述设备包括:
接收模块,用于接收外部设备发送的访问内存的命令,所述命令中携带所述外部设备需要访问的数据单元的个数和访问的内存地址;
确定模块,用于根据终端内总线空闲的带宽,确定第一数值和第二数值,所述第一数值等于所述第二数值,所述第一数值和所述第二数值都大于或等于1且都为2的指数次方;
读取或写入模块,用于如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,根据所述第二数值减少所述数据单元的个数以及增加所述内存地址,将所述第二数值更新为所述第一数值,返回本模块;
减少模块,用于如果所述内存地址不是所述第二数值个总线位宽之和的整数倍或所述数据单元的个数小于所述第二数值且大于或等于1,则将所述第二数值除以2得到第三数值,将所述第二数值更新为所述第三数值,返回读取或写入模块。
7.根据权利要求6所述的设备,其特征在于,所述确定模块包括:
第一确定单元,用于根据终端内总线空闲的带宽,确定所述总线空闲的带宽所属于的带宽范围;
第二确定单元,用于根据所述总线空闲的带宽所属于的带宽范围,从已存储的带宽范围和第一数值的对应关系中确定所述总线空闲的带宽对应的第一数值,并确定第二数值,所述第一数值等于所述第二数值。
8.根据权利要求6所述的设备,其特征在于,所述读取或写入模块包括:
读取或写入单元,用于如果所述内存地址是所述第二数值个总线位宽之和的整数倍且所述数据单元的个数大于或等于所述第二数值,则根据所述内存地址读取或写入所述第二数值个数据单元,将所述第二数值更新为所述第一数值;
第一减少单元,用于将所述外部设备需要访问的数据单元的个数减少所述第二数值,得到减少后的所述外部设备需要访问的数据单元的个数;
增加单元,用于根据所述第二数值、所述外部设备访问的内存地址和总线位宽,根据如下公式增加所述外部设备访问的内存地址,
Addr2=Addr1+buswidth/8*n
其中,在所述公式中,Addr2为增加后的所述外部设备访问的内存地址,Addr1为增加前的所述外部设备访问的内存地址,buswidth为所述总线位宽,n为所述第二数值。
9.根据权利要求6至8任一权利要求所述的设备,其特征在于,所述设备还包括:
第一存储模块,用于将外部设备需要访问的数据单元的个数存储在第一寄存器中;
第二存储模块,用于将所述外部设备访问的内存地址存储在第二寄存器中。
10.根据权利要求9所述的设备,其特征在于,所述设备还包括:
第一更新模块,用于将所述第一寄存器中存储的所述数据单元的个数更新为减少后的数据单元的个数;
第二更新模块,用于将所述第二寄存器中存储的所述内存地址更新为增加后的内存地址。
11.一种访问内存的设备,其特征在于,所述设备包括存储器和处理器,用于执行如权利要求1至5任一权利要求所述的一种访问内存的方法。
CN201210520124.3A 2012-12-06 2012-12-06 一种访问内存的方法和设备 Active CN103853675B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210520124.3A CN103853675B (zh) 2012-12-06 2012-12-06 一种访问内存的方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210520124.3A CN103853675B (zh) 2012-12-06 2012-12-06 一种访问内存的方法和设备

Publications (2)

Publication Number Publication Date
CN103853675A true CN103853675A (zh) 2014-06-11
CN103853675B CN103853675B (zh) 2017-03-15

Family

ID=50861351

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210520124.3A Active CN103853675B (zh) 2012-12-06 2012-12-06 一种访问内存的方法和设备

Country Status (1)

Country Link
CN (1) CN103853675B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897021A (zh) * 2015-12-17 2017-06-27 青岛海信电器股份有限公司 一种读写数据的方法和装置
CN111176583A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 一种数据写入方法、装置和电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1044750C (zh) * 1994-10-20 1999-08-18 联华电子股份有限公司 可变宽度内存数据实时读取装置
KR20030070410A (ko) * 2002-02-25 2003-08-30 주식회사 엘지이아이 데이터 처리 시스템
KR20080025543A (ko) * 2006-09-18 2008-03-21 엠텍비젼 주식회사 버스 구조의 대역폭 확장 장치 및 방법
CN102231121B (zh) * 2011-07-25 2013-02-27 北方工业大学 基于内存映射的大数据文件快速并行提取方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897021A (zh) * 2015-12-17 2017-06-27 青岛海信电器股份有限公司 一种读写数据的方法和装置
CN111176583A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 一种数据写入方法、装置和电子设备
CN111176583B (zh) * 2019-12-31 2021-03-30 北京百度网讯科技有限公司 一种数据写入方法、装置和电子设备

Also Published As

Publication number Publication date
CN103853675B (zh) 2017-03-15

Similar Documents

Publication Publication Date Title
US7447870B2 (en) Device for identifying data characteristics for flash memory
CN113868155B (zh) 一种内存空间扩展方法、装置及电子设备和存储介质
JP5722389B2 (ja) キャッシュライン置換のためのシステムおよび方法
CN105677580A (zh) 访问缓存的方法和装置
US9063860B2 (en) Method and system for optimizing prefetching of cache memory lines
CN102096639A (zh) 用于修剪在非易失性闪速介质上的数据的方法
US9823854B2 (en) Priority-based access of compressed memory lines in memory in a processor-based system
US10318165B2 (en) Data operating method, device, and system
CN102859504B (zh) 复制数据的方法和***以及获得数据副本的方法
CN113900974B (zh) 一种存储装置、数据存储方法及相关设备
CN115357540B (zh) 存储***及其计算存储处理器、固体硬盘和数据读写方法
CN110941582B (zh) 一种bmc芯片的usb总线结构及其通信方法
US20140297957A1 (en) Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus
CN103559079A (zh) 一种基于共享内存的数据存取方法及装置
CN103853675A (zh) 一种访问内存的方法和设备
CN103488582A (zh) 写高速缓冲存储器的方法及装置
CN115562655A (zh) 基于bms的对象字典访问方法、***、电子设备、存储介质
US9009389B2 (en) Memory management table processing method, memory controller, and memory storage apparatus
CN115963977A (zh) 一种固态硬盘及其数据操作方法、装置及电子设备
CN113656331A (zh) 基于高低位的确定访问地址的方法和装置
CN108664417B (zh) 一种目录更新方法及装置
CN105205017A (zh) 一种基于pcie ssd的存储控制器
CN105659216A (zh) 多核处理器***的缓存目录处理方法和目录控制器
CN105528312A (zh) 一种保证通信处理机与主机间接收数据完整性的***及其方法
CN102890618A (zh) 一种带分区管理的存储扩展设备

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