Add support for user defined enums in field encode property. #29

This commit is contained in:
Hugh Jackson
2022-08-14 18:13:41 +01:00
committed by Alex Mykyta
parent 80f670bf30
commit 0c7e493976
9 changed files with 104 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
from typing import TYPE_CHECKING, Set, Optional
from typing import TYPE_CHECKING, Set, Optional, Type, List
from collections import OrderedDict
from systemrdl.walker import RDLListener, RDLWalker, WalkerAction
@@ -7,6 +7,7 @@ from systemrdl.node import SignalNode
if TYPE_CHECKING:
from systemrdl.node import Node, RegNode, FieldNode
from .exporter import RegblockExporter
from systemrdl.rdltypes import UserEnum
class DesignScanner(RDLListener):
@@ -29,6 +30,9 @@ class DesignScanner(RDLListener):
self.has_buffered_write_regs = False
self.has_buffered_read_regs = False
# Track any referenced enums
self.user_enums = [] # type: List[Type[UserEnum]]
def _get_out_of_hier_field_reset(self) -> None:
current_node = self.exp.top_node.parent
while current_node is not None:
@@ -83,6 +87,10 @@ class DesignScanner(RDLListener):
else:
self.in_hier_signal_paths.add(path)
if prop_name == "encode":
if value not in self.user_enums:
self.user_enums.append(value)
return None
def enter_Reg(self, node: 'RegNode') -> None: