ct_lsu_pfu
module ct_lsu_pfu( amr_wa_cancel, bus_arb_pfu_ar_grnt, bus_arb_pfu_ar_ready, cp0_lsu_dcache_en, cp0_lsu_dcache_pref_en, cp0_lsu_icg_en, cp0_lsu_l2_pref_en, cp0_lsu_l2_st_pref_en, cp0_lsu_no_op_req, cp0_lsu_pfu_mmu_dis, cp0_lsu_timeout_cnt, cp0_yy_clk_en, cp0_yy_dcache_pref_en, cp0_yy_priv_mode, cpurst_b, forever_cpuclk, icc_idle, ld_da_iid, ld_da_ldfifo_pc, ld_da_page_sec_ff, ld_da_page_share_ff, ld_da_pfu_act_dp_vld, ld_da_pfu_act_vld, ld_da_pfu_biu_req_hit_idx, ld_da_pfu_evict_cnt_vld, ld_da_pfu_pf_inst_vld, ld_da_pfu_va, ld_da_ppfu_va, ld_da_ppn_ff, lfb_addr_full, lfb_addr_less2, lfb_pfu_biu_req_hit_idx, lfb_pfu_create_id, lfb_pfu_dcache_hit, lfb_pfu_dcache_miss, lfb_pfu_rready_grnt, lm_pfu_biu_req_hit_idx, lsu_mmu_va2, lsu_mmu_va2_vld, lsu_pfu_l1_dist_sel, lsu_pfu_l2_dist_sel, lsu_special_clk, mmu_lsu_pa2, mmu_lsu_pa2_err, mmu_lsu_pa2_vld, mmu_lsu_sec2, mmu_lsu_share2, pad_yy_icg_scan_en, pfu_biu_ar_addr, pfu_biu_ar_bar, pfu_biu_ar_burst, pfu_biu_ar_cache, pfu_biu_ar_domain, pfu_biu_ar_dp_req, pfu_biu_ar_id, pfu_biu_ar_len, pfu_biu_ar_lock, pfu_biu_ar_prot, pfu_biu_ar_req, pfu_biu_ar_req_gateclk_en, pfu_biu_ar_size, pfu_biu_ar_snoop, pfu_biu_ar_user, pfu_biu_req_addr, pfu_icc_ready, pfu_lfb_create_dp_vld, pfu_lfb_create_gateclk_en, pfu_lfb_create_req, pfu_lfb_create_vld, pfu_lfb_id, pfu_part_empty, pfu_pfb_empty, pfu_sdb_create_gateclk_en, pfu_sdb_empty, rb_pfu_biu_req_hit_idx, rb_pfu_nc_no_pending, 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, sq_pfu_pop_synci_inst, st_da_iid, st_da_page_sec_ff, st_da_page_share_ff, st_da_pc, st_da_pfu_act_dp_vld, st_da_pfu_act_vld, st_da_pfu_biu_req_hit_idx, st_da_pfu_evict_cnt_vld, st_da_pfu_pf_inst_vld, st_da_ppfu_va, st_da_ppn_ff, vb_pfu_biu_req_hit_idx, wmb_pfu_biu_req_hit_idx );
这部分代码是
主要特性和功能
- 预取请求处理:处理来自加载和存储单元的预取请求。
- 与 BIU 的交互:生成对外部总线接口(如 BIU)的预取请求。
- 高速缓存控制:根据 CP0 配置管理数据高速缓存的预取行为。
- 页面属性处理:处理来自 MMU(Memory Management Unit)的页面属性信息,如安全性和共享性。
- 请求队列管理:管理和维护内部请求队列,确保有效处理预取请求。
输入输出信号
- 来自其他 LSU 子模块:如
ld_da_iid (从加载单元)、st_da_iid (从存储单元)等。 - 与 MMU 的交互:如
mmu_lsu_pa2 (物理地址)、mmu_lsu_sec2 (安全页属性)等。 - 向 BIU 发送预取请求:如
pfu_biu_ar_addr (预取地址)、pfu_biu_ar_req (预取请求有效)等。 - 页面属性:如
ld_da_page_sec_ff (加载操作的安全属性)、st_da_page_sec_ff (存储操作的安全属性)等。 - 与其他 LSU 子模块协调:如
lfb_pfu_biu_req_hit_idx (与低填充缓冲区协调)、wmb_pfu_biu_req_hit_idx (与写合并缓冲区协调)等。
重要特性
- 预取策略:根据访问模式和页面属性调整预取策略。
- 缓存一致性:确保预取操作不会破坏缓存的一致性。
- 性能优化:通过有效的预取策略提高数据访问的效率。
总结
parameter PMB_ENTRY = 8, SDB_ENTRY = 2, PFB_ENTRY = 8; parameter PC_LEN = 15; parameter BIU_R_L2PREF_ID = 5'd25; //========================================================== // Instance of Gated Cell //========================================================== //--------------------mmu req pop entry--------------------- assign pfu_mmu_pe_clk_en = pfu_get_ppn_vld || pfu_mmu_pe_req; // &Instance("gated_clk_cell", "x_lsu_pfu_mmu_pe_gated_clk"); @45 gated_clk_cell x_lsu_pfu_mmu_pe_gated_clk ( .clk_in (forever_cpuclk ), .clk_out (pfu_mmu_pe_clk ), .external_en (1'b0 ), .global_en (cp0_yy_clk_en ), .local_en (pfu_mmu_pe_clk_en ), .module_en (cp0_lsu_icg_en ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en) ); // &Connect(.clk_in (forever_cpuclk ), @46 // .external_en (1'b0 ), @47 // .global_en (cp0_yy_clk_en ), @48 // .module_en (cp0_lsu_icg_en ), @49 // .local_en (pfu_mmu_pe_clk_en ), @50 // .clk_out (pfu_mmu_pe_clk )); @51 //--------------------biu req pop entry--------------------- assign pfu_biu_pe_clk_en = pfu_biu_pe_req || pfu_biu_req_unmask; // &Instance("gated_clk_cell", "x_lsu_pfu_biu_pe_gated_clk"); @57 gated_clk_cell x_lsu_pfu_biu_pe_gated_clk ( .clk_in (forever_cpuclk ), .clk_out (pfu_biu_pe_clk ), .external_en (1'b0 ), .global_en (cp0_yy_clk_en ), .local_en (pfu_biu_pe_clk_en ), .module_en (cp0_lsu_icg_en ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en) ); // &Connect(.clk_in (forever_cpuclk ), @58 // .external_en (1'b0 ), @59 // .global_en (cp0_yy_clk_en ), @60 // .module_en (cp0_lsu_icg_en ), @61 // .local_en (pfu_biu_pe_clk_en ), @62 // .clk_out (pfu_biu_pe_clk )); @63 //========================================================== // Instance pmb entry //========================================================== // &ConnRule(s/_x$/[0]/); @69 // &ConnRule(s/_v$/_0/); @70 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_0"); @71 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_0 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[0] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[0]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[0] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[0] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[0] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_0 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[0] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[0] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[0] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[0] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) );
主要特性和功能
- 预取管理块(PMB)实例:创建和管理预取管理块(PMB)实体,用于跟踪和管理预取请求。
- 预取请求的处理:处理来自加载和存储单元的预取请求,并生成对 BIU(Bus Interface Unit)的预取请求。
- 时钟门控单元:通过门控时钟单元(
gated_clk_cell )管理预取单元的功耗,优化时钟使用。
输入输出信号
- 来自其他 LSU 子模块的信号:例如
ld_da_pfu_pf_inst_vld (加载单元的预取有效指令标志)和st_da_pfu_pf_inst_vld (存储单元的预取有效指令标志)。 - 与 MMU 的交互:例如
lsu_mmu_va2 (虚拟地址)和mmu_lsu_pa2 (物理地址)等。 - 对 BIU 的预取请求:例如
pfu_biu_ar_addr (预取请求的地址)。
参数定义
- PMB_ENTRY, SDB_ENTRY, PFB_ENTRY:定义预取管理块、流水线缓冲区的条目数量。
- PC_LEN:定义程序计数器的长度。
- BIU_R_L2PREF_ID:定义 BIU 预取请求的标识符。
实例化 PMB Entry
- 实例化多个
ct_lsu_pfu_pmb_entry 组件,每个组件都负责处理一个预取请求。 - 这些组件管理预取请求的生命周期,从创建、发送到完成。
// &ConnRule(s/_x$/[1]/); @73 // &ConnRule(s/_v$/_1/); @74 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_1"); @75 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_1 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[1] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[1]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[1] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[1] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[1] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_1 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[1] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[1] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[1] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[1] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) ); // &ConnRule(s/_x$/[2]/); @77 // &ConnRule(s/_v$/_2/); @78 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_2"); @79 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_2 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[2] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[2]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[2] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[2] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[2] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_2 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[2] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[2] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[2] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[2] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) ); // &ConnRule(s/_x$/[3]/); @81 // &ConnRule(s/_v$/_3/); @82 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_3"); @83 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_3 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[3] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[3]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[3] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[3] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[3] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_3 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[3] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[3] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[3] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[3] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) );
主要特性和功能
- 预取请求处理:每个
ct_lsu_pfu_pmb_entry 实例管理一个预取请求的生命周期,包括创建、发送、完成等状态。 - 与其他模块的交互:实例接收来自加载单元和存储单元的信号,例如
ld_da_pfu_pf_inst_vld 和st_da_pfu_pf_inst_vld ,用于确定是否生成预取请求。
输入输出信号
- 来自加载/存储单元的信号:如
ld_da_ldfifo_pc 和st_da_pc ,分别表示加载和存储指令的程序计数器值。 - 预取请求相关信号:如
pfu_pmb_entry_create_vld_x 表示预取请求的有效性。
参数定义
- PMB_ENTRY, SDB_ENTRY, PFB_ENTRY:定义各类缓冲区的条目数量。
- BIU_R_L2PREF_ID:定义 BIU 预取请求的标识符。
实例化过程
代码中展示了四个
// &ConnRule(s/_x$/[4]/); @85 // &ConnRule(s/_v$/_4/); @86 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_4"); @87 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_4 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[4] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[4]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[4] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[4] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[4] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_4 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[4] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[4] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[4] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[4] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) ); // &ConnRule(s/_x$/[5]/); @89 // &ConnRule(s/_v$/_5/); @90 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_5"); @91 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_5 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[5] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[5]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[5] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[5] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[5] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_5 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[5] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[5] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[5] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[5] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) ); // &ConnRule(s/_x$/[6]/); @93 // &ConnRule(s/_v$/_6/); @94 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_6"); @95 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_6 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[6] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[6]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[6] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[6] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[6] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_6 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[6] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[6] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[6] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[6] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) ); // &ConnRule(s/_x$/[7]/); @97 // &ConnRule(s/_v$/_7/); @98 // &Instance("ct_lsu_pfu_pmb_entry","x_ct_lsu_pfu_pmb_entry_7"); @99 ct_lsu_pfu_pmb_entry x_ct_lsu_pfu_pmb_entry_7 ( .amr_wa_cancel (amr_wa_cancel ), .cp0_lsu_icg_en (cp0_lsu_icg_en ), .cp0_lsu_l2_st_pref_en (cp0_lsu_l2_st_pref_en ), .cp0_yy_clk_en (cp0_yy_clk_en ), .cpurst_b (cpurst_b ), .ld_da_ldfifo_pc (ld_da_ldfifo_pc ), .ld_da_pfu_act_dp_vld (ld_da_pfu_act_dp_vld ), .ld_da_pfu_evict_cnt_vld (ld_da_pfu_evict_cnt_vld ), .ld_da_pfu_pf_inst_vld (ld_da_pfu_pf_inst_vld ), .lsu_special_clk (lsu_special_clk ), .pad_yy_icg_scan_en (pad_yy_icg_scan_en ), .pfu_pmb_entry_create_dp_vld_x (pfu_pmb_entry_create_dp_vld[7] ), .pfu_pmb_entry_create_gateclk_en_x (pfu_pmb_entry_create_gateclk_en[7]), .pfu_pmb_entry_create_vld_x (pfu_pmb_entry_create_vld[7] ), .pfu_pmb_entry_evict_x (pfu_pmb_entry_evict[7] ), .pfu_pmb_entry_hit_pc_x (pfu_pmb_entry_hit_pc[7] ), .pfu_pmb_entry_pc_v (pfu_pmb_entry_pc_7 ), .pfu_pmb_entry_ready_grnt_x (pfu_pmb_entry_ready_grnt[7] ), .pfu_pmb_entry_ready_x (pfu_pmb_entry_ready[7] ), .pfu_pmb_entry_type_ld_x (pfu_pmb_entry_type_ld[7] ), .pfu_pmb_entry_vld_x (pfu_pmb_entry_vld[7] ), .pfu_pop_all_part_vld (pfu_pop_all_part_vld ), .pipe_create_pc (pipe_create_pc ), .pmb_timeout_cnt_val (pmb_timeout_cnt_val ), .st_da_pc (st_da_pc ), .st_da_pfu_evict_cnt_vld (st_da_pfu_evict_cnt_vld ), .st_da_pfu_pf_inst_vld (st_da_pfu_pf_inst_vld ) );
主要特性和功能
- 独立预取请求管理:每个实例独立管理一个预取请求,确保并行处理多个预取操作。
- 与加载/存储单元的交互:实例接收来自加载单元(ld_da)和存储单元(st_da)的信号,用于确定是否生成预取请求。
输入输出信号
- 加载/存储单元的信号:例如
ld_da_ldfifo_pc 和st_da_pc ,分别表示加载和存储指令的程序计数器值。 - 预取请求控制信号:例如
pfu_pmb_entry_create_vld_x ,控制预取请求的生成和管理。
实例化过程
代码显示了从
参数和配置
- PMB_ENTRY, SDB_ENTRY, PFB_ENTRY:定义各类缓冲区的条目数量。
- BIU_R_L2PREF_ID:定义 BIU 预取请求的标识符。