ct_lsu_pfu_sdb_entry
module ct_lsu_pfu_sdb_entry( amr_wa_cancel, cp0_lsu_icg_en, cp0_lsu_l2_st_pref_en, cp0_yy_clk_en, cpurst_b, ld_da_iid, ld_da_ldfifo_pc, ld_da_pfu_act_dp_vld, ld_da_pfu_evict_cnt_vld, ld_da_pfu_pf_inst_vld, ld_da_ppfu_va, lsu_special_clk, pad_yy_icg_scan_en, pfu_pop_all_part_vld, pfu_sdb_create_pc, pfu_sdb_create_type_ld, pfu_sdb_entry_create_dp_vld_x, pfu_sdb_entry_create_gateclk_en_x, pfu_sdb_entry_create_vld_x, pfu_sdb_entry_evict_x, pfu_sdb_entry_hit_pc_x, pfu_sdb_entry_pc_v, pfu_sdb_entry_ready_grnt_x, pfu_sdb_entry_ready_x, pfu_sdb_entry_stride_neg_x, pfu_sdb_entry_stride_v, pfu_sdb_entry_strideh_6to0_v, pfu_sdb_entry_type_ld_x, pfu_sdb_entry_vld_x, rtu_yy_xx_commit0, rtu_yy_xx_commit0_iid, rtu_yy_xx_commit1, rtu_yy_xx_commit1_iid, rtu_yy_xx_commit2, rtu_yy_xx_commit2_iid, rtu_yy_xx_flush, sdb_timeout_cnt_val, st_da_iid, st_da_pc, st_da_pfu_evict_cnt_vld, st_da_pfu_pf_inst_vld, st_da_ppfu_va );
-
控制和配置输入:
- 包括
amr_wa_cancel 、cp0_lsu_icg_en 、cp0_lsu_l2_st_pref_en 、cp0_yy_clk_en 、cpurst_b 、lsu_special_clk 和pad_yy_icg_scan_en 。这些信号可能用于模块的总体控制,包括时钟门控、功率管理、复位和配置设置。
- 包括
-
来自加载和存储单元的数据和状态输入:
- 如
ld_da_iid 、ld_da_ldfifo_pc 、ld_da_pfu_act_dp_vld 、ld_da_pfu_evict_cnt_vld 、ld_da_pfu_pf_inst_vld 、ld_da_ppfu_va 、st_da_iid 、st_da_pc 、st_da_pfu_evict_cnt_vld 、st_da_pfu_pf_inst_vld 和st_da_ppfu_va 等输入对于预取操作至关重要。它们提供有关加载和存储指令的信息,包括指令标识符、程序计数器、有效性标志和虚拟地址。
- 如
-
步长检测和预取请求管理:
- 如
pfu_pop_all_part_vld 、pfu_sdb_create_pc 、pfu_sdb_create_type_ld 、pfu_sdb_entry_stride_neg_x 、pfu_sdb_entry_stride_v 和pfu_sdb_entry_strideh_6to0_v 等端口表明该模块参与管理基于步长的预取请求。这些端口可能用于跟踪和确定步长模式,并决定预取操作。
- 如
-
SDB条目管理:
- 如
pfu_sdb_entry_create_dp_vld_x 、pfu_sdb_entry_create_gateclk_en_x 、pfu_sdb_entry_create_vld_x 、pfu_sdb_entry_evict_x 、pfu_sdb_entry_hit_pc_x 、pfu_sdb_entry_pc_v 、pfu_sdb_entry_ready_grnt_x 、pfu_sdb_entry_ready_x 、pfu_sdb_entry_type_ld_x 和pfu_sdb_entry_vld_x 等信号表明模块负责处理SDB条目的生命周期。这包括创建、验证以及管理条目的就绪和逐出。
- 如
-
与退役单元的交互:
- 如
rtu_yy_xx_commit0 、rtu_yy_xx_commit0_iid 、rtu_yy_xx_commit1 、rtu_yy_xx_commit1_iid 、rtu_yy_xx_commit2 、rtu_yy_xx_commit2_iid 和rtu_yy_xx_flush 等端口用于与退役单元(RTU)的接口。这种交互是为了确保指令在完成执行后能够正确地更新SDB的状态。
- 如
parameter TIMEOUT_BW = 8;
parameter PC_LEN = 15;
//==========================================================
// Instance of Gated Cell
//==========================================================
assign pfu_sdb_entry_clk_en = pfu_sdb_entry_vld
|| pfu_sdb_entry_create_gateclk_en;
// &Instance("gated_clk_cell", "x_lsu_pfu_sdb_entry_gated_clk"); @41
gated_clk_cell x_lsu_pfu_sdb_entry_gated_clk (
.clk_in (lsu_special_clk ),
.clk_out (pfu_sdb_entry_clk ),
.external_en (1'b0 ),
.global_en (cp0_yy_clk_en ),
.local_en (pfu_sdb_entry_clk_en),
.module_en (cp0_lsu_icg_en ),
.pad_yy_icg_scan_en (pad_yy_icg_scan_en )
);
// &Connect(.clk_in (lsu_special_clk ), @42
// .external_en (1'b0 ), @43
// .global_en (cp0_yy_clk_en ), @44
// .module_en (cp0_lsu_icg_en ), @45
// .local_en (pfu_sdb_entry_clk_en), @46
// .clk_out (pfu_sdb_entry_clk )); @47
assign pfu_sdb_entry_create_clk_en = pfu_sdb_entry_create_gateclk_en;
// &Instance("gated_clk_cell", "x_lsu_pfu_sdb_entry_create_gated_clk"); @50
gated_clk_cell x_lsu_pfu_sdb_entry_create_gated_clk (
.clk_in (lsu_special_clk ),
.clk_out (pfu_sdb_entry_create_clk ),
.external_en (1'b0 ),
.global_en (cp0_yy_clk_en ),
.local_en (pfu_sdb_entry_create_clk_en),
.module_en (cp0_lsu_icg_en ),
.pad_yy_icg_scan_en (pad_yy_icg_scan_en )
);
// &Connect(.clk_in (lsu_special_clk ), @51
// .external_en (1'b0 ), @52
// .global_en (cp0_yy_clk_en ), @53
// .module_en (cp0_lsu_icg_en ), @54
// .local_en (pfu_sdb_entry_create_clk_en), @55
// .clk_out (pfu_sdb_entry_create_clk)); @56
assign pfu_pfb_entry_all_pf_inst_clk_en = pfu_sdb_entry_vld
&& (ld_da_pfu_pf_inst_vld || st_da_pfu_pf_inst_vld)
|| pfu_sdb_entry_create_gateclk_en;
// &Instance("gated_clk_cell", "x_lsu_pfu_sdb_entry_all_pf_inst_gated_clk"); @61
gated_clk_cell x_lsu_pfu_sdb_entry_all_pf_inst_gated_clk (
.clk_in (lsu_special_clk ),
.clk_out (pfu_pfb_entry_all_pf_inst_clk ),
.external_en (1'b0 ),
.global_en (cp0_yy_clk_en ),
.local_en (pfu_pfb_entry_all_pf_inst_clk_en),
.module_en (cp0_lsu_icg_en ),
.pad_yy_icg_scan_en (pad_yy_icg_scan_en )
);
-
定义参数(Parameter Definition):
TIMEOUT_BW 和PC_LEN 是定义的参数,分别表示超时带宽和程序计数器长度。
-
时钟门控逻辑(Clock Gating Logic):
pfu_sdb_entry_clk_en :控制SDB条目的基本时钟门控使能。如果SDB条目有效或创建时钟门控使能,则此信号为真。pfu_sdb_entry_create_clk_en :控制创建SDB条目时的时钟门控使能。
-
时钟门控单元实例化(Gated Clock Cell Instantiation):
- 每个时钟门控单元对应一个不同的功能。例如,
x_lsu_pfu_sdb_entry_gated_clk 用于SDB条目的基本时钟,而x_lsu_pfu_sdb_entry_create_gated_clk 用于SDB条目创建时的时钟。 - 每个时钟门控单元都接受
lsu_special_clk 作为输入时钟,并根据局部使能(local_en ),全局使能(global_en ),模块使能(module_en )以及扫描使能(pad_yy_icg_scan_en )来控制对应的时钟输出(clk_out )。
- 每个时钟门控单元对应一个不同的功能。例如,
-
预取指令的时钟门控逻辑(Prefetch Instruction Clock Gating Logic):
pfu_pfb_entry_all_pf_inst_clk_en :这个信号用于控制处理所有预取指令的时钟门控。当SDB条目有效且存在加载或存储的预取指令时,或者创建时钟门控使能时,该信号为真。
-
功能和重要性:
- 这些时钟门控逻辑有助于降低整个模块的功耗,特别是在不活跃时通过禁用不必要的时钟来减少能源消耗。
- 它们还为不同操作提供了专用的时钟,从而优化了性能并减少了不必要的时钟切换,提高了整体效率。
//==========================================================
// Register
//==========================================================
//+-----------+
//| entry_vld |
//+-----------+
always @(posedge pfu_sdb_entry_clk or negedge cpurst_b)
begin
if (!cpurst_b)
pfu_sdb_entry_vld <= 1'b0;
else if(pfu_sdb_entry_pop_vld)
pfu_sdb_entry_vld <= 1'b0;
else if(pfu_sdb_entry_create_vld)
pfu_sdb_entry_vld <= 1'b1;
end
//+----+
//| pc |
//+----+
always @(posedge pfu_sdb_entry_create_clk or negedge cpurst_b)
begin
if (!cpurst_b)
pfu_sdb_entry_pc[PC_LEN-1:0] <= {PC_LEN{1'b0}};
else if(pfu_sdb_entry_create_dp_vld)
pfu_sdb_entry_pc[PC_LEN-1:0] <= pfu_sdb_create_pc[PC_LEN-1:0];
end
//+----+------+
//| pref_type |
//+----+------+
always @(posedge pfu_sdb_entry_create_clk or negedge cpurst_b)
begin
if (!cpurst_b)
pfu_sdb_entry_type_ld <= 1'b0;
else if(pfu_sdb_entry_create_dp_vld)
pfu_sdb_entry_type_ld <= pfu_sdb_create_type_ld;
end
//+-------------+
//| timeout_cnt |
//+-------------+
always @(posedge pfu_pfb_entry_all_pf_inst_clk or negedge cpurst_b)
begin
if (!cpurst_b)
pfu_sdb_entry_timeout_cnt[TIMEOUT_BW-1:0] <= {TIMEOUT_BW{1'b0}};
else if(pfu_sdb_entry_create_dp_vld || pfu_sdb_entry_pf_inst_vld)
pfu_sdb_entry_timeout_cnt[TIMEOUT_BW-1:0] <= {TIMEOUT_BW{1'b0}};
else if(pipe_evict_cnt_vld && !pfu_sdb_entry_timeout_cnt_full)
pfu_sdb_entry_timeout_cnt[TIMEOUT_BW-1:0] <= pfu_sdb_entry_timeout_cnt[TIMEOUT_BW-1:0]
+ {{TIMEOUT_BW-1{1'b0}},1'b1};
end
//+-------+
//| ready |
//+-------+
always @(posedge pfu_sdb_entry_clk or negedge cpurst_b)
begin
if (!cpurst_b)
pfu_sdb_entry_ready <= 1'b0;
else if(pfu_sdb_entry_create_dp_vld || pfu_sdb_entry_pop_vld)
pfu_sdb_entry_ready <= 1'b0;
else if(pfu_sdb_entry_ready_set)
pfu_sdb_entry_ready <= 1'b1;
end
//+-------+
//| evict |
//+-------+
always @(posedge pfu_sdb_entry_clk or negedge cpurst_b)
begin
if (!cpurst_b)
pfu_sdb_entry_evict <= 1'b0;
else if(pfu_sdb_entry_create_dp_vld || pfu_sdb_entry_pop_vld || pfu_sdb_entry_evict_clr)
pfu_sdb_entry_evict <= 1'b0;
else if(pfu_sdb_entry_evict_set)
pfu_sdb_entry_evict <= 1'b1;
end
步长检测缓冲区(Stride Detection Buffer,简称SDB)条目管理模块的几个关键寄存器,并说明了它们如何随着时钟和复位信号的变化而更新。
-
entry_vld(条目有效性)寄存器:
- 在
pfu_sdb_entry_clk 的正边沿或cpurst_b 的负边沿时更新。 - 如果复位发生(
cpurst_b 为低),则该寄存器被清零。 - 如果一个条目被弹出(
pfu_sdb_entry_pop_vld 为高),则清零。 - 如果创建了新的SDB条目(
pfu_sdb_entry_create_vld 为高),则设为1。
- 在
-
pc(程序计数器)寄存器:
- 在
pfu_sdb_entry_create_clk 的正边沿或cpurst_b 的负边沿时更新。 - 复位时被清零。
- 如果一个SDB条目的创建数据路径有效(
pfu_sdb_entry_create_dp_vld 为高),则设置为pfu_sdb_create_pc 的值。
- 在
-
pref_type(预取类型)寄存器:
- 在
pfu_sdb_entry_create_clk 的正边沿或cpurst_b 的负边沿时更新。 - 复位时被清零。
- 如果一个SDB条目的创建数据路径有效,则设置为
pfu_sdb_create_type_ld 的值。
- 在
-
timeout_cnt(超时计数器)寄存器:
- 在
pfu_pfb_entry_all_pf_inst_clk 的正边沿或cpurst_b 的负边沿时更新。 - 复位时被清零。
- 如果一个SDB条目的创建数据路径有效或预取指令有效,或者未满时递增。
- 在
-
ready(就绪)寄存器:
- 在
pfu_sdb_entry_clk 的正边沿或cpurst_b 的负边沿时更新。 - 复位时被清零。
- 如果一个SDB条目的创建数据路径有效或弹出时被清零;如果就绪信号设置,则设为1。
- 在
-
evict(逐出)寄存器:
- 在
pfu_sdb_entry_clk 的正边沿或cpurst_b 的负边沿时更新。 - 复位时被清零。
- 如果一个SDB条目的创建数据路径有效、弹出或逐出清除时被清零;如果逐出信号设置,则设为1。
- 在
//==========================================================
// Instance addr cmp
//==========================================================
// &ConnRule(s/^entry_/pfu_sdb_entry_/); @151
// &Instance("ct_lsu_pfu_sdb_cmp","x_ct_lsu_pfu_sdb_entry_cmp"); @152
ct_lsu_pfu_sdb_cmp x_ct_lsu_pfu_sdb_entry_cmp (
.cp0_lsu_icg_en (cp0_lsu_icg_en ),
.cp0_yy_clk_en (cp0_yy_clk_en ),
.cpurst_b (cpurst_b ),
.entry_addr0_act (1'b1 ),
.entry_addr_cmp_info_vld (pfu_sdb_entry_addr_cmp_info_vld ),
.entry_check_stride_success (pfu_sdb_entry_check_stride_success),
.entry_clk (pfu_sdb_entry_clk ),
.entry_create_dp_vld (pfu_sdb_entry_create_dp_vld ),
.entry_create_gateclk_en (pfu_sdb_entry_create_gateclk_en ),
.entry_normal_stride (pfu_sdb_entry_normal_stride ),
.entry_pf_inst_vld (pfu_sdb_entry_pf_inst_vld ),
.entry_stride (pfu_sdb_entry_stride ),
.entry_stride_keep (1'b0 ),
.entry_stride_neg (pfu_sdb_entry_stride_neg ),
.entry_strideh_6to0 (pfu_sdb_entry_strideh_6to0 ),
.entry_vld (pfu_sdb_entry_vld ),
.forever_cpuclk (lsu_special_clk ),
.ld_da_iid (pipe_iid ),
.pad_yy_icg_scan_en (pad_yy_icg_scan_en ),
.pipe_va (pipe_ppfu_va ),
.rtu_yy_xx_commit0 (rtu_yy_xx_commit0 ),
.rtu_yy_xx_commit0_iid (rtu_yy_xx_commit0_iid ),
.rtu_yy_xx_commit1 (rtu_yy_xx_commit1 ),
.rtu_yy_xx_commit1_iid (rtu_yy_xx_commit1_iid ),
.rtu_yy_xx_commit2 (rtu_yy_xx_commit2 ),
.rtu_yy_xx_commit2_iid (rtu_yy_xx_commit2_iid ),
.rtu_yy_xx_flush (rtu_yy_xx_flush )
);
存储单元(Load Store Unit, LSU)的预取单元(Prefetch Unit, PFU)中步长检测缓冲区(Stride Detection Buffer, SDB)条目管理模块内一个子模块的实例化。具体来说,这是一个地址比较单元(
-
模块功能:
ct_lsu_pfu_sdb_cmp 模块用于比较存储或加载地址与SDB条目中的地址,以判断是否存在步长匹配或其他相关条件。
-
输入端口:
- 输入信号包括控制信号(如
cp0_lsu_icg_en ,cp0_yy_clk_en ),复位信号(cpurst_b ),以及与SDB条目相关的各种状态和配置信号(如pfu_sdb_entry_vld ,pfu_sdb_entry_stride 等)。 - 特别地,
entry_addr0_act 和entry_stride_keep 被硬编码为固定值,这可能表示它们在这个上下文中有特定的默认行为或配置。 - 其他输入如
pipe_va 、ld_da_iid 和rtu_yy_xx_commit0 等提供了当前处理中的地址、指令标识符和退役指令的状态。
- 输入信号包括控制信号(如
-
时钟和功率管理:
- 使用
forever_cpuclk (lsu_special_clk )作为时钟源,可能表示这个模块需要持续运行,不受普通CPU时钟节能策略影响。 - 通过
pad_yy_icg_scan_en 输入进行扫描测试使能,用于测试和调试目的。
- 使用
-
退役单元(Retirement Unit)的交互:
- 通过
rtu_yy_xx_commit0 、rtu_yy_xx_commit1 、rtu_yy_xx_commit2 以及相应的iid 输入,这个模块能够响应和处理退役单元发出的指令状态更新。
- 通过
//==========================================================
// pipe info select
//==========================================================
assign pipe_cmp_inst_vld = pfu_sdb_entry_type_ld
? ld_da_pfu_pf_inst_vld
: st_da_pfu_pf_inst_vld;
assign pipe_cmp_pc[PC_LEN-1:0] = pfu_sdb_entry_type_ld
? ld_da_ldfifo_pc[PC_LEN-1:0]
: st_da_pc[PC_LEN-1:0];
assign pipe_evict_cnt_vld = ld_da_pfu_evict_cnt_vld || st_da_pfu_evict_cnt_vld;
assign pipe_iid[6:0] = pfu_sdb_entry_type_ld
? ld_da_iid[6:0]
: st_da_iid[6:0];
assign pipe_ppfu_va[`PA_WIDTH-1:0] = pfu_sdb_entry_type_ld
? ld_da_ppfu_va[`PA_WIDTH-1:0]
: st_da_ppfu_va[`PA_WIDTH-1:0];
//==========================================================
// Caucalate hit pc signal
//==========================================================
assign pfu_sdb_entry_hit_pc = pfu_sdb_entry_vld
&& (pipe_cmp_pc[PC_LEN-1:0]
== pfu_sdb_entry_pc[PC_LEN-1:0]);
assign pfu_sdb_entry_pf_inst_vld = pfu_sdb_entry_hit_pc
&& pipe_cmp_inst_vld;
//for new inst create
assign pfu_sdb_entry_hit_pc_for_new = pfu_sdb_entry_hit_pc
&& !(pfu_sdb_entry_type_ld ^ ld_da_pfu_act_dp_vld);
//==========================================================
// Set/clr ready evict
//==========================================================
assign pfu_sdb_entry_ready_set = pfu_sdb_entry_vld
&& pfu_sdb_entry_addr_cmp_info_vld
&& pfu_sdb_entry_normal_stride;
assign pfu_sdb_entry_timeout_cnt_full = (pfu_sdb_entry_timeout_cnt[TIMEOUT_BW-1:0]
== sdb_timeout_cnt_val[TIMEOUT_BW-1:0]);
assign pfu_sdb_entry_evict_set = pfu_sdb_entry_vld
&& !pfu_sdb_entry_ready
&& pipe_cmp_inst_vld
&& pfu_sdb_entry_timeout_cnt_full
&& !pfu_sdb_entry_hit_pc;
assign pfu_sdb_entry_evict_clr = pfu_sdb_entry_pf_inst_vld;
//==========================================================
// Generate pop signal
//==========================================================
//st pref pop
assign pfu_pop_st_all = pfu_sdb_entry_vld
&& !pfu_sdb_entry_type_ld
&& (!cp0_lsu_l2_st_pref_en || amr_wa_cancel);
//if old 3 entry cross 4k or stride not equal, then pop immediately
assign pfu_sdb_entry_pop_vld = pfu_sdb_entry_ready_grnt
|| !pfu_sdb_entry_normal_stride
&& pfu_sdb_entry_addr_cmp_info_vld
&& pfu_sdb_entry_vld
|| pfu_pop_st_all
|| pfu_pop_all_part_vld;
步长检测缓冲区(Stride Detection Buffer, SDB)的一部分,具体涉及到如何选择管线(pipeline)信息、计算命中程序计数器(PC)信号、设置/清除就绪和逐出信号,以及生成弹出信号。
-
管线信息选择(Pipe Info Select):
pipe_cmp_inst_vld (管线比较指令有效):根据SDB条目的类型(加载或存储)选择相应的预取指令有效信号。pipe_cmp_pc (管线比较程序计数器):同样根据SDB条目的类型选择对应的程序计数器值。pipe_evict_cnt_vld :表示逐出计数器有效,用于跟踪和管理条目的逐出状态。pipe_iid 和pipe_ppfu_va :根据SDB条目类型选择相应的指令标识符和虚拟地址。
-
计算命中PC信号(Calculate Hit PC Signal):
pfu_sdb_entry_hit_pc :当SDB条目有效且管线比较的PC与SDB条目的PC相匹配时,此信号为真。pfu_sdb_entry_pf_inst_vld :在命中PC的基础上,还需要管线比较指令有效。pfu_sdb_entry_hit_pc_for_new :用于新指令创建时的命中检测。
-
设置/清除就绪和逐出(Set/Clear Ready and Evict):
pfu_sdb_entry_ready_set :当SDB条目有效、地址比较信息有效且步长正常时,设置就绪信号。pfu_sdb_entry_timeout_cnt_full :表示超时计数器已满。pfu_sdb_entry_evict_set :在条目有效、未就绪、管线指令有效、超时计数器满,且未命中PC时,设置逐出信号。pfu_sdb_entry_evict_clr :在预取指令有效时,清除逐出信号。
-
生成弹出信号(Generate Pop Signal):
pfu_pop_st_all :用于存储预取弹出。pfu_sdb_entry_pop_vld :结合多个条件生成最终的SDB条目弹出有效信号。
//========================================================== // Generate interface //========================================================== //------------------input----------------------------------- //-----------create signal-------------- assign pfu_sdb_entry_create_vld = pfu_sdb_entry_create_vld_x; assign pfu_sdb_entry_create_dp_vld = pfu_sdb_entry_create_dp_vld_x; assign pfu_sdb_entry_create_gateclk_en = pfu_sdb_entry_create_gateclk_en_x; //---------grnt/done signal------------- assign pfu_sdb_entry_ready_grnt = pfu_sdb_entry_ready_grnt_x; //------------------output---------------------------------- //-----------entry signal--------------- assign pfu_sdb_entry_vld_x = pfu_sdb_entry_vld; assign pfu_sdb_entry_pc_v[PC_LEN-1:0] = pfu_sdb_entry_pc[PC_LEN-1:0]; assign pfu_sdb_entry_ready_x = pfu_sdb_entry_ready; assign pfu_sdb_entry_evict_x = pfu_sdb_entry_evict; assign pfu_sdb_entry_stride_neg_x = pfu_sdb_entry_stride_neg; assign pfu_sdb_entry_stride_v[10:0] = pfu_sdb_entry_stride[10:0]; assign pfu_sdb_entry_strideh_6to0_v[6:0]= pfu_sdb_entry_strideh_6to0[6:0]; assign pfu_sdb_entry_type_ld_x = pfu_sdb_entry_type_ld; //-----------hit signal----------------- assign pfu_sdb_entry_hit_pc_x = pfu_sdb_entry_hit_pc_for_new;
-
输入信号(Input Signals):
pfu_sdb_entry_create_vld :接收外部信号,指示SDB条目创建的有效性。pfu_sdb_entry_create_dp_vld :接收外部信号,指示SDB条目创建的数据路径有效性。pfu_sdb_entry_create_gateclk_en :接收外部信号,控制SDB条目创建时的时钟门控使能。
-
就绪/完成信号(Grant/Done Signals):
pfu_sdb_entry_ready_grnt :从外部接收就绪授权信号,表示SDB条目已准备好进行后续操作。
-
输出信号(Output Signals):
pfu_sdb_entry_vld_x :向外部传递SDB条目的有效性。pfu_sdb_entry_pc_v :向外部传递SDB条目关联的程序计数器值。pfu_sdb_entry_ready_x :向外部表明SDB条目是否已准备就绪。pfu_sdb_entry_evict_x :向外部传递SDB条目的逐出状态。pfu_sdb_entry_stride_neg_x 、pfu_sdb_entry_stride_v 和pfu_sdb_entry_strideh_6to0_v :传递SDB条目的步长相关信息。pfu_sdb_entry_type_ld_x :向外部传递SDB条目的类型(是否为加载类型)。
-
命中信号(Hit Signal):
pfu_sdb_entry_hit_pc_x :向外部传递用于新指令创建时的SDB条目命中程序计数器的状态。