Flash控制器、取指令方法及计算机可读存储介质与流程

文档序号:15158595发布日期:2018-08-14 08:11阅读:259来源:国知局

本发明涉及集成电路芯片领域,尤其涉及一种flash控制器、取指令方法及计算机可读存储介质。



背景技术:

随着芯片生产工艺的不断提高,芯片的内核时钟的运行频率不断增加,但是非易失性存储器flash的访问速率却没有同步提升,无法满足系统高频时钟实时读取的需求。通常情况下,微控制器单元(microcontrolunit,mcu)中的中央处理器(centralprocessingunit,cpu)在对flash访问时插入等待周期,即在flash接口接收到cpu发送的数据或指令读取指令后,等待一段时间才将flash中对应的数据读出。

flash访问效率较低会导致芯片系统的整体性能和运行效率受到影响。现有技术中,为提高flash访问效率,在flash接口处增加了一级高速缓存器(cache),cache在芯片系统运行时实时保存从flash中读取的指令。

然而,增加cache会导致芯片成本大大增加。



技术实现要素:

本发明实施例解决的是在尽量少增加芯片成本的基础上,提高flash访问效率。

为解决上述技术问题,本发明实施例提供一种flash控制器,包括:系统总线接口单元、预取缓存控制单元、缓存寄存器组以及flash接口控制单元,所述flash控制器与中央处理器耦接,其中:所述系统总线接口单元,耦接在所述中央处理器及所述预取缓存控制单元之间,适于对所述系统总线上的操作指令进行解析,并将解析得到的控制指令及其对应的有效地址输出至所述预取缓存控制单元;所述flash接口控制单元,与flash存储器耦接;所述预取缓存控制单元,与所述系统总线接口单元、所述缓存寄存器组以及所述flash接口控制单元耦接,适于在识别并确认所述控制指令为取指指令时,判定所述有效地址是否处于所述缓存寄存器组中;当判定所述有效地址处于所述缓存寄存器组中时,从所述缓存寄存器组中读取与所述有效地址对应的第一指令组的指令,并输出所读取的指令至中央处理器;当判定所述有效地址未处于所述缓存寄存器组时,经由所述flash接口控制单元从所述flash存储器中读取所述有效地址对应的指令并输出至所述中央处理器;所述第一指令组的指令均存储在所述缓存寄存器组。

可选的,所述flash控制器还包括:预取寄存器组;所述预取缓存控制单元,与所述预取寄存器组耦接,还适于在从所述缓存寄存器组中读取与所述有效地址对应的第一指令组的指令时,从所述flash存储器中读取第二指令组的指令,并将读取的所述第二指令组的指令存储在预取寄存器组中;在完成从所述缓存寄存器组中读取所述第一指令组的所有指令之后,从所述预取寄存器组中读取所述第二指令组的指令并输出至所述中央处理器;所述第一指令组与所述第二指令组均属于所述取指指令对应的跳转分支,且所述第一指令组与所述第二指令组连续,所述第二指令组的指令未存储在所述缓存寄存器组。

可选的,所述预取缓存控制单元,还适于当检测到如下任一条件时,停止从所述预取寄存器组中读取所述第二指令组的指令:所述预取寄存器组中的所有预取寄存器均已存储有指令;或,检测到所述中央处理器输出的取指指令再次跳转;或,检测到所述预取寄存器组中最新存储所述第二指令组的指令的地址被读取。

可选的,所述预取缓存控制单元,还适于在从所述flash存储器中读取所述有效地址对应的指令之后,将所述有效地址对应的指令存储至所述缓存寄存器组中;其中,将所述有效地址对应的指令存储至所述缓存寄存器组中,包括:将所述有效地址对应的指令的一部分存储至所述缓存寄存器组中;或将所述有效地址对应的全部指令均存储至所述缓存寄存器组中。

可选的,所述预取缓存控制单元,还适于检测所述缓存寄存器组中是否存在未被指令占用的缓存寄存器分组;当所述缓存寄存器组中的所有缓存寄存器分组均已被指令占用,且所述所有缓存寄存器分组对应的跳转分支与所述取指指令对应的跳转分支均不同时,选取一个跳转分支对应的缓存寄存器分组并清空,并将所述有效地址对应的指令缓存至清空后的缓存寄存器分组;一个跳转分支对应至少一个缓存寄存器分组,且一个缓存寄存器分组包括至少一个缓存寄存器。

可选的,所述预取缓存控制单元,适于从所述缓存寄存器组中,选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述预取缓存控制单元,适于从所述所有缓存寄存器分组中,选取被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述预取缓存控制单元,还适于当选读取的跳转分支所占用的缓存寄存器分组为多个时,从中选择地址位最高的缓存寄存器分组并清空。

可选的,所述预取缓存控制单元,还适于在输出所述第一指令组的指令至所述中央处理器之后,当存在第二指令组时,将所述第二指令组的指令存储至所述缓存寄存器组;一个跳转分支对应至少一个缓存寄存器分组,且一个缓存寄存器分组包括至少一个缓存寄存器;所述第一指令组与所述第二指令组均属于所述取指指令对应的跳转分支,且所述第一指令组与所述第二指令组连续,所述第二指令组的指令未存储在所述缓存寄存器组。

可选的,当所述缓存寄存器组中存在未被指令占用的缓存寄存器分组时,将所述第二指令组的指令存储至所述未被指令占用的缓存寄存器分组,直至所述未被指令占用的缓存寄存器分组中均存储有所述第二指令组的指令,或所述第二指令组的指令均已存储在所述缓存寄存器组中。

可选的,所述预取缓存控制单元,当所述缓存寄存器组中的所有缓存寄存器分组均已被指令占用时,从所述缓存寄存器组中选取一个跳转分支对应的缓存寄存器分组并清空,并将所述第二指令组的指令缓存至清空后的缓存寄存器分组。

