Added code to determine if a list of signals is used in an alway_comb generator. If so, don't allow the generator to be a SIMPLE_ALWAYS_COMB
1.1 --- a/myhdl/conversion/_analyze.py Sat Jul 25 11:07:24 2009 +0200
1.2 +++ b/myhdl/conversion/_analyze.py Thu Sep 17 08:37:40 2009 -0500
1.3 @@ -393,6 +393,7 @@
1.4 tree.kind = None
1.5 tree.hasYield = 0
1.6 tree.hasRom = False
1.7 + tree.hasLos = False
1.8 tree.hasPrint = False
1.9 self.tree = tree
1.10 self.labelStack = []
1.11 @@ -1197,6 +1198,7 @@
1.12 def getName(self, node):
1.13 n = node.id
1.14 node.obj = None
1.15 +
1.16 if n not in self.refStack:
1.17 if n in self.tree.vardict:
1.18 self.raiseError(node, _error.UnboundLocal, n)
1.19 @@ -1233,6 +1235,8 @@
1.20 if _isTupleOfInts(node.obj):
1.21 node.obj = _Rom(node.obj)
1.22 self.tree.hasRom = True
1.23 + elif _isMem(node.obj):
1.24 + self.tree.hasLos = True
1.25 elif isinstance(node.obj, int):
1.26 node.value = node.obj
1.27 elif n in __builtin__.__dict__:
1.28 @@ -1682,8 +1686,9 @@
1.29 else:
1.30 self.tree.kind = _kind.ALWAYS_COMB
1.31 return
1.32 - # rom access is expanded into a case statement
1.33 - if self.tree.hasRom:
1.34 + # rom access is expanded into a case statement in addition
1.35 + # to any always_comb that contains a list of signals
1.36 + if self.tree.hasRom or self.tree.hasLos:
1.37 self.tree.kind = _kind.ALWAYS_COMB
1.38 self.refStack.pop()
1.39