Beispiel #1
0
def negedge():
    for Mon in Monitors:
        Mon.run()
    if veri.stime() > 5:
        veri.force("rst_n", '1')
    if veri.stime() > 1000000:
        veri.finish()
        sys.exit()
Beispiel #2
0
 def print_fail(self, What, Sig, Char, Now):
     Str = '%s %s exp=%s act=%s vec=%d line=%d cycle=%d time=%s\n' % (
         What, Sig, str(Char), str(Now), self.emitting, self.activeline,
         self.cycle, str(veri.stime()))
     logs.log_wrong(Str)
     self.bads += 1
     veri.force('tb.bads', str(self.bads))
Beispiel #3
0
def get_cycles():
    global noCycles, Cycles
    if Cycles > 0:
        return Cycles
    if noCycles:
        if veri: return veri.stime()
        return 0
    else:
        Now = peek('%scycles' % TB)
        if (Now < 0) and ((not veri) or (veri.stime() > 10)):
            noCycles = True
            log_info('NO CYCLES')
    if (finishCycles > 0) and (finishCycles <= Now):
        if veri: veri.finish()
        sys.exit()

    return Now
Beispiel #4
0
def use_command_wrds(self, wrds):
    if wrds == []: return
    if (wrds[0] in ['quit', 'exit']):
        veri.finish()
    elif wrds[0] in ['slow', 'sleep']:
        if len(wrds) == 1:
            veri.force('tb.run_slowly', '1')
        elif wrds[1] in ['True', '1']:
            veri.force('tb.run_slowly', '1')
        elif wrds[1] in ['False', '0']:
            veri.force('tb.run_slowly', '0')
        else:
            print 'command "slow" or "sleep" accept one parameter: True or False or 1 or 0"'
    elif wrds[0] == 'os':
        Cmd = string.join(wrds[1:], ' ')
        os.system(Cmd)
    elif wrds[0] == 'time':
        print 'time', veri.stime()
    elif wrds[0] == 'eval':
        Cmd = string.join(wrds[1:], ' ')
        print eval(Cmd)
    elif wrds[0] == 'exec':
        Cmd = string.join(wrds[1:], ' ')
        exec(Cmd)
    elif wrds[0] in ['file', 'source']:
        try:
            Fin = open(wrds[1])
        except:
            print 'failed to open %s' % wrds[1]
            return
        lines = Fin.readlines()
        Fin.close()
        for line in lines:
            wrds0 = string.split(line)
            print '>>', wrds0
            use_command_wrds(self, wrds0)
    elif (wrds[0] == 'clear'):
        apb.wrqueue = []
    elif (wrds[0] == 'history'):
        for ind, X in enumerate(CommandsHistory):
            print ind, X
    elif (wrds[0] == 'reset'):
        veri.force('tb.rst_n', '0')
        apb.waiting = 20
    elif (wrds[0] == 'listing'):
        veri.listing('tb', '100', 'deep.list')
    elif (wrds[0] == 'force'):
        veri.force(wrds[1], wrds[2])
    elif (wrds[0] == 'peek'):
        Val = veri.peek(wrds[1])
        logs.log_info('peeking %s  0x%x    %s' %
                      (wrds[1], logs.intx(Val), Val))
    elif (wrds[0] == 'apb'):
        Addr = eval(wrds[1])
        Data = eval(wrds[2])
        apb.wrqueue.append((Addr, Data))
    else:
        print 'y ', HELP
Beispiel #5
0
 def default(self, Txt):
     if Txt == 'EOF':
         sys.exit()
     wrds = string.split(Txt)
     if len(wrds) > 0:
         Queue.append(Txt)
         executeCommands()
         Intr.prompt = '@%d ?:' % veri.stime()
         CommandsHistory.append(Txt)
     return False
