44from attrdict import AttrDict
55
66class PipelineIbex (Pipeline ):
7- event_name = {"IF" : 0 , "IDEX" : 1 , "WB" : 2 , "DONE" : 3 }
7+ event_name = {"IF" : 0 , "IDEX" : 1 , "WB" : 2 , "DONE" : 3 , "BRANCH_PREDICT" : 4 , "BRANCH_UPDATE" : 5 }
88
99 def __init__ (self , tracepath ):
1010 log = {}
@@ -31,7 +31,7 @@ def __init__(self, tracepath):
3131 if "insn_type" in keys :
3232 insn_type = str (event ["insn_type" ])
3333 log [event ["insn_id" ]] = AttrDict (
34- {"pc" : pc , "insn_type" : insn_type , "insn" : insn , "mode" : riscv_priv_modes [event ["mode" ]], "IF" : timestamp , "IDEX" : None , "WB" : None , "end" : None })
34+ {"pc" : pc , "insn_type" : insn_type , "insn" : insn , "mode" : riscv_priv_modes [event ["mode" ]], "IF" : timestamp , "IDEX" : None , "WB" : None , "end" : None , "BP" : None })
3535
3636 elif id_str == "IDEX" :
3737 # single cycle idex in the standard pipeline
@@ -43,6 +43,10 @@ def __init__(self, tracepath):
4343 elif id_str == "DONE" :
4444 # idex starts in the pipeline with
4545 log [event ["insn_id" ]]["end" ] = event ["timestamp" ]
46+ elif id_str == "BRANCH_PREDICT" :
47+ log [event ["insn_id" ]]["BP" ] = AttrDict (taken = event ["taken" ], mispredict = False )
48+ elif id_str == "BRANCH_UPDATE" :
49+ log [event ["insn_id" ]]["BP" ].mispredict = (event ["mispredict" ] != 0 )
4650
4751 self .log = log
4852
0 commit comments