anchor.diff:      endrule
   
       // train next addr pred
  -    (* fire_when_enabled, no_implicit_conditions *)
  -    rule doTrainNAP(isValid(napTrainByDec.wget) || isValid(napTrainByExe.wget));
  +    (* fire_when_enabled*)
  +    rule doTrainNAP( isValid(napTrainByExe.wget));
           // give priority to train data from exe
  -        TrainNAP train = fromMaybe(validValue(napTrainByDec.wget), napTrainByExe.wget);
  +        TrainNAP train = fromMaybe(napTrainByDec.first(), napTrainByExe.wget);
  +        napTrainByDec.deq();
           nextAddrPred.update(train.pc, train.nextPc, train.nextPc != train.pc + 4);
       endrule
   
  
positive.code:                                 dp_train = pred_res.train;
                              end
                              Maybe#(Addr) nextPc = decodeBrPred(in.pc, dInst, pred_taken);
  
                              // return address stack
                              if (dInst.iType == J && isValid(regs.dst)) begin
                                  // function call -- push return address to stack
                                  ras.pushAddress[i](in.pc + 4);
                              end
                              else if (dInst.iType == Jr) begin
                                  let new_ppc = ras.firstAddress[i];
                                  ras.popAddress[i];
                                  nextPc = tagged Valid new_ppc;
                              end
  
                              if(verbose) begin
  
negative.code:             end
              decode_epoch <= decode_epoch_local;
              // send training data for next addr pred
              if (trainNAP matches tagged Valid .x) begin
                  napTrainByDec.enq(x);
              end
  `ifdef PERF_COUNT
              // performance counter: check whether redirect happens
  