add ittage top dut model drive API

This commit is contained in:
llyyqq 2024-09-07 14:49:15 +08:00
parent 19f59559ea
commit 5cfe70278b
1 changed files with 36 additions and 7 deletions

View File

@ -25,6 +25,7 @@ class ITTAGETop:
self.s3_fire = 0
def _set_update_sig(self, update: ITTAGEInfo):
update.update_valid = 1
index = random.randint(0, 15)
update.ftb_entry_tailslot_offset = index
update.ftb_entry_tailslot_sharing = 0
@ -40,6 +41,24 @@ class ITTAGETop:
# TODO: check if alt should be provided
pass
def _assign_dut_input(self):
self.dut.io_in_bits_s0_pc_3.value = self.pc
self.dut.io_in_bits_folded_hist_3_hist_12_folded_hist = self.folded_hists[0]
self.dut.io_in_bits_folded_hist_3_hist_14_folded_hist = self.folded_hists[1]
self.dut.io_in_bits_folded_hist_3_hist_13_folded_hist = self.folded_hists[2][0]
self.dut.io_in_bits_folded_hist_3_hist_4_folded_hist = self.folded_hists[2][1]
self.dut.io_in_bits_folded_hist_3_hist_6_folded_hist = self.folded_hists[3][0]
self.dut.io_in_bits_folded_hist_3_hist_2_folded_hist = self.folded_hists[3][1]
self.dut.io_in_bits_folded_hist_3_hist_10_folded_hist = self.folded_hists[4][0]
self.dut.io_in_bits_folded_hist_3_hist_3_folded_hist = self.folded_hists[4][1]
self.dut.io_in_bits_resp_in_0_s2_full_pred_3_jalr_target.value = 0xbeefdead
def _gen_dut_output(self) -> ITTAGEInfo:
raise NotImplementedError
def _assign_dut_update(self, update: ITTAGEInfo):
raise NotImplementedError
def run(self):
# TODO: read trace file and generate ITTAGE input info
_input_info = None
@ -57,16 +76,26 @@ class ITTAGETop:
self.ref.set_s2_fire(1)
# Predicdtion output
_out_info = self.ref.cycle(_input_info)
_out_ref_info = self.ref.cycle(_input_info)
# Prediction output in this cycle is traced
# Generate prediction feedback to ITTAGE
if _out_info.is_trace:
self._check_mispred(_out_info)
self._set_update_sig(_out_info)
if _out_ref_info.is_trace:
self._check_mispred(_out_ref_info)
self._set_update_sig(_out_ref_info)
# Raise update transaction
assert(self.ref.update(_out_info))
# drive dut input
self._assign_dut_input()
self.dut.io_s0_fire_3.value = 1
self.dut.io_s1_fire_3.value = 1
self.dut.io_s2_fire_3.value = 1
_out_dut_info = self._gen_dut_output()
# TODO: control update valid in ref and dut
# Prediction feedback connected to dut update
self._assign_dut_update(_out_dut_info)
# Raise ref update transaction
assert(self.ref.update(_out_ref_info))
# TODO: drive dut
# TODO: if current ref model output is traced, compare output of dut and ref
raise NotImplementedError