可选的,所述预取缓存控制单元,适于从所述缓存寄存器组中,选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述预取缓存控制单元,适于从所述所有缓存寄存器分组中,选取被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述预取缓存控制单元,还适于当选读取的跳转分支所占用的缓存寄存器分组为多个时,从中选择地址位最高的一组缓存寄存器分组并清空。

本发明实施例还提供了一种取指令方法,包括:获取跳转后的取指指令及所述取指指令对应的有效地址;当判定所述有效地址处于缓存寄存器组中时,从所述缓存寄存器组中读取与所述有效地址对应的第一指令组的指令,并输出所读取的指令至中央处理器;当判定所述有效地址未处于所述缓存寄存器组时,从flash存储器中读取所述有效地址对应的指令,并输出至所述中央处理器,所述第一指令组的指令均存储在所述缓存寄存器组中。

可选的,在从所述缓存寄存器组中读取与所述有效地址对应的第一指令组的指令时,还包括:从所述flash存储器中读取第二指令组的指令,并将读取的所述第二指令组的指令存储在预取寄存器组中;在完成从所述缓存寄存器组中读取所述第一指令组的所有指令之后,从所述预取寄存器组中读取所述第二指令组的指令并输出至所述中央处理器;所述第一指令组与所述第二指令组均属于所述取指指令对应的跳转分支,且所述第一指令组与所述第二指令组连续,所述第二指令组的指令未存储在所述缓存寄存器组。

可选的,所述取指令方法还包括:当满足如下任一条件时,停止从所述预取寄存器组中读取所述第二指令组的指令:所述预取寄存器组中的所有预取寄存器均已存储有指令;或,检测到所述中央处理器输出的取指指令再次跳转;或,检测到所述预取寄存器组中最新存储所述第二指令组的指令的地址被读取。

可选的,在从flash存储器中读取所述有效地址对应的指令之后,还包括:将所述有效地址对应的指令存储至所述缓存寄存器组中;其中,将所述有效地址对应的指令存储至所述缓存寄存器组中,包括:将所述有效地址对应的指令的一部分存储至所述缓存寄存器组中;或将所述有效地址对应的全部指令均存储至所述缓存寄存器组中。

可选的,所述将所述有效地址对应的指令存储至所述缓存寄存器组中,还包括:检测所述缓存寄存器组中是否存在未被指令占用的缓存寄存器分组;当所述缓存寄存器组中的所有缓存寄存器分组均已被指令占用,且所有缓存寄存器分组对应的跳转分支与所述取指指令对应的跳转分支均不同时,选取一个跳转分支对应的缓存寄存器分组并清空,并将所述有效地址对应的指令缓存至清空后的缓存寄存器分组;一个跳转分支对应至少一个缓存寄存器分组,且一个缓存寄存器分组包括至少一个缓存寄存器。

可选的,所述从所述缓存寄存器组中选取一个跳转分支对应的缓存寄存器分组并清空,包括:从所述缓存寄存器组中,选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组并清空,包括:从所述所有缓存寄存器分组中,选取被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述取指令方法还包括:当选读取的跳转分支所占用的缓存寄存器分组为多个时,从中选择地址位最高的缓存寄存器分组并清空。

可选的,在输出所述第一指令组的指令至所述中央处理器之后,还包括:当存在第二指令组时,将所述第二指令组的指令存储至所述缓存寄存器组;一个跳转分支对应至少一个缓存寄存器分组,且一个缓存寄存器分组包括至少一个缓存寄存器,所述第一指令组与所述第二指令组均属于所述取指指令对应的跳转分支,且所述第一指令组与所述第二指令组连续,所述第二指令组的指令未存储在所述缓存寄存器组。

可选的,所述将所述第二指令组的指令存储至所述缓存寄存器组,包括:当所述缓存寄存器组中存在未被指令占用的缓存寄存器分组时,将所述第二指令组的指令存储至所述未被指令占用的缓存寄存器分组,直至:所述未被指令占用的缓存寄存器分组中均存储有所述第二指令组的指令,或所述第二指令组的指令均已存储在所述缓存寄存器组中。

可选的,所述将所述第二指令组的指令存储至所述缓存寄存器组,包括:当所述缓存寄存器组中的所有缓存寄存器分组均已被指令占用时,从所述缓存寄存器组中选取一个跳转分支对应的缓存寄存器分组并清空,并将所述第二指令组的指令缓存至清空后的缓存寄存器分组。

可选的,所述从所述缓存寄存器组中选取一个跳转分支对应的缓存寄存器分组并清空,包括:从所述缓存寄存器组中,选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组并清空,包括:从所述所有缓存寄存器分组中,选取被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组并清空。

可选的,所述取指令方法还包括:当选读取的跳转分支所占用的缓存寄存器分组为多个时,从中选择地址位最高的一组缓存寄存器分组并清空。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述任一种所述的取指令方法的步骤。

与现有技术相比,本发明实施例的技术方案具有以下有益效果:

在获取跳转后的取指指令以及对应的有效地址后,判定有效地址是否处于缓存寄存器组中。当有效地址处于缓存寄存器组中时,则可以从缓存寄存器组中读取与有效地址对应的第一指令组的指令并输出至中央处理器。由于在缓存寄存器组中预先存储了有效地址对应的第一指令组的指令,而不是从flash存储器中读取第一指令组的指令,因此可以有效提高flash访问效率。此外,无需设置高速缓存器,仅通过缓存寄存器组进行指令缓存即可,可以降低芯片成本。

进一步,若存在与第一指令组属于同一跳转分支的第二指令组,在从缓存寄存器组中读取第一指令组的执行的同时,从flash存储器中读取第二指令组的指令并存储在预取寄存器组中。当完成读取第一指令组的所有指令后,可以从预取寄存器组中读取第二指令组的指令,而不是从flash存储器中读取第二指令组的指令,因此可以更进一步提高flash访问效率。

此外,当缓存寄存器组中的所有缓存寄存器分组均存储有指令时,从中选择被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组并清空,来存储新的指令,从而提高缓存寄存器组的利用效率。