Beispiel #6
0
def status(Text="status"):
    if veri:
        Now = '@' + str(veri.stime()) + ':'
    else:
        Now = ''
    if (Wrongs == 0) and (Errors == 0) and (Warnings == 0):
        Text = '@%d:  %s  corrects=%d  on all good %s' % (get_cycles(), Now,
                                                          Corrects, Text)
    else:
        Text = '@%d: %s: wrongs=%d vs corrects=%d errors=%d warnings=%d: on %s' % (
            get_cycles(), Now, Wrongs, Corrects, Errors, Warnings, Text)
    log_info(Text)
Beispiel #7
0
def get_cycles():
    global noCycles
    if noCycles:
        return veri.stime()
    else:
        Now = peek('%s.cycles' % TB)
        if Now < 0: noCycles = True
    if (finishCycles > 0) and (finishCycles <= Now):
        veri.finish()
        sys.exit()

    return Now
Beispiel #8
0
def finish_now(Text='.'):
    global Flog
    if (not Flog):
        Flog = open(PYMONLOG, 'w')
    Now = veri.stime()
    if (Wrongs == 0) and (Errors == 0) and (Warnings == 0):
        Text = '@%d: @%d: corrects=%d FINISHING on all good %s' % (
            get_cycles(), Now, Corrects, Text)
    else:
        Text = '@%d: @%d: wrongs=%d vs corrects=%d errors=%d warnings=%d: FINISHING on %s' % (
            get_cycles(), Now, Wrongs, Corrects, Errors, Warnings, Text)
    print(Text)
    Flog.write(Text + '\n')
    veri.finish()
Beispiel #9
0
def negedge():
    Time = veri.stime()
    awvalid = peeklocal('awvalid')
    awready = peeklocal('awready')
    if (awvalid == 1) and (awready == 1):
        veri.force('aaa', str(Time & 0x1f))
        veri.force('bbb', str(~Time & 0x1f))
        awaddr = peeklocal('awaddr')
        awsize = peeklocal('awsize')
        awlen = peeklocal('awlen')
        Totals['aw'] += (awlen + 1) * (1 << awsize)
        logs.log_info('#%d aw addr=%x size=%s len=%s totaw=%d ' %
                      (Time, awaddr, awsize, awlen, Totals['aw']))

    if (peeklocal('wvalid') == 1) and (peeklocal('wready') == 1):
        wstrb = peeklocal('wstrb')
        wdata = peeklocal('wdata')
        wlast = peeklocal('wlast')
        wlast = peeklocal('wlast')
        bytes = logs.countOnes(wstrb)
        Totals['dw'] += bytes
        logs.log_info('#%d wd data=%x wstrb=%x  last=%d totdw=%d' %
                      (Time, wdata, wstrb, wlast, Totals['dw']))

    arvalid = peeklocal('arvalid')
    arready = peeklocal('arready')
    if (arvalid == 1) and (arready == 1):
        araddr = peeklocal('araddr')
        arsize = peeklocal('arsize')
        arlen = peeklocal('arlen')
        arid = peeklocal('arid')
        Keep['arid'] = arsize
        Totals['ar'] += (arlen + 1) * (1 << awsize)
        logs.log_info('#%d ar addr=%x size=%s len=%s totar=%d' %
                      (Time, araddr, arsize, arlen, Totals['ar']))

    if (peeklocal('rvalid') == 1) and (peeklocal('rready') == 1):
        rdata = peeklocal('rdata')
        rlast = peeklocal('rlast')
        rid = peeklocal('rid')
        Totals['rd'] += (1 << Keep[rid])
        logs.log_info('#%d rd data=%x rlast=%x totrd=%d' %
                      (Time, rdata, rlast, Totals['rd']))

    monitorCommands(Time)
Beispiel #10
0
 def emptyline(self):
     Queue.append('.')
     executeCommands()
     Intr.prompt = '@%d ?:' % veri.stime()
     CommandsHistory.append('.')
     return False
Beispiel #11
0
def stime():
    if veri: return veri.stime()
    return 0
