一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

指令处理方法、装置、微控制器及可读存储介质与流程

2022-05-26 23:23:23 来源:中国专利 TAG:


1.本技术涉及数据处理技术领域,具体涉及一种指令处理方法、装置、微控制器及可读存储介质。


背景技术:

2.随着物联网、工业控制、汽车电子等对mcu需求量越来越大,以cortex-m系列处理器作为内核的mcu开始大量运用到上述各个领域中。作为微控制器,mcu更多追求的是低成本和低功耗,因此所使用的嵌入式flash或者其他非易失存储器的读写速度并不高,且都是低于内核的访问速度。当内核需要运行在较高时钟频率下的时候,就不得不对访问增加读延时,以达到能够正确访问存储器的目的。增加读延时后虽然能够保证正确访问存储器,但是降低了处理器的最大性能,因此需要增加cache或者其他缓存等模块对存储器预取以降低这种增加读延时对性能的影响。但由于mcu更多需要的是低成本,不适合太大的cache或其他缓存模块,就需要选择性的对指令进行缓存,从而提高系统效率。
3.在构思及实现本技术过程中,本技术的发明人发现至少存在如下问题:现有技术在遇到分支指令时停止预取,导致在复杂的软件中系统提升性能较小;另外,虽然目前已有方法对条件分支指令进行预测,但是在cortex-m系列处理器中,取指时序不会很宽裕,处理器在取指令、取数据或访问外设时,会存在一些没有访问存储器的时钟间隙,导致出现一两个空闲时钟,但是不足以完成两次取指令操作,当出现条件分支时就需要选择一个取指方向,一旦方向选择错误,处理器就需要等待当前错误的预取指令完成才能进行取指,导致降低系统效率的问题。
4.前面的叙述在于提供一般的背景信息,并不一定构成现有技术。


技术实现要素:

