openc910源码LSU系列之<95>

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
);
  1. 控制和配置输入:

    • 包括 amr_wa_cancelcp0_lsu_icg_encp0_lsu_l2_st_pref_encp0_yy_clk_encpurst_blsu_special_clkpad_yy_icg_scan_en。这些信号可能用于模块的总体控制,包括时钟门控、功率管理、复位和配置设置。
  2. 来自加载和存储单元的数据和状态输入:

    • ld_da_iidld_da_ldfifo_pcld_da_pfu_act_dp_vldld_da_pfu_evict_cnt_vldld_da_pfu_pf_inst_vldld_da_ppfu_vast_da_iidst_da_pcst_da_pfu_evict_cnt_vldst_da_pfu_pf_inst_vldst_da_ppfu_va 等输入对于预取操作至关重要。它们提供有关加载和存储指令的信息,包括指令标识符、程序计数器、有效性标志和虚拟地址。
  3. 步长检测和预取请求管理:

    • pfu_pop_all_part_vldpfu_sdb_create_pcpfu_sdb_create_type_ldpfu_sdb_entry_stride_neg_xpfu_sdb_entry_stride_vpfu_sdb_entry_strideh_6to0_v 等端口表明该模块参与管理基于步长的预取请求。这些端口可能用于跟踪和确定步长模式,并决定预取操作。
  4. SDB条目管理:

    • pfu_sdb_entry_create_dp_vld_xpfu_sdb_entry_create_gateclk_en_xpfu_sdb_entry_create_vld_xpfu_sdb_entry_evict_xpfu_sdb_entry_hit_pc_xpfu_sdb_entry_pc_vpfu_sdb_entry_ready_grnt_xpfu_sdb_entry_ready_xpfu_sdb_entry_type_ld_xpfu_sdb_entry_vld_x 等信号表明模块负责处理SDB条目的生命周期。这包括创建、验证以及管理条目的就绪和逐出。
  5. 与退役单元的交互:

    • rtu_yy_xx_commit0rtu_yy_xx_commit0_iidrtu_yy_xx_commit1rtu_yy_xx_commit1_iidrtu_yy_xx_commit2rtu_yy_xx_commit2_iidrtu_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              )
);

  1. 定义参数(Parameter Definition):

    • TIMEOUT_BWPC_LEN 是定义的参数,分别表示超时带宽和程序计数器长度。
  2. 时钟门控逻辑(Clock Gating Logic):

    • pfu_sdb_entry_clk_en:控制SDB条目的基本时钟门控使能。如果SDB条目有效或创建时钟门控使能,则此信号为真。
    • pfu_sdb_entry_create_clk_en:控制创建SDB条目时的时钟门控使能。
  3. 时钟门控单元实例化(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)。
  4. 预取指令的时钟门控逻辑(Prefetch Instruction Clock Gating Logic):

    • pfu_pfb_entry_all_pf_inst_clk_en:这个信号用于控制处理所有预取指令的时钟门控。当SDB条目有效且存在加载或存储的预取指令时,或者创建时钟门控使能时,该信号为真。
  5. 功能和重要性:

    • 这些时钟门控逻辑有助于降低整个模块的功耗,特别是在不活跃时通过禁用不必要的时钟来减少能源消耗。
    • 它们还为不同操作提供了专用的时钟,从而优化了性能并减少了不必要的时钟切换,提高了整体效率。
