一种用于SOC架构的数据预取系统及其方法
技术领域
本发明涉及SOC架构领域,特别是一种用于SOC架构的数据预取系统及其预取方法。
背景技术
SOC(片上系统)一般至少包括中央处理器(CPU)以及用于存储程序的存储设备(memory),另外为了实现特定或者通用的功能还会加入一些外设。
而现有所采用的CPU的接口规范遵从AMBA相关协议,即需要通过AMBA总线与其他外设进行交互,所以所有的外设都是挂接在AMBA总线上。其中,AMBA总线包括AHB,ASB及APB总线。现在比较常用的总线有AHB和APB,一般需要高速访问的外设都是AHB接口,对访问速率要求不高的外设一般挂接在APB总线上,ASB则较少应用。
请同时参阅图1,其为现有技术中的SOC的CPU与存储器的连接架构示意图。现有的SOC中的CPU在访问存储器时的基本流程为:CPU发出访问指令,经过AHB总线,查找到存储器所在的空间,对存储器进行访问。访问成功则存储器会对AHB总线发出成功响应的信号,同时送出其他CPU希望得到的数据,AHB总线将这些信号传导回CPU完成一次指令的操作。
由于CPU逻辑的单元都是标准时序或组合元件,它们的翻转速度非常的快,而存储器的一个存储单元往往是由一堆的组合逻辑加在一起才能实现,因此对他们的访问就不能达到像访问普通元件那样的速度。因此,现有的架构中虽然简洁,现有技术的连接架构仍然存在以下技术缺陷:
由于CPU的工作频率往往高于存储器的频率,以至于CPU每发出一条指令对存储器进行操作时都要等待好几个时钟周期才能获得存储器的响应,大大降低了CPU的运行效率。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供了一种配置有速访引擎的SOC架构及其存储器的访问方法。
本发明通过以下的方案实现:一种用于SOC架构的数据预取系统,包括CPU、AHB总线、速访引擎和存储器;
所述CPU与AHB总线连接,用于将取址指令发送至所述AHB总线;
所述速访引擎用于从AHB总线中接收CPU的取址指令,并判断该取址指令是否在速访引擎中已经有相应的预取操作;若是,则直接给出响应;若否,则根据该取址指令访问所述存储器,将该取址指令对应的取址值保存至速访引擎中并响应到CPU,同时对该取址值相邻地址的值进行预取,并保存至速访引擎的缓存中。
相比于现有技术,本发明通过在CPU与存储器之间增加速访引擎,在CPU没有对存储器发出取址指令之前先做出预取址的判断和操作,当CPU取址指令真正到来时则可以实现直接响应无需等待的效果。
作为本发明的进一步改进:还包括速访引擎配置器,所述速访引擎配置器分别与CPU和AHB总线连接,用于配置所述速访引擎的工作状态;当所述速访引擎配置器配置为不可用状态时,所述AHB总线根据CPU的取址指令直接访问存储器;当所述速访引擎配置器配置为可用状态时,所述AHB总线将CPU的取址指令发送至所述速访引擎。
作为本发明的进一步改进:所述速访引擎包括AHB接口转换模块、引擎启动逻辑模块、引擎内容标记模块、预取指令暂存区模块和存储器访问控制模块;
所述AHB接口转换模块,用于将AHB传送的信号进行转化,并发送至引擎启动逻辑模块;同时,该AHB接口转换模块还用于反馈所述引擎启动逻辑模块的工作状态至AHB总线;
所述引擎启动逻辑模块,用于判断有无暂存预取指令、判断预取指令是否有效、判断更新指令时存储器的更新地址、选择指令暂存区实现逻辑、判断是否可以应答CPU指令,以及判断是否需要更新预取指令;
所述引擎内容标记模块,用于对所述指令暂存区模块进行档案构建,对所述预取指令暂存区模块中的每一个地址的每一次访问进行记录;
所述预取指令存储区模块,用于存储CPU的预取指令;
所述存储器访问控制模块,用于访问读取存储器的内部指令。
作为本发明的进一步改进:所述指令暂存区模块包括4个子存储区,每个子存储区划分为多行存储空间。通过分成四个4个子存储区可以让存储器地址与指令暂存区地址有更高效的映射关系,在有限的暂存空间里更多的利用预取效率,同时4个子区分时访问可以实现低功耗目的。
另外,本发明还提供了一种用于SOC架构的数据预取方法,包括以下步骤:
CPU发送取址指令至AHB总线;
速访引擎从AHB总线读取CPU的取址指令,判断CPU的取址指令是否在速访引擎中已经有相应的预取操作;若是,则直接给出响应;若否,则根据该取址指令访问存储器,将该取址指令对应的取址值保存至速访引擎中并响应到CPU,同时对该取址值相邻地址的值进行预取,并保存至速访引擎的缓存中。
作为本发明的进一步改进:还包括步骤:对速访引擎配置器的状态进行判断,当速访引擎配置器为不可用状态时,AHB总线根据CPU的取址指令直接访问存储器;当速访引擎配置器为可用状态时,AHB总线将CPU的取址指令发送至速访引擎。
作为本发明的进一步改进:所述判断CPU的取址指令是否在速访引擎中已经有相应的预取操作的步骤中,具体包括:
解析AHB协议指令,将AHB传送的信号进行转化;
判断CPU的取址指令是否已经进行预取;若是,则直接响应;若否,则通过存储区访问控制模块对该存储器中读取CPU期望地址的数值,并执行第一次预取操作为:将该期望地址相邻的数值一并读取,并存储在预取指令存储区中;
判断预取的数值是操作码还是跳转指令;若为操作码,则执行第二次预取操作为:增加一行与该操作码相邻的地址的一行预取;若为跳转指令,则执行第二次预取操作为:增加一行跳转指令所指向地址的预取;
判断第二次预取值是否已经预取过;若否,则继续执行预取操作;若是,则在指令存储区中寻找计数值第二少的预取行,并增加一行预取,完成第二次预取操作。
综上所述,本发明相比于现有技术,具备以下的有益效果:
1、通过在CPU与存储器之间增加速访引擎,在CPU没有对存储器发出取址指令之前先做出预取址的判断和操作,当CPU取址指令真正到来时则可以实现直接响应无需等待的效果。
2、通过速访引擎配置器对速访引擎的工作状态进行配置,使得CPU在读取数据时的方式更加灵活。
3、通过分成四个4个子存储区可以让存储器地址与指令暂存区地址有更高效的映射关系,在有限的暂存空间里更多的利用预取效率,同时4个子区分时访问可以实现低功耗目的。
为了更好地理解和实施,下面结合附图详细说明本发明。
附图说明
图1是现有技术中的SOC的CPU与存储器的连接架构示意图。
图2是本发明的SOC架构的示意图。
图3是本发明的速访引擎的架构示意图。
图4是本发明的存储器访问方法的步骤流程图。
图5是本发明的数据预取过程的步骤流程图。
图6是本发明的指令暂存区和存储器的示意图。
具体实施方式
以下结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
本发明为了解决现有技术中CPU在读取外部存储器中的速度慢的技术缺陷,提供了一种配置有速访引擎的SOC架构及其存储器的访问方法。本发明从现有的SOC架构的基础上进行了优化改进,主要通过在CPU和存储器之间增加速访引擎的方式实现存储器数据的快速读取。另外,改进后的SOC架构上提供了一种存储器的访问方法,从而实现存储器数据的快速读取,具体结合以下实施例对本发明的技术方案进行说明。
首先请参阅图1,其为本发明的SOC架构的示意图。本发明提供一种用于SOC架构的数据预取系统,包括CPU 1、速访引擎配置器2、AHB总线3、速访引擎4和存储器5。
所述CPU 1与AHB总线3连接,用于将取址指令发送至所述AHB总线3。
所述速访引擎配置器2,所述速访引擎配置器分别与CPU 1和AHB总线3连接,用于配置所述速访引擎的工作状态;当所述速访引擎配置器配置为不可用状态时,所述AHB总线3根据CPU的取址指令直接访问存储器5;当所述速访引擎配置器配置为可用状态时,所述AHB总线3将CPU的取址指令发送至所述速访引擎4。
所述速访引擎4用于从AHB总线3中接收CPU的取址指令,并判断该取址指令是否在速访引擎4中已经有相应的预取操作;若是,则直接给出响应;若否,则根据该取址指令访问所述存储器5,将该取址指令对应的取址值保存至速访引擎中并响应到CPU,同时对该取址值相邻地址的值进行预取,并保存至速访引擎4的缓存中。
以下针对速访引擎的具体架构进行详细介绍,具体请参阅图3,其为本发明的速访引擎的架构示意图。
所述速访引擎4包括AHB接口转换模块41、引擎启动逻辑模块42、引擎内容标记模块43、预取指令暂存区模块44和存储器访问控制模块45。
所述AHB接口转换模块41,用于将AHB传送的信号进行转化,并发送至引擎启动逻辑模块;同时,该AHB接口转换模块还用于反馈所述引擎启动逻辑模块的工作状态至AHB总线。本发明的AHB接口转化模块41主要实现两个功能:一个是转换AHB信号,使得从CPU发送过来的信号可以被引擎启动逻辑模块所接收。第二个是确定应答状态,当引擎的启动逻辑通知AHB接口转换模块数据已经准备好时,AHB接口转换模块发送响应信号给AHB总线,通知CPU数据已经响应,当启动逻辑没有通知AHB接口转换模块数据准备就绪时,AHB接口转换模块则进入扩展等待状态,告知CPU引擎数据尚未就绪,CPU还不能进行下一步的操作。
所述引擎启动逻辑模块42,用于判断有无暂存预取指令、判断预取指令是否有效、判断更新指令时存储器的更新地址、选择指令暂存区实现逻辑、判断是否可以应答CPU指令,以及判断是否需要更新预取指令。在本发明中,所述引擎启动逻辑模块42作为速访引擎的实现核心,用于调动其他各个模块的工作。
所述引擎内容标记模块43,用于对所述指令暂存区模块进行档案构建,对所述指令暂存区模块中的每一个地址的每一次访问进行记录。所述引擎启动逻辑模块可以通过访问引擎内容标记模块就可以快速知道CPU所请求的地址是否已经预取,从而做出快速的响应。所述内容标记模块主要是标记存储器指令有无进行过预取操作,暂存区数据是否已经更新,如果已经预取,则启动逻辑会快速的应答,如果没有则启动逻辑先启动预取程序,完成预取操作在做应答。如果数据已经更新,当所述引擎启动逻辑模块判断需要更新预取指令时,所述引擎启动逻辑模块会先判断更新指令时的存储器更新地址,完成指令的更新,然后重复预取操作。
所述预取指令存储区模块44,用于存储CPU的预取指令。具体的,所述指令暂存区模块包括4个子存储区,每个子存储区划分为多行存储空间。通过分成四个4个子存储区可以让存储器地址与指令暂存区地址有更高效的映射关系,在有限的暂存空间里更多的利用预取效率,同时4个子区分时访问可以实现低功耗目的。
所述存储器访问控制模块45,用于访问读取存储器的内部指令。所述存储器访问控制模块需要符合速访引擎的访问要求,也要符合存储器的访问时序,以便顺利将存在存储器里的指令读取出来。
接着,在上述SOC架构的基础上,本发明还提供了一种数据预取方法,以下具体介绍该方法的步骤流程,具体请同时参阅图4,其为本发明的存储器访问方法的步骤流程图。
本发明还提供了一种用于SOC架构的数据预取方法,包括以下步骤:
S1:CPU发送取址指令至AHB总线;
S2:对速访引擎配置器的状态进行判断,当速访引擎配置器为不可用状态时,AHB总线根据CPU的取址指令直接访问存储器;当速访引擎配置器为可用状态时,AHB总线将CPU的取址指令发送至速访引擎。
S3:速访引擎从AHB总线读取CPU的取址指令,判断CPU的取址指令是否在速访引擎中已经有相应的预取操作;若是,则直接给出响应;若否,则根据该取址指令访问存储器,将该取址指令对应的取址值保存至速访引擎中并响应到CPU,同时对该取址值相邻地址的值进行预取,并保存至速访引擎的缓存中。
以下具体针对所述步骤S3中的预取过程进行介绍,具体请参阅图5,其为本发明的数据预取过程的步骤流程图。所述步骤S3中具体包括以下步骤:
S31:解析AHB协议指令,将AHB传送的信号进行转化,并发送至引擎启动逻辑模块。
S32:引擎启动逻辑模块判断CPU的取址指令是否已经进行预取;若是,则直接响应;若否,则通过存储区访问控制模块对该存储器中读取CPU期望地址的数值,并执行第一次预取;所述第一次预取具体为:将该期望地址相邻的数值一并读取,并存储在预取指令存储区中。
S33:判断预取的数值是操作码还是跳转指令;若为操作码,则执行第二次预取,具体为:增加一行与该操作码相邻的地址的一行预取;若为跳转指令,则执行第二次预取,具体为:增加一行跳转指令所指向地址的预取。
S34:判断第二次预取值是否已经预取过;若否,则继续执行预取操作;若是,则在指令存储区中寻找计数值第二少的预取行,并增加一行预取,完成第二次预取操作。
以下通过一个简单例子,说明本实施例中的两次预取的过程,具体如下:
请同时参阅图6,其为本发明的指令暂存区和存储器的示意图。在本实施例中,将指令暂存区分为:A暂存区、B暂存区、C暂存区和D暂存区四个。
在第一次预取时,假设读取存储器中11的这个地址,那么同时也将地址12-14里面的数值一起预取至A暂存区中。然后,判断地址14里面的数值是普通操作码还是跳转指令;若是普通操作码,则继续将地址14以下的连续几个地址进行第二次预取。若是跳转指令,假设跳转的地址是24,则跳转至24中进行第二次预取。在本实施例中,每次预取的预取八个字,一般读取一次包含32bit数据。
接着判断第二次预取的值是否之前已经预取过了,若否,则继续原来的预取进程。若是,则需要找到计数值第二少的预取行所在的地址增加一行取指操作,完成第二行的预取操作。
综上所述,本发明相比于现有技术,具备以下的有益效果:
1、通过在CPU与存储器之间增加速访引擎,在CPU没有对存储器发出取址指令之前先做出预取址的判断和操作,当CPU取址指令真正到来时则可以实现直接响应无需等待的效果。
2、通过速访引擎配置器对速访引擎的工作状态进行配置,使得CPU在读取数据时的方式更加灵活。
3、通过分成四个4个子存储区可以让存储器地址与指令暂存区地址有更高效的映射关系,在有限的暂存空间里更多的利用预取效率,同时4个子区分时访问可以实现低功耗目的。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。