CN113553102B - 微码取指方法、微码存储组合产生方法、装置、设备 - Google Patents
微码取指方法、微码存储组合产生方法、装置、设备 Download PDFInfo
- Publication number
- CN113553102B CN113553102B CN202110920532.7A CN202110920532A CN113553102B CN 113553102 B CN113553102 B CN 113553102B CN 202110920532 A CN202110920532 A CN 202110920532A CN 113553102 B CN113553102 B CN 113553102B
- Authority
- CN
- China
- Prior art keywords
- microcode
- micro
- flow control
- address
- jump
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
Abstract
一种微码取指方法及装置、微码存储组合产生方法及装置、电子设备。该微码取指方法用于微码存储组合,微码存储组合包括微码操作信息表、微码流控制信息表和映射表。微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储。微码流控制信息表包括多个微码流控制条目。映射表包括多个地址映射条目,每个地址映射条目记载与对应的微码流控制条目的映射关系。该方法包括:基于入口地址,根据映射表进行查表得到对应的微码流控制条目;根据微码流控制条目所包含的指令流控制条目和微操作起始地址,获取对应的微操作。该方法能够节省存储空间,提高存储空间的利用率。
Description
技术领域
本公开的实施例涉及一种微码取指方法及装置、微码存储组合产生方法及装置、电子设备。
背景技术
对于精简指令集和复杂指令集,处理器开发厂商通常会根据自身处理器算术运算单元或者访存处理单元的特性,将某些特定的一条指令拆解成若干条便于处理单元操作的微码(Microcode)。微码是将指令进行分解所得到的体系架构处理单元能够处理的若干条微小的指令。除此之外,硬件开发厂商通常将软件/硬件配合的相关操作利用微码来完成,作为软件/硬件接口的微码能提供相关的安全服务。同时,由于微码的灵活性,其已成为硅片产品级漏洞修复的一种重要方式。
发明内容
本公开至少一个实施例提供一种微码取指方法,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储;所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;所述微码取指方法包括:基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与所述微码流控制条目对应的微操作。
例如,在本公开一实施例提供的微码取指方法中,所述微码操作信息表存储在存储器中,所述存储器以存储行的形式进行划分,每个存储行存储有多个微操作,至少一个存储行中的微操作属于相同的微码序列,或者,至少一个存储行中的微操作属于不同的微码序列,根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与所述微码流控制条目对应的微操作,包括:根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,以所述存储行为单位,逐行获取与所述微码流控制条目对应的微操作。
例如,在本公开一实施例提供的微码取指方法中,所述微操作起始地址包括行地址和偏移地址,所述行地址指示所述存储行的地址,所述偏移地址指示所述微操作在所述存储行中相对于行首的地址偏移,所述微操作包括序列结束标识和顺序干扰标识,所述序列结束标识指示所述微操作是否为所属的微码序列中的最后一个微操作,将指示所述微操作为所属的微码序列中的最后一个微操作的序列结束标识称为有效的序列结束标识,所述顺序干扰标识指示在存在跳转的情形下是否从所述微操作跳转,将指示从所述微操作跳转的顺序干扰标识称为有效的顺序干扰标识,根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,以所述存储行为单位,逐行获取与所述微码流控制条目对应的微操作,包括:针对每一存储行,获取所述存储行中所需要的微操作;判断读取的微操作中是否包含具有所述有效的序列结束标识的微操作;响应于读取的微操作中包含具有所述有效的序列结束标识的微操作,停止读取操作,并丢弃具有所述有效的序列结束标识的微操作之后的微操作;响应于读取的微操作中不包含具有所述有效的序列结束标识的微操作,进行后续存储行的读取。
例如,在本公开一实施例提供的微码取指方法中,针对每一存储行,获取所述存储行中所需要的微操作,包括:针对每一存储行,判断所述行地址是否为读取所述微码流控制条目所得到的行地址;响应于所述行地址为读取所述微码流控制条目所得到的行地址,根据所述行地址和所述偏移地址读取所述存储行中以所述偏移地址为起始地址的微操作;响应于所述行地址不是读取所述微码流控制条目所得到的行地址,根据所述行地址读取所述存储行中的全部微操作。
例如,在本公开一实施例提供的微码取指方法中,进行后续存储行的读取,包括:判断读取的微操作中是否包含具有所述有效的顺序干扰标识的微操作;响应于读取的微操作中不包含具有所述有效的顺序干扰标识的微操作,根据所述微操作的顺序干扰标识的分支指令类型,选择基于当前的行地址产生新的行地址或者基于所述微码流控制条目中包含的所述微码分支指令目的地址得到新的行地址,并利用所述新的行地址获取对应的微操作;响应于读取的微操作中包含具有所述有效的顺序干扰标识的微操作且所述顺序干扰标识指示无条件跳转,丢弃具有所述有效的顺序干扰标识的微操作之后的微操作,并且获取所述跳转目标地址对应的微码流控制条目所对应的微操作;响应于读取的微操作中包含具有所述有效的顺序干扰标识的微操作且所述顺序干扰标识指示条件跳转,按照顺序读取微操作的模式进行读取并监测执行单元的误预测结果,在所述执行单元对于跳转指令得到的误预测结果达到或者超过门限值的情形,放弃所述顺序读取微操作的模式,丢弃具有所述有效的顺序干扰标识的微操作之后的微操作,并且获取所述跳转目标地址对应的微码流控制条目所对应的微操作,其中,所述门限值称为跳转信心值。
例如,在本公开一实施例提供的微码取指方法中,获取所述跳转目标地址对应的微码流控制条目所对应的微操作,包括:根据基于所述入口地址查表得到的微码流控制条目所包含的指令流控制条目,得到所述跳转目标地址;基于所述跳转目标地址,根据所述映射表进行查表得到对应的微码流控制条目;根据所述跳转目标地址对应的微码流控制条目包括的微操作起始地址,获取对应的微操作。
例如,在本公开一实施例提供的微码取指方法中,所述新的行地址通过所述当前的行地址递增1得到,或者,所述新的行地址利用所述微码分支指令目的地址查找所述映射表得到。
例如,在本公开一实施例提供的微码取指方法中,所述序列结束标识为1比特二进制数值;所述顺序干扰标识为2比特二进制数值,所述2比特二进制数值中的1比特二进制数值用于标识是否存在顺序干扰,所述2比特二进制数值中的另1比特二进制数值用于标识顺序干扰的分支指令类型。
例如,在本公开一实施例提供的微码取指方法中,在不存在微码之间的跳转的情形,所述微码流控制条目中的指令流控制条目为空。
本公开至少一个实施例还提供一种微码取指方法,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列以顺序排布的方式存储,同一个微码序列中的多个微操作以顺序排布的方式存储,所述微码操作信息表存储在存储器中,所述存储器以存储行的形式进行划分,每个存储行存储有多个微操作,所述存储器包括多个取指端口;所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;所述微码取指方法包括:基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;根据所述微码流控制条目,利用所述多个取指端口进行协同读取,以得到多个微码队列,其中,所述多个微码队列与所述多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作;基于所述多个微码队列,派发得到所需要的微操作。
例如,在本公开一实施例提供的微码取指方法中,所述多个取指端口包括两个取指端口,根据所述微码流控制条目,利用所述多个取指端口进行协同读取,以得到所述多个微码队列,包括:在不存在微码之间的跳转的情形,以至少一个存储行为单次读取单位,利用所述两个取指端口按照所述单次读取单位交替读取存储行中的微操作;在存在微码之间的跳转的情形,利用所述两个取指端口中的一个取指端口逐行读取所述微码流控制条目对应的存储行中的微操作,并且利用所述两个取指端口中的另一个取指端口读取跳转目标地址对应的微码流控制条目所对应的存储行中的微操作。
例如,在本公开一实施例提供的微码取指方法中,所述多个微码队列包括两个微码队列,在不存在微码之间的跳转的情形,基于所述多个微码队列,派发得到所需要的微操作,包括:以乒乓操作的方式从所述两个微码队列交替获取微操作,并依序对获取的微操作进行派发,其中,每次获取的微操作为一个单次读取单位所包含的微操作。
例如,在本公开一实施例提供的微码取指方法中,所述多个微码队列包括两个微码队列,在存在微码之间的跳转的情形,基于所述多个微码队列,派发得到所需要的微操作,包括:从具有有效的顺序干扰标识的微操作所在的微码队列依序获取微操作,并依序对获取的微操作进行派发,其中,所述具有有效的顺序干扰标识的微操作所在的微码队列称为第一队列,所述两个微码队列中除第一队列之外的另一个队列称为第二队列,所述第二队列中微操作的首地址对应于所述跳转目标地址;响应于所述顺序干扰标识指示无条件跳转,从所述跳转目标地址开始,对所述第一队列中的微操作和所述第二队列中的微操作进行交替派发。
例如,在本公开一实施例提供的微码取指方法中,基于所述多个微码队列,派发得到所需要的微操作,还包括:为条件跳转执行设定跳转信心值,基于所述跳转信心值,在对所述具有有效的顺序干扰标识的微操作派发之后,选择所述第一队列或所述第二队列中的一个队列,对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式。
例如,在本公开一实施例提供的微码取指方法中,选择所述第一队列或所述第二队列中的一个队列,对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式,包括:在所述条件跳转执行为跳转并且按照跳转方式进行派发的情形,清空所述第一队列,保持从所述第二队列进行派发,所述第一队列根据所述第二队列当前的取码进度与所述第二队列配合并以乒乓操作的方式交替获取微操作;在所述条件跳转执行为非跳转并且按照非跳转方式进行派发的情形,清空所述第二队列,保持从所述第一队列进行派发,所述第二队列根据所述第一队列当前的取码进度与所述第一队列配合并以乒乓操作的方式交替获取微操作;在所述条件跳转执行为跳转并且按照非跳转方式进行派发的情形,清空所述第一队列,从所述第二队列进行派发,所述第一队列根据所述第二队列当前的取码进度与所述第二队列配合并以乒乓操作的方式交替获取微操作;在所述条件跳转执行为非跳转并且按照跳转方式进行派发的情形,清空所述第二队列,从所述第一队列进行派发,所述第二队列根据所述第一队列当前的取码进度与所述第一队列配合并以乒乓操作的方式交替获取微操作。
例如,在本公开一实施例提供的微码取指方法中,所述跳转信心值通过预先设置得到,或者,所述跳转信心值基于样本进行训练得到。
例如,在本公开一实施例提供的微码取指方法中,所述跳转信心值的训练方式包括:响应于所述条件跳转的执行结果与所述跳转信心值的预测结果相同,将所述跳转信心值的数值增加1;响应于所述条件跳转的执行结果与所述跳转信心值的预测结果不同,将所述跳转信心值的数值减1。
例如,在本公开一实施例提供的微码取指方法中,基于所述多个微码队列,派发得到所需要的微操作,还包括:采用预取方式,将所述微码操作信息表中的至少部分微操作预取到所述多个微码队列中的一个微码队列。
例如,在本公开一实施例提供的微码取指方法中,所述多个微码队列为多个逻辑队列,或者,所述多个微码队列共享同一个物理队列。
本公开至少一个实施例还提供一种微码存储组合产生方法,包括:产生多个微码序列,其中,每个微码序列包括多个微操作;将所述多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表;创建微码流控制信息表,其中,所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;创建映射表,其中,所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。
本公开至少一个实施例还提供一种微码取指装置,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储;所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;所述微码取指装置包括:映射单元,配置为基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;获取单元,配置为根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与所述微码流控制条目对应的微操作。
本公开至少一个实施例还提供一种微码取指装置,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列以顺序排布的方式存储,同一个微码序列中的多个微操作以顺序排布的方式存储,所述微码操作信息表存储在存储器中,所述存储器以存储行的形式进行划分,每个存储行存储有多个微操作,所述存储器包括多个取指端口;所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;所述微码取指装置包括:映射单元,配置为基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;协同读取单元,配置为根据所述微码流控制条目,利用所述多个取指端口进行协同读取,以得到多个微码队列,其中,所述多个微码队列与所述多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作;派发单元,配置为基于所述多个微码队列,派发得到所需要的微操作。
本公开至少一个实施例还提供一种微码存储组合产生装置,包括:第一处理单元,配置为产生多个微码序列,其中,每个微码序列包括多个微操作;第二处理单元,配置为将所述多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表;第三处理单元,配置为创建微码流控制信息表,其中,所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址包括分支微码对应目标微码序列的第一个微操作的地址;第四处理单元,配置为创建映射表,其中,所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。
本公开至少一个实施例还提供一种电子设备,包括如本公开任一实施例提供的微码取指装置。
本公开至少一个实施例还提供一种电子设备,包括如本公开任一实施例提供的微码存储组合产生装置。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为一种取指流程示意图;
图2A为一种微码组合示意图;
图2B为一种微码取指格式示意图;
图3为一种微码取指顺序示意图;
图4为本公开一些实施例提供的一种微码存储组合的示意图;
图5为本公开一些实施例提供的另一种微码存储组合的示意图;
图6为本公开一些实施例提供的一种微码取指方法的流程示意图;
图7为图6中步骤S120的流程示意图;
图8为图7中步骤S121的流程示意图;
图9为图7中步骤S124的流程示意图;
图10为图9中步骤S1243的流程示意图;
图11为本公开一些实施例提供的一种微码取指方法的流程示意图;
图12为本公开一些实施例提供的另一种微码取指方法的流程示意图;
图13为图12中步骤S220的流程示意图;
图14A为本公开一些实施例提供的不存在跳转时的取指方式示意图;
图14B为本公开一些实施例提供的存在跳转时的取指方式示意图;
图15为图12中步骤S230的流程示意图;
图16为本公开一些实施例提供的针对两个微码队列的派发示意图;
图17为图12中步骤S230的流程示意图;
图18为本公开一些实施例提供的针对两个微码队列、具有预取功能的派发示意图;
图19为本公开一些实施例提供的一种微码存储组合产生方法的流程示意图;
图20为本公开一些实施例提供的一种微码取指装置的示意框图;
图21为本公开一些实施例提供的另一种微码取指装置的示意框图;
图22为本公开一些实施例提供的一种微码存储组合产生装置的示意框图;
图23为本公开一些实施例提供的一种电子设备的示意框图;以及
图24为本公开一些实施例提供的另一种电子设备的示意框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
随着技术的发展,越来越多的任务将可以被微码承担,因此,研究微码的存放与取指方式具有重要意义。目前,处理器产品中可以设置微码的存放与取指装置。在目前的设计中,是否需要微码操作是由译码电路来确认的。当确认需要微码的参与,则将进入微码取指和译码逻辑,得到相关的微码序列,并将微码信息存入待派送的队列中,接着将微码发送到指定的运算单元或者访存单元中。在整个微码的读取过程中,并没有对条件跳转指令的判断,因此,如果发生分支错误,指令释放阶段将发送重定位取指地址(Redirect Target)到微码取指单元,以纠正之前的取指方式。
图1为一种取指流程示意图。如图1所示,取指部件将取指指令发送到指令译码部件,指令译码部件(也即前述的译码电路)判断是否需要微码操作。若需要微码操作,则将信息传递到微码控制部件。微码控制部件将微码读取地址发送到微码指令流控制(MicrocodeSequencer),微码指令流控制进一步获取微码指令信息(Microcode Operation)。并且,微码指令流控制还将当前取指的流控信息发回至微码控制部件。微码指令信息被输入微码译码电路,经译码之后,所得到的微码信息被存入微码队列并等待派送。此外,指令译码部件将指令信息存入指令队列并等待派送。由此,结合待派送的指令队列和待派送的微码队列,实现指令信息的派送。
例如,图1中所使用的微码指令流控制信息(Microcode Sequencer)和微码操作信息(Microcode Operation)都被存储在只读存储器(Read-Only Memory,ROM)器件中,微码指令流控制信息和微码操作信息按照固定的组合进行排列和分布。
图2A为一种微码组合示意图,图2B为一种微码取指格式示意图。如图2A和图2B所示,若干微码操作(Operation)及指令流控制(Sequencer,也称为微码取指控制)被打包分组存放于ROM器件中。微码操作和微码取指控制的数量比一般为3:1,也即每3个微码操作与1个微码取指控制作为一组信息,每次从ROM中读出3个微码操作与1个微码取指控制。随着微码复杂度的提高,如图2A和图2B所示,该比例可以升至为4:1,也即,每次从ROM中读出的格式为4个微码操作与1个微码取指控制。例如,微码操作存放于微码操作ROM中,微码取指控制存放于微码取指控制ROM中。
图3为一种微码取指顺序示意图。如图3所示,在微码的取指过程中,并没有分支预测部件,因此,在微码取指控制中,对“无分支指令”、“无条件跳转指令”和“有条件跳转指令”进行了标记。如果本次取指中标记为“无分支指令”,则下一次的取指地址为连续的取指地址,即,本次最后微码操作的指令地址+微码长度+1。如果本次取指中标记为“无条件跳转分支指令”,则下一次的取指地址为微码取指控制中存放的分支指令的目标地址。如果本次取指中标记为“有条件跳转分支指令”,则需要根据本跳转指令的跳转信心值来判断下一次的取指地址为连续的取指地址,还是,微码取指控制中存放的分支指令的目标地址。
在上述取指方式中,微码信息与微码取指控制信息的排布方式如图2A所示,其采用固定的组合方式,也即,若干固定长度的微码操作信息对应1个微码取指控制信息。在实际应用中,采用这种结构时,若当前的指令中并没有出现指令跳转、等待等行为时,则会导致组合中微码控制信息是无效的。而且,微码的取指地址为编译器编译的微码地址。这会导致两个问题:其一,会导致存放微码操作信息的ROM中产生碎片;其二,由于体系架构中要求了中断/异常的处理地址,但是,实际的微码处理程序需要的地址远远超过两个异常处理的地址间隔,这时,编译器不得不插入无条件跳转指令,将其跳转到空闲的ROM区域,这样会导致插入多个微码指令流控制信息。
此外,微码信息与微码取指控制信息采用固定的组合方式,会使得这种排列结构不利于扩展。对于不同的操作,微码序列长度是不同的,因此,针对不同的操作,每次读取的微码序列中微码操作信息的数量与微码取指控制信息的数量比例会有较大差异。如果将这个比例设置得较小,则微码的取指带宽会变小;如果将这个比例设置得较大,则会产生更多的碎片,这会过度依赖于微码程序本身。
微码取指方式默认采用顺序取指模式,同时,对无条件跳转指令进行了优化,所提供的若干计数器用于条件跳转指令(也即前述的有条件跳转分支指令),能够解决部分条件跳转指令跳转错误的问题。但是,在实际应用中,微码序列处理的问题不同,条件跳转指令的个数也不同,条件跳转指令不仅限于一些循环。因此,发生错误读取微码指令的代价相对比较大。
本公开至少一个实施例提供一种微码取指方法及装置、微码存储组合产生方法及装置、电子设备。该微码取指方法所采用的微码存储组合能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展,该微码取指方法可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。
本公开至少一个实施例提供一种微码取指方法。该微码取指方法用于微码存储组合,微码存储组合包括微码操作信息表、微码流控制信息表和映射表。微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储。微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址。指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址。映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。该微码取指方法包括:基于获取的入口地址,根据映射表进行查表得到对应的微码流控制条目,入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;根据微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与微码流控制条目对应的微操作。
图4为本公开一些实施例提供的一种微码存储组合的示意图。如图4所示,本公开的实施例提供一种微码存储组合,该微码存储组合包括微码操作信息表、微码流控制信息表和映射表。
例如,微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,多个微码序列以顺序排布的方式存储,同一个微码序列中的多个微操作以顺序排布的方式存储。例如,不同微码序列的微码操作的数量可以相同或不同,这可以根据实际需求而定。在图4所示的示例中,微码序列0包括6个微操作,分别为顺序排布存储的微操作0至微操作5;微码序列1包括9个微操作,分别为顺序排布存储的微操作0至微操作8;微码序列2包括6个微操作,分别为顺序排布存储的微操作0至微操作5。微码序列0、微码序列1、微码序列2顺序排布存储。当然,微码操作信息表还可以包括更多的微码序列,在此不一一列举。
例如,微码操作信息表存储在存储器中,例如存储在ROM中。当然,存储器不限于为ROM,也可以为其他类型的存储器,在本公开的说明中,虽然以ROM为例进行说明,但这并不构成对本公开实施例的限制。例如,存储器以存储行(例如ROM Line)的形式进行划分,每个存储行存储有多个微操作。在图4所示的示例中,例如,第一个存储行存储有微码序列0的微操作0至微操作3,第二个存储行存储有微码序列0的微操作4至微操作5以及微码序列1的微操作0至微操作1,第三个存储行存储有微码序列1的微操作2至微操作5,其他存储行不再详述。需要说明的是,每一个存储行所存储的微操作的数量不受限制,可以为2个、3个、4个、5个或其他任意数量,这可以根据实际需求而定。例如,当每个存储行所存储的微操作的数量较多时,可以有效提高取码带宽。
例如,至少一个存储行中的微操作属于相同的微码序列,例如第一个存储行中的微操作属于相同的微码序列0。例如,至少一个存储行中的微操作属于不同的微码序列,例如第二个存储行中的微操作属于不同的微码序列,例如分别属于微码序列0和微码序列1。
例如,微操作除了包括微操作指令,还包括序列结束标识和顺序干扰标识。序列结束标识指示该微操作是否为所属的微码序列中的最后一个微操作,也即,序列结束标识用来区分微操作属于不同的微码序列。例如,将指示该微操作为所属的微码序列中的最后一个微操作的序列结束标识称为有效的序列结束标识。例如,如图4所示,在该示例中,微码序列0中的微操作5为该微码序列中的最后一个微操作,因此微码序列0的微操作5包括的序列结束标识指示该微操作5为所属微码序列中的最后一个微操作,微码序列0的微操作5包括的序列结束标识为有效的序列结束标识。
例如,顺序干扰标识指示在存在跳转的情形下是否从该微操作跳转,也即,顺序干扰标识用来区分该微操作是否包含影响取指顺序的操作。例如,将指示从该微操作跳转的顺序干扰标识称为有效的顺序干扰标识。例如,若需要在某个微操作处跳转,则该微操作包括的顺序干扰标识指示从该微操作跳转,该微操作包括的顺序干扰标识为有效的顺序干扰标识。
例如,序列结束标识可以为1比特(bit)二进制数值。例如,顺序干扰标识为2比特(bit)二进制数值,其中1比特用来标识是否存在跳转类微码指令(也即是否存在顺序干扰),另外1比特用来标识是否为无条件跳转指令(也即用于标识顺序干扰的分支指令类型)。这3比特二进制数值位于微操作的末尾,通过将其数值设置为0或1,以区分是否为有效的标识。当然,本公开的实施例不限于此,序列结束标识和顺序干扰标识也可以采用其他任意适用的表示方式,只要能达到相应的指示功能即可,本公开的实施例对此不作限制。
例如,微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,也即是,每个微码流控制条目包括成对存储的指令流控制条目和微操作起始地址。指令流控制条目指示是否存在微码之间的跳转。当存在微码之间的跳转时,指令流控制条目记载有跳转目标地址,可以根据跳转目标地址确定跳转目标位置。例如,当指令序列中存在等待、分支指令等操作时,则可能会存在微码之间的跳转,存在微码之间的跳转时,才创建有效的指令流控制条目。在不存在微码之间的跳转的情形,微码流控制条目中的指令流控制条目可以为空。例如,不存在微码之间的跳转的情形可以包括不存在跳转的情形,还可以包括在微码与非微码之间跳转的情形,针对这两种情形,指令流控制条目都可以为空。也即是,只有当跳转发生在微码之间时,才创建具有内容的指令流控制条目。这里,“指令流控制条目可以为空”是指不存在该指令流控制条目,或者,也可以指该指令流控制条目中的内容为空。由此,可以有效地缩减存放微码流控制信息的存储容量。
微操作起始地址为对应的微码序列的第一个微操作的地址。例如,微操作起始地址包括行地址(Index)和偏移地址(Offset),行地址指示存储行的地址,偏移地址指示微操作在存储行中相对于行首的地址偏移。例如,在图4所示的示例中,对于微码序列1所对应的微码流控制条目,其包括的微操作起始地址中的行地址例如为1,偏移地址例如为2(假设整个ROM的行地址从0开始编号,偏移地址从0开始编号),由此可以得到微码序列1的第一个微操作0位于第2个存储行中的第3个存储位置,从而可以准确地获取微码序列1的第一个微操作0。
例如,映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。映射表记载了体系架构定义地址与存放微码存储设备地址之间的映射关系,还可以记载分支微码指令目的地址与存放微码存储设备地址之间的映射关系。基于获取的入口地址(例如译码模块提供的体系架构定义的微码序列入口地址),可以在映射表中查找得到该入口地址对应的微码流控制条目,例如,查找得到对应的微码流控制条目在ROM中的物理地址。当然,本公开的实施例不限于此,该映射表也可以记载与微码流控制条目相关的其他信息,不限于其物理地址,只要能够反映映射关系并根据入口地址查询得到对应的微码流控制条目即可。
例如,微码操作信息表、微码流控制信息表、映射表分别存储在不同的ROM中。当然,微码操作信息表、微码流控制信息表、映射表中的任意两个或三个也可以存储在相同的ROM中,本公开的实施例对此不作限制。例如,在一些示例中,微码操作信息表存储在一个ROM中,微码流控制信息表和映射表一同存储在另一个ROM中。
图5为本公开一些实施例提供的另一种微码存储组合的示意图。下面以图5为例说明跳转原理。例如,在图5所示的示例中,第三个地址映射条目对应于第三个微码流控制条目,在该微码流控制条目中,指令流控制条目记载了需要跳转,并且记载了跳转目标地址。在该微码流控制条目中,微操作起始地址指向微码序列1的微操作0,也即,微码序列1的第一个微操作。基于跳转目标地址,可以通过映射表查找得到跳转目标地址对应的微码流控制条目,在该示例中,跳转目标地址对应的微码流控制条目指向微码序列2。在微码序列1中,假设微操作3所包含的顺序干扰标识指示需要从该微操作3跳转,因此,综合上述信息,可以确定需要从微码序列1的微操作0开始读取,直至读取到微码序列1的微操作3,然后跳转至微码序列2的微操作0,从微码序列2的微操作0继续开始读取。需要说明的是,图5所示的跳转方式仅为示例性的,而非限制性的,这并不构成对本公开实施例的限制。
在本公开的实施例中,上述微码存储组合提供了一种新型的微码分布与排列方式,能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展。通过与相适应的微码取指方法配合,可以降低条件跳转指令分支错误的损耗,提高微码序列的取指带宽。
图6为本公开一些实施例提供的一种微码取指方法的流程示意图。在一些实施例中,如图6所示,该微码取指方法包括如下操作。
步骤S110:基于获取的入口地址,根据映射表进行查表得到对应的微码流控制条目;
步骤S120:根据微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与微码流控制条目对应的微操作。
例如,该微码取指方法适用于图4、图5所示的微码存储组合,利用该微码取指方法可以从微码存储组合中读取所需要的微操作。关于微码存储组合的详细说明可参考上文内容,此处不再赘述。
例如,在步骤S110中,入口地址例如为编译器编译得到的微码地址。例如,入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址。根据获取的入口地址,在映射表中查找该入口地址所对应的地址映射条目,进而得到该地址映射条目所对应的微码流控制条目。例如,在一些示例中,映射表中的地址映射条目记载有相应的微码流控制条目的存储地址,通过利用入口地址查表,可以得到对应的微码流控制条目的存储地址,从而确定出唯一的微码流控制条目。
例如,在步骤S120中,读取与入口地址对应的微码流控制条目的存储地址,从而获得该微码流控制条目所包含的指令流控制条目和微操作起始地址。若本次取指操作需要跳转,则指令流控制条目中记载有跳转目标地址。微操作起始地址指向本次取指操作所需要读取的微码序列的第一个微操作。由此,可以根据指令流控制条目和微操作起始地址所涵盖的信息,获取与微码流控制条目对应的微操作,也即,获取本次取指操作所需要的微操作。
例如,由于微操作在ROM中以存储行的形式存储,因此,在步骤S120中,可以根据微码流控制条目所包含的指令流控制条目和微操作起始地址,以存储行为单位,逐行获取与微码流控制条目对应的微操作。也即是,微操作是逐行读取的(当然,可以是读取一整行,也可以是从一行的某一特定位置开始读取)。
图7为图6中步骤S120的流程示意图。在一些示例中,上述步骤S120可以包括如下操作。
步骤S121:针对每一存储行,获取存储行中所需要的微操作;
步骤S122:判断读取的微操作中是否包含具有有效的序列结束标识的微操作;
步骤S123:响应于读取的微操作中包含具有有效的序列结束标识的微操作,停止读取操作,并丢弃具有有效的序列结束标识的微操作之后的微操作;
步骤S124:响应于读取的微操作中不包含具有有效的序列结束标识的微操作,进行后续存储行的读取。
例如,在步骤S121中,以存储行为单位,获取该存储行中所需要的微操作。该存储行中所需要的微操作可能是该存储行中的全部微操作,也可能是从该存储行中某一特定位置开始的微操作。因此,需要根据不同情况采用不同的读取方式。如图8所示,步骤S121可以进一步包括如下操作。
步骤S1211:针对每一存储行,判断行地址是否为读取微码流控制条目所得到的行地址;
步骤S1212:响应于行地址为读取微码流控制条目所得到的行地址,根据行地址和偏移地址读取存储行中以偏移地址为起始地址的微操作;
步骤S1213:响应于行地址不是读取微码流控制条目所得到的行地址,根据行地址读取存储行中的全部微操作。
例如,在步骤S1211中,判断行地址是否为读取微码流控制条目所得到的行地址,由此区分本次读取的存储行是否为该次取指操作所读取的第一个存储行。若本次读取的存储行是该次取指操作所读取的第一个存储行,那么该行地址为微码流控制条目中的微操作起始地址中所记载的行地址。若本次读取的存储行不是该次取指操作所读取的第一个存储行,那么该行地址是在上一个行地址的基础上递增所得到的,而不是通过读取微码流控制条目中的微操作起始地址而获取的。例如,可以将微码流控制条目中的微操作起始地址中所记载的行地址存储,在读取每一存储行时,将当前的行地址与存储的行地址进行比较,从而得到判断结果。需要注意的是,每读取一行存储行,都需要进行一次判断。
例如,在步骤S1212中,若判断出行地址为读取微码流控制条目所得到的行地址,则表示本次读取的存储行是该次取指操作所读取的第一个存储行,因此需要根据行地址和偏移地址读取存储行中以偏移地址为起始地址的微操作。以图4所示的微码存储组合为例,假设本次取指操作需要读取微码序列1,而且经由判断确定出当前的行地址为读取微码流控制条目所得到的行地址,那么,需要利用行地址和偏移地址确定出微码序列1的微操作0所在的位置,并且从微码序列1的微操作0开始读取。
例如,在步骤S1213中,若判断出行地址不是读取微码流控制条目所得到的行地址,则表示本次读取的存储行不是该次取指操作所读取的第一个存储行,因此需要根据行地址读取该存储行中的全部微操作。仍然以图4所示的微码存储组合为例,假设本次取指操作需要读取微码序列1,而且经由判断确定出当前的行地址不是读取微码流控制条目所得到的行地址,假设当前的行地址指示微码序列1的微操作2至微操作5所在的存储行,那么,需要利用行地址读取该存储行中的全部微操作,也即微操作2至微操作5。需要注意的是,虽然读取了该存储行中的全部微操作,但是,后续会继续判断该存储行中的微操作是否全部属于相应的微码序列,当该存储行中既包含当前微码序列又包含下一个微码序列时,不会保留下一个微码序列的微操作,从而避免了错误读取。关于判断该存储行中的微操作是否全部属于相应的微码序列,将在后文进行说明,此处不再赘述。
例如,如图7所示,在步骤S122中,判断读取的微操作中是否包含具有有效的序列结束标识的微操作。例如,微操作包含的序列结束标识指示该微操作是否为所属的微码序列中的最后一个微操作,由此可以据此判断针对该微码序列的取指操作是否结束。例如,在一些示例中,序列结束标识可以用1比特二进制数值表示,当该数值为0或者为1时,可以指示该微操作为所属的微码序列中的最后一个微操作。
例如,在步骤S123中,当读取的微操作中包含具有有效的序列结束标识的微操作时,则表示该微码序列的微操作已经读取完毕,因此停止读取操作,结束本次取指操作,并丢弃具有有效的序列结束标识的微操作之后的微操作。需要注意的是,位于具有有效的序列结束标识的微操作之后的微操作会被丢弃,这些微操作属于下一个微码序列,因此不会被传输到执行单元。
例如,在步骤S124中,当读取的微操作中不包含具有有效的序列结束标识的微操作时,则表示该微码序列的微操作还未读取完毕,因此继续进行后续存储行的读取。在进行后续存储行的读取时,并非直接读取下一存储行,而是需要判断是否跳转。如图9所示,步骤S124可以进一步包括如下操作。
步骤S1241:判断读取的微操作中是否包含具有有效的顺序干扰标识的微操作;
步骤S1242:响应于读取的微操作中不包含具有有效的顺序干扰标识的微操作,根据微操作的顺序干扰标识的分支指令类型,选择基于当前的行地址产生新的行地址或者基于微码流控制条目中包含的微码分支指令目的地址得到新的行地址,并利用新的行地址获取对应的微操作;
步骤S1243:响应于读取的微操作中包含具有有效的顺序干扰标识的微操作且顺序干扰标识指示无条件跳转,丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且获取跳转目标地址对应的微码流控制条目所对应的微操作;
步骤S1244:响应于读取的微操作中包含具有有效的顺序干扰标识的微操作且顺序干扰标识指示条件跳转,按照顺序读取微操作的模式进行读取并监测执行单元的误预测结果,在执行单元对于跳转指令得到的误预测结果达到或者超过门限值的情形,放弃顺序读取微操作的模式,丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且获取跳转目标地址对应的微码流控制条目所对应的微操作。
例如,在步骤S1241中,判断读取的微操作中是否包含具有有效的顺序干扰标识的微操作,由此确定是否需要从该存储行中的某个微操作进行跳转。若读取的微操作中包含具有有效的顺序干扰标识的微操作,则需要从该具有有效的顺序干扰标识的微操作跳转,而不能继续再读取下一存储行。若读取的微操作中不包含具有有效的顺序干扰标识的微操作,则说明无需跳转,可以继续读取下一存储行。例如,在一些示例中,顺序干扰标识可以用2比特二进制数值表示,其中1比特用于判断是否存在分支微码指令(也即是否存在顺序干扰),当该数值为0或者为1时,可以指示需要从该微操作跳转;其中另1比特用于判断分支微码指令的属性(也即判断顺序干扰的分支指令类型),当该数值为0或者为1时,可以指示该微码跳转指令为条件跳转指令。
例如,在步骤S1242中,当读取的微操作中不包含具有有效的顺序干扰标识的微操作时,则表示无需进行跳转,因此,根据微操作的顺序干扰标识的分支指令类型,选择基于当前的行地址产生新的行地址或者基于微码流控制条目中包含的微码分支指令目的地址得到新的行地址。例如,新的行地址可以为通过当前的行地址递增1得到,也即是,新的行地址指向当前存储行的下一存储行。或者,新的行地址也可以利用微码分支指令目的地址查找映射表得到。在得到新的行地址之后,根据新的行地址,获取对应的存储行中所需要的微操作,此时可以返回执行步骤S121。
例如,在步骤S1243中,当读取的微操作中包含具有有效的顺序干扰标识的微操作且顺序干扰标识指示无条件跳转时,则表示需要从该微操作执行无条件跳转,因此丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且不再顺序地获取下一存储行的微操作,而是获取跳转目标地址对应的微码流控制条目所对应的微操作,由此实现跳转。例如,如图10所示,步骤S1243可以进一步包括如下操作。
步骤S1243a:根据基于入口地址查表得到的微码流控制条目所包含的指令流控制条目,得到跳转目标地址;
步骤S1243b:基于跳转目标地址,根据映射表进行查表得到对应的微码流控制条目;
步骤S1243c:根据跳转目标地址对应的微码流控制条目包括的微操作起始地址,获取对应的微操作。
例如,在步骤S1243a中,若存在跳转,则基于入口地址查表得到的微码流控制条目所包含的指令流控制条目中会记载相关信息,例如记载跳转目标地址,因此可以根据该指令流控制条目得到跳转目标地址。
例如,在步骤S1243b中,跳转目标地址例如为编译地址,因此需要根据映射表进行查表,从而得到跳转目标地址对应的微码流控制条目。
例如,在步骤S1243c中,在得到跳转目标地址对应的微码流控制条目后,可以获得该微码流控制条目所包含的指令流控制条目和微操作起始地址,从而可以确定出位于跳转目标位置的微操作,由此可以获取对应的微操作。关于获取微操作的具体方式,可以参考步骤S121至步骤S124的操作,此处不再赘述。
返回至图9,例如,在步骤S1244中,若读取的微操作中包含具有有效的顺序干扰标识的微操作且顺序干扰标识指示条件跳转,则表示需要从该微操作执行条件跳转。因此,优先按照顺序读取微操作的模式进行读取,同时,监测执行单元的误预测结果。当执行单元对于跳转指令得到的误预测结果达到或者超过门限值之后,放弃顺序读取微操作的模式,丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且获取跳转目标地址对应的微码流控制条目所对应的微操作。
在本公开的实施例中,通过上述方式,可以基于图4、图5所示的微码存储组合获取所需要的微操作,例如可以通过一个ROM端口实现读取。利用本公开实施例提供的微码取指方法,能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展,并且可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
图11为本公开一些实施例提供的一种微码取指方法的流程示意图。例如,在一些示例中,如图11所示,该微码取指方法的具体流程如下。
首先,获得微码序列对应的对于体系架构可见的地址(也即前述的入口地址),该入口地址例如是由编译器编译得到的微码地址。接着,根据入口地址,在映射表中进行查表,得到对应的微码流控制条目,例如,对应的微码流控制条目在映射表中以其存储地址来确定。然后,根据其地址读取该微码流控制条目所在的ROM,获得该微码流控制条目所包含的指令流控制条目和微操作起始地址。
一方面,针对指令流控制条目,根据其记载的信息判断本次取指操作是否包含干扰微码顺序的事件(例如是否存在微码之间的跳转)。若包含干扰微码顺序的事件,则该指令流控制条目中会记载有跳转目标地址,根据该跳转目标地址,查询映射表得到与跳转目标地址对应的微码流控制条目,并读取该微码流控制条目所在的ROM,获得该微码流控制条目所包含的指令流控制条目和微操作起始地址。然后,等待模块暂不执行跳转,而是处于等待状态。待收到唤醒信号时,才会基于微操作起始地址执行跳转。
另一方面,针对入口地址对应的微码流控制条目中所包含的微操作起始地址,可以得到行地址和偏移地址。根据该行地址,读取微操作所在的ROM。在读取时,判断该行地址是否为读取微码流控制条目所得到的行地址。若是,则利用偏移地址确定出该行微操作中所需要的微操作的起始地址,然后读取从起始地址开始的微操作,例如以存储行为单位,选择读取该行中有效的微操作。若否,则直接读取该存储行中的全部微操作,例如以存储行为单位,读取对应一行的微操作。
接着,判断读取的微操作中是否包含微码序列最后的微操作,例如通过各个微操作的序列结束标识进行判断。若是,则结束读取微码序列,并且丢弃微码序列最后一个微操作之后的微操作。若否,则判断读取的微操作中是否包含顺序干扰标识,也即,判断是否从这些微操作中的某个微操作执行跳转。
如果读取的微操作中不包含具有有效的顺序干扰标识的微操作,则说明无需从这些微操作执行跳转,因此继续产生新的行地址。例如,新的行地址通过当前的行地址递增1得到,或者,也可以利用微码分支指令目的地址查找映射表得到。然后,根据新的行地址,并且例如配合读取使能信号,继续读取微操作所在的ROM,并且读取新的行地址指向的存储行。
如果读取的微操作中包含具有有效的顺序干扰标识的微操作,则说明需要从该具有有效的顺序干扰标识的微操作执行跳转。在无条件跳转的情形中,由于在之前的操作中,等待模块已经获取了跳转目标地址对应的微码流控制条目中包含的微操作起始地址,也即,已经确定了跳转目标位置的微操作,因此,在判断出读取的微操作中包含具有有效的顺序干扰标识的微操作时,只需要向等待模块发送唤醒信号即可。等待模块接收到唤醒信号后,即可开始跳转到跳转目标位置的微操作,并继续读取微操作。在条件跳转的情形中,优先按照顺序读取微操作的模式进行读取,同时,监测执行单元的误预测结果。当执行单元对于跳转指令得到的误预测结果达到或者超过门限值之后,放弃顺序读取微操作的模式,丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且获取跳转目标地址对应的微码流控制条目所对应的微操作。
需要说明的是,图11所示的流程仅为示例性的,而非限制性的,根据实际应用需求,各个操作之间的执行顺序和执行逻辑可以修改和调整,本公开的实施例对此不作限制。
本公开至少一个实施例还提供一种微码取指方法。该微码取指方法用于微码存储组合。微码存储组合包括微码操作信息表、微码流控制信息表和映射表。微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,多个微码序列以顺序排布的方式存储,同一个微码序列中的多个微操作以顺序排布的方式存储。微码操作信息表存储在存储器中,存储器以存储行的形式进行划分,每个存储行存储有多个微操作,存储器包括多个取指端口。微码流控制信息表包括多个微码流控制条目。每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址。指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址。映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。该微码取指方法包括:基于获取的入口地址,根据映射表进行查表得到对应的微码流控制条目,入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;根据微码流控制条目,利用多个取指端口进行协同读取,以得到多个微码队列,多个微码队列与多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作;基于多个微码队列,派发得到所需要的微操作。
该微码取指方法能够节省存储空间,提高存储空间的利用率,有利于扩展,可以提供微码的高效读取方式,并且可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
图12为本公开一些实施例提供的另一种微码取指方法的流程示意图。在一些实施例中,如图12所示,该微码取指方法包括如下操作。
步骤S210:基于获取的入口地址,根据映射表进行查表得到对应的微码流控制条目;
步骤S220:根据微码流控制条目,利用多个取指端口进行协同读取,以得到多个微码队列,多个微码队列与多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作;
步骤S230:基于多个微码队列,派发得到所需要的微操作。
例如,该微码取指方法适用于图4、图5所示的微码存储组合,利用该微码取指方法可以从微码存储组合中读取所需要的微操作。例如,可以利用多个取指端口(例如多个ROM端口)实现协同读取。关于微码存储组合的详细说明可参考上文内容,此处不再赘述。
例如,在步骤S210中,入口地址例如为编译器编译得到的微码地址。根据获取的入口地址,在映射表中查找该入口地址所对应的地址映射条目,进而得到该地址映射条目所对应的微码流控制条目。例如,在一些示例中,映射表中的地址映射条目记载有相应的微码流控制条目的存储地址,通过利用入口地址查表,可以得到对应的微码流控制条目的存储地址,从而确定出唯一的微码流控制条目。
例如,在步骤S220中,根据微码流控制条目中的指令流控制条目和微操作起始地址,可以利用多个取指端口进行协同读取,从而得到多个微码队列。例如,多个微码队列与多个取指端口一一对应,每个微码队列对应于一个取指端口,每个微码队列中的微操作为对应的取指端口所读取的微操作。例如,多个微码队列为多个逻辑队列,或者,多个微码队列共享同一个物理队列。例如,在一些示例中,多个取指端口的数量为2,也即是,设置两个取指端口,以通过两个取指端口进行协同读取。例如,取指端口可以为ROM端口。
如图13所示,步骤S220可以进一步包括如下操作。
步骤S0:判断是否存在微码之间的跳转;
步骤S221:在不存在微码之间的跳转的情形,以至少一个存储行为单次读取单位,利用两个取指端口按照单次读取单位交替读取存储行中的微操作;
步骤S222:在存在微码之间的跳转的情形,利用两个取指端口中的一个取指端口逐行读取微码流控制条目对应的存储行中的微操作,并且利用两个取指端口中的另一个取指端口读取跳转目标地址对应的微码流控制条目所对应的存储行中的微操作。
例如,在步骤S0中,可以通过微码流控制条目中的指令流控制条目所包含的信息,判断是否存在微码之间的跳转。
例如,在步骤S221中,若不存在微码之间的跳转,则以至少一个存储行为单次读取单位,利用两个取指端口按照单次读取单位交替读取存储行中的微操作。例如,单次读取单位是指一个取指端口单次读取的存储行的数量,可以为1、2、3、4或其他任意数量,也即是,一个取指端口单次读取1行存储行、2行存储行、3行存储行、4行存储行或其他数量的存储行,本公开的实施例对此不作限制。
例如,如图14A所示,以单次读取单位为1行存储行为例,两个取指端口交替读取时,一个取指端口读取第1行、第3行、第5行存储行,另一个取指端口读取第2行、第4行、第6行存储行,两个取指端口每次各读取一行。例如,图14A中形成了两条读取路径,分别为路径1’和路径2’。路径1’为一个取指端口的读取路径,且依次读取第1行、第3行、第5行等奇数行存储行,路径2’为另一个取指端口的读取路径,且依次读取第2行、第4行、第6行等偶数行存储行。例如,在每个取指端口每次读取完一行之后,需要进行下一行地址计算。例如,可以根据该存储行中是否存在具有有效的序列结束标识的微操作,从而判断是否继续按照之前的步调进行取指操作。
例如,在步骤S222中,若存在微码之间的跳转,则利用两个取指端口中的一个取指端口逐行读取微码流控制条目对应的存储行中的微操作,并且利用两个取指端口中的另一个取指端口读取跳转目标地址对应的微码流控制条目所对应的存储行中的微操作。例如,假设本次取指操作所需要的第一个微操作为x1,跳转目标地址对应的存储行中所需要的第一个微操作为x2,则一个取指端口从微操作x1开始读取,另一个取指端口从微操作x2开始读取。需要注意的是,每个取指端口都是逐行顺序读取。
例如,如图14B所示,在存在跳转的情形,一个取指端口的读取路径为路径3’,另一个取指端口的读取路径为路径4’。路径4’对应的微操作为跳转目标地址所对应的微操作。也即是,将所需要的微操作划分为跳转之前的微操作和跳转之后的微操作,一个取指端口经由路径3’读取跳转之前的微操作,另一个取指端口经由路径4’读取跳转之后的微操作。
例如,如图12所示,在步骤S230中,利用多个取指端口可以读取微操作以获得多个微码队列,根据得到的多个微码队列,结合微码序列中是否存在分支微码指令,派发(Dispatch)得到所需要的微操作。
在不存在微码之间的跳转的情形,也即是,在采用图14A所示的路径进行读取的情形,基于多个微码队列派发得到所需要的微操作可以包括:以乒乓操作的方式从两个微码队列交替获取微操作,并依序对获取的微操作进行派发。例如,一个取指端口经由路径1’读取微操作而得到微码队列1,另一个取指端口经由路径2’读取微操作而得到微码队列2,则对微码队列1和微码队列2进行派发时,可以采用乒乓操作的方式从微码队列1和微码队列2交替获取微操作,并依序对获取的微操作进行派发。关于乒乓操作的原理说明可参考常规设计,此处不再赘述。需要注意的是,由于在读取时是以单次读取单位进行读取,单次读取单位包括一个或多个存储行,因此,在派发时,每次从微码队列获取的微操作为一个单次读取单位所包含的微操作。
在存在微码之间的跳转的情形,也即是,在采用图14B所示的路径进行读取的情形,步骤S230可以进一步包括如图15所示的步骤S231-S232。
步骤S231:从具有有效的顺序干扰标识的微操作所在的微码队列依序获取微操作,并依序对获取的微操作进行派发,具有有效的顺序干扰标识的微操作所在的微码队列称为第一队列,两个微码队列中除第一队列之外的另一个队列称为第二队列,第二队列中微操作的首地址对应于跳转目标地址;
步骤S232:响应于顺序干扰标识指示无条件跳转,从跳转目标地址开始,对第一队列中的微操作和第二队列中的微操作进行交替派发。
例如,在步骤S231中,在采用图14B所示的路径进行读取并得到两个微码队列后,对这两个微码队列进行派发。例如,图14B中的路径3’得到图16中所示的第一队列P1,图14B中的路径4’得到图16中所示的第二队列P2。例如,图16中实线框表示的微码操作行(微码操作行包括一行或多行微操作)表示第一队列P1中的微操作,虚线框表示的微码操作行(微码操作行包括一行或多行微操作)表示第二队列P2中的微操作。第一队列P1中包含具有有效的顺序干扰标识的微操作,也即,包含具有条件跳转属性的微操作。从第一队列P1依序获取微操作,并依序对获取的微操作进行派发。
例如,在步骤S232中,若需要执行无条件跳转,则从跳转目标地址开始,对第一队列中的微操作和第二队列中的微操作进行交替派发。也即是,在派发了具有有效的顺序干扰标识的微操作之后,开始对第一队列P1中的微操作和第二队列P2中的微操作进行交替派发。
例如,在一些示例中,如图17所示,上述步骤S230还可以进一步包括步骤S234和步骤S235。需要说明的是,步骤S234和步骤S235可以并行执行,也可以顺序执行,或者也可以仅执行其中一个步骤而省略另一个步骤,这两个步骤的执行不存在必然的联系。
步骤S234:为条件跳转执行设定跳转信心值,基于跳转信心值,在对具有有效的顺序干扰标识的微操作派发之后,选择第一队列或第二队列中的一个队列,并对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式;
步骤S235:采用预取方式,将微码操作信息表中的至少部分微操作预取到多个微码队列中的一个微码队列。
例如,在步骤S234中,在微码的分支路径上,可以设置不同的跳转信心值,以表示不同跳转方向的概率。如果跳转信心值偏向于微码指令跳转,那么,第二队列为微码跳转指令目标地址开始的微码操作队列;如果跳转信心值偏向于微码指令不跳转,那么,第二队列和第一队列将相互配合,以乒乓方式顺序取指。值得注意的是,只有在跳转分支微码指令为条件跳转的类型时,才需要查询跳转信心值,否则,按照无条件跳转的方式直接选择跳转到目标地址即可。
例如,跳转信心值通过预先设置得到,或者,跳转信心值基于样本进行训练得到,也即是,跳转信心值可以是静态的或者是动态的。
例如,在一些示例中,采用静态的跳转信心值,也即是,在微码的编译过程中,根据微码处理的功能的不同,对中间的条件跳转分支微码标记不同的跳转信心值,硬件根据这个跳转信心值,判断第二队列是配合第一队列依序取指,还是,选择从分支微码指令的目标地址开始取指,在指令派发时,同样需要根据跳转信心值,选择是否派送第二队列的微码操作。
例如,在另一些示例中,采用动态的跳转信心值,也即是,在微码的读取过程中,根据微码处理实际运行的结果,为特定的条件跳转分支微码训练不同的跳转信心值,硬件根据这个跳转信心值,判断第二队列是配合第一队列依序取指,还是,选择从分支微码指令的目标地址开始取指,在指令派发时,同样需要根据跳转信心值,选择是否派送第二队列的微码操作。
通过设置跳转信心值,可以提高跳转执行的有效性,从而提高读取效率。例如,可以采用寄存器堆、SRAM等容器来存放该跳转信心值,本公开的实施例对此不作限制。同时,对于存放跳转信心值的容器的索引可以按照地址信息等任何可以唯一确定分支微码指令的信息,本公开的实施例中对此不作限制。
例如,跳转信心值的训练方式可以包括:响应于条件跳转的执行结果与跳转信心值的预测结果相同,将跳转信心值的数值增加1;响应于条件跳转的执行结果与跳转信心值的预测结果不同,将跳转信心值的数值减1。
例如,无论当前具有条件跳转属性的微操作在执行单元是否执行跳转,都需要从执行单元发送跳转反馈信号,以指示是否发生跳转。例如,在存在微码之间的跳转的情形,还可以在微码队列(例如第一队列P1)中设置一个标记位,用于判断是否包含“条件跳转”的取码。
上述步骤S234中,选择第一队列或第二队列中的一个队列,对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式,可以包括如下几种情形。
在第一种情形中,若条件跳转执行为跳转并且按照跳转方式进行派发,清空第一队列,保持从第二队列进行派发,第一队列根据第二队列当前的取码进度与第二队列配合并以乒乓操作的方式交替获取微操作。
在第二种情形中,若条件跳转执行为非跳转并且按照非跳转方式进行派发,清空第二队列,保持从第一队列进行派发,第二队列根据第一队列当前的取码进度与第一队列配合并以乒乓操作的方式交替获取微操作。
在第三种情形中,若条件跳转执行为跳转并且按照非跳转方式进行派发,清空第一队列,从第二队列进行派发,第一队列根据第二队列当前的取码进度与第二队列配合并以乒乓操作的方式交替获取微操作。
在第四种情形中,若在条件跳转执行为非跳转并且按照跳转方式进行派发,清空第二队列,从第一队列进行派发,第二队列根据第一队列当前的取码进度与第一队列配合并以乒乓操作的方式交替获取微操作。
例如,如图17所示,在步骤S235中,可以将“预取”功能添加到微码队列中。例如,采用两个取指端口进行读取时,假设微码序列0必然会用到微码序列1的微操作,则一个取指端口读取微码序列0,另一个取指端口预取微码序列1,以实现将部分微操作预取到微码队列中的功能。例如,如图18所示,微码队列Q2为一个取指端口读取微码序列0所形成的队列,微码队列Q1为另一个取指端口预取微码序列1所形成的队列。对微码队列Q2进行派发之后,继续派发微码队列Q1即可。通过添加预取功能,可以提高并行执行的效率,从而提高读取效率。
在本公开的实施例中,通过利用多个取指端口进行协同读取,可以实现多通道取指(例如双通道取指)。该微码取指方法能够提供微码的高效读取方式,同时,结合分支微码指令跳转信心值的设置,可以降低条件跳转指令分支错误的损耗,提高微码序列的取指带宽,并且,此方法可以既兼顾顺序取码的方式,又兼顾条件跳转的分支指令的取码方式。
本公开至少一个实施例还提供一种微码存储组合产生方法。该微码存储组合产生方法包括:产生多个微码序列,每个微码序列包括多个微操作;将多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表;创建微码流控制信息表,微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址;创建映射表,映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。
该微码存储组合产生方法能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展。通过与相适应的微码取指方法配合,可以降低条件跳转指令分支错误的损耗,提高微码序列的取指带宽。
图19为本公开一些实施例提供的一种微码存储组合产生方法的流程示意图。如图19所示,在一些实施例中,该微码存储组合产生方法包括如下操作。
步骤S310:产生多个微码序列,每个微码序列包括多个微操作;
步骤S320:将多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表;
步骤S330:创建微码流控制信息表,微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址;
步骤S340:创建映射表,映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。
例如,在步骤S310中,多个微码序列可以通过对指令或事件进行拆解得到,或者可以通过其他方式得到,本公开的实施例对此不作限制。例如,在步骤S320中,多个微操作以存储行(例如ROM Line)的形式存储在存储器中,也即是,微码操作信息表存储在存储器中。例如,在步骤S330中,微码流控制信息表可以与微码操作信息表存储在相同的存储器中,也可以存储在不同的存储器中。例如,在不存在微码之间的跳转的情形,微码流控制条目中的指令流控制条目可以为空。这里,“指令流控制条目可以为空”可以指创建的指令流控制条目中的内容为空,也可以指不创建该指令流控制条目。由此,可以有效地缩减存放微码流控制信息的存储容量。例如,不存在微码之间的跳转的情形可以包括不存在跳转的情形,还可以包括在微码与非微码之间跳转的情形,针对这两种情形,指令流控制条目都可以为空。也即是,只有当跳转发生在微码之间时,才创建具有内容的指令流控制条目。例如,在步骤S340中,映射表可以与微码流控制信息表存储在相同的存储器中,也可以存储在不同的存储器中,本公开的实施例对此不作限制。
例如,上述步骤S310-S340可以产生如图4、图5所示的微码存储组合,关于步骤S310-S340的详细说明可以参考上文中关于图4、图5的描述,此处不再赘述。
需要说明的是,本公开实施例提供的微码取指方法、微码存储组合产生方法不限于上文中描述的步骤,还可以包括更多的步骤。各个步骤的执行顺序不受限制,虽然上文中以特定顺序描述了各个步骤,但这并不构成对本公开实施例的限制。
本公开至少一个实施例还提供一种微码取指装置。该微码取指装置采用的微码存储组合能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展,该微码取指装置可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
图20为本公开一些实施例提供的一种微码取指装置的示意框图。如图20所示,该微码取指装置10用于微码存储组合,微码存储组合包括微码操作信息表、微码流控制信息表和映射表。微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储。微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址。指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址。映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。例如,该微码取指装置10可以用于如图4、图5所示的微码存储组合。
该微码取指装置10包括映射单元11和获取单元12。映射单元11配置为基于获取的入口地址,根据映射表进行查表得到对应的微码流控制条目。入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址。映射单元11可以执行如图6所示的微码取指方法的步骤S110。获取单元12配置为根据微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与微码流控制条目对应的微操作。获取单元12可以执行如图6所示的微码取指方法的步骤S120。
例如,映射单元11和获取单元12可以为硬件、软件、固件以及它们的任意可行的组合。例如,映射单元11和获取单元12可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于映射单元11和获取单元12的具体实现形式,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,微码取指装置10的各个单元与前述的微码取指方法的各个步骤对应,关于该微码取指装置10的具体功能可以参考上文中微码取指方法的相关描述,此处不再赘述。图20所示的微码取指装置10的组件和结构只是示例性的,而非限制性的,根据需要,该微码取指装置10还可以包括其他组件和结构。
例如,微码操作信息表存储在存储器中,存储器以存储行的形式进行划分,每个存储行存储有多个微操作。至少一个存储行中的微操作属于相同的微码序列,或者,至少一个存储行中的微操作属于不同的微码序列。获取单元12还配置为,根据微码流控制条目所包含的指令流控制条目和微操作起始地址,以存储行为单位,逐行获取与微码流控制条目对应的微操作。
例如,微操作起始地址包括行地址和偏移地址,行地址指示存储行的地址,偏移地址指示微操作在存储行中相对于行首的地址偏移。微操作包括序列结束标识和顺序干扰标识。序列结束标识指示微操作是否为所属的微码序列中的最后一个微操作,将指示微操作为所属的微码序列中的最后一个微操作的序列结束标识称为有效的序列结束标识。顺序干扰标识指示在存在跳转的情形下是否从微操作跳转,将指示从微操作跳转的顺序干扰标识称为有效的顺序干扰标识。
获取单元12包括存储行读取单元、结束判断单元、停止单元、继续读取单元。存储行读取单元配置为针对每一存储行,获取存储行中所需要的微操作。结束判断单元配置为判断读取的微操作中是否包含具有有效的序列结束标识的微操作。停止单元配置为响应于读取的微操作中包含具有有效的序列结束标识的微操作,停止读取操作,并丢弃具有有效的序列结束标识的微操作之后的微操作。继续读取单元配置为响应于读取的微操作中不包含具有有效的序列结束标识的微操作,进行后续存储行的读取。
例如,存储行读取单元包括行地址判断单元、偏移读取单元和预设读取单元。行地址判断单元配置为针对每一存储行,判断行地址是否为读取微码流控制条目所得到的行地址。偏移读取单元配置为响应于行地址为读取微码流控制条目所得到的行地址,根据行地址和偏移地址读取存储行中以偏移地址为起始地址的微操作。预设读取单元配置为响应于行地址不是读取微码流控制条目所得到的行地址,根据行地址读取存储行中的全部微操作。
例如,继续读取单元包括顺序判断单元、新地址读取单元、第一跳转获取单元和第二跳转获取单元。顺序判断单元配置为判断读取的微操作中是否包含具有有效的顺序干扰标识的微操作。新地址读取单元配置为响应于读取的微操作中不包含具有有效的顺序干扰标识的微操作,根据微操作的顺序干扰标识的分支指令类型,选择基于当前的行地址产生新的行地址或者基于微码流控制条目中包含的微码分支指令目的地址得到新的行地址,并利用新的行地址获取对应的微操作。第一跳转获取单元配置为,响应于读取的微操作中包含具有有效的顺序干扰标识的微操作且顺序干扰标识指示无条件跳转,丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且获取跳转目标地址对应的微码流控制条目所对应的微操作。第二跳转获取单元配置为,响应于读取的微操作中包含具有有效的顺序干扰标识的微操作且顺序干扰标识指示条件跳转,按照顺序读取微操作的模式进行读取并监测执行单元的误预测结果,在执行单元对于跳转指令得到的误预测结果达到或者超过门限值的情形,放弃顺序读取微操作的模式,丢弃具有有效的顺序干扰标识的微操作之后的微操作,并且获取跳转目标地址对应的微码流控制条目所对应的微操作。该门限值称为跳转信心值。
例如,跳转获取单元包括跳转目标地址查询单元、映射查询单元、目标获取单元。跳转目标地址查询单元配置为根据基于入口地址查表得到的微码流控制条目所包含的指令流控制条目,得到跳转目标地址。映射查询单元配置为基于跳转目标地址,根据映射表进行查表得到对应的微码流控制条目。目标获取单元配置为根据跳转目标地址对应的微码流控制条目包括的微操作起始地址,获取对应的微操作。
例如,新的行地址通过当前的行地址递增1得到,或者,新的行地址利用微码分支指令目的地址查找映射表得到。序列结束标识为1比特二进制数值,顺序干扰标识为2比特二进制数值。在不存在微码之间的跳转的情形,微码流控制条目中的指令流控制条目为空。
图21为本公开一些实施例提供的另一种微码取指装置的示意框图。如图21所示,该微码取指装置20用于微码存储组合,微码存储组合包括微码操作信息表、微码流控制信息表和映射表。微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储。微码操作信息表存储在存储器中,存储器以存储行的形式进行划分,每个存储行存储有多个微操作,存储器包括多个取指端口。微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址。指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址。映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。例如,该微码取指装置20可以用于如图4、图5所示的微码存储组合。
该微码取指装置20包括映射单元21、协同读取单元22和派发单元23。映射单元21配置为基于获取的入口地址,根据映射表进行查表得到对应的微码流控制条目。映射单元21可以执行如图12所示的微码取指方法的步骤S210。协同读取单元22配置为根据微码流控制条目,利用多个取指端口进行协同读取,以得到多个微码队列。多个微码队列与多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作。协同读取单元22可以执行如图12所示的微码取指方法的步骤S220。派发单元23配置为基于多个微码队列,派发得到所需要的微操作。派发单元23可以执行如图12所示的微码取指方法的步骤S230。
例如,映射单元21、协同读取单元22和派发单元23可以为硬件、软件、固件以及它们的任意可行的组合。例如,映射单元21、协同读取单元22和派发单元23可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于映射单元21、协同读取单元22和派发单元23的具体实现形式,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,微码取指装置20的各个单元与前述的微码取指方法的各个步骤对应,关于该微码取指装置20的具体功能可以参考上文中微码取指方法的相关描述,此处不再赘述。图21所示的微码取指装置20的组件和结构只是示例性的,而非限制性的,根据需要,该微码取指装置20还可以包括其他组件和结构。
例如,多个取指端口包括两个取指端口。
例如,协同读取单元22包括交替读取单元和分叉读取单元。交替读取单元配置为,在不存在微码之间的跳转的情形,以至少一个存储行为单次读取单位,利用两个取指端口按照单次读取单位交替读取存储行中的微操作。分叉读取单元配置为,在存在微码之间的跳转的情形,利用两个取指端口中的一个取指端口逐行读取微码流控制条目对应的存储行中的微操作,并且利用两个取指端口中的另一个取指端口读取跳转目标地址对应的微码流控制条目所对应的存储行中的微操作。
例如,派发单元23还配置为,在不存在微码之间的跳转的情形,以乒乓操作的方式从两个微码队列交替获取微操作,并依序对获取的微操作进行派发。每次获取的微操作为一个单次读取单位所包含的微操作。
例如,在存在微码之间的跳转的情形,派发单元23包括第一派发子单元、第二派发子单元。第一派发子单元配置为从具有有效的顺序干扰标识的微操作所在的微码队列依序获取微操作,并依序对获取的微操作进行派发。具有有效的顺序干扰标识的微操作所在的微码队列称为第一队列,两个微码队列中除第一队列之外的另一个队列称为第二队列。第二派发子单元配置为响应于顺序干扰标识指示无条件跳转,从跳转目标地址开始,对第一队列中的微操作和第二队列中的微操作进行交替派发。
例如,派发单元23还包括信心单元和预取单元。信心单元配置为,为条件跳转执行设定跳转信心值,基于跳转信心值,在对具有有效的顺序干扰标识的微操作派发之后,选择第一队列或第二队列中的一个队列,对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式。例如,跳转信心值通过预先设置得到,或者,跳转信心值基于样本进行训练得到。预取单元配置为采用预取方式,将微码操作信息表中的至少部分微操作预取到多个微码队列中的一个微码队列。例如,多个微码队列为多个逻辑队列,或者,多个微码队列共享同一个物理队列。
本公开至少一个实施例还提供一种微码存储组合产生装置。该微码存储组合产生装置能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展。通过与相适应的微码取指方法配合,可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
图22为本公开一些实施例提供的一种微码存储组合产生装置的示意框图。如图22所示,该微码存储组合产生装置30包括第一处理单元31、第二处理单元32、第三处理单元33、第四处理单元34。该微码存储组合产生装置30可以产生如图4、图5所示的微码存储组合。
第一处理单元31配置为产生多个微码序列。每个微码序列包括多个微操作。第一处理单元31可以执行如图19所示的微码存储组合产生方法的步骤S310。第二处理单元32配置为将多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表。第二处理单元32可以执行如图19所示的微码存储组合产生方法的步骤S320。第三处理单元33配置为创建微码流控制信息表。微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,微操作起始地址为对应的微码序列的第一个微操作的地址。第三处理单元33可以执行如图19所示的微码存储组合产生方法的步骤S330。第四处理单元34配置为创建映射表。映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。第四处理单元34可以执行如图19所示的微码存储组合产生方法的步骤S340。
例如,第一处理单元31、第二处理单元32、第三处理单元33、第四处理单元34可以为硬件、软件、固件以及它们的任意可行的组合。例如,第一处理单元31、第二处理单元32、第三处理单元33、第四处理单元34可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于第一处理单元31、第二处理单元32、第三处理单元33、第四处理单元34的具体实现形式,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,微码存储组合产生装置30的各个单元与前述的微码存储组合产生方法的各个步骤对应,关于该微码存储组合产生装置30的具体功能可以参考上文中微码存储组合产生方法的相关描述,此处不再赘述。图22所示的微码存储组合产生装置30的组件和结构只是示例性的,而非限制性的,根据需要,该微码存储组合产生装置30还可以包括其他组件和结构。
本公开至少一个实施例还提供一种电子设备,该电子设备包括前述的微码取指装置。该电子设备采用的微码存储组合能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展,该电子设备可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
图23为本公开一些实施例提供的一种电子设备的示意框图。如图23所示,该电子设备40包括微码取指装置41,微码取指装置41可以为前述的微码取指装置10/20。例如,该电子设备40可以为中央处理器(CPU)、图形处理器(GPU)或其他具有微码读取功能的设备,本公开的实施例对此不作限制。关于该电子设备40的详细说明和技术效果可以参考上文中关于微码取指装置10/20的说明,此处不再赘述。
本公开至少一个实施例还提供一种电子设备,该电子设备包括前述的微码存储组合产生装置。该电子设备采用的微码存储组合能够节省存储空间,提高存储空间的利用率,可以提供微码的高效读取方式,有利于扩展。通过与相适应的微码取指方法配合,可以降低条件跳转指令分支错误的损耗,提高基于分支指令的取指准确度,提高微码序列的取指带宽。
图24为本公开一些实施例提供的另一种电子设备的示意框图。如图24所示,该电子设备50包括微码存储组合产生装置51,微码存储组合产生装置51可以为前述的微码存储组合产生装置30。例如,该电子设备50可以为中央处理器(CPU)、图形处理器(GPU)或其他具有微码读取功能的设备,本公开的实施例对此不作限制。关于该电子设备50的详细说明和技术效果可以参考上文中关于微码存储组合产生装置30的说明,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (25)
1.一种微码取指方法,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;
所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储;
所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;
所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;
所述微码取指方法包括:
基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;
根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与所述微码流控制条目对应的微操作。
2.根据权利要求1所述的微码取指方法,其中,所述微码操作信息表存储在存储器中,所述存储器以存储行的形式进行划分,每个存储行存储有多个微操作,
至少一个存储行中的微操作属于相同的微码序列,或者,至少一个存储行中的微操作属于不同的微码序列,
根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与所述微码流控制条目对应的微操作,包括:
根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,以所述存储行为单位,逐行获取与所述微码流控制条目对应的微操作。
3.根据权利要求2所述的微码取指方法,其中,所述微操作起始地址包括行地址和偏移地址,所述行地址指示所述存储行的地址,所述偏移地址指示所述微操作在所述存储行中相对于行首的地址偏移,
所述微操作包括序列结束标识和顺序干扰标识,
所述序列结束标识指示所述微操作是否为所属的微码序列中的最后一个微操作,将指示所述微操作为所属的微码序列中的最后一个微操作的序列结束标识称为有效的序列结束标识,
所述顺序干扰标识指示在存在跳转的情形下是否从所述微操作跳转,将指示从所述微操作跳转的顺序干扰标识称为有效的顺序干扰标识,
根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,以所述存储行为单位,逐行获取与所述微码流控制条目对应的微操作,包括:
针对每一存储行,获取所述存储行中所需要的微操作;
判断读取的微操作中是否包含具有所述有效的序列结束标识的微操作;
响应于读取的微操作中包含具有所述有效的序列结束标识的微操作,停止读取操作,并丢弃具有所述有效的序列结束标识的微操作之后的微操作;
响应于读取的微操作中不包含具有所述有效的序列结束标识的微操作,进行后续存储行的读取。
4.根据权利要求3所述的微码取指方法,其中,针对每一存储行,获取所述存储行中所需要的微操作,包括:
针对每一存储行,判断所述行地址是否为读取所述微码流控制条目所得到的行地址;
响应于所述行地址为读取所述微码流控制条目所得到的行地址,根据所述行地址和所述偏移地址读取所述存储行中以所述偏移地址为起始地址的微操作;
响应于所述行地址不是读取所述微码流控制条目所得到的行地址,根据所述行地址读取所述存储行中的全部微操作。
5.根据权利要求3所述的微码取指方法,其中,进行后续存储行的读取,包括:
判断读取的微操作中是否包含具有所述有效的顺序干扰标识的微操作;
响应于读取的微操作中不包含具有所述有效的顺序干扰标识的微操作,根据所述微操作的顺序干扰标识的分支指令类型,选择基于当前的行地址产生新的行地址或者基于所述微码流控制条目中包含的所述微码分支指令目的地址得到新的行地址,并利用所述新的行地址获取对应的微操作;
响应于读取的微操作中包含具有所述有效的顺序干扰标识的微操作且所述顺序干扰标识指示无条件跳转,丢弃具有所述有效的顺序干扰标识的微操作之后的微操作,并且获取所述跳转目标地址对应的微码流控制条目所对应的微操作;
响应于读取的微操作中包含具有所述有效的顺序干扰标识的微操作且所述顺序干扰标识指示条件跳转,按照顺序读取微操作的模式进行读取并监测执行单元的误预测结果,在所述执行单元对于跳转指令得到的误预测结果达到或者超过门限值的情形,放弃所述顺序读取微操作的模式,丢弃具有所述有效的顺序干扰标识的微操作之后的微操作,并且获取所述跳转目标地址对应的微码流控制条目所对应的微操作,其中,所述门限值称为跳转信心值。
6.根据权利要求5所述的微码取指方法,其中,获取所述跳转目标地址对应的微码流控制条目所对应的微操作,包括:
根据基于所述入口地址查表得到的微码流控制条目所包含的指令流控制条目,得到所述跳转目标地址;
基于所述跳转目标地址,根据所述映射表进行查表得到对应的微码流控制条目;
根据所述跳转目标地址对应的微码流控制条目包括的微操作起始地址,获取对应的微操作。
7.根据权利要求5所述的微码取指方法,其中,
所述新的行地址通过所述当前的行地址递增1得到,或者,
所述新的行地址利用所述微码分支指令目的地址查找所述映射表得到。
8.根据权利要求3-7任一所述的微码取指方法,其中,所述序列结束标识为1比特二进制数值;
所述顺序干扰标识为2比特二进制数值,所述2比特二进制数值中的1比特二进制数值用于标识是否存在顺序干扰,所述2比特二进制数值中的另1比特二进制数值用于标识顺序干扰的分支指令类型。
9.根据权利要求1-7任一所述的微码取指方法,其中,在不存在微码之间的跳转的情形,所述微码流控制条目中的指令流控制条目为空。
10.一种微码取指方法,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;
所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列以顺序排布的方式存储,同一个微码序列中的多个微操作以顺序排布的方式存储,所述微码操作信息表存储在存储器中,所述存储器以存储行的形式进行划分,每个存储行存储有多个微操作,所述存储器包括多个取指端口;
所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;
所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;
所述微码取指方法包括:
基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;
根据所述微码流控制条目,利用所述多个取指端口进行协同读取,以得到多个微码队列,其中,所述多个微码队列与所述多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作;
基于所述多个微码队列,派发得到所需要的微操作。
11.根据权利要求10所述的微码取指方法,其中,所述多个取指端口包括两个取指端口,
根据所述微码流控制条目,利用所述多个取指端口进行协同读取,以得到所述多个微码队列,包括:
在不存在微码之间的跳转的情形,以至少一个存储行为单次读取单位,利用所述两个取指端口按照所述单次读取单位交替读取存储行中的微操作;
在存在微码之间的跳转的情形,利用所述两个取指端口中的一个取指端口逐行读取所述微码流控制条目对应的存储行中的微操作,并且利用所述两个取指端口中的另一个取指端口读取跳转目标地址对应的微码流控制条目所对应的存储行中的微操作。
12.根据权利要求11所述的微码取指方法,其中,所述多个微码队列包括两个微码队列,
在不存在微码之间的跳转的情形,基于所述多个微码队列,派发得到所需要的微操作,包括:
以乒乓操作的方式从所述两个微码队列交替获取微操作,并依序对获取的微操作进行派发,其中,每次获取的微操作为一个单次读取单位所包含的微操作。
13.根据权利要求10所述的微码取指方法,其中,所述多个微码队列包括两个微码队列,
在存在微码之间的跳转的情形,基于所述多个微码队列,派发得到所需要的微操作,包括:
从具有有效的顺序干扰标识的微操作所在的微码队列依序获取微操作,并依序对获取的微操作进行派发,其中,所述具有有效的顺序干扰标识的微操作所在的微码队列称为第一队列,所述两个微码队列中除第一队列之外的另一个队列称为第二队列,所述第二队列中微操作的首地址对应于所述跳转目标地址;响应于所述顺序干扰标识指示无条件跳转,从所述跳转目标地址开始,对所述第一队列中的微操作和所述第二队列中的微操作进行交替派发。
14.根据权利要求13所述的微码取指方法,其中,基于所述多个微码队列,派发得到所需要的微操作,还包括:
为条件跳转执行设定跳转信心值,基于所述跳转信心值,在对所述具有有效的顺序干扰标识的微操作派发之后,选择所述第一队列或所述第二队列中的一个队列,对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式。
15.根据权利要求14所述的微码取指方法,其中,选择所述第一队列或所述第二队列中的一个队列,对选择的队列中的微操作进行派发,并根据取码进度转换为乒乓操作的方式,包括:
在所述条件跳转执行为跳转并且按照跳转方式进行派发的情形,清空所述第一队列,保持从所述第二队列进行派发,所述第一队列根据所述第二队列当前的取码进度与所述第二队列配合并以乒乓操作的方式交替获取微操作;
在所述条件跳转执行为非跳转并且按照非跳转方式进行派发的情形,清空所述第二队列,保持从所述第一队列进行派发,所述第二队列根据所述第一队列当前的取码进度与所述第一队列配合并以乒乓操作的方式交替获取微操作;
在所述条件跳转执行为跳转并且按照非跳转方式进行派发的情形,清空所述第一队列,从所述第二队列进行派发,所述第一队列根据所述第二队列当前的取码进度与所述第二队列配合并以乒乓操作的方式交替获取微操作;
在所述条件跳转执行为非跳转并且按照跳转方式进行派发的情形,清空所述第二队列,从所述第一队列进行派发,所述第二队列根据所述第一队列当前的取码进度与所述第一队列配合并以乒乓操作的方式交替获取微操作。
16.根据权利要求15所述的微码取指方法,其中,所述跳转信心值通过预先设置得到,或者,所述跳转信心值基于样本进行训练得到。
17.根据权利要求16所述的微码取指方法,其中,所述跳转信心值的训练方式包括:
响应于所述条件跳转的执行结果与所述跳转信心值的预测结果相同,将所述跳转信心值的数值增加1;
响应于所述条件跳转的执行结果与所述跳转信心值的预测结果不同,将所述跳转信心值的数值减1。
18.根据权利要求10所述的微码取指方法,其中,基于所述多个微码队列,派发得到所需要的微操作,还包括:
采用预取方式,将所述微码操作信息表中的至少部分微操作预取到所述多个微码队列中的一个微码队列。
19.根据权利要求10所述的微码取指方法,其中,所述多个微码队列为多个逻辑队列,或者,所述多个微码队列共享同一个物理队列。
20.一种微码存储组合产生方法,包括:
产生多个微码序列,其中,每个微码序列包括多个微操作;
将所述多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表;
创建微码流控制信息表,其中,所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;
创建映射表,其中,所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。
21.一种微码取指装置,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;
所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列顺序排布存储,同一个微码序列中的多个微操作顺序排布存储;
所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;
所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;
所述微码取指装置包括:
映射单元,配置为基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;
获取单元,配置为根据所述微码流控制条目所包含的指令流控制条目和微操作起始地址,获取与所述微码流控制条目对应的微操作。
22.一种微码取指装置,用于微码存储组合,其中,所述微码存储组合包括微码操作信息表、微码流控制信息表和映射表;
所述微码操作信息表包括多个微码序列,每个微码序列包括多个微操作,所述多个微码序列以顺序排布的方式存储,同一个微码序列中的多个微操作以顺序排布的方式存储,所述微码操作信息表存储在存储器中,所述存储器以存储行的形式进行划分,每个存储行存储有多个微操作,所述存储器包括多个取指端口;
所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;
所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系;
所述微码取指装置包括:
映射单元,配置为基于获取的入口地址,根据所述映射表进行查表得到对应的微码流控制条目,其中,所述入口地址包括体系架构上规定的特殊事件的入口地址和/或微码分支指令目的地址;
协同读取单元,配置为根据所述微码流控制条目,利用所述多个取指端口进行协同读取,以得到多个微码队列,其中,所述多个微码队列与所述多个取指端口一一对应,每个微码队列中的微操作为对应的取指端口所读取的微操作;
派发单元,配置为基于所述多个微码队列,派发得到所需要的微操作。
23.一种微码存储组合产生装置,包括:
第一处理单元,配置为产生多个微码序列,其中,每个微码序列包括多个微操作;
第二处理单元,配置为将所述多个微码序列顺序排布存储,并且将同一个微码序列中的多个微操作顺序排布存储,以得到微码操作信息表;
第三处理单元,配置为创建微码流控制信息表,其中,所述微码流控制信息表包括多个微码流控制条目,每个微码流控制条目包括在所述多个微码序列中对应的微码序列的指令流控制条目和微操作起始地址,所述指令流控制条目指示是否存在微码之间的跳转以及跳转目标地址,所述微操作起始地址为所述对应的微码序列的第一个微操作的地址;
第四处理单元,配置为创建映射表,其中,所述映射表包括多个地址映射条目,每个地址映射条目对应一个微码流控制条目并且记载与对应的微码流控制条目的映射关系。
24.一种电子设备,包括如权利要求21或22所述的微码取指装置。
25.一种电子设备,包括如权利要求23所述的微码存储组合产生装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110920532.7A CN113553102B (zh) | 2021-08-11 | 2021-08-11 | 微码取指方法、微码存储组合产生方法、装置、设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110920532.7A CN113553102B (zh) | 2021-08-11 | 2021-08-11 | 微码取指方法、微码存储组合产生方法、装置、设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113553102A CN113553102A (zh) | 2021-10-26 |
CN113553102B true CN113553102B (zh) | 2022-07-05 |
Family
ID=78133847
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110920532.7A Active CN113553102B (zh) | 2021-08-11 | 2021-08-11 | 微码取指方法、微码存储组合产生方法、装置、设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113553102B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269008B (zh) * | 2022-09-29 | 2023-02-28 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、介质及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595351A (zh) * | 2004-06-25 | 2005-03-16 | 中国科学院计算技术研究所 | 一种基于mips指令集的处理器的多线程方法和装置 |
CN104679479A (zh) * | 2015-03-12 | 2015-06-03 | 中国人民解放军信息工程大学 | 一种基于任务编号的调度控制机制的多核密码处理器 |
CN106406814A (zh) * | 2016-09-30 | 2017-02-15 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
-
2021
- 2021-08-11 CN CN202110920532.7A patent/CN113553102B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595351A (zh) * | 2004-06-25 | 2005-03-16 | 中国科学院计算技术研究所 | 一种基于mips指令集的处理器的多线程方法和装置 |
CN104679479A (zh) * | 2015-03-12 | 2015-06-03 | 中国人民解放军信息工程大学 | 一种基于任务编号的调度控制机制的多核密码处理器 |
CN106406814A (zh) * | 2016-09-30 | 2017-02-15 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
TWI621065B (zh) * | 2016-09-30 | 2018-04-11 | 上海兆芯集成電路有限公司 | 處理器和將架構指令轉譯成微指令的方法 |
Non-Patent Citations (1)
Title |
---|
一种协处理器微程序控制器的设计;唐世庆等;《合肥工业大学学报(自然科学版)》;20031228(第06期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113553102A (zh) | 2021-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2500958B2 (ja) | デイジタルデ―タプロセツサ作動方法及び分岐履歴テ―ブル | |
JP5865920B2 (ja) | データ処理装置のトレース | |
US5511172A (en) | Speculative execution processor | |
US7685410B2 (en) | Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects | |
CN100520712C (zh) | 用来实施具有追踪缓存的微处理器的方法及系统 | |
US6877089B2 (en) | Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program | |
US20040003202A1 (en) | Instruction fetch control apparatus | |
US5835754A (en) | Branch prediction system for superscalar processor | |
KR101081674B1 (ko) | 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 | |
US7925870B2 (en) | Return target address prediction by moving entry pointer to return stack popped at completion to deeper one at return instruction fetch | |
CN101884025B (zh) | 用于使过程返回序列加速的方法和系统 | |
US5761490A (en) | Changing the meaning of a pre-decode bit in a cache memory depending on branch prediction mode | |
US7017030B2 (en) | Prediction of instructions in a data processing apparatus | |
US20220326954A1 (en) | Exit history based branch prediction | |
CN113553102B (zh) | 微码取指方法、微码存储组合产生方法、装置、设备 | |
US20230062645A1 (en) | Parallel instruction extraction method and readable storage medium | |
US20080098398A1 (en) | Efficient Switching Between Prioritized Tasks | |
JP2010501913A (ja) | 可変長命令セット内の分岐命令の最後の粒度(granularity)と関連付けられたキャッシュ分岐情報 | |
JP2005165950A (ja) | 分岐予測装置および分岐予測方法 | |
JPH08320788A (ja) | パイプライン方式プロセッサ | |
US5295248A (en) | Branch control circuit | |
US6895496B1 (en) | Microcontroller having prefetch function | |
US6832334B2 (en) | Computer register watch | |
US7124284B2 (en) | Method and apparatus for processing a complex instruction for execution and retirement | |
US20040003213A1 (en) | Method for reducing the latency of a branch target calculation by linking the branch target address cache with the call-return stack |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |