Skip to content

Commit 72cf442

Browse files
author
Hugo Lom
committed
IR+frontend: Add plugin metadata
1 parent c080ba9 commit 72cf442

4 files changed

Lines changed: 43 additions & 1 deletion

File tree

topwrap/frontend/yaml/design.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,13 @@
3737
from topwrap.model.interface import Interface, InterfaceMode
3838
from topwrap.model.memory_map import MemoryMap as IRMemoryMap
3939
from topwrap.model.memory_map import MemoryMapSubordinate
40-
from topwrap.model.misc import ElaboratableValue, FileReference, Identifier, ObjectId
40+
from topwrap.model.misc import (
41+
ElaboratableValue,
42+
FileReference,
43+
Identifier,
44+
ObjectId,
45+
PluginMetadata,
46+
)
4147
from topwrap.model.module import Module
4248
from topwrap.resource_field import RepoReferenceHandler
4349

@@ -221,8 +227,15 @@ def _parse_hier(
221227

222228
self._parse_clocks_resets(design, desc)
223229

230+
self._parse_extensions(design, desc)
231+
224232
return design
225233

234+
def _parse_extensions(self, des: Design, desc: DesignDescription):
235+
for plugin_name, metadata in desc.extensions.items():
236+
md = PluginMetadata(name=plugin_name, data=metadata)
237+
des.add_metadata(md)
238+
226239
def _parse_parameters(self, desc: DesignDescription, design: Design):
227240
for cname, ip in desc.ips.items():
228241
comp = design.components.find_by_name(cname)

topwrap/frontend/yaml/design_schema.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ class DesignDescription(MarshmallowDataclassExtensions):
185185
clock_domains: Dict[str, DesignSectionClockDomain] = ext_field(dict)
186186
reset_domains: Dict[str, DesignSectionResetDomain] = ext_field(dict)
187187
memory_maps: Dict[str, MemoryMap] = ext_field(dict)
188+
extensions: Dict[str, Any] = ext_field(dict)
188189

189190
Schema: ClassVar[Type[marshmallow.Schema]] = DesignDescriptionSchema
190191

topwrap/model/design.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
ModelBase,
2525
ObjectId,
2626
Parameter,
27+
PluginMetadata,
2728
QuerableView,
2829
VariableName,
2930
set_parent,
@@ -155,6 +156,7 @@ class Design(ModelBase):
155156
_reset_domains: list[ResetDomain]
156157
memory_maps: dict[str, MemoryMap]
157158
parent: Module
159+
_extensions: list[PluginMetadata]
158160

159161
def __init__(
160162
self,
@@ -165,6 +167,7 @@ def __init__(
165167
clock_domains: Iterable[ClockDomain] = (),
166168
reset_domains: Iterable[ResetDomain] = (),
167169
memory_maps: Optional[dict[str, MemoryMap]] = None,
170+
extensions: Iterable[PluginMetadata] = (),
168171
) -> None:
169172
super().__init__()
170173
self._components = []
@@ -173,6 +176,7 @@ def __init__(
173176
self._clock_domains = []
174177
self._reset_domains = []
175178
self.memory_maps = {}
179+
self._extensions = []
176180

177181
if memory_maps is not None:
178182
self.add_memory_maps(memory_maps)
@@ -186,6 +190,8 @@ def __init__(
186190
self.add_clock_domain(domain)
187191
for domain in reset_domains:
188192
self.add_reset_domain(domain)
193+
for data in extensions:
194+
self.add_metadata(data)
189195

190196
@property
191197
def components(self) -> QuerableView[ModuleInstance]:
@@ -207,6 +213,10 @@ def clock_domains(self) -> QuerableView[ClockDomain]:
207213
def reset_domains(self) -> QuerableView[ResetDomain]:
208214
return QuerableView(self._reset_domains)
209215

216+
@property
217+
def extensions(self) -> QuerableView[PluginMetadata]:
218+
return QuerableView(self._extensions)
219+
210220
def add_component(self, component: ModuleInstance):
211221
set_parent(component, self)
212222
self._components.append(component)
@@ -227,6 +237,10 @@ def add_reset_domain(self, domain: ResetDomain):
227237
set_parent(domain, self)
228238
self._reset_domains.append(domain)
229239

240+
def add_metadata(self, metadata: PluginMetadata):
241+
set_parent(metadata, self)
242+
self._extensions.append(metadata)
243+
230244
def add_memory_maps(self, mem_maps: dict[str, MemoryMap]):
231245
for memory_map in mem_maps.values():
232246
memory_map.parent = self

topwrap/model/misc.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,17 @@ def __eq__(self, value: object) -> bool:
290290
if isinstance(value, Parameter):
291291
return self.name == value.name and self.default_value == value.default_value
292292
return NotImplemented
293+
294+
295+
class PluginMetadata(ModelBase):
296+
"""Represents generic module data"""
297+
298+
parent: Module
299+
name: VariableName
300+
data: Any
301+
302+
def __init__(self, *, name: VariableName, data: Any) -> None:
303+
super().__init__()
304+
self.name = name
305+
self.data = data
306+

0 commit comments

Comments
 (0)