附图说明

图1是本发明实施例中的一种flash控制器的结构示意图;

图2是本发明实施例中的另一种flash控制器的结构示意图;

图3是本发明实施例中的一种取指令方法的流程图。

具体实施方式

flash访问效率较低会导致芯片系统的整体性能受到影响。现有技术中,为提高flash访问效率,在flash接口处增加了一级cache,cache在芯片系统运行时实时保存从flash中读取的指令。然而,cache的容量有限,具体的保存方式需要特定的算法来实现。并且,对于成本敏感的芯片而言,cache会大大增加芯片成本。

在本发明实施例中,在缓存寄存器组中预先存储了有效地址对应的第一指令组的指令。当取出指令的有效地址处于缓存寄存器组中时,即可直接从缓存寄存器组中读取第一指令组的指令,而无需从flash存储器中读取第一指令组的指令,因此可以有效提高flash访问效率。此外,无需设置cache,仅通过缓存寄存器组进行指令缓存和读取,可以降低芯片成本。

为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

在现有技术中,mcu中的cpu通常无法直接访问mcu片上系统的flash存储器,而是通过flash控制器来访问flash存储器。flash控制器将cpu在系统总线上发送的操作指令转换成flash存储器特定的接口时序,来实现对flash存储器的操作。

参照图1,本发明实施例提供了一种flash控制器,包括:系统总线接口单元11、预取缓存控制单元12、缓存寄存器组13以及flash接口控制单元14。

在具体实施中,系统总线接口单元11可以通过系统总线与中央处理器10耦接。中央处理器10可以生成操作指令,并通过系统总线传输至系统总线接口单元11。系统总线接口单元11在接收到中央处理器10输出的操作指令后,可以对接收到的操作指令进行解析,获取操作指令中携带的控制指令以及控制指令对应的有效地址,并将控制指令及控制指令对应的有效地址输出至预取缓存控制单元12。

在实际应用中,系统总线接口单元11对操作指令进行解析后,得到的控制指令可以是取指指令,也可以是写入指令或擦除指令,还可以是其他对flash存储器20进行操作的指令,此处不做赘述。

在本发明实施例中,中央处理器10输出的操作指令可以是取指指令,取指指令为从flash存储器中读取已存储数据的指令。因此,系统总线接口单元11在对操作指令进行解析后,可以得到取指指令以及取指指令对应的有效地址。

预取缓存控制单元12在接收到操作指令之后,若检测到操作指令为取指指令,且取指指令对应的地址发生跳变,则预取缓存控制单元12获取到的是跳转后的取指指令以及取指指令对应的有效地址。预取缓存控制单元12在获取到跳转后的取指指令对应的有效地址之后,可以判断有效地址是否处于缓存寄存器组13中。

在实际应用中可知,在正常情况下,中央处理器10输出的相邻指令对应的地址是连续的。当中央处理器10输出的相邻指令对应地址不连续时,则可以判定中央处理器10输出的指令发生跳转。

在具体实施中,当预取缓存控制单元12判定有效地址处于缓存寄存器组13中时,则可以判定缓存寄存器组13中预先存储了有效地址对应的指令。因此,预取缓存控制单元12可以从缓存寄存器组13中读取与有效地址对应的第一指令组的指令,并将读取的第一指令组的指令输出至中央处理器10。当有效地址不处于缓存寄存器组13中时,则可以判定缓存寄存器组13中并没有预先存储有效地址对应的指令。此时,预取缓存控制单元12可以从flash存储器20中读取与有效地址对应的指令,并将读取到的与有效地址对应的指令输出至中央处理器10。

换而言之,在本发明实施例中,在缓存寄存器组13中可以预先缓存指令。当有效地址处于缓存寄存器组13中时,flash控制器中的预取缓存控制单元12即可从缓存寄存器组13中读取第一指令组的指令,并将读取到的第一指令组的指令输出至中央处理器10。由此可见,flash控制器并不是通过flash接口控制单元直接从flash存储器20中读取第一指令组的指令,而是通过预取缓存控制单元12从缓存寄存器组13中读取第一指令组的指令,因此可以避免因flash存储器20的访问效率较低导致的指令读取较慢的问题,故可以提高flash访问效率。

在具体实施中,在缓存寄存器组13中,可以存储一些出现频次较多的跳转分支对应的指令。例如,针对循环操作或者反复调用相同功能函数的场景,在缓存寄存器组13中预先存储上述场景对应的指令。当中央处理器10在执行上述循环操作或者调用功能函数时,即可从缓存寄存器组13中调用相应的指令,而不需要再从flash存储器20中调用相应的指令,故flash访问效率得到提高。

在具体实施中,缓存寄存器组13中存储的第一指令组的指令可能是取指指令对应的全部指令,也可能是取指指令对应的部分指令。

在实际应用,鉴于缓存寄存器组13中的缓存寄存器的个数有限,且缓存寄存器组13的存储能力有限,因此,缓存寄存器组13中存储的第一指令组的指令可能是取指指令对应的部分指令,取指指令对应的其他指令可能存储在flash存储器中。

为便于描述,在本发明实施例中,将取指指令对应的除第一指令组外的其他指令归为一组并称之为第二指令组,也即存储在缓存寄存器组13中的取指指令对应的指令组称之为第一指令组,没有存储在缓存寄存器组13中的取指指令对应的指令组称之为第二指令组。第一指令组与第二指令组同属于取指指令对应的跳转分支,且第一指令组的地址与第二指令组的地址连续。

在具体实施中,当取指指令对应的指令全部存储在缓存寄存器组13中时,取指指令对应的指令全部隶属于第一指令组;当取指指令对应的指令部分存储在缓存寄存器组13中时,取指指令对应的指令包括第一指令组以及第二指令组。

当取指指令对应的指令包括第一指令组以及第二指令组时,由于第二指令组的指令存储在flash存储器20中,因此,预取缓存控制单元12在读取第一指令组的全部指令后,仍需要通过flash接口控制单元14从flash存储器20中读取有效地址对应的第二指令组的指令。

