ITTAGE 分支预测器
Categories:
功能介绍
对于一般条件分支指令,只需要预测跳转(taken),或者不跳转(no taken),但是对于间接跳转,如call/jump等指令,需要预测跳转到哪里去(Target)。为了让TAGE支持预测跳转地址,ITTAGE(Indirect Target TAGE)应运而生。
ITTAGE 与 TAGE 的主要区别在于,在T0和Tn表中,多了 Target PC 数据。预测时,ITTAGE选择匹配到的、历史最长的表项中的 Target 作为预测结果,并利用 2bit 饱和计数器决定是否输出该结果,或选用替代预测结果。TAGE 预测器说明,请参考 TAGE-SC分支预测器。
昆明湖 ITTAGE 分支预测器
由于在昆明湖的BPU设计中,采用多预测器级联的方式进行预测,因此在子预测器实现上,会与原始预测器有所不同,其中多数表现在默认预测结果上。
基本功能
ITTAGE基本功能类似 TAGE 分支预测器,但存在以下不同点:
- 在表项中增加了 Target 作为跳转的目标地址项,用于预测跳转目标地址。
- 饱和计数器ctr也不再提供预测方向,而改为决定是否输出结果(只是预测信息)。
- 由于每个分支预测块中只有一个间接跳转指令,所以ITTAGE也只考虑一条指令。
流水线
ITTAGE 内含三个流水级,第一级计算索引,第二级通过索引读出SRAM表中的结果
- 第0拍,s0:第一个流水级的输入,一般是pc和折叠历史。
第一流水级运行:计算index。通过寄存器输出到s1
- 第1拍,s1:第二个流水级的输入,为第一级阶段计算好的index等数据。
第二流水级运行:访存SRAM,读取预测用信息。通过寄存器输出到s2
- 第2拍,s2:第三个流水级的输入,为第二级从SRAM中读出的原始预测信息。
**第三流水级运行:**处理原始预测信息,决定是否输出预测结果。
- 第3拍,s3:预测结果就绪,此时已经可以使用预测结果。
数据结构
在昆明湖的实现中,T0与Tn的表结构如下所示:
预测器 | 作用 | 表项构成 | 项数 |
---|---|---|---|
基准预测器T0 | 用于在其他预测器的预测结果都无效时输出预测结果 | 虚表,不存在。 直接将上级预测器FTB 的预测结果作为表项结果 | 虚表,不存在。 直接将上级预测器FTB结果作为索引到的结果 |
预测表T1-T2 | 对每个预测块的输入,所有Tn表都进行预测,在所有预测有效的结果中,选择历史记录最长的结果作为 原始预测信息。历史记录长度由输入的H决定 | target: 41 bits; valid: 1bit; tag: 9bits; ctr: 2bits; us: 1bit(usefulness计数器) | 256项 |
预测表T3-T5 | 512项 |
T0,Tn表的检索方法
检索方法与 TAGE 分支预测器一致,只是各表的配置选项不同。
表名称 | FH长度 | FH1长度 | FH2长度 | 最近历史长度(用到GH中的位数) |
---|---|---|---|---|
T1 | 4比特 | 4比特 | 4比特 | 低4位,即把最新4位历史,折叠成FH、FH1、FH2 |
T2 | 8比特 | 8比特 | 8比特 | 低8位,即把最新8位历史,折叠成FH、FH1、FH2 |
T3 | 9比特 | 9比特 | 8比特 | 低13位,即把最新13位历史,折叠成FH、FH1、FH2 |
T4 | 9比特 | 9比特 | 8比特 | 低16位,即把最新16位历史,折叠成FH、FH1、FH2 |
T5 | 9比特 | 9比特 | 8比特 | 低32位,即把最新32位历史,折叠成FH、FH1、FH2 |
其他过程(计算方式 及 计算公式)类似 TAGE-SC分支预测器
替代预测器
当Tn表给出的预测结果,“预测信心”不足时,需要对预测结果进行跳转,成为“替代预测器”。该过程与 TAGE 类似,具体请先阅读TAGE的对应部分。与 TAGE 不同,ITTAGE 的 ctr 并不给出预测方向,只决定是否输出该结果(预测信心)。当 ctr 为 2b00 的时候,即认定为弱信心。选择替代预测结果:
- 如果命中多个个表,输出长度第二长的表中表项的 Target
- 否则输出 T0 Target(FTB Target)
预测过程
预测过程与 TAGE 类似,但与 TAGE 不同的是ITTAGE 多了一步根据 ctr 决定是否输出预测结果。具体过程如下:
- 当 ITTAGE 表项的 ctr 不为 2b00 时,输出 Target
- 当 ITTAGE 表项的 ctr 为 2b00 时,输出替代预测结果
- 如果有次长的历史(第二个表也命中),则输出 次长的 Target
- 否则输出 FTB Target
- 当 ITTAGE 表项没命中时,输出 T0 Target(FTB Target)
训练过程
该过程与 TAGE 类似,具体不同点如下:
- 表项更新(原始预测数据):
- ctr:
- 若预测地址与实际一致,则将对应provider(提供原始预测数据的表)表项的ctr计数器自增1
- 若预测地址与实际不一致,则将对应provider表项的ctr计数器自减1
- ITTAGE中,会根据ctr判断是否采取这个预测的跳转目标结果。 如果多个表均命中,且历史最长表的ctr为0,则采取替代预测逻辑(历史次长的表 或 T0)。 更新时始终更新历史最长的表,如果采用了替代预测,也同时更新替代预测表。
- target:
- 当待更新表项在进行本次预测时的ctr为0时,直接将实际的最终跳转结果存入target,覆盖
- 如果是在申请新表项,直接将实际的最终跳转结果存入target
- 否则不修改target
- usefulness:
- 当provider预测正确而替代预测错误时provider的usefulness置1
- 如果替代预测是弱信心,并且预测正确,则provider的usefulness置1。 如果替代预测是弱信心,并且预测错误,则provider的usefulness置0。
- 新表项:
- 每次由于历史最长表有信心的预测出错时(不是由于使用替代预测出错),会尝试随机在历史更长表中申请一个表项。能申请到的条件是对应项的useful为0
- 如果更长的useful均不为0,则分配失败
- ctr:
- 重置useful位:
- 每次预测出错时会申请新表项,如果分配失败则tickCtr(用于重置全部useful的8bit饱和计数器) +1,成功则 -1
- 当tickCtr为最大值时,设置ITTAGE中的所有useful为0,并设置tickCtr为0。
接口列表
接口类型 | 位宽 | 信号名 | 备注 |
---|---|---|---|
input | clock | ||
input | reset | ||
input | [40:0] | io_in_bits_s0_pc_3 | 用于预测的PC |
input | [7:0] | io_in_bits_folded_hist_3_hist_14_folded_hist | T2 折叠历史 |
input | [8:0] | io_in_bits_folded_hist_3_hist_13_folded_hist | T3 折叠历史 |
input | [3:0] | io_in_bits_folded_hist_3_hist_12_folded_hist | T1 折叠历史 |
input | [8:0] | io_in_bits_folded_hist_3_hist_10_folded_hist | T5 折叠历史 |
input | [8:0] | io_in_bits_folded_hist_3_hist_6_folded_hist | T4 折叠历史 |
input | [7:0] | io_in_bits_folded_hist_3_hist_4_folded_hist | T3 折叠历史 |
input | [7:0] | io_in_bits_folded_hist_3_hist_3_folded_hist | T5 折叠历史 |
input | [7:0] | io_in_bits_folded_hist_3_hist_2_folded_hist | T4 折叠历史 |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_3_jalr_target | FTB项输入,提供替代预测 |
output | [40:0] | io_out_s3_full_pred_0_jalr_target | |
output | [40:0] | io_out_s3_full_pred_1_jalr_target | |
output | [40:0] | io_out_s3_full_pred_2_jalr_target | |
output | [40:0] | io_out_s3_full_pred_3_jalr_target | |
output | [222:0] | io_out_last_stage_meta | [100:0] 有效,是ITTAGE的Meta信息 |
input | io_s0_fire_3 | s0阶段使能信号 | |
input | io_s1_fire_3 | s1阶段使能信号 | |
input | io_s2_fire_0 | s2阶段使能信号,相同 | |
input | io_s2_fire_1 | ||
input | io_s2_fire_2 | ||
input | io_s2_fire_3 | ||
input | io_update_valid | 是否进行更新 | |
input | [40:0] | io_update_bits_pc | 待更新的预测块pc索引 |
input | [7:0] | io_update_bits_spec_info_folded_hist_hist_14_folded_hist | T2 更新时传入的历史 |
input | [8:0] | io_update_bits_spec_info_folded_hist_hist_13_folded_hist | T3 更新时传入的历史 |
input | [3:0] | io_update_bits_spec_info_folded_hist_hist_12_folded_hist | T1 更新时传入的历史 |
input | [8:0] | io_update_bits_spec_info_folded_hist_hist_10_folded_hist | T5 更新时传入的历史 |
input | [8:0] | io_update_bits_spec_info_folded_hist_hist_6_folded_hist | T4 更新时传入的历史 |
input | [7:0] | io_update_bits_spec_info_folded_hist_hist_4_folded_hist | T3 更新时传入的历史 |
input | [7:0] | io_update_bits_spec_info_folded_hist_hist_3_folded_hist | T5 更新时传入的历史 |
input | [7:0] | io_update_bits_spec_info_folded_hist_hist_2_folded_hist | T4 更新时传入的历史 |
input | [3:0] | io_update_bits_ftb_entry_tailSlot_offset | 待更新的FTB项offset |
input | io_update_bits_ftb_entry_tailSlot_sharing | 待更新的FTB项是否是有条件跳转 | |
input | io_update_bits_ftb_entry_tailSlot_valid | 待更新的tailSlot是否启用 | |
input | io_update_bits_ftb_entry_isRet | tailSlot是否是Ret指令 | |
input | io_update_bits_ftb_entry_isJalr | tailSlot是否是Jalr指令 | |
input | io_update_bits_cfi_idx_valid | 控制流指令在预测块中的索引.valid信号 | |
input | [3:0] | io_update_bits_cfi_idx_bits | 控制流指令在预测块中的索引 |
input | io_update_bits_jmp_taken | 预测块内无条件跳转指令被触发 | |
input | io_update_bits_mispred_mask_2 | 是否预测错误 | |
input | [222:0] | io_update_bits_meta | 预测时传出 meta 信息的[222:25] 即{25h0, _ubtb_io_out_last_stage_meta[5:0] ,_tage_io_out_last_stage_meta[87:0] ,_ftb_io_out_last_stage_meta[2:0], _ittage_io_out_last_stage_meta[100:0]} |
input | [40:0] | io_update_bits_full_target | 预测块的跳转目标(下一个预测块的起始地址) |
不产生影响的透传信号
这里的信号不产生影响,不重要
接口类型 | 位宽 | 信号名 | 备注 |
---|---|---|---|
input | io_in_bits_resp_in_0_s2_full_pred_0_br_taken_mask_0 | 从FTB输入 完全透传到输出 包括jalr_target | |
input | io_in_bits_resp_in_0_s2_full_pred_0_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s2_full_pred_0_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_0_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_0_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_0_targets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_0_jalr_target | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_0_offsets_0 | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_0_offsets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_0_fallThroughAddr | |
input | io_in_bits_resp_in_0_s2_full_pred_0_is_br_sharing | ||
input | io_in_bits_resp_in_0_s2_full_pred_0_hit | ||
input | io_in_bits_resp_in_0_s2_full_pred_1_br_taken_mask_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_1_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s2_full_pred_1_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_1_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_1_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_1_targets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_1_jalr_target | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_1_offsets_0 | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_1_offsets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_1_fallThroughAddr | |
input | io_in_bits_resp_in_0_s2_full_pred_1_is_br_sharing | ||
input | io_in_bits_resp_in_0_s2_full_pred_1_hit | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_br_taken_mask_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_2_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_2_targets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_2_jalr_target | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_2_offsets_0 | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_2_offsets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_2_fallThroughAddr | |
input | io_in_bits_resp_in_0_s2_full_pred_2_is_jalr | RAS 模块使用的信息,透传 | |
input | io_in_bits_resp_in_0_s2_full_pred_2_is_call | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_is_ret | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_last_may_be_rvi_call | ||
input | io_in_bits_resp_in_0_s2_full_pred_2_is_br_sharing | 从FTB输入 完全透传到输出 包括jalr_target fallThroughErr 表示 FTB项 中记录的 pftAddr 有误 生成方式:比较 pftAddr 代表的预测块结束地址是否大于预测块的起始地址,如果小于,则代表出现错误,此信号置为有效。这种情况可能会发生在 pc 索引到错误的 FTB 项的情况。 FTQ使用这个变量,与ITTAGE无关 | |
input | io_in_bits_resp_in_0_s2_full_pred_2_hit | ||
input | io_in_bits_resp_in_0_s2_full_pred_3_br_taken_mask_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_3_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s2_full_pred_3_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s2_full_pred_3_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_3_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_3_targets_1 | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_3_offsets_0 | |
input | [3:0] | io_in_bits_resp_in_0_s2_full_pred_3_offsets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s2_full_pred_3_fallThroughAddr | |
input | io_in_bits_resp_in_0_s2_full_pred_3_fallThroughErr | ||
input | io_in_bits_resp_in_0_s2_full_pred_3_is_br_sharing | ||
input | io_in_bits_resp_in_0_s2_full_pred_3_hit | ||
input | io_in_bits_resp_in_0_s3_full_pred_0_br_taken_mask_0 | 除了 jalr_target 可能被修改,其他都是透传 | |
input | io_in_bits_resp_in_0_s3_full_pred_0_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s3_full_pred_0_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s3_full_pred_0_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_0_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_0_targets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_0_fallThroughAddr | |
input | io_in_bits_resp_in_0_s3_full_pred_0_fallThroughErr | ||
input | io_in_bits_resp_in_0_s3_full_pred_0_is_br_sharing | ||
input | io_in_bits_resp_in_0_s3_full_pred_0_hit | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_0_jalr_target | |
input | io_in_bits_resp_in_0_s3_full_pred_1_br_taken_mask_0 | 同上 | |
input | io_in_bits_resp_in_0_s3_full_pred_1_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s3_full_pred_1_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s3_full_pred_1_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_1_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_1_targets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_1_fallThroughAddr | |
input | io_in_bits_resp_in_0_s3_full_pred_1_fallThroughErr | ||
input | io_in_bits_resp_in_0_s3_full_pred_1_is_br_sharing | ||
input | io_in_bits_resp_in_0_s3_full_pred_1_hit | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_1_jalr_target | |
input | io_in_bits_resp_in_0_s3_full_pred_2_br_taken_mask_0 | 同上 | |
input | io_in_bits_resp_in_0_s3_full_pred_2_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_2_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_2_targets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_2_fallThroughAddr | |
input | io_in_bits_resp_in_0_s3_full_pred_2_fallThroughErr | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_is_jalr | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_is_call | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_is_ret | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_is_br_sharing | ||
input | io_in_bits_resp_in_0_s3_full_pred_2_hit | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_2_jalr_target | |
input | io_in_bits_resp_in_0_s3_full_pred_3_br_taken_mask_0 | 同上 | |
input | io_in_bits_resp_in_0_s3_full_pred_3_br_taken_mask_1 | ||
input | io_in_bits_resp_in_0_s3_full_pred_3_slot_valids_0 | ||
input | io_in_bits_resp_in_0_s3_full_pred_3_slot_valids_1 | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_3_targets_0 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_3_targets_1 | |
input | [3:0] | io_in_bits_resp_in_0_s3_full_pred_3_offsets_0 | |
input | [3:0] | io_in_bits_resp_in_0_s3_full_pred_3_offsets_1 | |
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_3_fallThroughAddr | |
input | io_in_bits_resp_in_0_s3_full_pred_3_fallThroughErr | ||
input | io_in_bits_resp_in_0_s3_full_pred_3_is_br_sharing | ||
input | io_in_bits_resp_in_0_s3_full_pred_3_hit | ||
input | [40:0] | io_in_bits_resp_in_0_s3_full_pred_3_jalr_target | |
input | io_in_bits_resp_in_0_last_stage_ftb_entry_valid | 透传到output,不做修改 来源是FTB | |
input | [3:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_brSlots_0_offset | |
input | [11:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_brSlots_0_lower | |
input | [1:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_brSlots_0_tarStat | |
input | io_in_bits_resp_in_0_last_stage_ftb_entry_brSlots_0_sharing | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_brSlots_0_valid | ||
input | [3:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_tailSlot_offset | |
input | [19:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_tailSlot_lower | |
input | [1:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_tailSlot_tarStat | |
input | io_in_bits_resp_in_0_last_stage_ftb_entry_tailSlot_sharing | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_tailSlot_valid | ||
input | [3:0] | io_in_bits_resp_in_0_last_stage_ftb_entry_pftAddr | |
input | io_in_bits_resp_in_0_last_stage_ftb_entry_carry | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_isCall | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_isRet | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_isJalr | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_last_may_be_rvi_call | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_always_taken_0 | ||
input | io_in_bits_resp_in_0_last_stage_ftb_entry_always_taken_1 | ||
output | io_out_s2_full_pred_0_br_taken_mask_0 | 完全透传传入值 prefix: io_in_bits_resp_in_ | |
output | io_out_s2_full_pred_0_br_taken_mask_1 | ||
output | io_out_s2_full_pred_0_slot_valids_0 | ||
output | io_out_s2_full_pred_0_slot_valids_1 | ||
output | [40:0] | io_out_s2_full_pred_0_targets_0 | |
output | [40:0] | io_out_s2_full_pred_0_targets_1 | |
output | [40:0] | io_out_s2_full_pred_0_jalr_target | |
output | [3:0] | io_out_s2_full_pred_0_offsets_0 | |
output | [3:0] | io_out_s2_full_pred_0_offsets_1 | |
output | [40:0] | io_out_s2_full_pred_0_fallThroughAddr | |
output | io_out_s2_full_pred_0_is_br_sharing | ||
output | io_out_s2_full_pred_0_hit | ||
output | io_out_s2_full_pred_1_br_taken_mask_0 | ||
output | io_out_s2_full_pred_1_br_taken_mask_1 | ||
output | io_out_s2_full_pred_1_slot_valids_0 | ||
output | io_out_s2_full_pred_1_slot_valids_1 | ||
output | [40:0] | io_out_s2_full_pred_1_targets_0 | |
output | [40:0] | io_out_s2_full_pred_1_targets_1 | |
output | [40:0] | io_out_s2_full_pred_1_jalr_target | |
output | [3:0] | io_out_s2_full_pred_1_offsets_0 | |
output | [3:0] | io_out_s2_full_pred_1_offsets_1 | |
output | [40:0] | io_out_s2_full_pred_1_fallThroughAddr | |
output | io_out_s2_full_pred_1_is_br_sharing | ||
output | io_out_s2_full_pred_1_hit | ||
output | io_out_s2_full_pred_2_br_taken_mask_0 | ||
output | io_out_s2_full_pred_2_br_taken_mask_1 | ||
output | io_out_s2_full_pred_2_slot_valids_0 | ||
output | io_out_s2_full_pred_2_slot_valids_1 | ||
output | [40:0] | io_out_s2_full_pred_2_targets_0 | |
output | [40:0] | io_out_s2_full_pred_2_targets_1 | |
output | [40:0] | io_out_s2_full_pred_2_jalr_target | |
output | [3:0] | io_out_s2_full_pred_2_offsets_0 | |
output | [3:0] | io_out_s2_full_pred_2_offsets_1 | |
output | [40:0] | io_out_s2_full_pred_2_fallThroughAddr | |
output | io_out_s2_full_pred_2_is_jalr | ||
output | io_out_s2_full_pred_2_is_call | ||
output | io_out_s2_full_pred_2_is_ret | ||
output | io_out_s2_full_pred_2_last_may_be_rvi_call | ||
output | io_out_s2_full_pred_2_is_br_sharing | ||
output | io_out_s2_full_pred_2_hit | ||
output | io_out_s2_full_pred_3_br_taken_mask_0 | ||
output | io_out_s2_full_pred_3_br_taken_mask_1 | ||
output | io_out_s2_full_pred_3_slot_valids_0 | ||
output | io_out_s2_full_pred_3_slot_valids_1 | ||
output | [40:0] | io_out_s2_full_pred_3_targets_0 | |
output | [40:0] | io_out_s2_full_pred_3_targets_1 | |
output | [40:0] | io_out_s2_full_pred_3_jalr_target | |
output | [3:0] | io_out_s2_full_pred_3_offsets_0 | |
output | [3:0] | io_out_s2_full_pred_3_offsets_1 | |
output | [40:0] | io_out_s2_full_pred_3_fallThroughAddr | |
output | io_out_s2_full_pred_3_fallThroughErr | ||
output | io_out_s2_full_pred_3_is_br_sharing | ||
output | io_out_s2_full_pred_3_hit | ||
output | io_out_s3_full_pred_0_br_taken_mask_0 | 见对应prefix的输入 | |
output | io_out_s3_full_pred_0_br_taken_mask_1 | ||
output | io_out_s3_full_pred_0_slot_valids_0 | ||
output | io_out_s3_full_pred_0_slot_valids_1 | ||
output | [40:0] | io_out_s3_full_pred_0_targets_0 | |
output | [40:0] | io_out_s3_full_pred_0_targets_1 | |
output | [40:0] | io_out_s3_full_pred_0_fallThroughAddr | |
output | io_out_s3_full_pred_0_fallThroughErr | ||
output | io_out_s3_full_pred_0_is_br_sharing | ||
output | io_out_s3_full_pred_0_hit | ||
output | io_out_s3_full_pred_1_br_taken_mask_0 | 见对应prefix的输入 | |
output | io_out_s3_full_pred_1_br_taken_mask_1 | ||
output | io_out_s3_full_pred_1_slot_valids_0 | ||
output | io_out_s3_full_pred_1_slot_valids_1 | ||
output | [40:0] | io_out_s3_full_pred_1_targets_0 | |
output | [40:0] | io_out_s3_full_pred_1_targets_1 | |
output | [40:0] | io_out_s3_full_pred_1_fallThroughAddr | |
output | io_out_s3_full_pred_1_fallThroughErr | ||
output | io_out_s3_full_pred_1_is_br_sharing | ||
output | io_out_s3_full_pred_1_hit | ||
output | io_out_s3_full_pred_2_br_taken_mask_0 | 见对应prefix的输入 | |
output | io_out_s3_full_pred_2_br_taken_mask_1 | ||
output | io_out_s3_full_pred_2_slot_valids_0 | ||
output | io_out_s3_full_pred_2_slot_valids_1 | ||
output | [40:0] | io_out_s3_full_pred_2_targets_0 | |
output | [40:0] | io_out_s3_full_pred_2_targets_1 | |
output | [40:0] | io_out_s3_full_pred_2_fallThroughAddr | |
output | io_out_s3_full_pred_2_fallThroughErr | ||
output | io_out_s3_full_pred_2_is_jalr | ||
output | io_out_s3_full_pred_2_is_call | ||
output | io_out_s3_full_pred_2_is_ret | ||
output | io_out_s3_full_pred_2_is_br_sharing | ||
output | io_out_s3_full_pred_2_hit | ||
output | io_out_s3_full_pred_3_br_taken_mask_0 | 见对应prefix的输入 | |
output | io_out_s3_full_pred_3_br_taken_mask_1 | ||
output | io_out_s3_full_pred_3_slot_valids_0 | ||
output | io_out_s3_full_pred_3_slot_valids_1 | ||
output | [40:0] | io_out_s3_full_pred_3_targets_0 | |
output | [40:0] | io_out_s3_full_pred_3_targets_1 | |
output | [3:0] | io_out_s3_full_pred_3_offsets_0 | |
output | [3:0] | io_out_s3_full_pred_3_offsets_1 | |
output | [40:0] | io_out_s3_full_pred_3_fallThroughAddr | |
output | io_out_s3_full_pred_3_fallThroughErr | ||
output | io_out_s3_full_pred_3_is_br_sharing | ||
output | io_out_s3_full_pred_3_hit | ||
output | io_out_last_stage_ftb_entry_valid | 完全透传传入的值 | |
output | [3:0] | io_out_last_stage_ftb_entry_brSlots_0_offset | |
output | [11:0] | io_out_last_stage_ftb_entry_brSlots_0_lower | |
output | [1:0] | io_out_last_stage_ftb_entry_brSlots_0_tarStat | |
output | io_out_last_stage_ftb_entry_brSlots_0_sharing | ||
output | io_out_last_stage_ftb_entry_brSlots_0_valid | ||
output | [3:0] | io_out_last_stage_ftb_entry_tailSlot_offset | |
output | [19:0] | io_out_last_stage_ftb_entry_tailSlot_lower | |
output | [1:0] | io_out_last_stage_ftb_entry_tailSlot_tarStat | |
output | io_out_last_stage_ftb_entry_tailSlot_sharing | ||
output | io_out_last_stage_ftb_entry_tailSlot_valid | ||
output | [3:0] | io_out_last_stage_ftb_entry_pftAddr | |
output | io_out_last_stage_ftb_entry_carry | ||
output | io_out_last_stage_ftb_entry_isCall | ||
output | io_out_last_stage_ftb_entry_isRet | ||
output | io_out_last_stage_ftb_entry_isJalr | ||
output | io_out_last_stage_ftb_entry_last_may_be_rvi_call | ||
output | io_out_last_stage_ftb_entry_always_taken_0 | ||
output | io_out_last_stage_ftb_entry_always_taken_1 |
其他Meta见对应子预测其文档
_ubtb_io_out_last_stage_meta
_tage_io_out_last_stage_meta
_ftb_io_out_last_stage_meta
ittage_io_out_last_stage_meta[100:0]
位宽 | 信号名 | 备注 |
---|---|---|
100 | s3_provided | 是否有结果 |
[99:97] | s3_provider | 提供结果的表项 |
96 | s3_altProvided | 是否有替代预测表项 |
[95:93] | s3_altProvider | 提供结果的替代预测表项 |
92 | resp_meta_altDiffers | 替代预测的结果是否和主预测的结果不同 |
91 | s3_providerU | 主预测的useful bit |
[90:89] | s3_providerCtr | 主预测给出的置信度 |
[88:87] | s3_altProviderCtr | 替代预测给出的置信度 |
86 | resp_meta_allocate_valid_r | 有空余的表项可供申请 |
[85:83] | resp_meta_allocate_bits_r | 申请哪个表中的表项 |
82 | s3_tageTaken_dup_3 | 在不使用FTB的情况下始为true,使用FTB也为true |
[81:41] | s3_providerTarget | 主预测给出的跳转地址 |
[40:0] | s3_altProviderTarget | 替代预测给出的跳转地址 |