5.针对上述技术问题,本技术提供一种指令处理方法、装置、微控制器及可读存储介质,通过对指令进行解析和分类,从而根据指令的类型缓存至对应的缓存区中,有效提高指令处理的效率,进一步提高系统性能。
6.为解决上述技术问题,本技术提供一种指令处理方法,包括如下步骤:
7.对从存储器中读取的指令进行解析;
8.在解析所述指令为分支指令后,对所述指令的类型进行分类并计算其偏移量;
9.根据所述指令的类型及其偏移量计算下一次预取地址;
10.根据所述指令的类型及其下一次预取地址将所述指令写入至对应的缓存区后进行指令预取。
11.可选地,在所述对从存储器中读取的指令进行解析之后,所述指令处理方法还包括:
12.若所述指令为无条件分支指令,则直接根据当前指令地址计算其偏移量。
13.可选地,所述在解析所述指令为分支指令后,对所述指令的类型进行分类并计算
其偏移量,包括:
14.若所述指令为带链接分支指令,则将所述指令标记为链接分支指令,计算所述带链接分支指令的偏移量,并将下一指令缓存至链接分支指令缓存区;
15.若所述指令为条件分支指令,则在检测所述缓冲器中的数据量满足预设数量后,计算所述条件分支指令的偏移量。
16.可选地,所述若所述指令为带链接分支指令,则将所述指令标记为链接分支指令,计算所述带链接分支指令的偏移量,并将下一指令缓存至链接分支指令缓存区,包括:
17.若所述指令为带链接分支指令,则将所述指令标记为链接分支指令,并将下一指令缓存至链接分支指令缓存区,删除链接分支指令的标记;
18.若所述下一指令为分支指令,则对所述下一指令进行标记,在缓冲器命中所述下一指令后,计算所述带链接分支指令的偏移量,并删除所述下一指令的标记;
19.若所述下一指令不为分支指令,则所述带链接分支指令的偏移量为固定预设值。
20.可选地,所述根据所述指令的类型及其偏移量计算下一次预取地址,包括:
21.在检测缓冲器命中所述指令后,若在分支方向和顺序方向均未完成缓存,则检测从所述存储器中读取的指令的类型;
22.若所述指令的类型为无条件分支指令或带链接分支指令,则根据所述指令的地址及其偏移量计算所述指令的取指地址;
23.若所述指令的类型为条件分支指令,则在检测缓冲器中的数据量满足预设数量后,根据所述指令的地址及其偏移量计算所述指令的取指地址;
24.若所述指令的类型为状态切换分支指令,则暂停所述指令的预取,直至处理器执行完已缓存的状态切换分支指令后,重新检测从所述存储器中读取的指令的类型;
25.若所述指令的类型不为条件分支指令且不为状态切换分支指令,则根据所述指令的当前指令地址和预设偏移量计算所述指令的取指地址。
26.可选地,所述若所述指令的类型为条件分支指令,则在检测缓冲器中的数据量满足预设数量后,根据所述指令的地址及其偏移量计算所述指令的取指地址,包括:
27.若缓冲器中的顺序指令缓存区的数据量满足预设数量,则将所述条件分支指令写入至缓冲器中的顺序指令缓存区,将跳转后的目标指令写入至缓冲器中的分支指令缓存区;
28.对所述条件分支指令进行解析,得到对应的跳转信息及偏移量,将所述条件分支指令的后两个顺序指令缓存至所述顺序指令缓存区;
29.根据所述条件分支指令的跳转信息及偏移量计算对应的取指地址,将计算出取指地址的条件分支指令缓存至分支指令缓存区。
30.可选地,所述指令处理方法还包括:
31.当所述条件分支指令为前向跳转指令且其偏移量小于或等于顺序指令缓存区大小时,停止指令预取,直至所述缓冲器中的指令不再命中。
32.可选地,所述指令处理方法还包括:
33.若所述缓冲器未命中所述指令,确定所述指令的下一次预取地址为总线接口的取指地址。
34.可选地,所述根据所述指令的类型及其下一次预取地址将所述指令写入至对应的
缓存区后进行指令预取,包括:
35.在检测缓冲器命中所述指令后,从所述存储器中预取所述指令;
36.若所述指令被标记为链接分支返回地址的指令,则根据所述下一次预取地址将所述指令缓存至链接分支指令缓存区中;
37.若所述指令为分支指令,则根据所述指令的偏移信息和地址,将计算出取指地址的指令缓存至分支指令缓存区中;
38.若所述指令为顺序指令,则根据所述下一次预取地址将所述指令缓存至顺序指令缓存区中。
39.可选地,在所述对从存储器中读取的指令进行解析之前,所述指令处理方法还包括:
40.获取处理器发起的指令访问请求;
41.检测缓冲器是否命中所述指令访问请求对应的指令;
42.若是,则在开启预取功能且缓冲器为未存满状态时,对从存储器中读取的指令进行解析;
43.若否,则直接从存储器中预取指令。
44.相应地,本技术还提供了一种指令处理装置,包括:
45.解析模块,用于对从存储器中读取的指令进行解析;
46.分类模块,用于在解析所述指令为分支指令后,对所述指令的类型进行分类并计算其偏移量;
47.计算模块,用于根据所述指令的类型及其偏移量计算下一次预取地址;
48.预取模块,用于根据所述指令的类型及其下一次预取地址将所述指令写入至对应的缓存区后进行指令预取。
49.本技术还提出了一种微控制器,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的指令处理方法的步骤。
50.本技术还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的指令处理方法的步骤。
51.实施本发明实施例,具有如下有益效果:
52.如上所述,本技术提供的一种指令处理方法、装置、微控制器及可读存储介质,所述方法包括:对从存储器中读取的指令进行解析;在解析指令为分支指令后,对所述指令的类型进行分类并计算其偏移量;根据指令的类型及其偏移量计算下一次预取地址;根据指令的类型及其下一次预取地址将所述指令写入至对应的缓存区后进行指令预取。本技术中的指令处理方法,通过对指令进行解析和分类,根据指令的类型缓存至对应的缓存区中,并计算出下一次指令的取指地址,解决了部分指令不能通过该指令计算地址的问题,提高了指令预取的准确率,降低了系统动态功耗,有效提高指令处理的效率,进一步提高系统性能,减少由于增加读延时导致系统性能方面的影响。
附图说明
53.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。为了更清楚地说明本技术实施例的技术方案,
下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
54.图1是本技术实施例提供的指令处理方法的流程示意图;
55.图2是本技术实施例提供的计算偏移量的流程示意图;
56.图3是本技术实施例提供的计算预取地址的流程示意图;
57.图4是本技术实施例提供的缓存指令的流程示意图;
58.图5是本技术实施例提供的指令处理装置的结构示意图;
59.图6是本技术实施例提供的微控制器的结构示意图;
60.图7是本技术实施例提供的设备的结构示意框图。
61.本技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
62.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
63.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素,此外,本技术不同实施例中具有同样命名的部件、特征、要素可能具有相同含义,也可能具有不同含义,其具体含义需以其在该具体实施例中的解释或者进一步结合该具体实施例中上下文进行确定。
64.应当理解,尽管在本文可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本文范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。本技术使用的术语“或”、“和/或”、“包括以下至少一个”等可被解释为包括性的,或意味着任一个或任何组合。例如,“包括以下至少一个:a、b、c”意味着“以下任一个:a;b;c;a和b;a和c;b和c;a和b和c”,再如,“a、b或c”或者“a、b和/或c”意味着“以下任一个:a;b;c;a和b;a和c;b和c;a和b和c”。仅当元件、功能、步骤或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
65.应该理解的是,虽然本技术实施例中的流程图中的各个步骤按照箭头的指示依次
显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
66.取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
67.需要说明的是,在本文中,采用了诸如s1、s2等步骤代号,其目的是为了更清楚简要地表述相应内容,不构成顺序上的实质性限制,本领域技术人员在具体实施时,可能会先执行s2后执行s1等,但这些均应在本技术的保护范围之内。
68.应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
69.在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或者“单元”的后缀仅为了有利于本技术的说明,其本身没有特定的意义。因此,“模块”、“部件”或者“单元”可以混合地使用。
70.为了更好理解本技术实施例,以下为相关专业术语及其解释。
71.mcu:micro control unit,微控制器;
72.buffer:缓存,掉电易失存储器;
73.flash:一种非易失存储器;
74.分支指令:改变程序流程的指令;
75.读延时:读取非易失存储器时插入的一个或多个等待周期;
76.偏移量:当前指令地址和分支指令地址之间的距离;
77.预取:在处理器还没进行下一次取指令时,提前读取指令;
78.cpi:clock cycle per instruction,表示每条计算机指令执行所需的时钟周期;
79.无条件分支指令:armv7指令集中b(no_condtion);
80.条件分支指令:armv7指令集中b(condtion)、cbz、cbnz等;
81.链接分支指令:armv7指令集中blx/bl;
82.状态切换指令:armv7指令集中bx;
83.顺序指令:非分支指令,按顺序执行。
84.首先介绍本技术可以提供的应用场景,如提供一种指令处理方法、装置、微控制器及可读存储介质,能够通过对指令进行解析和分类,根据指令的类型缓存至对应的缓存区中,并计算出下一次指令的取指地址,有效提高指令处理的效率,进一步提高系统性能,减少由于增加读延时导致系统性能方面的影响。
85.请参阅图1,图1是本技术实施例提供的指令处理方法的流程示意图。该指令处理方法具体可以包括:
86.s1、对从存储器中读取的指令进行解析。
87.具体的,对于s1步骤,主要通过对从存储器读回的指令进行解析,该存储器可以包括flash或非易失存储器等。
88.s2、在解析指令为分支指令后,对指令的类型进行分类并计算其偏移量。
89.可选地,在一些实施例中,如图2所示,s2步骤具体可以包括:
90.s21、若指令为带链接分支指令,则将指令标记为链接分支指令,计算带链接分支指令的偏移量,并将下一指令缓存至链接分支指令缓存区;
91.s22、若指令为状态切换指令,则在命中状态切换分支后,停止预取;在链接分支指令缓存区查看是否命中状态切换分支指令的跳转地址,若命中则根据指令解析流程开始对命中指令开始处理,若未命中对当前地址指令开始处理;
92.s23、若指令为条件分支指令,则在检测缓冲器中的数据量满足预设数量后,计算条件分支指令的偏移量。
93.可选地,在一些实施例中,s21步骤具体可以包括:
94.若指令为带链接分支指令,则将指令标记为链接分支指令,并将下一指令缓存至链接分支指令缓存区,删除链接分支指令的标记;
95.若下一指令为分支指令,则对下一指令进行标记,在缓冲器命中下一指令后,计算带链接分支指令的偏移量,并删除下一指令的标记;
96.若下一指令不为分支指令,则带链接分支指令的偏移量为固定预设值。
97.可选地,在一些实施例中,在对从存储器中读取的指令进行解析之后,该指令处理方法具体还可以包括:
98.若指令为无条件分支指令,则直接根据当前指令地址计算其偏移量。
99.具体的,对于s2步骤,在解析从存储器读取的指令为分支指令后,需要对指令的类型进行分类识别后计算其对应的偏移量。如果识别到读取的指令为无条件分支指令,则直接从该指令获取偏移量进行计算。如果识别到读取的指令为带链接分支指令,则需要标记当前读取的指令为链接分支指令,并将下一指令缓存至链接分支指令缓存区后,清除链接分支指令的标记;若识别到缓存至链接分支指令缓存区的下一指令为一个分支指令(即该指令包含下一个返回地址),则需要对该分支指令进行标记,在缓冲器命中链接分支指令缓存区的下一指令后,计算带链接分支指令的偏移量后,删除该下一指令的标记;若识别到缓存至链接分支指令缓存区的下一指令不为分支指令(顺序指令),则在缓冲器命中链接分支指令缓存区的下一指令后,确定其偏移量为预设值。如果识别到读取的指令为状态切换分支指令,则需要暂停预取,判断是否命中链接分支指令缓存区,若是,则该指令的下一次预取地址为链接分支指令缓存区的地址加上预设偏移量;若否,则停止预取,直至处理器开始下一次取指令动作。如果识别到读取的指令为条件分支指令,则需要检查顺序指令缓存区的数据量是否满足设定的数据量(两个预取方向的前提条件,包括分支方向和顺序方向),例如,根据cortex-m系列处理器的特征,针对于cortex-m0这种取指令和取数据为同一总线的处理器,当读延时为n时,顺序指令缓存区中的数据量应该大于等于(n 1)/2,当n为偶数时,应该为(n 2)/2。针对于cortex-m3等取指令和取数据为不同总线的处理器,当读延时为n时,顺序指令缓存区中的数据量应该大于等于n 1。
100.如果不满足,则需停止预取;如果满足,则从该指令中解析偏移量,然后后续预取指取后面两个顺序地址指令和计算出的地址指令。如果识别到读取的指令不为条件分支指令,则表示当前指令为顺序指令,按照指令地址递增的方式预取指令。
101.需要说明的是,在s2步骤中对从存储器中读取的指令进行类型分类时,既可以按
照上述识别顺序对指令进行顺序分类,例如先判断是否为无条件分支指令,再判断是否为链接分支指令,接着判断是否为状态切换分支指令,最后判断是否为条件分支指令;也可对读取的指令同时进行各个类型的识别,在此并不作唯一限定,可根据实际需求进行设置。
102.s3、根据指令的类型及其偏移量计算下一次预取地址。
103.可选地,在一些实施例中,如图3所示,s3步骤具体可以包括:
104.s31、在检测缓冲器命中指令后,若在分支方向和顺序分支方向均未完成缓存,则检测从存储器中读取的指令的类型;
105.s32、若指令的类型为无条件分支指令或带链接分支指令,则根据指令的地址及其偏移量计算指令的取指地址;
106.s33、若指令的类型为条件分支指令,则在检测缓冲器中的数据量满足预设数量后,根据指令的跳转信息及其偏移量计算指令的取指地址;
107.s34、若指令的类型为状态切换分支指令,则暂停指令的预取,直至处理器执行完已缓存的状态切换分支指令后,重新检测从存储器中读取的指令的类型;
108.s35、若指令的类型不为条件分支指令且不为状态切换分支指令,则根据指令的当前指令地址和预设偏移量计算指令的取指地址。
109.可选地,在一些实施例中,s33步骤具体可以包括:
110.若缓冲器中的顺序指令缓存区的数据量满足预设数量,则将条件分支指令写入至缓冲器中的顺序指令缓存区,将跳转后的目标指令写入至缓冲器中的分支指令缓存区;
111.对条件分支指令进行解析,得到对应的跳转信息及偏移量,将条件分支指令的后两个顺序指令缓存至顺序指令缓存区;
112.根据条件分支指令的跳转信息及偏移量计算对应的取指地址,将计算出取指地址的条件分支指令缓存至分支指令缓存区。
113.可选地,在一些实施例中,s33步骤具体还可以包括:
114.当条件分支指令为前向跳转指令且其偏移量小于或等于顺序指令缓存区大小时,停止指令预取,直至所述缓冲器中的指令不再命中。
115.具体的,针对短小的循环程序,关于条件分支还有一个处理方式,当条件分支为一个前向跳转,并且偏移量小于等于顺序缓存区大小时,应该停止预取;直到缓冲器中的指令不再命中,从而避免对同一块存储区重复取指。
116.可选地,在一些实施例中,上述指令处理方法具体还可以包括:
117.若缓冲器未命中指令,确定指令的下一次预取地址为总线接口的取指地址。
118.具体的,对于s3步骤,首先检查所有的缓存区有没有命中,如果有命中其中一个缓存区,并且条件分支方向和顺序缓存方向均完成缓存,则暂停预取,直至总线或处理器命中一个方向,如果未完成任一方向的缓存,则检测缓冲器是否命中指令后,在命中指令后根据指令的类型及其偏移量计算下一次预取地址。如果识别到从存储器获取的指令为无条件分支或者带链接分支指令,则解析该指令是否为前向跳转,若是,则该指令的取指地址为当前指令地址减去偏移量,若否,则该指令的取指地址为当前指令地址加上偏移量;如果识别到从存储器获取的指令为条件分支指令,则需要查看顺序指令缓存区中的数据量是否满足预设数据要求,如果不满足就暂停预取,直至处理器执行完条件分支指令后重新检测检测缓冲器是否命中指令,判断条件分支方向和顺序方向是否均完成缓存后重新预取指令;如果
满足预设数据要求,且条件分支之后的两个顺序指令已经缓存到顺序指令缓存区,则解析该指令是否为前向跳转,从而根据跳转信息及其偏移量计算对应的下一次取指地址;如果识别到从存储器获取的指令为状态切换分支指令,则暂停预取,直至处理器执行完状态切换分支指令;如果识别到从存储器获取的指令不为状态切换分支指令,则该指令的取指地址为当前指令地址加上预设偏移量。通过对指令进行解析和对分支指令进行分类,根据分支指令的分类缓存到不同类型的缓存区中,并计算出下一次指令的地址,例如将带链接分支指令的后一个顺序指令或当前指令缓存到链接分支指令缓存区,以提供子程序返回地址。本实例在解析出条件分支之后,是否进行分支方向和顺序方向两个方向上的预取,取决于顺序指令缓存区中的数据量和读延时之间的动态关系,根据cortex-m系列处理器的特征,针对于cortex-m0这种取指令和取数据为同一总线的处理器,当读延时为n时,顺序指令缓存区中的数据量应该大于等于(n 1)/2,当n为偶数时,应该为(n 2)/2。针对于cortex-m3等取指令和取数据为不同总线的处理器,当读延时为n时,顺序指令缓存区中的数据量应该大于等于n 1。当前条件分支缓存完成之后,在顺序指令缓存区数据量满足的情况下,先预取条件分支之后的两个顺序方向指令,最后预取分支方向指令,当指令都预取完毕就暂停取指,直到处理器命中一个方向,从命中方向开始预取。
119.另外,当缓冲器未命中指令,则确定该指令的下一次预取地址为总线接口或处理器的指令地址。
120.需要说明的是,在s3步骤中对解析的指令进行类型分类和取指地址计算时,既可以按照上述识别顺序对指令进行顺序分类后计算其取指地址,例如先判断是否为无条件分支指令或者带链接分支指令,再判断是否为条件分支指令,最后判断是否为状态切换分支指令;也可对解析的指令同时进行各个类型的分类和取指地址的计算,在此并不作唯一限定,可根据实际情况进行设置。
121.在具体的实施例中,在s3步骤之前具体还可以包括:在复位释放之后,判断总线或处理器是否有访问,若是,则执行s3步骤;若否,则判断存储器是否空闲且顺序指令缓存区为未存满状态,若是,则预取指令进行解析,识别指令的类型并计算其取指地址,若否,则返回上一步判断总线或处理器是否有访问。
122.s4、根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。
123.可选地,在一些实施例中,如图4所示,s4步骤具体可以包括:
124.s41、在检测缓冲器命中指令后,从存储器中预取指令;
125.s42、若指令被标记为链接分支返回地址的指令,则根据下一次预取地址将指令缓存至链接分支指令缓存区中;
126.s43、若指令为分支指令,则根据所述指令的偏移信息和地址,将计算出取指地址的指令缓存至分支指令缓存区中;
127.s44、若指令为顺序指令,则根据下一次预取地址将指令缓存至顺序指令缓存区中。
128.具体的,对于s4步骤,首先检查缓冲器所有的缓存区是否命中指令,在命中指令后,从存储区中预取指令;判断预取指令是否标记为链接分支返回地址的指令,若是,则根据下一次预取地址将该指令缓存至链接分支指令缓存区,若否,则判断当前指令是否为无
条件分支指令;在判断为无条件分支指令后将计算出的跳转指令缓存到分支指令缓存区;在判断不为无条件分支指令后,则判断是否为链接分支指令,若是,则根据下一次预取地址将该指令缓存至分支指令缓存区;若否,则判断是否为条件分支指令;在判断为条件分支指令后,将该指令缓存到顺序指令缓存区,由该指令计算出的跳转指令缓存到分支指令缓存区,若不为条件分支指令,则将该指令缓存至顺序指令缓存区。若指令为状态切换指令,则将该指令缓存至顺序指令缓存区中,在命中状态切换分支后,停止预取;在链接分支指令缓存区查看是否命中状态切换分支指令的跳转地址,若命中则根据指令解析流程开始对命中指令开始处理,若未命中对当前地址指令开始处理。
129.需要说明的是,在s4步骤中对预取的指令进行类型的识别后缓存至对应缓存区时,既可以按照上述识别顺序进行识别后缓存,首先判断是否带链接分支指令,接着判断是否为无条件分支指令,其次判断是否为链接分支指令,再判断是否为条件分支指令,然后判断是否为状态切换分支指令,最后判断是否为顺序指令,即上述顺序为判断是否为带链接分支指令再到条件分支指令最后到顺序指令;也可以对预取的指令同时进行各个类型的识别后进行缓存,而无需按照顺序进行识别,在此并不作唯一限定,可根据实际情况进行设置。
130.在具体的实施例中,在s4步骤之前具体还可以包括:在复位释放之后,判断总线或处理器是否有访问,若是,则执行s4步骤;若否,则判断存储器是否空闲且顺序指令缓存区为未存满状态,若是,则预取指令,根据指令的类型及其取指地址进行缓存,若否,则返回上一步判断总线或处理器是否有访问。另外,当s4步骤中检测缓冲器未命中指令,则清空顺序指令缓存区,返回判断总线或处理器是否有访问步骤。
131.可选地,在一些实施例中,在对从存储器中读取的指令进行解析之前,该指令处理方法具体还可以包括:
132.获取处理器发起的指令访问请求;
133.检测缓冲器是否命中指令访问请求对应的指令;
134.若是,则在开启预取功能且缓冲器为未存满状态时,对从存储器中读取的指令进行解析;
135.若否,则直接从存储器中预取指令。
136.具体的,在s1步骤之前,还可以包括首先获取处理器发起的指令访问请求,从而检测缓冲器是否命中该指令访问请求对应的指令。
137.在具体的实施例中,当总线或处理器发起指令访问时,获取对应的指令访问请求,检测当前缓冲器是否命中该指令访问请求对应的指令,若否,则直接从非易失存储器读取指令;在检测当前缓冲器命中该指令访问请求对应的指令后,判断是否已开启预取功能且缓冲器为为存满状态,若否,则返回总线发起指令访问请求步骤;在判断已开启预取功能且缓冲器为为存满状态后,对从存储器读取的指令进行解析,并判断是否为可计算指令;若否,则返回总线发起指令访问请求步骤;在判断为可计算指令后,计算指令的预取地址,并根据预取地址从非易失存储器读取指令,并更新缓冲器状态。
138.在具体的实施例中,以cortex-m系列处理器执行本实施提供的指令处理方法为例,没有执行分支指令(即按顺序指令执行)时,与现有技术相同,都是按指令地址递增的方式预取指令。当执行分支指令时,会对指令进行解析,根据armv7指令集区分该分支指令的
类型。有些分支指令是可以计算偏移量的,虽然还有一些分支指令无法计算偏移量,但是可以根据指令的特性去处理。在本实施例中所有的条件判断转移指令都按条件分支去处理。根据不同分支指令和缓冲器状态对下一次预取地址做出调整;从而保证预取准确率,不出现错误预取和多余预取。无条件分支指令和带链接分支指令都可以从指令解析出偏移量,然后根据当前指令地址计算下一次的指令地址。条件分支从指令中无法判断是否满足条件跳转,需要进行两个方向的预取;为避免出现反作用效果,所以是否需要进行预取,需要根据缓存控制中顺序指令缓存区中的数据量决定。根据cortex-m系列处理器的特征,针对于cortex-m0这种取指密度比较低处理器,当读延时为n时,顺序指令缓存区中的数据量应该大于等于(n 1)/2,当n为偶数时,应该为(n 2)/2。即当读取flash的读延迟为7时,缓冲器的最小容量应该4。针对于cortex-m3等取指密度较高的处理器,当读延时为n时,顺序指令缓存区中的数据量应该大于等于n 1。
139.当分支指令缓存区中已经缓存了一个条件分支并且顺序指令缓存区中也缓存了条件分支后两个指令时,此时预取应该暂停,直到总线或处理器地址命中条件分支或者顺序分支,才继续进行预取,从而为了避免在一个错误的取指方向上多次预取,增加额外的动态功耗。
140.状态切换分支无法计算偏移量,但是大多数的状态切换分支都和子程序调用有关系。根据cortex-m系列处理器的特点,每一次取指之后,处理器会给出一个预取动作;当处理器计算出前一个指令为有效分支指令时,这个预取动作的指令就是一个无效指令。根据这个特点,当调用函数或者子程序时,只需要将这个预取动作的指令,也是函数或者子程序的返回地址,缓存把该指令缓存到链接分支缓存区里,等到该分支时,在链接分支缓存区查看是否命中即可。缓存返回地址时,还需要判断链接分支是高位指令完成跳转还是低位指令完成跳转。如果是高位指令完成跳转,缓存的返回地址为当前指令的下一个地址指令,否则返回地址就是当前地址指令。如果b指令缓存区深度足够,可以命中所有的返回地址,避免了取指带来的读延时并且降低了重复访问非易失存储器带来的功耗;所以链接分支缓存区的大小也取决子程序嵌套层数。
141.由上可知,本技术实施例提供的指令处理方法,包括:对从存储器中读取的指令进行解析;在解析指令为分支指令后,对指令的类型进行分类并计算其偏移量;在检测缓冲器命中指令后,根据指令的类型及其偏移量计算下一次预取地址;根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。可见,本技术实施例的指令处理方法,通过对指令进行解析和分类,根据指令的类型缓存至对应的缓存区中,并计算出下一次指令的取指地址,解决了部分指令不能通过该指令计算地址的问题,提高了指令预取的准确率,降低了系统动态功耗,有效提高指令处理的效率,进一步提高系统性能,减少由于增加读延时导致系统性能方面的影响。
142.相应的,本技术还提供一种指令处理装置,请参阅图5,图5是本技术提供的指令处理装置的结构示意图,具体可以包括解析模块100、分类模块200、计算模块300和预取模块400。
143.其中,解析模块100,用于对从存储器中读取的指令进行解析。
144.分类模块200,用于在解析指令为分支指令后,对指令的类型进行分类并计算其偏移量。
145.可选地,在一些实施例中,分类模块200具体还可以包括:
146.第一分类单元,用于若指令为带链接分支指令,则将指令标记为链接分支指令,计算带链接分支指令的偏移量,并将下一指令缓存至链接分支指令缓存区;
147.第二分类单元,用于若指令为状态切换指令,则将该指令缓存至顺序指令缓存区中,在命中状态切换分支后,停止预取;在链接分支指令缓存区查看是否命中状态切换分支指令的跳转地址,若命中则根据指令解析流程开始对命中指令开始处理,若未命中对当前地址指令开始处理;
148.第三分类单元,用于若指令为条件分支指令,则在检测缓冲器中的数据量满足预设数量后,计算条件分支指令的偏移量。
149.第四分类单元,用于若指令为无条件分支指令,则直接根据当前指令地址计算其偏移量。
150.计算模块300,用于根据指令的类型及其偏移量计算下一次预取地址。
151.可选地,在一些实施例中,计算模块300具体还可以包括:
152.第一检测单元,用于在检测缓冲器命中指令后,若在分支方向和顺序方向均未完成缓存,则检测从存储器中读取的指令的类型;
153.第二检测单元,用于若指令的类型为无条件分支指令或带链接分支指令,则根据指令的地址及其偏移量计算指令的取指地址;
154.第三检测单元,用于若指令的类型为条件分支指令,则在检测缓冲器中的数据量满足预设数量后,根据指令的跳转信息及其偏移量计算指令的取指地址;
155.第四检测单元,用于若指令的类型为状态切换分支指令,则暂停指令的预取,直至处理器执行完已缓存的状态切换分支指令后,重新检测从存储器中读取的指令的类型;
156.第五检测单元,用于若指令的类型不为条件分支指令且不为状态切换分支指令,则根据指令的当前指令地址和预设偏移量计算指令的取指地址。
157.预取模块400,用于根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。
158.可选地,在一些实施例中,预取模块400具体还可以包括:
159.第一预取单元,用于在检测缓冲器命中指令后,从存储器中预取指令;
160.第二预取单元,用于若指令被标记为链接分支返回地址的指令,则根据下一次预取地址将指令缓存至链接分支指令缓存区中;
161.第三预取单元,用于则根据指令的偏移信息和地址,将计算出取指地址的指令缓存至分支指令缓存区中;
162.第四预取单元,用于若指令为顺序指令,则根据下一次预取地址将指令缓存至顺序指令缓存区中。
163.可选地,在一些实施例中,上述指令处理装置具体还可以包括预处理模块,用于获取处理器发起的指令访问请求;检测缓冲器是否命中指令访问请求对应的指令;若是,则在开启预取功能且缓冲器为未存满状态时,对从存储器中读取的指令进行解析;若否,则直接从存储器中预取指令。
164.综上所述,本技术实施例提供的指令处理装置,解析模块100对从存储器中读取的指令进行解析;分类模块200在解析指令为分支指令后,对指令的类型进行分类并计算其偏
移量;计算模块300根据指令的类型及其偏移量计算下一次预取地址;预取模块400根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。可见,本技术实施例的指令处理装置,通过对指令进行解析和分类,根据指令的类型缓存至对应的缓存区中,并计算出下一次指令的取指地址,解决了部分指令不能通过该指令计算地址的问题,提高了指令预取的准确率,降低了系统动态功耗,有效提高指令处理的效率,进一步提高系统性能,减少由于增加读延时导致系统性能方面的影响。
165.为了便于进一步理解本技术的指令处理方法,本技术实施例还提供一种指令处理系统,主要由指令解析模块、地址计算模块和缓存控制模块组成。其中,指令解析模块用于对flash读回的指令进行解析,判断是否为分支指令,如果是分支指令,则区分其分支类型并计算偏移量,并把判断结果和计算结果给到地址计算模块。地址计算模块用于计算下一次预取地址(当前指令地址
±
偏移量)和缓冲器是否命中,当命中缓冲器时,flash的取指地址选择计算出的地址;当未命中缓冲器时,flash的取指地址选择总线接口的取指地址。缓存控制模块用于在经过指令解析分类之后,根据不同的指令类型写入对应的缓存区中,当缓冲器未命中时,选择直接从flash读取数据;当缓冲器命中时,总线接口选择缓存区中对一个的指令。
166.其中,缓存控制模块包括顺序指令缓存区、分支指令缓存区和链接分支指令缓存区,将三个指令缓存区集成到一个缓冲器中。顺序指令缓存区用于缓存预取的顺序指令,它的大小根据面积成本和总线的延时周期决定。分支指令缓存区用于缓存预取的无条件分支、条件分支指令,它的大小根据面积成本决定。链接分支指令缓存区缓存的不是预取的带链接分支指令,而是这个带链接分支指令的返回地址,它是函数或者子程序的返回地址,具体返回的是当前地址还是他的下一个地址需要根据当前指令进行判断。
167.另外,顺序指令缓存区和分支指令缓存区采用fifo的缓存方式,先进先出,能够方便在每次读出指令和缓存预取指令时进行动态更新,链接分支缓存区采取和处理器程序调度一样的采取压栈的方式,存储的指令先进后出。
168.需要说明的是,上述三个缓存区都有自己的读写指针;具体的,每次写入到顺序指令缓存区中的分支指令都会被标记,当命中标记时,缓冲器的读指针会随指令类型的不同从而到不同缓存区中进行读取。例如,当没有命中顺序指令缓存区中标记的分支指令时,缓冲器的读指针就等于顺序指令缓存区的读指针;例如,当没有命中顺序指令缓存区的标记的分支指令时,缓冲器的读指针就等于顺序指令缓存区的读指针;如果在顺序指令缓存区中命中的是一个链接分支指令,缓冲器的读指针就等于链接分支指令缓存区的读指针,然后等待总线取指令,不管有没有命中,读取一次返回到顺序指令缓存区,命中则根据链接分支指令缓存区中地址进行预取,未命中则根据总线地址进行取指;如果顺序指令缓存区命中的是一个其他分支指令,缓冲器的读指针就等于分支指令缓存区的读指针。如果一个条件分支指令为前向跳转指令,并且偏移量小于顺序指令缓存区的大小,此时会对顺序指令缓存区进行遍历,查看是否地址命中,如果命中则停止预取;否则根据顺序指令缓存区中的数据量进行顺序或分支预取。
169.以cortex-m0系列的处理器为例,该系列的处理器需要运行在48mhz的时钟频率下,但是使用的非易失存储器的支持的最大读取速度为40ns(25mhz),所以为了非易失存储器的正常使用,在处理器访问时就需要增加1个时钟周期的读延时。当读延时为1时,通过上
述预取方式可以为处理器提供最佳的性能提升,从而在理想状况下可以做到无等待传输。在未使用预取方式的情况下,平均每3个时钟周期能执行2条16位指令,即cpi=3/2=1.5;在使用该预取装置的情况下,理想状况每1个时钟周期能执行1条16位指令,即cpi=1,性能得到最大提升。在从非易失存储器读出指令进行解析时,如果不为分支指令则可以一致顺序预取直到顺序指令缓存区为存满状态;当指令为无条件分支指令时,则再预取一次顺序指令然后进行分支的预取;当指令为bl/blx时,则缓存下一条指令到链接返回缓存区;当指令为bx时,则在链接返回缓存区中查看是否命中;当指令为条件分支指令时,则当顺序指令缓存区数据量大于等于1时,进行缓存顺序方向和分支方向的指令,直到顺序方向缓存两个指令,分支方向缓存一个指令后停止。在实际情况下,如果遇到条件分支指令时,顺序指令缓存区中数据量大于等于1,也能做到cpi=1的执行效率;即使顺序指令缓存区中数据量不足1,也只会在当前条件分支指令等待一个时钟周期。综合下来,在使用该预取方式cpi接近1,极大的降低了处理器和非易失存储器之间的性能差距带来的影响。
170.本技术实施例中还提供一种微控制器,包括存储器10和处理器20,其结构示意图如图6所示。该存储器10存储有计算机程序,该处理器20执行计算机程序时上述的一种指令处理方法,包括:对从存储器中读取的指令进行解析;在解析指令为分支指令后,对指令的类型进行分类并计算其偏移量;根据指令的类型及其偏移量计算下一次预取地址;根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。
171.本技术实施例中还提供一种设备,该设备可以是服务器,其结构示意图如图7所示。该设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该设备设计的处理器用于提供计算和控制能力。该设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该设备的数据库用于储存指令处理方法等数据。该设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种指令处理方法。上述指令处理方法,包括:对从存储器中读取的指令进行解析;在解析指令为分支指令后,对指令的类型进行分类并计算其偏移量;根据指令的类型及其偏移量计算下一次预取地址;根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。
172.本技术一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种指令处理方法,包括步骤:对从存储器中读取的指令进行解析;在解析指令为分支指令后,对指令的类型进行分类并计算其偏移量;根据指令的类型及其偏移量计算下一次预取地址;根据指令的类型及其下一次预取地址将指令写入至对应的缓存区后进行指令预取。
173.上述执行的指令处理方法,通过对指令进行解析和分类,根据指令的类型缓存至对应的缓存区中,并计算出下一次指令的取指地址,解决了部分指令不能通过该指令计算地址的问题,提高了指令预取的准确率,降低了系统动态功耗,有效提高指令处理的效率,进一步提高系统性能,减少由于增加读延时导致系统性能方面的影响。
174.可以理解,上述场景仅是作为示例,并不构成对于本技术实施例提供的技术方案的应用场景的限定,本技术的技术方案还可应用于其他场景。例如,本领域普通技术人员可知,随着系统架构的演变和新业务场景的出现,本技术实施例提供的技术方案对于类似的
技术问题,同样适用。
175.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
176.本技术实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
177.本技术实施例设备中的单元可以根据实际需要进行合并、划分和删减。
178.在本技术中,对于相同或相似的术语概念、技术方案和/或应用场景描述,一般只在第一次出现时进行详细描述,后面再重复出现时,为了简洁,一般未再重复阐述,在理解本技术技术方案等内容时,对于在后未详细描述的相同或相似的术语概念、技术方案和/或应用场景描述等,可以参考其之前的相关详细描述。
179.在本技术中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
180.本技术技术方案的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本技术记载的范围。
181.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,被控终端,或者网络设备等)执行本技术每个实施例的方法。
182.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本技术实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络,或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、存储盘、磁带)、光介质(例如,dvd),或者半导体介质(例如固态存储盘solid state disk(ssd))等。
183.以上仅为本技术的优选实施例,并非因此限制本技术的专利范围,凡是利用本技术说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本技术的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献