Exemple #1
0
 def exists(self, Sig):
     Full = self.fullname(Sig)
     X = veri.exists(Full)
     return X == '1'
Exemple #2
0
 def peek(self,Sig):
     Full = '%s.%s'%(self.Path,Sig)
     if veri.exists(Full)=='0': return False
     Val = hex(logs.peek(Full))
     return Val
Exemple #3
0
 def exists(self, Val):
     Full = peek('%s%s' % (self.Path, Sig))
     X = veri.exists(Full)
     return Full == '1'
Exemple #4
0
 def exists(self, Sig):
     Full = '%s.%s' % (self.Path, Sig)
     if veri.exists(Full) == '0': return False
     return True
Exemple #5
0
 def exists(self,Sig):
     Full = '%s.%s'%(self.Path,Sig)
     X = veri.exists(Full)
     return X == '1'
Exemple #6
0
    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