在本发明实施例中,为进一步提高flash访问效率,提供了另一种flash控制器。参照图2,给出了本发明实施例中的另一种flash控制器的结构示意图。

与图1相比,图2中,flash控制器还可以包括预取寄存器组15,且预取寄存器组15可以与预取缓存控制单元12耦接。预取缓存控制单元12在从缓存寄存器组13中读取第一指令组的指令的同时,还可以经由flash接口控制单元14从flash存储器20中读取第二指令组的指令,并将读取到的第二指令组的指令存储在预取寄存器组15中。

预取缓存控制单元12在从缓存寄存器组13中读取第一指令组的指令后,即可从预取寄存器组15中读取第二指令组的指令并输出至中央处理器10,而不是再经由flash接口控制单元14从flash存储器20中读取第二指令组的指令。由于预取缓存控制单元12可以从预取寄存器组15中直接读取第二指令组的指令,因此可以有效提高flash访问效率。

例如,取指指令对应的指令数目为4条,编号依次为1、2、3、4。第一指令组包括编号为1、2的指令,第二指令组包括编号为3、4的指令,第一指令组预先已经存储在缓存寄存器组13中,第二指令组存储在flash存储器20中。在取指令时,预取缓存控制单元12在从缓存寄存器组13中读取编号为1、2的指令的同时,从flash存储器20中读取编号为3、4的指令并存储在预取寄存器组15中。预取缓存控制单元12在完成编号为1、2的指令的读取后,即可从预取寄存器组15中读取编号为3、4的指令,从而提高了flash访问效率。

在具体实施中,当满足如下任一条件时,预取缓存控制单元12可以停止从预取寄存器组15中读取第二指令组的指令:预取寄存器组15中的所有预取寄存器中均已经存储有指令;检测到中央处理器10输出的指令再次跳转;检测到预取寄存器组15中最新存储第二指令组的指令的地址被读取。

在实际应用中,当预取寄存器组15中的所有预取寄存器中均已经存储有指令时,意味着所有预取寄存器均已经被占用,也即没有空余的预取寄存器可以存储第二指令组的指令。因此,预取缓存控制单元12可以停止从预取寄存器组15中读取第二指令组的指令。

例如,预取寄存器组15包括8个预取寄存器,当检测到8个预取寄存器中均已经存储有指令时,预取缓存控制单元12停止从预取寄存器组15中读取第二指令组的指令。

当检测到中央处理器10输出的取指指令再次跳转时,意味着中央处理器10的取指指令对应的有效地址发生改变,此时,第二指令组的指令可能不是新的取指指令所需的指令,因此,预取缓存控制单元12可以停止从预取寄存器组15中读取第二指令组的指令。

当检测到预取寄存器组15中最新存储第二指令组的指令的地址被读取时,意味着预取缓存控制单元12已经读取到预取寄存器组15中最新存储的第二指令组的指令,也即预取寄存器组15中没有存储未读的第二指令组的指令。此时,若第二指令组的指令未被完全读取,预取缓存控制单元12可以直接从flash存储器20中读取未被读取到的第二指令组的指令,故预取缓存控制单元12可以停止从预取寄存器组15中读取第二指令组的指令。

例如,取指指令对应的指令数目为4条,编号依次为1、2、3、4。第一指令组包括编号为1、2的指令,第二指令组包括编号为3、4的指令,第一指令组预先已经存储在缓存寄存器组13中,第二指令组存储在flash存储器20中。在取指令时,预取缓存控制单元12在从缓存寄存器组13中读取编号为1、2的指令的同时,从flash存储器20中读取编号为3、4的指令并存储在预取寄存器组15中。预取缓存控制单元12在完成编号为1、2的指令的读取后,在从预取寄存器组15中读取到编号为3的指令后,编号为4的指令还没有完全存储至预取寄存器组15中。此时,预取缓存控制单元12从flash存储器20中读取编号为4的指令。

从本发明上述实施例中可知,当有效地址未处于缓存寄存器组13中时,预取缓存控制单元12从flash存储器20中读取与有效地址对应的指令并输出至中央处理器10。在本发明实施例中,在将有效地址对应的指令输出至中央处理器之后,预取缓存控制单元12还可以将有效地址对应的指令存储至缓存寄存器组13中。

在将有效地址对应的指令存储至缓存寄存器组13中时,可以将有效地址对应的全部指令均存储至缓存寄存器组13中。在本发明实施例中,考虑到缓存寄存器组13的存储能力,可以将有效地址对应的部分指令存储至缓存寄存器组13中,有效地址对应的其余部分指令仍存储在flash存储器20中。将有效地址对应的部分指令存储至缓存寄存器组13中的具体场景,可以参照本发明上述实施例中提供的第一指令组以及第二指令组的关系。

在具体实施中,可以将缓存寄存器组13划分成多个缓存寄存器分组。每一个缓存寄存器分组中可以包括一个缓存寄存器,也可以包括多个缓存寄存器。每一个缓存寄存器的位宽与cpu数据位宽一致。针对于每一个跳转分支,可以对应至少一个缓存寄存器分组。换而言之,一个跳转分支对应的指令可以存储在至少一个缓存寄存器分组中。

在实际应用中,由于缓存寄存器组13的存储能力有限,因此,可能会出现缓存寄存器组13中的所有缓存寄存器均被占用,也即所有缓存寄存器均存储有指令的情况。此时,缓存寄存器组13无法继续存储指令。

在本发明实施例中,当缓存寄存器组13中的所有缓存寄存器分组均已经被占用,且所有缓存寄存器分组对应的跳转分支与当前的取指指令对应的跳转分支均不相同时,预取缓存控制单元12可以从缓存寄存器组13中选取一个跳转分支对应的缓存寄存器分组,并将所选取的缓存寄存器分组清空。预取缓存控制单元12可以将当前的取指指令对应的有效地址所对应的指令存储至被清空的缓存寄存器分组,从而将从flash存储器20中读取的与当前的取指指令对应的指令存储在缓存寄存器组13中。

