一种内存访问方法和装置的制作方法

文档序号:6603673阅读:144来源:国知局
专利名称:一种内存访问方法和装置的制作方法
技术领域
本发明涉及计算机技术,特别涉及一种内存访问方法和装置。
背景技术
在当前的计算机系统特别是嵌入式系统当中,硬件运算能力的日益提高使得越来越多的系统功能得以实现,而实现这些功能的软件的规模也相应的不断增大,从而软件的可执行代码的长度越来越长。对于传统的寻址范围为2M字节的中央处理器(CPU),M为正整数,CPU在内存 (RAM)空间中的一次寻址范围为2M字节,从而每次能够被执行的可执行代码的最大长度也为2M字节。显然,若可执行代码的长度超过该寻址范围时,即使可执行代码能够全部保存在RAM空间当中,CPU也无法一次性全部执行。这时,传统的解决方法是采用软件方式的分页(BankSwitch)模式来控制每次执行的可行代码片段——将保存全部可执行代码的RAM 空间进行分页,CPU每次选取其中一页进行执行且各页之间的地址复用;同时,由于每页的可执行代码并非功能上完整的单元,从而在可执行代码的执行过程中不可避免的需要在各页之间进行切换,因此,还需要设置进行分页切换的代码(通常称为Bank切换代码)来实现各分页之间的切换。下面通过一个具体示例来对所述Bank Switch模式进行详细说明,BankSwitch模式下可执行代码在RAM中的存储方式如图1所示,假设此时的RAM空间(通常也称为程序空间)为223字节,将其等分成1 个bank (页面),每一个页面的大小为216字节其中,可执行代码共分为1 页(其编号为bank 0 bank 127),各页的地址复用——其起始地址大于等于0x0000,小于Oxffff (称为bank baseaddress),结束地址为 OxFFFF,通常将该地址空间称为页空间;在任一时刻,仅有一个页面中保存的可执行代码处于执行状态,通常称该页面为处于激活状态的页面——即,CPU在同一时间点上仅执行处于激活状态的页面中保存的可执行代码;同时,所述地址复用的含义为处于激活状态的页面i (i = 0、1. . . η,η彡127)的物理地址空间为所述的bank base address FFFF, 而未处于激活状态的其它各页面则未被分配地址;另一方面,物理地址空间0000 bank base address称为共用段,该地址空间用于存储所述可执行代码中那些基本的、全局性的代码——例如用于变量初始化的代码、中断服务代码以及用于进行分页切换的页面切换代码等。在这种情况下,如果当前处于激活状态的页面中的可执行代码执行过程中,需要调用位于其它页面的代码,就必须要在不同的页面间进行切换,因此每一个这种用于进行页面切换的页面切换代码都需要存储在RAM的根空间中。随着代码的页面数量的增多(即 i值越大),相应产生的页面切换代码的数量就越多,从而所有页面切换代码在根空间中占用的空间就越大。通常,每个用于进行页面切换的页面切换代码的大小约为32 48字节, 而一个正常尺寸的软件需要的页面切换代码的数量至少为上百个,这就会使得RAM根空间中存储的页面切换代码增大到4KB以上,而对于目前集成电路中的RAM来说,使用4KB字节或以上的空间只是用来完成页面切换的功能显然是不能接受的,因为RAM空间数量有限且成本很高,这种方式会导致大量RAM空间被占用而无法反复利用。

