def exists(self, Sig): Full = self.fullname(Sig) X = veri.exists(Full) return X == '1'
def peek(self,Sig): Full = '%s.%s'%(self.Path,Sig) if veri.exists(Full)=='0': return False Val = hex(logs.peek(Full)) return Val
def exists(self, Val): Full = peek('%s%s' % (self.Path, Sig)) X = veri.exists(Full) return Full == '1'
def exists(self, Sig): Full = '%s.%s' % (self.Path, Sig) if veri.exists(Full) == '0': return False return True
def exists(self,Sig): Full = '%s.%s'%(self.Path,Sig) X = veri.exists(Full) return X == '1'
def run(self): if veri.exists('tb.lenq') == '1': veri.force('tb.lenqq',str(len(self.queue))) veri.force('tb.lenq',str(len(self.seq))) if not self.Enable: return if self.waiting>0: self.waiting -= 1 return hreadyout = self.tr_peek('hreadyout') if self.seq==[]: self.tr_force('hsel',0) self.tr_force('htrans',0) self.tr_force('hburst',0) self.tr_force('hwrite',0) if self.seq!=[]: List = self.seq[0] for (Sig,Val) in List: popIt = True if Sig=='popif': Net,Exp = Val[0],Val[1] if self.peek(Net) != Exp: popIt = False elif Sig=='wait': self.waiting=int(Val) elif Sig=='catch': if hreadyout==1: X = self.tr_peek(Val[0]) if Val[2]!= 'none': if type(Val[2]) == str: Exp = eval(Val[2]) else: Exp = Val[2] logs.log_info('ahb %s read act=0x%x exp=%s addr=0x%x '%(self.Name,X,Exp,Val[1])) logs.log_ensure(X==Exp,'ahb %s read act=0x%x exp=%x addr=0x%x '%(self.Name,X,Exp,Val[1])) else: self.RDATA.append((Val[1],X)) logs.log_info('ahb %s read 0x%x addr=0x%x'%(self.Name,X,Val[1])) elif Sig=='waitUntil': (Net,What) = Val Act = self.tr_peek(Net) if (Act != What): return else: self.tr_force(Sig,Val) if self.tr_peek('hresp')!=0: self.seq = [] print('HRESP %s' % self.tr_peek('hresp')) self.tr_force('hsel',0) self.tr_force('htrans',0) self.tr_force('hburst',0) self.tr_force('hwrite',0) return if popIt: self.seq.pop(0) while self.queue!=[]: What = self.queue.pop(0) if What[0]=='wait': self.seq.append([('wait',What[1])]) return if What[0]=='burst': if What[2][0]=='w': HW=1 else: HW = 0 Burst = burstcode(What[1]) self.seq.append([('hburst',Burst),('haddr',What[3]),('hwdata',0),('hwrite',HW),('htrans',NONSEQ),('hsize',self.HSIZE),('hsel',1)]) Addrs = [] if 'wrap' not in What[1]: for X in range(burstlen(What[1])): Addr = What[3]+4*X Addrs.append(Addr) elif What[1] == 'wrap4': Low = What[3] & 0xfffffff0 High = (Low + 0x10)-4 for X in range(burstlen(What[1])): Addr = What[3]+4*X if Addr<=High: Addrs.append(Addr) else: Addrs.append(Addr-0x10) elif What[1] == 'wrap8': Low = What[3] & 0xffffffe0 High = (Low + 0x20)-4 for X in range(burstlen(What[1])): Addr = What[3]+4*X if Addr<=High: Addrs.append(Addr) else: Addrs.append(Addr-0x20) elif What[1] == 'wrap16': Low = What[3] & 0xffffffc0 High = (Low + 0x40) - 4 for X in range(burstlen(What[1])): Addr = What[3]+4*X if Addr<=High: Addrs.append(Addr) else: Addrs.append(Addr-0x40) # logs.log_info('WRAP16 addr=%x run=%x low=%x high=%x %s' % (What[3],Addr,Low,High,list(map(hex,Addrs)))) # print('ADDRS',What[0],What[1],burstlen(What[1]),Addrs) INCR = 1 for X in range(burstlen(What[1])-1): Addr = Addrs[X+1] Eff = Addrs[X] if self.busyOk and (self.busyOk == X) and(X>0): if HW == 1: self.seq.append([('hburst',Burst),('haddr',Addr),('hwdata',self.hwdata()),('hwrite',HW),('htrans',BUSY),('hsize',self.HSIZE),('hsel',1)]) else: self.seq.append([('hburst',Burst),('haddr',Addr),('hwdata',0),('hwrite',HW),('htrans',BUSY),('hsize',self.HSIZE),('hsel',1)]) INCR = 0 if HW==1: self.seq.append([('hburst',Burst),('haddr',Addr),('hwdata',self.hwdata(INCR)),('hwrite',HW),('htrans',SEQ),('hsize',self.HSIZE),('hsel',1)]) else: self.seq.append([('hburst',Burst),('haddr',Addr),('hwdata',0),('hwrite',HW),('htrans',SEQ),('catch',('hrdata',Eff,'none')),('hsize',self.HSIZE),('hsel',1)]) INCR = 1 Eff = Addrs[X+1] if HW==1: HWDATA = self.hwdata(INCR) self.seq.append([('hburst',0),('haddr',0),('hwdata',HWDATA),('hwrite',0),('htrans',IDLE),('hsize',0),('hsel',0)]) else: self.seq.append([('hburst',0),('haddr',0),('hwdata',0),('hwrite',0),('htrans',IDLE),('catch',('hrdata',Eff,'none')),('hsize',0),('hsel',0)]) return if What[0]=='write': self.seq.append([('haddr',What[1]),('hwdata',0),('hwrite',1),('htrans',2),('hsize',self.HSIZE),('hsel',1),('popif',('hready',1))]) self.seq.append([('haddr',0),('hwdata',What[2]),('hwrite',0),('htrans',0),('hsize',0),('hsel',0)]) self.seq.append([('haddr',0),('hwrite',0),('htrans',0),('hsel',0)]) return if What[0]=='read': self.seq.append([('haddr',What[1]),('hwrite',0),('htrans',2),('hsel',1),('hsize',self.HSIZE),('popif',('hready',1))]) self.seq.append([('haddr',0),('hwrite',0),('htrans',0),('catch',('hrdata',What[1],What[2])),('hsel',self.HSEL)]) return