From 0b16ac19879a49acfe777a922dff182e18574442 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sun, 27 Dec 2020 23:27:35 +0100 Subject: Added first implementation of a document object model (DOM). --- pyGHDL/dom/DesignUnit.py | 100 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 pyGHDL/dom/DesignUnit.py (limited to 'pyGHDL/dom/DesignUnit.py') diff --git a/pyGHDL/dom/DesignUnit.py b/pyGHDL/dom/DesignUnit.py new file mode 100644 index 000000000..894651c2c --- /dev/null +++ b/pyGHDL/dom/DesignUnit.py @@ -0,0 +1,100 @@ +from pydecor import export + +from pyVHDLModel.VHDLModel import Entity as VHDLModel_Entity +from pyVHDLModel.VHDLModel import Architecture as VHDLModel_Architecture +from pyVHDLModel.VHDLModel import Package as VHDLModel_Package +from pyVHDLModel.VHDLModel import PackageBody as VHDLModel_PackageBody +from pyVHDLModel.VHDLModel import Context as VHDLModel_Context +from pyVHDLModel.VHDLModel import Configuration as VHDLModel_Configuration + +from libghdl.thin.vhdl import nodes, pyutils + +from pyGHDL.dom.Common import GHDLMixin + +__all__ = [] +__api__ = __all__ + +from pyGHDL.dom.InterfaceItem import GenericConstantInterfaceItem, PortSignalInterfaceItem + + +@export +class Entity(VHDLModel_Entity, GHDLMixin): + + @classmethod + def parse(cls, libraryUnit): + name = cls._ghdlNodeToName(libraryUnit) + entity = cls(name) + + cls.__parseGenerics(libraryUnit, entity) + cls.__parsePorts(libraryUnit, entity) + + return entity + + @classmethod + def __ghdlGetGenerics(cls, entity): + return pyutils.chain_iter(nodes.Get_Generic_Chain(entity)) + + @classmethod + def __ghdlGetPorts(cls, entity): + return pyutils.chain_iter(nodes.Get_Port_Chain(entity)) + + @classmethod + def __parseGenerics(cls, libraryUnit, entity): + for generic in cls.__ghdlGetGenerics(libraryUnit): + genericConstant = GenericConstantInterfaceItem.parse(generic) + entity.GenericItems.append(genericConstant) + + @classmethod + def __parsePorts(cls, libraryUnit, entity): + for port in cls.__ghdlGetPorts(libraryUnit): + signalPort = PortSignalInterfaceItem.parse(port) + entity.PortItems.append(signalPort) + +@export +class Architecture(VHDLModel_Architecture, GHDLMixin): + def __init__(self, name: str, entityName: str): + super().__init__(name) + + self.__entityName = entityName + + @classmethod + def parse(cls, libraryUnit): + name = cls._ghdlNodeToName(libraryUnit) + entityName = cls._ghdlNodeToName(nodes.Get_Entity_Name(libraryUnit)) + + return cls(name, entityName) + + def resolve(self): + pass + +@export +class Package(VHDLModel_Package, GHDLMixin): + + @classmethod + def parse(cls, libraryUnit): + name = cls._ghdlNodeToName(libraryUnit) + return cls(name) + +@export +class PackageBody(VHDLModel_PackageBody, GHDLMixin): + + @classmethod + def parse(cls, libraryUnit): + name = cls._ghdlNodeToName(libraryUnit) + return cls(name) + +@export +class Context(VHDLModel_Context, GHDLMixin): + + @classmethod + def parse(cls, libraryUnit): + name = cls._ghdlNodeToName(libraryUnit) + return cls(name) + +@export +class Configuration(VHDLModel_Configuration, GHDLMixin): + + @classmethod + def parse(cls, libraryUnit): + name = cls._ghdlNodeToName(libraryUnit) + return cls(name) -- cgit v1.2.3 From 71a7c3b1102b888f0560de64d9efaa48d8a3738f Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Tue, 29 Dec 2020 00:46:41 +0100 Subject: Fixed package names in pyGHDL.dom and Initialize test case. --- pyGHDL/dom/DesignUnit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'pyGHDL/dom/DesignUnit.py') diff --git a/pyGHDL/dom/DesignUnit.py b/pyGHDL/dom/DesignUnit.py index 894651c2c..3e87bb41a 100644 --- a/pyGHDL/dom/DesignUnit.py +++ b/pyGHDL/dom/DesignUnit.py @@ -7,9 +7,10 @@ from pyVHDLModel.VHDLModel import PackageBody as VHDLModel_PackageBody from pyVHDLModel.VHDLModel import Context as VHDLModel_Context from pyVHDLModel.VHDLModel import Configuration as VHDLModel_Configuration -from libghdl.thin.vhdl import nodes, pyutils +from pyGHDL.libghdl.vhdl import nodes +import pyGHDL.libghdl.utils as pyutils -from pyGHDL.dom.Common import GHDLMixin +from pyGHDL.dom.Common import GHDLMixin __all__ = [] __api__ = __all__ -- cgit v1.2.3