//==========================================================
//                 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)条目管理模块的几个关键寄存器,并说明了它们如何随着时钟和复位信号的变化而更新。

  1. entry_vld(条目有效性)寄存器:

    • pfu_sdb_entry_clk 的正边沿或 cpurst_b 的负边沿时更新。
    • 如果复位发生(cpurst_b 为低),则该寄存器被清零。
    • 如果一个条目被弹出(pfu_sdb_entry_pop_vld 为高),则清零。
    • 如果创建了新的SDB条目(pfu_sdb_entry_create_vld 为高),则设为1。
  2. pc(程序计数器)寄存器:

    • pfu_sdb_entry_create_clk 的正边沿或 cpurst_b 的负边沿时更新。
    • 复位时被清零。
    • 如果一个SDB条目的创建数据路径有效(pfu_sdb_entry_create_dp_vld 为高),则设置为 pfu_sdb_create_pc 的值。
  3. pref_type(预取类型)寄存器:

    • pfu_sdb_entry_create_clk 的正边沿或 cpurst_b 的负边沿时更新。
    • 复位时被清零。
    • 如果一个SDB条目的创建数据路径有效,则设置为 pfu_sdb_create_type_ld 的值。
  4. timeout_cnt(超时计数器)寄存器:

    • pfu_pfb_entry_all_pf_inst_clk 的正边沿或 cpurst_b 的负边沿时更新。
    • 复位时被清零。
    • 如果一个SDB条目的创建数据路径有效或预取指令有效,或者未满时递增。
  5. ready(就绪)寄存器:

    • pfu_sdb_entry_clk 的正边沿或 cpurst_b 的负边沿时更新。
    • 复位时被清零。
    • 如果一个SDB条目的创建数据路径有效或弹出时被清零;如果就绪信号设置,则设为1。
  6. 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)的实例化,名为 x_ct_lsu_pfu_sdb_entry_cmp

  1. 模块功能:

    • ct_lsu_pfu_sdb_cmp 模块用于比较存储或加载地址与SDB条目中的地址,以判断是否存在步长匹配或其他相关条件。
  2. 输入端口:

    • 输入信号包括控制信号(如 cp0_lsu_icg_en, cp0_yy_clk_en),复位信号(cpurst_b),以及与SDB条目相关的各种状态和配置信号(如 pfu_sdb_entry_vld, pfu_sdb_entry_stride 等)。
    • 特别地,entry_addr0_actentry_stride_keep 被硬编码为固定值,这可能表示它们在这个上下文中有特定的默认行为或配置。
    • 其他输入如 pipe_vald_da_iidrtu_yy_xx_commit0 等提供了当前处理中的地址、指令标识符和退役指令的状态。
  3. 时钟和功率管理:

    • 使用 forever_cpuclklsu_special_clk)作为时钟源,可能表示这个模块需要持续运行,不受普通CPU时钟节能策略影响。
    • 通过 pad_yy_icg_scan_en 输入进行扫描测试使能,用于测试和调试目的。
  4. 退役单元(Retirement Unit)的交互:

    • 通过 rtu_yy_xx_commit0rtu_yy_xx_commit1rtu_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)信号、设置/清除就绪和逐出信号,以及生成弹出信号。

  1. 管线信息选择(Pipe Info Select):

    • pipe_cmp_inst_vld(管线比较指令有效):根据SDB条目的类型(加载或存储)选择相应的预取指令有效信号。
    • pipe_cmp_pc(管线比较程序计数器):同样根据SDB条目的类型选择对应的程序计数器值。
    • pipe_evict_cnt_vld:表示逐出计数器有效,用于跟踪和管理条目的逐出状态。
    • pipe_iidpipe_ppfu_va:根据SDB条目类型选择相应的指令标识符和虚拟地址。
  2. 计算命中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:用于新指令创建时的命中检测。
  3. 设置/清除就绪和逐出(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:在预取指令有效时,清除逐出信号。
  4. 生成弹出信号(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;
  1. 输入信号(Input Signals):

    • pfu_sdb_entry_create_vld:接收外部信号,指示SDB条目创建的有效性。
    • pfu_sdb_entry_create_dp_vld:接收外部信号,指示SDB条目创建的数据路径有效性。
    • pfu_sdb_entry_create_gateclk_en:接收外部信号,控制SDB条目创建时的时钟门控使能。
  2. 就绪/完成信号(Grant/Done Signals):

    • pfu_sdb_entry_ready_grnt:从外部接收就绪授权信号,表示SDB条目已准备好进行后续操作。
  3. 输出信号(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_xpfu_sdb_entry_stride_vpfu_sdb_entry_strideh_6to0_v:传递SDB条目的步长相关信息。
    • pfu_sdb_entry_type_ld_x:向外部传递SDB条目的类型(是否为加载类型)。
  4. 命中信号(Hit Signal):

    • pfu_sdb_entry_hit_pc_x:向外部传递用于新指令创建时的SDB条目命中程序计数器的状态。