例如,当前的取指指令对应的跳转分支为跳转分支2。在缓存寄存器组13中,所有的缓存寄存器分组中均存储有指令,且所有缓存寄存器分组对应的跳转分支包括跳转分支1、跳转分支3~7。预取缓存控制单元12在从flash存储器20中读取的与跳转分支2对应的指令后,选取跳转分支1对应的缓存寄存器分组1并清空,并将跳转分支2对应的指令存储至缓存寄存器分组1中。

在具体实施中,在从缓存寄存器组13中选取缓存寄存器分组时,可以选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最少的跳转分支所占用的缓存寄存器分组清空。

例如,缓存寄存器分组1对应跳转分支1,跳转分支1对应的指令被读取的次数为0。此时,预取缓存控制单元12选取缓存寄存器分组1并清空。

在从缓存寄存器组13中选取缓存寄存器分组时,还可以选取被读取指令次数最小且最早存储指令的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组清空。

例如,缓存寄存器分组1对应跳转分支1,跳转分支1对应的指令被读取次数为0,且跳转分支1对应的指令在时刻t0存储至缓存寄存器分组1。缓存寄存器分组3对应跳转分支3,跳转分支3对应的指令被读取次数为0,且跳转分支3对应的指令在时刻t2存储至缓存寄存器分组3。由于时刻t0早于时刻t2,且跳转分支1对应的指令被读取次数与跳转分支3对应的指令被读取次数相同,因此,预取缓存控制单元12选取跳转分支1所占用的缓存寄存器分组1。

在具体实施中,当选读取的跳转分支占用多个缓存寄存器分组时,可以从多个缓存寄存器分组中,选取地址位最高的缓存寄存器分组并清空。

例如,选读取的跳转分支为跳转分支1,跳转分支1对应的缓存寄存器分组包括缓存寄存器分组1~3,缓存寄存器分组1的地址位最高。因此,预取缓存控制单元12选取缓存寄存器分组1并清空。

在具体实施中,从本发明上述实施例中可知,当判定有效地址处于缓存寄存器组13中时,可以从缓存寄存器组13中读取与有效地址对应的第一指令组的指令,并输出所读取的第一指令组的指令至中央处理器10。当存在第二指令组的指令时,预取缓存控制单元12可以将第二指令组的指令存储至缓存寄存器组13。

预取缓存控制单元12在将第二指令组的指令存储至缓存寄存器组13时,可以根据缓存寄存器组13中各缓存寄存器分组的存储情况,来控制第二指令组的指令的存储。

在具体实施中,当缓存寄存器组13中存在未被指令占用的缓存寄存器分组时,则可以将第二指令组的指令存储至未被指令占用的缓存寄存器分组。具体而言,可以将第二指令组的指令均存储至未被指令占用的缓存寄存器分组,也可以将第二指令组的部分指令存储至未被指令占用的缓存寄存器分组。

若未被指令占用的缓存寄存器分组的存储容量较大,能够完全存储第二指令组的全部指令,则可以将第二指令组的全部指令均存储至未被指令占用的缓存寄存器分组。若第二指令组的指令较多,未被指令占用的缓存寄存器分组的存储容量无法完全存储第二指令组的指令,则可以将第二指令组的一部分指令存储至未被指令占用的缓存寄存器分组。

在具体实施中,在将第二指令组的指令存储至未被占用的缓存寄存器分组时,当未被指令占用的缓存寄存器分组中均存储有第二指令组的指令,也即未被指令占用的缓存寄存器分组已被第二指令组的指令完全占用时,停止存储第二指令组的指令。

例如,第二指令组包括指令3~指令8。未被指令占用的缓存寄存器分组为缓存寄存器分组1,且缓存寄存器分组仅能缓存指令3与指令4。因此,在缓存寄存器分组1存储指令3与指令4之后,停止将第二指令组存储至缓存寄存器组。此时,第二指令组仅包括指令5~指令8。

在将第二指令组的指令存储至未被占用的缓存寄存器分组中时,若第二指令组的指令已全部存储至缓存寄存器组,则可以停止存储第二指令组的指令。

例如,第二指令组包括指令3。未被指令占用的缓存寄存器分组为缓存寄存器分组1,且缓存寄存器分组能缓存指令3。预取缓存控制单元12将指令3存储至缓存寄存器分组1之后,停止存储第二指令组的指令。

在具体实施中,当缓存寄存器组13中不存在未被指令占用的缓存寄存器分组时,也即缓存寄存器组13中的所有缓存寄存器分组均已经被指令占用时,可以从缓存寄存器分组中选取一个跳转分支对应的缓存寄存器分组并清空,并将第二指令组的指令缓存至清空后的缓存寄存器分组。第一指令组与第二指令组的关系可以参照本发明上述实施例中提供的内容,此处不做赘述。

在具体实施中,在从缓存寄存器组13中选取缓存寄存器分组时,可以选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最少的跳转分支所占用的缓存寄存器分组清空。进一步地,在从缓存寄存器组13中选取缓存寄存器分组时,还可以选取被读取指令次数最小且最早存储指令的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最小且最早存储指令的跳转分支所占用的缓存寄存器分组清空。当选读取的跳转分支占用多个缓存寄存器分组时,可以从多个缓存寄存器分组中,选取地址位最高的缓存寄存器分组并清空。

在本发明实施例中,具体的从缓存寄存器组13中选取缓存寄存器分组的方法可以参照本发明上述实施例中提供的内容,此处不做赘述。

需要说明的是,在本发明实施例中,所述的第一指令组的指令存储在缓存寄存器组13,第二指令组的指令未存储在缓存寄存器组13。预取缓存控制单元12在接收到一次取指指令之后,若将第二指令组中的部分指令存储至缓存寄存器组13,此时,将之前存储的第一指令组的指令以及当前存储的第二指令组中的部分指令称为第一指令组,将第二指令组中的剩余没有存储在缓存寄存器组13的指令称为第二指令组。换而言之,第一指令组与第二指令组是动态更新的。