发明内容
本发明的主要目的在于提供一种内存访问方法和装置,能够减小对RAM空间的需要,提高RAM空间利用效率,降低程序编写和调试的复杂程度。为达到上述目的,本发明的技术方案具体是这样实现的一种内存访问方法,该方法包括步骤A、通过预设的硬件检测电路判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面,如果不在同一页面,触发CPU的页面切换机制,并同时记录发现页面不匹配时的程序计数器的值;步骤B、CPU进行页面切换时,保存将要访问的数据或指令所在的页面号码至页面寄存器中,开始执行页面切换处理程序,所述页面切换处理程序包括根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序 RAM当中,并将当前页面寄存器的值更新为保存的页面号码;步骤C、结束页面切换处理程序,将程序计数器的值修改回记录的所述发现页面不匹配时的程序计数器的值,并返回继续执行步骤A。所述判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面的方法包括将CPU访问的地址空间等分成2N个页面,N为大于0的整数且N小于CPU的寻址的位宽M,M为大于0的整数,其中,M的高N位表示页面号码,低(M-N)位为页面内的地址;判断程序计数器的高N位与当前页面寄存器的值是否相同,所述当前页面寄存器的值表示CPU当前访问的数据或指令所在的页面号码;如果相同,则所述CPU将要访问的数据或指令与当前正在访问的数据或指令在同一页面;如果不同,则不在同一页面。若CPU采用直接取指的方式访问程序空间,所述触发CPU的页面切换机制的方法包括硬件检测电路将页面切换指令作为CPU的预取指令送入CPU,当CPU执行到该指令时产生进行页面切换的控制信号,开始页面切换。所述CPU进行页面切换时,保存将要访问的数据或指令所在的页面号码,开始执行页面切换处理程序;根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码的方法包括CPU将当前的程序计数器压入堆栈,并将此时程序计数器的高N位所表示的页面号作为新页面号进行保存;之后,准备执行页面切换处理程序;将堆栈中程序计数器的取值修改为不匹配地址,作为返回现场使用的程序指针, 从外部存储器中将将要取指的代码更新到程序RAM当中,并将当前页面寄存器的值更新为所述保存的新页面号。若CPU通过寄存器间接寻址的方式访问程序空间和数据空间,所述触发CPU的页面切换机制的方法包括硬件检测电路直接向CPU发送进行页面切换的控制信号。所述CPU进行页面切换时,保存CPU将要访问的数据或指令所在的页面号码,开始执行页面切换处理程序;根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码的方法包括CPU接到硬件检测电路发送的控制信号后,取消当前指令的执行并保存当前指令的PC的取值;将当前指令的PC修改为页面切换处理程序所在的起始地址,并将送往地址总线的访问信号无效掉;之后,准备执行页面切换处理程序;将取值等于不匹配地址的PC压入堆栈作为返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码。所述页面切换处理程序常驻内存且放置在程序空间默认页面的公用段当中,供 CPU在需要的时候随时调用。一种内存访问装置,该装置包括硬件检测电路,用于判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面,如果不在同一页面,触发CPU的页面切换机制,并同时记录发现页面不匹配时的程序计数器的值;CPU,用于在进行页面切换时,保存将要访问的数据或指令所在的页面号码至页面寄存器中,开始执行页面切换处理程序,所述页面切换处理程序包括根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码;之后,结束页面切换处理程序,将程序计数器的值修改回记录的所述发现页面不匹配时的程序计数器的值,并通知所述硬件检测电路继续进行判断。所述硬件检测电路包括判断单元,用于将CPU访问的地址空间等分成页面,N为大于0的整数且N小于CPU的寻址的位宽M,M为大于0的整数,其中,M的高N位表示页面号码,低(M-N)位为页面内的地址;判断程序计数器的高N位与当前页面寄存器的值是否相同,所述当前页面寄存器的值表示CPU当前访问的数据或指令所在的页面号码;如果相同,则所述CPU将要访问的数据或指令与当前正在访问的数据或指令在同一页面;如果不同,则不在同一页面。所述硬件检测电路还包括页面切换触发单元,用于在CPU采用直接取指的方式访问程序空间时,将页面切换指令作为CPU的预取指令送入CPU,当CPU执行到该指令时产生进行页面切换的控制信号,开始页面切换;还用于在CPU通过寄存器间接寻址的方式访问程序空间和数据空间时, 直接向CPU发送进行页面切换的控制信号。所述CPU包括页面切换执行单元,用于在当CPU采用直接取指的方式访问程序空间时,将当前的程序计数器压入堆栈,并将此时程序计数器的高N位所表示的页面号作为新页面号进行保存;之后,准备执行页面切换处理程序;将堆栈中程序计数器的取值修改为不匹配地址, 作为返回现场使用的程序指针,从外部存储器中将将要取指的代码更新到程序RAM当中,并将当前页面寄存器的值更新为所述保存的新页面号;还用于在当CPU通过寄存器间接寻址的方式访问程序空间和数据空间时,接收硬件检测电路发送的控制信号,取消当前指令的执行并保存当前指令的PC的取值;将当前指令的PC修改为页面切换处理程序所在的起始地址,并将送往地址总线的访问信号无效掉;之后,准备执行页面切换处理程序;将取值等于不匹配地址的PC压入堆栈作为返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码;返回单元,用于在页面切换处理程序结束后,将程序计数器的值修改回记录的发现页面不匹配时的程序计数器的值,并通知所述硬件检测电路继续进行判断。由上述的技术方案可见,本发明提供的内存访问方法和装置,通过在需要页面切换的时候首先记录用于在页面切换完成后返回现场的地址,而在页面切换过程中则将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码,最后再利用记录的地址返回现场,能够有效避免现有技术中对每一次页面切换都需要分别设置切换代码的问题,减小了页面切换代码的大小,降低了对RAM大小的要求,同时由于对各种页面切换提供了统一的接口,使得软件设计人员可以不必关心页面切换的具体实现细节,从而显著降低了程序的编写设计难度和调试复杂度。


