1
0
mirror of https://github.com/myhdl/myhdl.git synced 2025-01-24 21:52:56 +08:00
_printExcInfo
This commit is contained in:
jand 2003-11-16 14:46:13 +00:00
parent 11e4998581
commit 8c53f9730c
5 changed files with 25 additions and 57 deletions

View File

@ -33,7 +33,7 @@ from myhdl import delay, Signal, Cosimulation, join
from myhdl import _simulator
from myhdl._simulator import _siglist, _futureEvents
from myhdl._Waiter import _Waiter, _WaiterList
from myhdl._util import StopSimulation, SuspendSimulation
from myhdl._util import StopSimulation, SuspendSimulation, _flatten, _printExcInfo
from myhdl._Error import Error
@ -62,7 +62,8 @@ class Simulation(object):
"""
_simulator._time = 0
self._waiters, self._cosim = _flatten(*args)
arglist = _flatten(*args)
self._waiters, self._cosim = _checkArgs(arglist)
if not self._cosim and _simulator._cosim:
warn("Cosimulation not registered as Simulation argument")
del _futureEvents[:]
@ -184,52 +185,33 @@ class Simulation(object):
except SuspendSimulation:
if not quiet:
printExcInfo()
_printExcInfo()
if tracing:
tracefile.flush()
return 1
except StopSimulation:
if not quiet:
printExcInfo()
_printExcInfo()
self._finalize()
return 0
except:
self._finalize()
raise
def printExcInfo():
kind, value, traceback = sys.exc_info()
msg = str(kind)
msg = msg[msg.rindex('.')+1:]
if str(value):
msg += ": %s" % value
print msg
def _flatten(*args):
def _checkArgs(arglist):
waiters = []
cosim = None
for arg in args:
for arg in arglist:
if type(arg) is GeneratorType:
waiters.append(_Waiter(arg))
elif type(arg) is Cosimulation:
if cosim:
if cosim is not None:
raise MultipleCosimError
cosim = arg
waiters.append(_Waiter(cosim._waiter()))
elif isinstance(arg, (list, tuple)):
for item in arg:
w, c = _flatten(item)
if cosim and c:
raise MultipleCosimError
if c:
cosim = c
waiters.extend(w)
else:
raise ArgTypeError(str(type(arg)))
return waiters, cosim

View File

@ -27,7 +27,7 @@ __date__ = "$Date$"
from types import StringType
from myhdl._util import bin
from myhdl._bin import bin
def enum(*args):

View File

@ -386,8 +386,9 @@ class _AnalyzeGenVisitor(_NotSupportedVisitor, _ToVerilogMixin):
n = target.name
obj = self.getObj(expr)
if obj is None:
self.raiseError(node, "Cannot infer type of %s" % n)
self.raiseError(node, "Cannot infer type or bit width of %s" % n)
self.vardict[n] = obj
# XXX if n is already in vardict
def visitAssName(self, node, *args):
n = node.name

View File

@ -35,6 +35,7 @@ import exceptions
import sys
import inspect
import re
from sets import Set
from types import FunctionType, GeneratorType, ListType, TupleType
import compiler
# hope this will always work ...
@ -42,32 +43,9 @@ from compiler.consts import CO_GENERATOR
from myhdl._Cosimulation import Cosimulation
def downrange(start, stop=0):
""" Return a downward range. """
return range(start-1, stop-1, -1)
def _int2bitstring(num):
if num == 0:
return '0'
if abs(num) == 1:
return '1'
return _int2bitstring(num // 2) + _int2bitstring(num % 2)
def bin(num, width=0):
"""Return a binary string representation.
num -- number to convert
Optional parameter:
width -- specifies the desired string (sign bit padding)
"""
num = long(num)
s = _int2bitstring(num)
pad = '0'
if num < 0:
pad = '1'
return (width - len(s)) * pad + s
class StopSimulation(exceptions.Exception):
""" Basic exception to stop a Simulation """
@ -77,7 +55,7 @@ class SuspendSimulation(exceptions.Exception):
""" Basic exception to suspend a Simulation """
pass
def printExcInfo():
def _printExcInfo():
kind, value = sys.exc_info()[:2]
msg = str(kind)
msg = msg[msg.rindex('.')+1:]
@ -85,7 +63,6 @@ def printExcInfo():
msg += ": %s" % value
print msg
def _isGenSeq(obj):
if type(obj) in (GeneratorType, Cosimulation):
return 1
@ -96,9 +73,18 @@ def _isGenSeq(obj):
return 0
return 1
def _isGenFunc(obj):
if type(obj) is FunctionType:
return bool(obj.func_code.co_flags & CO_GENERATOR)
return bool(0)
def _flatten(*args):
arglist = []
for arg in args:
if isinstance(arg, (list, tuple, Set)):
for item in arg:
arglist.extend(_flatten(item))
else:
arglist.append(arg)
return arglist

View File

@ -23,7 +23,6 @@ __author__ = "Jan Decaluwe <jan@jandecaluwe.com>"
__revision__ = "$Revision$"
__date__ = "$Date$"
from __future__ import generators
import unittest
from unittest import TestCase
import random