1
0
mirror of https://github.com/myhdl/myhdl.git synced 2025-01-24 21:52:56 +08:00

Better handling of mapping to case in VHDL

use others clause when possible, only convert to case
when it's a full case
This commit is contained in:
Jan Decaluwe 2010-10-08 18:21:45 +02:00
parent 869b7db239
commit db012cc557
2 changed files with 15 additions and 7 deletions

View File

@ -1103,7 +1103,7 @@ class _AnalyzeVisitor(ast.NodeVisitor, _ConversionMixin):
node.isCase = True
node.caseVar = var1
node.caseItem = item1
if (len(choices) == _getNritems(var1.obj)) or (node.else_ is not None):
if (len(choices) == _getNritems(var1.obj)) or node.else_:
node.isFullCase = True

View File

@ -1614,7 +1614,8 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
def visit_If(self, node):
if node.ignore:
return
if node.isCase:
# only map to VHDL case if it's a full case
if node.isFullCase:
self.mapToCase(node)
else:
self.mapToIf(node)
@ -1653,15 +1654,22 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
self.visit(var)
self.write(" is")
self.indent()
for test, suite in node.tests:
for i, (test, suite) in enumerate(node.tests):
self.writeline()
item = test.case[1]
self.write("when ")
if isinstance(item, EnumItemType):
self.write(item._toVHDL())
itemRepr = item._toVHDL()
else:
self.write(self.BitRepr(item, obj))
self.write(" =>")
itemRepr = self.BitRepr(item, obj)
comment = ""
# potentially use default clause for last test
if (i == len(node.tests)-1) and not node.else_:
self.write("when others")
comment = " -- %s" % itemRepr
else:
self.write("when ")
self.write(itemRepr)
self.write(" =>%s" % comment)
self.indent()
self.visit_stmt(suite)
self.dedent()