图1为现有技术中Bank Switch模式下可执行代码在RAM中的存储方式示意图。图2为本发明实施例中内存访问方法的流程示意图。图3为本发明实施例中内存访问装置的组成结构示意图。
具体实施例方式为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例, 对本发明进一步详细说明。为了便于说明,下面以支持8M字节的程序空间和8M字节的数据空间的CPU为例, 其中,数据空间的地址范围是00 OOOOh 7f ffffh,程序空间的地址范围是80 OOOOh FF:FFFFH,把地址范围从00:0000h FF:FFFFH的空间等分成256个大小为64KB的页面, 其中页面号码为Offh的页面,其对应的地址范围是OffOOOOh Offffffh,可以看出,该页面刚好是程序空间中的最后一页。对于程序空间而言,CPU当前使用的页面称之为程序RAM,为了标识程序RAM在程序空间中的位置,可以通过定义程序RAM的页面号码来实现,其默认值通常设置为FFh;另一方面,为了对当前在程序RAM中执行的可执行代码或对当前在程序RAM中使用的数据所在的原始页面进行标识,可以通过定义当前页面寄存器来实现,所述当前页面寄存器的值表示的就是当前在程序RAM中执行的可执行代码所在的原始页面的页面号码,其默认值通常同样设置为FFh;或者,所述当前页面寄存器的值表示的是当前在程序RAM中使用的数据所在的原始页面的页面号码,其默认值则通常设置为OOh ;当系统上电或复位时,程序RAM加载芯片外部存储器中的程序,为了保证系统能够正常运行,此时所述程序RAM的当前页面寄存器的默认值对应的页面中需要存储至少包括那些不需要进行页面切换的程序,包括系统中基本的、全局性的代码——例如用于变量初始化的代码、中断服务代码,通常将其统称为公共代码或公共程序。在本发明实施例中, 为了便于说明,假设所述第一部分的公用程序放置在FFh页面,因此需要将所述程序RAM的默认页面号设置为FFh,以保证程序RAM能够加载这些公用程序开始正常工作,同时,程序 RAM的当前页面寄存器的默认值也设置为FFh,因为此时程序RAM中执行的可执行代码所在的原始页面同样为FFh。根据上述描述容易理解,所述程序RAM的默认页面号和当前页面寄存器的默认值还可以根据系统或设计者的要求进行修改,并不一定必须设置为Fi^h。当CPU开始正常工作后,其通过M位的地址总线对程序/数据空间进行访问,该 M位的地址总线的取值由CPU使用的程序计数器(ProgramCoimter,PC)确定,其中,所述 M位地址线的高8位表示的是CPU将要访问的数据或指令(即下一时刻将要访问的数据或指令)所在的页面号码,而根据前文所述,当前页面寄存器的值(同样也是8位)表示的则是CPU当前访问的数据或指令所在的页面号码。当CPU访问数据或指令时,需要判断其将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面。显然,当所述 PC的高8位与当前页面寄存器的值相同时,表示CPU将要访问的数据或指令所在的页面与当前页面相同——即CPU将要访问的数据或指令位于当前页面;而当所述PC的高8位与当前页面寄存器的值不同时,则表示CPU将要访问的数据或指令所在的页面与当前页面不同——即CPU将要访问的数据或指令并不位于当前页面。当CPU将要访问的指令位于当前页面时,表示CPU将要访问的是公共代码/公共程序,或者CPU将要访问的代码本身就位于FFh页面;相关问题不属于本发明讨论的范畴, 不再详细分析;而当CPU将要访问的数据或指令不在当前页面时,意味着此时需要进行页面切换——即,需要将CPU将要访问的数据或指令更新到程序RAM当中。由于CPU可以通过直接取指的方式访问程序空间,也可以通过寄存器间接寻址的方式访问程序空间和数据空间,且两种方式下工作过程存在一定的差异,因此下面将分别详细进行介绍A、若CPU通过直接取指的方式访问程序空间,且需要页面切换时;此时,当所述PC的高8位与当前页面寄存器的值不同时,CPU的指令不再从程序 RAM中获得,而是通过预先设计的硬件触发电路直接送给CPU —个触发其进行页面切换的控制指令,用于使CPU跳转到页面切换处理程序的起始地址处,具体实现时可以是类似软件中断的控制指令或者类似程序调用的控制指令,两者的区别是类似软件中断的指令会使CPU进入中断响应,中断响应时硬件将会自动完成对当前PC的压栈,然后再跳转到页面切换处理程序的起始地址处;而类似程序调用的指令则会使CPU进入程序调用,该过程中需要通过人为设定来使硬件完成对当前PC的压栈,然后再跳转到页面切换处理程序的起始地址。根据CPU的工作原理,由于CPU通常采用预取指令的方式进行工作,因此,当所述硬件触发电路将页面切换指令送入CPU之后,该指令通常并不会立即被执行,而是作为预取指令在CPU缓存中进行排队;而由于CPU的预取方式,有时已经取入CPU的指令会因为 CPU执行之前的指令而发生跳转,导致之后的预取指令没有被执行,因此只有当该页面切换指令实际被CPU执行到的时候,才真正开始页面切换的流程。当CPU执行到页面切换指令时,产生进行页面切换的控制信号,首先将当前的PC压入堆栈,并将此时PC高8位所表示的页面号作为新页面号进行保存;之后,将跳转到页面切换代码的入口处准备执行页面切换处理程序;需要说明的是,此时的PC值应当等于页面切换处理程序起始处的地址;此外,所述的页面切换处理程序是本发明实施例预先设定的用于进行页面切换的一段代码指令,该代码指令同时还是不需要进行页面切换就能够执行的公共代码,其既可以固化在芯片ROM 中供CPU在需要的时候随时进行调用,也可以放置在FF页面的公用段——即,其程序入口可以灵活地由设计者根据需要自由定义。接下来,CPU开始执行页面切换处理程序,需要说明的是,由于所述页面切换处理程序是通过中断指令或程序调用指令跳转进行执行的一段代码,因此为了保证在执行完所述处理程序后能够顺利返回CPU出现跳转的位置(该位置由开始执行页面切换处理程序时的PC值确定,为了便于描述,下文中将该位置称为不匹配地址)继续后续流程,就需要在触发CPU进行页面切换时记录下此时的不匹配地址,因此,执行页面切换处理程序的流程包括将堆栈中的PC的取值修改为不匹配地址;此时,PC的取值表示的是执行完页面切换处理流程后返回的地址;从外部存储器中将将要取指的代码更新到程序RAM当中,并将当前页面寄存器的值更新为所述保存的新页面号;结束页面切换处理程序,按照PC的取值返回到所述不匹配地址,CPU继续执行所述判断其将要访问的数据或指令与当前正在访问的数据或指令是否在同一页面的步骤。显然,由于此时CPU将要访问的代码已经更新到程序RAM当中,且当前页面寄存器的值也已经更新为所述将要取指的代码所在页面的页面号码,因此此时PC高8位的值与当前页面寄存器的值必定相同——即,需要的页面切换已经成功完成。B、若CPU通过寄存器间接寻址的方式访问程序空间和数据空间,且需要页面切换时;此时,当所述PC的高8位与当前页面寄存器的值不同时,CPU的指令和数据不再从程序RAM中获得,而是通过预先设计的硬件触发电路直接送给CPU —个触发其进行页面切换的控制信号来将CPU当前执行的指令取消并切换到页面切换处理程序的入口位置处; 因此,当CPU接到进行页面切换的控制信号后,首先取消当前指令的执行,之后,一方面,将当前指令(即所述被取消执行的指令)的PC的取值进行保存;另一方面,将当前指令的PC 修改为页面切换处理程序的起始地址,再将送往总线的访问信号无效掉,准备执行页面切换处理程序;接下来,CPU开始执行页面切换处理程序,与前文所述相同,为了保证在执行完所述处理程序后能够顺利返回以继续后续流程,需要在触发CPU进行页面切换时记录下此时的不匹配地址(也就是被取消执行的指令所在的地址),因此,此时执行页面切换处理程序的流程包括将表示返回地址的PC压入堆栈,且PC的取值等于不匹配地址;从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码,容易理解,此时可以根据保存的当前指令的PC的高 8位获得更新后的当前页面寄存器的取值;
最后,结束页面切换处理程序,按照堆栈中PC的取值返回到页面切换处理程序开始前的地址(即所述不匹配地址),CPU重新执行被取消的指令,并进行所述判断其将要访问的数据或指令与当前正在访问的数据或指令是否在同一页面的步骤。显然,由于此时CPU将要访问的代码已经更新到程序RAM当中,且当前页面寄存器的值也已经更新为所述将要访问的数据或指令所在页面的页面号码,因此此时PC高8位的值与当前页面寄存器的值必定相同——即,需要的页面切换已经成功完成。在上述说明的基础上,本发明实施例提供一种内存访问方法,其流程如图2所示, 其中包括步骤201 通过预设的硬件检测电路判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面,如果不在同一页面,触发CPU的页面切换机制,并同时记录发现页面不匹配时的程序计数器的值;步骤202 :CPU进行页面切换时,保存将要访问的数据或指令所在的页面号码,开始执行页面切换处理程序;步骤203 根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码;步骤204 结束页面切换处理程序,将程序计数器的值修改回记录的所述发现页面不匹配时的程序计数器的值,并返回继续执行步骤201。其中,步骤201中所述判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面的方法包括判断程序计数器的高8位与当前页面寄存器的值是否相同,所述当前页面寄存器的值表示CPU当前访问的数据或指令所在的页面号码;如果相同,则所述CPU将要访问的数据或指令与当前正在访问的数据或指令在同一页面;如果不同,则不在同一页面。根据前文中A部分的说明,当CPU采用直接取指的方式访问程序空间时,所述触发 CPU的页面切换机制的方法包括硬件检测电路将页面切换指令作为CPU的预取指令送入CPU,当CPU执行到该指令时产生进行页面切换的控制信号,开始页面切换;相应地,此时所述步骤202 203的方法具体包括CPU将当前的程序计数器压入堆栈,并将此时程序计数器的高8位所表示的页面号作为新页面号进行保存;之后,准备执行页面切换处理程序;将堆栈中程序计数器的取值修改为不匹配地址,作为返回现场使用的程序指针, 从外部存储器中将将要取指的代码更新到程序RAM当中,并将当前页面寄存器的值更新为所述保存的新页面号。此外,根据前文中B部分的说明,若CPU采用通过寄存器间接寻址的方式访问程序空间和数据空间时,所述触发CPU的页面切换机制的方法则为硬件检测电路直接向CPU发送进行页面切换的控制信号;此时,所述步骤202 203的方法则具体包括CPU接到进行页面切换的控制信号后,取消当前指令的执行并保存当前指令的PC的取值;将当前指令的PC修改为页面切换处理程序所在的起始地址,并将送往地址总线的访问信号无效掉;之后,准备执行页面切换处理程序;将取值等于不匹配地址的PC压入堆栈作为返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码。此外,与所述内存访问方法对应,本发明实施例还提供一种内存访问装置,该装置的组成结构如图3所示,其中包括硬件检测电路310和CPU320 ; 硬件检测电路310,用于判断CPU320将要访问的数据或指令与CPU320当前正在访问的数据或指令是否在同一页面,如果不在同一页面,触发CPU320的页面切换机制,并同时记录发现页面不匹配时的程序计数器的值;CPU320,用于在进行页面切换时,保存将要访问的数据或指令所在的页面号码至页面寄存器中,开始执行页面切换处理程序,所述页面切换处理程序包括根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码;之后,结束页面切换处理程序,将程序计数器的值修改回记录的发现页面不匹配时的程序计数器的值,并通知所述硬件检测电路310继续进行判断。其中,所述硬件检测电路310包括判断单元311,用于将CPU320访问的地址空间等分成2N个页面,N为大于0的整数且N小于CPU320的寻址的位宽M,M为大于0的整数,其中,M的高N位表示页面号码,低 (M-N)位为页面内的地址;判断程序计数器的高N位与当前页面寄存器的值是否相同,所述当前页面寄存器的值表示CPU320当前访问的数据或指令所在的页面号码;如果相同,则所述CPU320将要访问的数据或指令与当前正在访问的数据或指令在同一页面;如果不同,则不在同一页面。较佳地,所述硬件检测电路310还进一步包括页面切换触发单元312,用于在CPU320采用直接取指的方式访问程序空间时,将页面切换指令作为CPU320的预取指令送入CPU320,当CPU320执行到该指令时产生进行页面切换的控制信号,开始页面切换;还用于在CPU320通过寄存器间接寻址的方式访问程序空间和数据空间时,直接向CPU320发送进行页面切换的控制信号。另一方面,所述CPU320则包括页面切换执行单元321和返回单元322 ;页面切换执行单元321,用于在当CPU320采用直接取指的方式访问程序空间时, 将当前的程序计数器压入堆栈,并将此时程序计数器的高N位所表示的页面号作为新页面号进行保存;之后,准备执行页面切换处理程序;将堆栈中程序计数器的取值修改为不匹配地址,作为返回现场使用的程序指针,从外部存储器中将将要取指的代码更新到程序RAM 当中,并将当前页面寄存器的值更新为所述保存的新页面号;还用于在当CPU320通过寄存器间接寻址的方式访问程序空间和数据空间时,接收硬件检测电路310发送的控制信号, 取消当前指令的执行并保存当前指令的PC的取值;将当前指令的PC修改为页面切换处理程序所在的起始地址,并将送往地址总线的访问信号无效掉;之后,准备执行页面切换处理程序;将取值等于不匹配地址的PC压入堆栈作为返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码;返回单元322,用于在页面切换处理程序结束后,将程序计数器的值修改回记录的发现页面不匹配时的程序计数器的值,并通知所述硬件检测电路310继续进行判断。可见,本发明实施例提供的内存访问方法和装置,采用硬件辅助进行页面切换的方法,通过在需要页面切换的时候首先记录用于在页面切换完成后返回现场的地址,而在页面切换过程中则将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码,最后再利用记录的地址返回现场,能够有效避免现有技术中对每一次页面切换都需要分别设置切换代码的问题,减小了页面切换代码的大小,降低了对RAM大小的要求,同时由于对各种页面切换提供了统一的接口,使得软件设计人员可以不必关心页面切换的具体实现细节,从而显著降低了程序的编写设计难度和调试复杂度。以上所述,仅是本发明所列举实施例而已,并不能用以限定本发明,本领域的技术人员显然可以在不脱离本发明的精神或范围内进行适当的修改和变化。
权利要求
1.一种内存访问方法,其特征在于,该方法包括步骤A、通过预设的硬件检测电路判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面,如果不在同一页面,触发CPU的页面切换机制,并同时记录发现页面不匹配时的程序计数器的值;步骤B、CPU进行页面切换时,保存将要访问的数据或指令所在的页面号码至页面寄存器中,开始执行页面切换处理程序,所述页面切换处理程序包括根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码;步骤C、结束页面切换处理程序,将程序计数器的值修改回记录的所述发现页面不匹配时的程序计数器的值,并返回继续执行步骤A。
2.根据权利要求1所述的方法,其特征在于,所述判断CPU将要访问的数据或指令与 CPU当前正在访问的数据或指令是否在同一页面的方法包括将CPU访问的地址空间等分成2N个页面,N为大于0的整数且N小于CPU的寻址的位宽M,M为大于0的整数,其中,M的高N位表示页面号码,低(M-N)位为页面内的地址;判断程序计数器的高N位与当前页面寄存器的值是否相同,所述当前页面寄存器的值表示CPU当前访问的数据或指令所在的页面号码;如果相同,则所述CPU将要访问的数据或指令与当前正在访问的数据或指令在同一页面;如果不同,则不在同一页面。
3.根据权利要求2所述的方法,其特征在于,若CPU采用直接取指的方式访问程序空间,所述触发CPU的页面切换机制的方法包括硬件检测电路将页面切换指令作为CPU的预取指令送入CPU,当CPU执行到该指令时产生进行页面切换的控制信号,开始页面切换。
4.根据权利要求3所述的方法,其特征在于,所述CPU进行页面切换时,保存将要访问的数据或指令所在的页面号码,开始执行页面切换处理程序;根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码的方法包括CPU将当前的程序计数器压入堆栈,并将此时程序计数器的高N位所表示的页面号作为新页面号进行保存;之后,准备执行页面切换处理程序;将堆栈中程序计数器的取值修改为不匹配地址,作为返回现场使用的程序指针,从外部存储器中将将要取指的代码更新到程序RAM当中,并将当前页面寄存器的值更新为所述保存的新页面号。
5.根据权利要求2所述的方法,其特征在于,若CPU通过寄存器间接寻址的方式访问程序空间和数据空间,所述触发CPU的页面切换机制的方法包括硬件检测电路直接向CPU 发送进行页面切换的控制信号。
6.根据权利要求5所述的方法,其特征在于,所述CPU进行页面切换时,保存CPU将要访问的数据或指令所在的页面号码,开始执行页面切换处理程序;根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM 当中,并将当前页面寄存器的值更新为保存的页面号码的方法包括CPU接到硬件检测电路发送的控制信号后,取消当前指令的执行并保存当前指令的PC的取值;将当前指令的PC修改为页面切换处理程序所在的起始地址,并将送往地址总线的访问信号无效掉;之后,准备执行页面切换处理程序;将取值等于不匹配地址的PC压入堆栈作为返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述页面切换处理程序常驻内存且放置在程序空间默认页面的公用段当中,供CPU在需要的时候随时调用。
8.—种内存访问装置,其特征在于,该装置包括硬件检测电路,用于判断CPU将要访问的数据或指令与CPU当前正在访问的数据或指令是否在同一页面,如果不在同一页面,触发CPU的页面切换机制,并同时记录发现页面不匹配时的程序计数器的值;CPU,用于在进行页面切换时,保存将要访问的数据或指令所在的页面号码至页面寄存器中,开始执行页面切换处理程序,所述页面切换处理程序包括根据记录的不匹配地址设置返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为保存的页面号码;之后,结束页面切换处理程序,将程序计数器的值修改回记录的所述发现页面不匹配时的程序计数器的值,并通知所述硬件检测电路继续进行判断。
9.根据权利要求8所述的装置,其特征在于,所述硬件检测电路包括判断单元,用于将CPU访问的地址空间等分成2n个页面,N为大于0的整数且N小于 CPU的寻址的位宽M,M为大于0的整数,其中,M的高N位表示页面号码,低(M-N)位为页面内的地址;判断程序计数器的高N位与当前页面寄存器的值是否相同,所述当前页面寄存器的值表示CPU当前访问的数据或指令所在的页面号码;如果相同,则所述CPU将要访问的数据或指令与当前正在访问的数据或指令在同一页面;如果不同,则不在同一页面。
10.根据权利要求9所述的装置,其特征在于,所述硬件检测电路还包括页面切换触发单元,用于在CPU采用直接取指的方式访问程序空间时,将页面切换指令作为CPU的预取指令送入CPU,当CPU执行到该指令时产生进行页面切换的控制信号,开始页面切换;还用于在CPU通过寄存器间接寻址的方式访问程序空间和数据空间时,直接向CPU发送进行页面切换的控制信号。
11.根据权利要求10所述的装置,其特征在于,所述CPU包括页面切换执行单元,用于在当CPU采用直接取指的方式访问程序空间时,将当前的程序计数器压入堆栈,并将此时程序计数器的高N位所表示的页面号作为新页面号进行保存;之后,准备执行页面切换处理程序;将堆栈中程序计数器的取值修改为不匹配地址,作为返回现场使用的程序指针,从外部存储器中将将要取指的代码更新到程序RAM当中,并将当前页面寄存器的值更新为所述保存的新页面号;还用于在当CPU通过寄存器间接寻址的方式访问程序空间和数据空间时,接收硬件检测电路发送的控制信号,取消当前指令的执行并保存当前指令的PC的取值;将当前指令的PC修改为页面切换处理程序所在的起始地址,并将送往地址总线的访问信号无效掉;之后,准备执行页面切换处理程序;将取值等于不匹配地址的PC压入堆栈作为返回现场使用的程序指针,从外部存储器中将将要访问的数据或指令更新到程序RAM当中,并将当前页面寄存器的值更新为所述将要访问的数据或指令所在页面的页面号码;返回单元,用于在页面切换处理程序结束后,将程序计数器的值修改回记录的发现页面不匹配时的程序计数器的值,并通知所述硬件检测电路继续进行判断。
全文摘要
本发明公开了一种内存访问方法判断CPU将要访问的数据或指令与当前正在访问的是否在同一页面,如果否,触发页面切换机制;进行页面切换时,保存将要访问的数据或指令所在的页面号码,执行页面切换处理程序;从外部存储器中将将要访问的数据或指令更新到程序RAM当中;结束页面切换处理程序,将程序计数器的值修改回记录的所述发现页面不匹配时的程序计数器的值后继续执行。本发明实施例还提供一种内存访问装置。本发明提供的内存访问方法和装置,能够避免每次页面切换都需要切换代码的问题,减少了页面切换代码量,对各种页面切换提供统一接口,使设计人员不必关心页面切换的具体实现细节,显著降低了程序的编写设计难度和调试复杂度。
文档编号G06F12/10GK102270181SQ20101019337
公开日2011年12月7日 申请日期2010年6月1日 优先权日2010年6月1日
发明者彭洪, 江小炜 申请人:炬力集成电路设计有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1