例如,在没有接收到取指指令之前,第一指令组对应的指令为指令1、指令2,第二指令组对应的指令为指令3~指令8。预取缓存控制单元12在接收到一次取指指令之后,将第二指令组中的指令3、指令4存储至缓存寄存器组13。此时,第一指令组对应的指令更新为:指令1~指令4;第二指令组对应的指令更新为:指令5~指令8。

在具体实施中,预取缓存控制单元12可以在每一次接收到取指指令时,将第二指令组中的部分指令存储至缓存寄存器组13,直至第二指令组中的所有指令均存储至缓存寄存器组13。

例如,第二指令组对应的指令为指令3~指令8。预取缓存控制单元12在第i次接收到取指指令时,将第二指令组中的指令3与指令4存储至缓存寄存器组13;在第i+1次接收到取指指令时,将第二指令组中的指令5与指令6存储至缓存寄存器组13;在第i+2次接收到取指指令时,将第二指令组中的指令7与指令8存储至缓存寄存器组13。

本发明实施例还提供了一种取指令方法,参照图3并结合图1,以下通过具体步骤进行详细说明。

步骤s301,获取跳转后的取指指令及所述取指指令对应的有效地址。

在具体实施中,系统总线接口单元可以通过系统总线与中央处理器耦接,从而实时地从系统总线上获取中央处理器输出的操作指令。系统总线接口单元可以对中央处理器输出的操作指令进行解析,得到中央处理器输出的操作指令对应的控制指令以及控制指令对应的有效地址。之后,系统总线接口单元可以将解析得到的操作指令及操作指令对应的有效地址输出至预取缓存控制单元。

在实际应用中,系统总线接口单元对操作指令进行解析后,得到的控制指令可以是取指指令,也可以是写入指令或擦除指令,还可以是其他对flash存储器进行操作的指令,此处不做赘述。

预取缓存控制单元在接收到系统总线接口单元输出的操作指令之后,若检测到操作指令为取指指令,且取指指令对应的地址发生跳变,则预取缓存控制单元获取到跳转后的取指指令以及取指指令对应的有效地址。

在实际应用中可知,在正常情况下,中央处理器输出的相邻指令对应的地址是连续的。当中央处理器输出的相邻指令对应地址不连续时,则可以判定中央处理器输出的指令发生跳转。

步骤s302,判断所述有效地址是否处于缓存寄存器组中。

在具体实施中,预取缓存控制单元在接收到取指指令以及对应的有效地址之后,可以判断取指指令对应的有效地址是否处于缓存寄存器组中。当预取缓存控制单元判定取指指令对应的有效地址处于缓存寄存器组中时,可以执行步骤s303;反之,当预取缓存控制单元判定取指指令对应的有效地址不处于缓存寄存器组中,则可以执行步骤s304。

步骤s303,从所述缓存寄存器组中读取与所述有效地址对应的第一指令组的指令,并输出所读取的指令至所述中央处理器。

在具体实施中,当有效地址处于缓存寄存器组中时,则可以判定缓存寄存器组中预先存储了有效地址对应的指令。因此,预取缓存控制单元可以从缓存寄存器组中读取与有效地址对应的第一指令组的指令,并将读取的第一指令组的指令输出至中央处理器。

步骤s304,从所述flash存储器中取出与所述有效地址对应的指令并输出至所述中央处理器。

在具体实施中,当有效地址不处于缓存寄存器组中时,则可以判定缓存寄存器组中并没有预先存储有效地址对应的指令。此时,预取缓存控制单元可以从flash存储器中读取与有效地址对应的指令,并将读取到的与有效地址对应的指令输出至中央处理器。

也就是说,在本发明实施例中,在缓存寄存器组中可以预先缓存指令。当有效地址处于缓存寄存器组中时,flash控制器中的预取缓存控制单元即可从缓存寄存器组中读取第一指令组的指令,并将读取到的第一指令组的指令输出至中央处理器。

在实际应用中,在缓存寄存器组中,可以存储一些出现频次较多的跳转分支对应的指令。例如,针对循环操作或者反复调用相同功能函数的场景,在缓存寄存器组中预先存储上述场景对应的指令。当中央处理器在执行上述循环操作或者调用功能函数时,即可直接从缓存寄存器组中调用相应的指令,而不需要再从flash存储器中调用相应的指令,故flash访问效率得到有效提高。

由此可见,本发明实施例中,flash控制器并不是通过flash接口控制单元直接从flash存储器中读取第一指令组的指令,而是通过预取缓存控制单元从缓存寄存器组中读取第一指令组的指令,因此可以避免因flash存储器的访问效率较低导致的指令读取较慢的问题,故可以提高flash访问效率。

在具体实施中,缓存寄存器组中存储的第一指令组的指令可能是取指指令对应的全部指令,也可能是取指指令对应的部分指令。

在实际应用中,鉴于缓存寄存器组中的缓存寄存器的个数有限,因此,缓存寄存器组中缓存的第一指令组的指令可能是取指指令对应的部分指令,取指指令对应的其他指令可能存储在flash存储器中。

为便于描述,在本发明实施例中,将取指指令对应的除第一指令组外的其他指令归为一组并称之为第二指令组,也即存储在缓存寄存器组中的取指指令对应的指令组称之为第一指令组,没有存储在缓存寄存器组中的取指指令对应的指令组称之为第二指令组。第一指令组与第二指令组同属于取指指令对应的跳转分支,且第一指令组的地址与第二指令组的地址连续。

在具体实施中,当取指指令对应的指令全部存储在缓存寄存器组中时,取指指令对应的指令全部隶属于第一指令组;当取指指令对应的指令部分存储在缓存寄存器组中时,取指指令对应的指令包括第一指令组以及第二指令组。