Beispiel #12
0
 def run(self):
     if self.lastRunTime>0:
         self.clockRunDuration =  veri.stime() - self.lastRunTime 
     self.lastRunTime  = veri.stime()
 
 
     if self.waiting:
         self.waiting -= 1
         if (self.waiting>0) and ((self.waiting % 100)==0):
             logs.log_info('waiting ilia %d'%self.waiting)
         return
 
 
     if self.waitUntilOr!=[]:
         for (Sig,Val) in self.waitUntilOr:
             Act = self.peek(Sig)
             if Act == logs.intxx(Val):
                 self.waitUntilOr=[]
                 logs.log_info('waitUntilOr done')
                 return
         self.waitNum += 1
         if (self.waitNum % 1000)==0:
                 logs.log_info('waitUntilOr %d  %s'%(self.waitNum,self.waitUntilOr))
         return
             
     if self.waitUntilAnd!=[]:
         for (Sig,Val) in self.waitUntilAnd:
             Act = self.peek(Sig)
             if Act != logs.intxx(Val):
                 self.waitNum += 1
                 if (self.waitNum % 1000)==0:
                         logs.log_info('waitUntilAnd %d  %s'%(self.waitNum,self.waitUntilAnd))
                 return
 
         self.waitUntilAnd=[]
         logs.log_info('waitUntilAnd done')
         return
             
     if self.waitVar:
         Exp = logs.getVar(self.waitVar)
         if (Exp == self.waitVal)or(str(Exp)==str(self.waitVal)):
             self.waitVar=False
             self.waitNum = 0
             logs.log_info('waitVar %s ended exp=%s '%(self.waitVar,Exp))
         else:
             self.waitNum += 1
             if (self.waitNum % 1000)==0:
                 logs.log_info('waitVar %s failed %d times over %s '%(self.waitVar,self.waitNum,self.waitVal))
             if (self.waitNum>self.waitLimit)and(self.waitLimit>0):
                 logs.log_error('waitVar %s reached limit (%d)'%(self.waitVar,self.waitLimit))
                 self.waitVar=False
                 self.waitNum = 0
         return
 
     if self.waitSig:
         Act = self.peek(self.waitSig)
         if self.waitVal[0] in '0123456789':
             Expr = '%s == %s'%(Act,self.waitVal)
         else:
             Expr = '%s %s'%(Act,self.waitVal)
             
         Cond = eval(Expr,self.Vars)
         if Cond:
             self.waitSig=False
             self.waitNum = 0
             logs.log_info('waitUntil %s ended act=%s exp=%s '%(self.waitSig,Act,self.waitVal))
         else:
             self.waitNum += 1
             if (self.waitNum % 1000)==0:
                 logs.log_info('waitUntil %s failed %d times act=%s exp=%s %s'%(self.waitSig,self.waitNum,Act,self.waitVal,Act==self.waitVal))
             if (self.waitNum>self.waitLimit)and(self.waitLimit>0):
                 logs.log_error('waitUntil %s reached limit (%d)'%(self.waitSig,self.waitLimit))
                 self.waitSig=False
                 self.waitNum = 0
 
         return
 
 
 
     if self.Queue==[]: logs.finishing()
 
 
         
 
 
     Cmd = self.Queue.pop(0)
     wrds = string.split(Cmd)
     if wrds==[]: return
     if wrds[0][0] in ['/','#']: return
 
     logs.log_info('cmd %s'%Cmd)
 
     if wrds[0]=='waitNanoSec':
         Dly = eval(wrds[1],self.Vars)
         Many = int(Dly*1000/self.clockRunDuration)
         self.waiting = Many
         logs.log_info('waitNanoSec dly=%d many=%d dura=%d'%(Dly,Many,self.clockRunDuration))
         return
 
     if wrds[0]=='waitMicroSec':
         Dly = eval(wrds[1],self.Vars)
         Many = int(Dly*1000000/self.clockRunDuration)
         self.waiting = Many
         logs.log_info('waitMicroSec dly=%d many=%d dura=%d'%(Dly,Many,self.clockRunDuration))
         return
 
     if wrds[0]=='wait':
         self.waiting = int(wrds[1])
         return
     if wrds[0]=='comment':
         Txt = string.join(wrds[1:],' ')
         forceComment(Txt)
         return
 
     if wrds[0]=='finish':
         logs.finishing()
         return
 
     if wrds[0]=='include':
         Fname = wrds[1]
         if not os.path.exists(Fname):
             logs.log_info('include file "%s" was not found'%Fname)
             return
         lines =  open(Fname).readlines()
         self.Queue = lines + db.Queue
         return
 
 
     if wrds[0]=='compareNet':
         Act = self.peek(wrds[1])
         self.Vars['table']=db.Table
         Exp = eval(wrds[2],self.Vars)
 
         if Act==Exp:
             logs.log_correct('compareNet %s got 0x%x'%(wrds[1],Exp))
         else:
             logs.log_wrong('compareNet %s exp=0x%x act=0x%x'%(wrds[1],Exp,Act))
         return
 
     if wrds[0]=='force':
         where= wrds[1]
         if (len(where)>3)and(where[:3]=='tb.'):
             veri.force(wrds[1],str(eval(wrds[2],self.Vars)))
         else:
             veri.force('tb.%s'%wrds[1],str(eval(wrds[2],self.Vars)))
         return
     if wrds[0]=='hard_force':
         where= wrds[1]
         if (len(where)>3)and(where[:3]=='tb.'):
             veri.hard_force(wrds[1],str(eval(wrds[2],self.Vars)))
         else:
             veri.hard_force('tb.%s'%wrds[1],str(eval(wrds[2],self.Vars)))
         return
 
 
     if wrds[0]=='waitVar':
         self.waitVar = wrds[1]
         self.waitVal = wrds[2]
         self.waitNum = 0
         if len(wrds)>3:
             self.waitLimit = int(wrds[3])
         else:
             self.waitLimit=0
         return
 
     if wrds[0]=='waitUntil':
         self.waitSig = wrds[1]
         self.waitVal = wrds[2]
         self.waitNum = 0
         if len(wrds)>3:
             self.waitLimit = int(wrds[3])
         else:
             self.waitLimit=0
         return
 
     if wrds[0]=='waitUntilOr':
         self.waitUntilOr=[]
         self.waitNum = 0
         ind=1
         while ind<len(wrds):
             self.waitUntilOr.append((wrds[ind],wrds[ind+1]))
             ind += 2
         return
     if wrds[0]=='waitUntilAnd':
         self.waitUntilAnd=[]
         self.waitNum = 0
         ind=1
         while ind<len(wrds):
             self.waitUntilAnd.append((wrds[ind],wrds[ind+1]))
             ind += 2
         return
 
     logs.log_error('bad command "%s"'%Cmd)
     return
Beispiel #13
0
 def do_assert(self, Txt):
     Queue.append('assert %s' % Txt)
     executeCommands()
     Intr.prompt = '@%d ?:' % veri.stime()
     CommandsHistory.append('assert %s' % Txt)
Beispiel #14
0
 def do_status(self, Txt):
     Queue.append('status')
     executeCommands()
     Intr.prompt = '@%d ?:' % veri.stime()
     CommandsHistory.append('status %s' % Txt)
Beispiel #15
0
 def do_include(self, Txt):
     Queue.append('include %s' % Txt)
     executeCommands()
     Intr.prompt = '@%d ?:' % veri.stime()
     CommandsHistory.append('include %s' % Txt)
Beispiel #16
0
 def do_dma_ram(self, Txt):
     Queue.append('dma_ram %s' % Txt)
     executeCommands()
     Intr.prompt = '@%d ?:' % veri.stime()
     CommandsHistory.append('dma_ram  %s' % Txt)
Beispiel #17
0
 def do_ram_force(self, Txt):
     Queue.append('ram_force %s' % Txt)
     executeCommands()
     Intr.prompt = '@%d ?:' % veri.stime()
     CommandsHistory.append('ram_force %s' % Txt)