hdl.ir, back.rtlil: allow specifying attributes on instances.

Fixes #107.
This commit is contained in:
whitequark 2019-06-28 04:14:38 +00:00
parent 2b92f12016
commit 48d4ee4031
4 changed files with 28 additions and 5 deletions

View file

@ -71,6 +71,7 @@ class Fragment:
self.statements = []
self.domains = OrderedDict()
self.subfragments = []
self.attrs = OrderedDict()
self.generated = OrderedDict()
self.flatten = False
@ -528,7 +529,9 @@ class Instance(Fragment):
self.named_ports = OrderedDict()
for (kind, name, value) in args:
if kind == "p":
if kind == "a":
self.attrs[name] = value
elif kind == "p":
self.parameters[name] = value
elif kind in ("i", "o", "io"):
self.named_ports[name] = (value, kind)
@ -538,7 +541,9 @@ class Instance(Fragment):
.format((kind, name, value)))
for kw, arg in kwargs.items():
if kw.startswith("p_"):
if kw.startswith("a_"):
self.attrs[kw[2:]] = arg
elif kw.startswith("p_"):
self.parameters[kw[2:]] = arg
elif kw.startswith("i_"):
self.named_ports[kw[2:]] = (arg, "i")

View file

@ -274,6 +274,7 @@ class FragmentTransformer:
else:
new_fragment = Fragment()
new_fragment.flatten = fragment.flatten
new_fragment.attrs = OrderedDict(fragment.attrs)
self.map_ports(fragment, new_fragment)
self.map_subfragments(fragment, new_fragment)
self.map_domains(fragment, new_fragment)