当取指指令对应的指令包括第一指令组以及第二指令组时,由于第二指令组的指令存储在flash存储器中,因此,预取缓存控制单元在读取第一指令组的全部指令后,仍需要通过flash接口控制单元从flash存储器中读取有效地址对应的第二指令组的指令。

若采用本发明上述步骤s301~步骤s304中的取指令方法,预取缓存控制单元在将第一指令组的指令输出至中央处理器之后,经由flash接口控制单元,从flash存储器中读取第二指令组的指令并输出至中央处理器。

为加快中央处理器读取指令的速度,在本发明实施例中,预取缓存控制单元在从缓存寄存器组中读取第一指令组的指令的同时,还可以经由flash接口控制单元从flash存储器中读取第二指令组的指令,并将读取到的第二指令组的指令存储在预取寄存器组中。

预取缓存控制单元在从缓存寄存器组中读取第一指令组的指令后,即可从预取寄存器组中读取第二指令组的指令并输出至中央处理器,而不是再经由flash接口控制单元从flash存储器中读取第二指令组的指令。由于预取缓存控制单元可以从预取寄存器组中直接读取第二指令组的指令,因此可以有效提高flash访问效率。

例如,取指指令对应的指令数目为4条,编号依次为1、2、3、4。第一指令组包括编号为1、2的指令,第二指令组包括编号为3、4的指令,第一指令组预先已经存储在缓存寄存器组中,第二指令组存储在flash存储器中。在取指令时,预取缓存控制单元在从缓存寄存器组中读取编号为1、2的指令的同时,从flash存储器中读取编号为3、4的指令并存储在预取寄存器组中。预取缓存控制单元在完成编号为1、2的指令的读取后,即可从预取寄存器组中读取编号为3、4的指令,从而提高了flash访问效率。

在具体实施中,当满足如下任一条件时,预取缓存控制单元可以停止从预取寄存器组中读取第二指令组的指令:预取寄存器组中的所有预取寄存器中均已经存储有指令;检测到中央处理器输出的指令再次跳转;检测到预取寄存器组中最新存储第二指令组的指令的地址被读取。

在实际应用中,当所有预取寄存器中均已经存储有指令时,意味着所有预取寄存器均已经被占用,也即没有空余的预取寄存器可以存储第二指令组的指令。因此,预取缓存控制单元可以停止从预取寄存器组中读取第二指令组的指令。

例如,预取寄存器组包括8个预取寄存器,当检测到8个预取寄存器中均已经存储有指令时,预取缓存控制单元停止从预取寄存器组中读取第二指令组的指令。

当检测到中央处理器输出的取指指令再次跳转时,意味着中央处理器的取指指令对应的有效地址发生改变,此时,第二指令组的指令可能不是新的取指指令所需的指令,因此,预取缓存控制单元可以停止从预取寄存器组中读取第二指令组的指令。

当检测到预取寄存器组中最新存储第二指令组的指令的地址被读取时,意味着预取缓存控制单元已经读取到预取寄存器组中最新存储的第二指令组的指令,也即预取寄存器组中没有存储未读的第二指令组的指令。此时,若第二指令组的指令未被完全读取,预取缓存控制单元可以直接从flash存储器中读取未被读取到的第二指令组的指令,故预取缓存控制单元可以停止从预取寄存器组中读取第二指令组的指令。

例如,取指指令对应的指令数目为4条,编号依次为1、2、3、4。第一指令组包括编号为1、2的指令,第二指令组包括编号为3、4的指令,第一指令组预先已经存储在缓存寄存器组中,第二指令组存储在flash存储器中。在取指令时,预取缓存控制单元在从缓存寄存器组中读取编号为1、2的指令的同时,从flash存储器中读取编号为3、4的指令并存储在预取寄存器组中。预取缓存控制单元在完成编号为1、2的指令的读取后,在从预取寄存器组中读取到编号为3的指令后,编号为4的指令还没有完全存储至预取寄存器组中。此时,预取缓存控制单元从flash存储器中读取编号为4的指令。

从本发明上述实施例中可知,当有效地址未处于缓存寄存器组中时,预取缓存控制单元从flash存储器中读取与有效地址对应的指令并输出至中央处理器。在本发明实施例中,在将有效地址对应的指令输出至中央处理器之后,预取缓存控制单元还可以将有效地址对应的指令存储至缓存寄存器组中。

在将有效地址对应的指令存储至缓存寄存器组中时,可以将有效地址对应的全部指令均存储至缓存寄存器组中。在本发明实施例中,考虑到缓存寄存器组的存储能力,可以将有效地址对应的部分指令存储至缓存寄存器组中,有效地址对应的其余部分指令仍存储在flash存储器中。将有效地址对应的部分指令存储至缓存寄存器组中的具体场景,可以参照本发明上述实施例中提供的第一指令组以及第二指令组的关系。

在具体实施中,可以将缓存寄存器组划分成多个缓存寄存器分组。每一个缓存寄存器分组中可以包括一个缓存寄存器,也可以包括多个缓存寄存器。每一个缓存寄存器的位宽与cpu数据位宽一致。针对于每一个跳转分支,可以对应至少一个缓存寄存器分组。换而言之,一个跳转分支对应的指令可以存储在至少一个缓存寄存器分组中。

在实际应用中,由于缓存寄存器组的存储能力有限,因此,可能会出现缓存寄存器组中的所有缓存寄存器均被占用,也即所有缓存寄存器均存储有指令的情况。此时,缓存寄存器组无法继续存储指令。

在本发明实施例中,当缓存寄存器组中的所有缓存寄存器分组均已经被占用,且所有缓存寄存器分组对应的跳转分支与当前的取指指令对应的跳转分支均不相同时,预取缓存控制单元可以从缓存寄存器组中选取一个跳转分支对应的缓存寄存器分组,并将所选取的缓存寄存器分组清空。预取缓存控制单元可以将当前的取指指令对应的有效地址所对应的指令存储至被清空的缓存寄存器分组,从而将从flash存储器中读取的与当前的取指指令对应的指令存储在缓存寄存器组中。

例如,当前的取指指令对应的跳转分支为跳转分支2。在缓存寄存器组中,所有的缓存寄存器分组中均存储有指令,且所有缓存寄存器分组对应的跳转分支包括跳转分支1、跳转分支3~7。预取缓存控制单元在从flash存储器中读取的与跳转分支2对应的指令后,选取跳转分支1对应的缓存寄存器分组1并清空,并将跳转分支2对应的指令存储至缓存寄存器分组1中。

在具体实施中,在从缓存寄存器组中选取缓存寄存器分组时,可以选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最少的跳转分支所占用的缓存寄存器分组清空。

例如,缓存寄存器分组1对应跳转分支1,跳转分支1对应的指令被读取的次数为0。此时,预取缓存控制单元12选取缓存寄存器分组1并清空。

在从缓存寄存器组中选取缓存寄存器分组时,还可以选取被读取指令次数最小且最早存储指令的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最少且最早存储指令的跳转分支所占用的缓存寄存器分组清空。

例如,缓存寄存器分组1对应跳转分支1,跳转分支1对应的指令被读取次数为0,且跳转分支1对应的指令在时刻t0存储至缓存寄存器分组1。缓存寄存器分组3对应跳转分支3,跳转分支3对应的指令被读取次数为0,且跳转分支3对应的指令在时刻t2存储至缓存寄存器分组3。由于时刻t0早于时刻t2,且跳转分支1对应的指令被读取次数与跳转分支3对应的指令被读取次数相同,因此,预取缓存控制单元12选取跳转分支1所占用的缓存寄存器分组1。

在具体实施中,当选取出的跳转分支占用多个缓存寄存器分组时,可以从多个缓存寄存器分组中,选取地址位最高的缓存寄存器分组并清空。

例如,选取出的跳转分支为跳转分支1,跳转分支1对应的缓存寄存器分组包括缓存寄存器分组1~3,缓存寄存器分组1的地址位最高。因此,预取缓存控制单元选取缓存寄存器分组1并清空。

在具体实施中,从本发明上述实施例中可知,当判定有效地址处于缓存寄存器组中时,可以从缓存寄存器组中读取与有效地址对应的第一指令组的指令,并输出第一指令组的指令至中央处理器。当存在第二指令组的指令时,将第二指令组的指令存储至缓存寄存器组;一个跳转分支对应至少一个缓存寄存器分组,且一个缓存寄存器分组包括至少一个缓存寄存器,第一指令组与第二指令组均属于取指指令对应的跳转分支,且第一指令组对应的指令存储在缓存寄存器组,第二指令组对应的指令未存储在缓存寄存器组。

在具体实施中,将所述第二指令组的指令存储至所述缓存寄存器组,包括:当缓存寄存器组中存在未被指令占用的缓存寄存器分组时,将第二指令组的指令存储至未被指令占用的缓存寄存器分组,直至未被指令占用的缓存寄存器分组中均存储有第二指令组的指令,或第二指令组的指令均已存储在缓存寄存器组中。

若未被指令占用的缓存寄存器分组的存储容量较大,能够完全存储第二指令组的全部指令,则可以将第二指令组的全部指令均存储至未被指令占用的缓存寄存器分组。若第二指令组的指令较多,未被指令占用的缓存寄存器分组的存储容量无法完全存储第二指令组的指令,则可以将第二指令组的一部分指令存储至未被指令占用的缓存寄存器分组。

在具体实施中,在将第二指令组的指令存储至未被占用的缓存寄存器分组时,当未被指令占用的缓存寄存器分组中均存储有第二指令组的指令,也即未被指令占用的缓存寄存器分组已被第二指令组的指令完全占用时,停止存储第二指令组的指令。

例如,第二指令组包括指令3~指令8。未被指令占用的缓存寄存器分组为缓存寄存器分组1,且缓存寄存器分组仅能缓存指令3与指令4。因此,在缓存寄存器分组1存储指令3与指令4之后,停止将第二指令组存储至缓存寄存器组。此时,第二指令组仅包括指令5~指令8。

在将第二指令组的指令存储至未被占用的缓存寄存器分组中时,若第二指令组的指令已全部存储至缓存寄存器组,则可以停止存储第二指令组的指令。

例如,第二指令组包括指令3。未被指令占用的缓存寄存器分组为缓存寄存器分组1,且缓存寄存器分组能缓存指令3。预取缓存控制单元将指令3存储至缓存寄存器分组1之后,停止存储第二指令组的指令。

在具体实施中,当缓存寄存器组中的所有缓存寄存器分组均已经被指令占用时,可以从缓存寄存器分组中选取一个跳转分支对应的缓存寄存器分组并清空,并将第二指令组的指令缓存至清空后的缓存寄存器分组。第一指令组与第二指令组的关系可以参照本发明上述实施例中提供的内容,此处不做赘述。

在具体实施中,在从缓存寄存器组中选取缓存寄存器分组时,可以选取被读取指令次数最少的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最少的跳转分支所占用的缓存寄存器分组清空。进一步地,在从缓存寄存器组中选取缓存寄存器分组时,还可以选取被读取指令次数最小且最早存储指令的跳转分支所占用的缓存寄存器分组,并将所选取的被读取指令次数最小且最早存储指令的跳转分支所占用的缓存寄存器分组清空。当选取出的跳转分支占用多个缓存寄存器分组时,可以从多个缓存寄存器分组中,选取地址位最高的缓存寄存器分组并清空。

在本发明实施例中,具体的从缓存寄存器组中选取缓存寄存器分组的方法可以参照本发明上述实施例中提供的内容,此处不做赘述。

在具体实施中,上述提供的取指令方法的具体流程和原理可以参照上述对flash控制器的说明,此处不做赘述。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行本发明上述任一实施例中提供的取指令方法的步骤,此处不做赘述。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指示相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:rom、ram、磁盘或光盘等。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1