Change the FTQ bundle to new bundle
This commit is contained in:
parent
bfbcc4bef3
commit
95f192c870
|
@ -136,7 +136,7 @@ class BPUTop:
|
|||
|
||||
|
||||
# Get dut output and generate bpu output
|
||||
dut_output = self.dut_out.collect()
|
||||
dut_output = self.dut_out.as_dict()
|
||||
bpu_output = self.generate_bpu_output(dut_output)
|
||||
|
||||
ftb_entry = FTBEntry.from_full_pred_dict(self.s1_pc, dut_output["s1"]["full_pred"])
|
||||
|
|
|
@ -1,51 +1,53 @@
|
|||
from mlvp import Bundle
|
||||
|
||||
class PipelineCtrlBundle(Bundle):
|
||||
signals_list = ["s0_fire_0", "s0_fire_1", "s0_fire_2", "s0_fire_3",
|
||||
"s1_fire_0", "s1_fire_1", "s1_fire_2", "s1_fire_3",
|
||||
"s2_fire_0", "s2_fire_1", "s2_fire_2", "s2_fire_3",
|
||||
"s3_fire_0", "s3_fire_1", "s3_fire_2", "s3_fire_3",
|
||||
"s1_ready", "s2_ready", "s3_ready",
|
||||
"s2_redirect", "s3_redirect"]
|
||||
signals = ["s0_fire_0", "s0_fire_1", "s0_fire_2", "s0_fire_3",
|
||||
"s1_fire_0", "s1_fire_1", "s1_fire_2", "s1_fire_3",
|
||||
"s2_fire_0", "s2_fire_1", "s2_fire_2", "s2_fire_3",
|
||||
"s3_fire_0", "s3_fire_1", "s3_fire_2", "s3_fire_3",
|
||||
"s1_ready", "s2_ready", "s3_ready",
|
||||
"s2_redirect", "s3_redirect"]
|
||||
|
||||
class EnableCtrlBundle(Bundle):
|
||||
signals_list = ["ubtb_enable", "btb_enable", "bim_enable", "tage_enable",
|
||||
"sc_enable", "ras_enable", "loop_enable"]
|
||||
signals = ["ubtb_enable", "btb_enable", "bim_enable", "tage_enable",
|
||||
"sc_enable", "ras_enable", "loop_enable"]
|
||||
|
||||
|
||||
class FTBEntryBundle(Bundle):
|
||||
signals_list = ["brSlots_0_offset", "brSlots_0_lower", "brSlots_0_tarStat", "brSlots_0_valid",
|
||||
"tailSlot_offset", "tailSlot_lower", "tailSlot_tarStat", "tailSlot_sharing", "tailSlot_valid",
|
||||
"pftAddr", "carry", "isCall", "isRet", "isJalr", "last_may_be_rvi_call",
|
||||
"always_taken_0", "always_taken_1"]
|
||||
signals = ["brSlots_0_offset", "brSlots_0_lower", "brSlots_0_tarStat", "brSlots_0_valid",
|
||||
"tailSlot_offset", "tailSlot_lower", "tailSlot_tarStat", "tailSlot_sharing", "tailSlot_valid",
|
||||
"pftAddr", "carry", "isCall", "isRet", "isJalr", "last_may_be_rvi_call",
|
||||
"always_taken_0", "always_taken_1"]
|
||||
|
||||
class UpdateBundle(Bundle):
|
||||
signals_list = ["valid", "bits_pc", "bits_br_taken_mask_0", "bits_br_taken_mask_1"]
|
||||
signals = ["valid", "bits_pc", "bits_br_taken_mask_0", "bits_br_taken_mask_1"]
|
||||
|
||||
sub_bundles = [
|
||||
("ftb_entry", lambda dut: FTBEntryBundle.from_prefix(dut, "bits_ftb_entry_"))
|
||||
]
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.ftb_entry = FTBEntryBundle.from_prefix("bits_ftb_entry_")
|
||||
|
||||
class FullBranchPredirectionBundle(Bundle):
|
||||
signals_list = ["hit", "slot_valids_0", "slot_valids_1", "targets_0", "targets_1",
|
||||
"offsets_0", "offsets_1", "fallThroughAddr", "fallThroughErr",
|
||||
"is_jal", "is_jalr", "is_call", "is_ret", "is_br_sharing",
|
||||
"last_may_be_rvi_call",
|
||||
"br_taken_mask_0", "br_taken_mask_1",
|
||||
"jalr_target"]
|
||||
signals = ["hit", "slot_valids_0", "slot_valids_1", "targets_0", "targets_1",
|
||||
"offsets_0", "offsets_1", "fallThroughAddr", "fallThroughErr",
|
||||
"is_jal", "is_jalr", "is_call", "is_ret", "is_br_sharing",
|
||||
"last_may_be_rvi_call",
|
||||
"br_taken_mask_0", "br_taken_mask_1",
|
||||
"jalr_target"]
|
||||
|
||||
class BranchPredictionBundle(Bundle):
|
||||
signals_list = ["pc_3", "valid", "hasRedirect", "ftq_idx"]
|
||||
sub_bundles = [
|
||||
("full_pred", lambda dut: FullBranchPredirectionBundle.from_regex(dut, r"full_pred_\d_(.*)"))
|
||||
]
|
||||
signals = ["pc_3", "valid", "hasRedirect", "ftq_idx"]
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.full_pred = FullBranchPredirectionBundle.from_regex(r"full_pred_\d_(.*)")
|
||||
|
||||
|
||||
class BranchPredictionResp(Bundle):
|
||||
signals_list = ["last_stage_meta"]
|
||||
sub_bundles = [
|
||||
("s1", lambda dut: BranchPredictionBundle.from_prefix(dut, "s1_")),
|
||||
("s2", lambda dut: BranchPredictionBundle.from_prefix(dut, "s2_")),
|
||||
("s3", lambda dut: BranchPredictionBundle.from_prefix(dut, "s3_")),
|
||||
("last_stage_ftb_entry", lambda dut: FTBEntryBundle.from_prefix(dut, "last_stage_ftb_entry_"))
|
||||
]
|
||||
signals = ["last_stage_meta"]
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.s1 = BranchPredictionBundle.from_prefix("s1_")
|
||||
self.s2 = BranchPredictionBundle.from_prefix("s2_")
|
||||
self.s3 = BranchPredictionBundle.from_prefix("s3_")
|
||||
self.last_stage_ftb_entry = FTBEntryBundle.from_prefix("last_stage_ftb_entry_")
|
||||
|
|
|
@ -24,10 +24,10 @@ def set_imm_mode(uFTB):
|
|||
|
||||
|
||||
async def uftb_test(uFTB):
|
||||
uFTB_update = UpdateBundle.from_prefix(uFTB, "io_update_")
|
||||
uFTB_out = BranchPredictionResp.from_prefix(uFTB, "io_out_")
|
||||
pipeline_ctrl = PipelineCtrlBundle.from_prefix(uFTB, "io_")
|
||||
enable_ctrl = EnableCtrlBundle.from_prefix(uFTB, "io_ctrl_")
|
||||
uFTB_update = UpdateBundle.from_prefix("io_update_").set_name("uFTB_update").bind(uFTB)
|
||||
uFTB_out = BranchPredictionResp.from_prefix("io_out_").set_name("uFTB_out").bind(uFTB)
|
||||
pipeline_ctrl = PipelineCtrlBundle.from_prefix("io_").set_name("pipeline_ctrl").bind(uFTB)
|
||||
enable_ctrl = EnableCtrlBundle.from_prefix("io_ctrl_").set_name("enable_ctrl").bind(uFTB)
|
||||
|
||||
mlvp.create_task(mlvp.start_clock(uFTB))
|
||||
mlvp.create_task(BPUTop(uFTB, uFTB_out, uFTB_update, pipeline_ctrl, enable_ctrl).run())
|
||||
|
@ -74,3 +74,4 @@ def test_uftb(request):
|
|||
pred_stat.summary()
|
||||
set_func_coverage(request, [g1, g2])
|
||||
set_line_coverage(request, "report/uftb_with_ftq_coverage.dat")
|
||||
|
||||
|
|
Loading…
Reference in New Issue