back.rtlil: translate enum decoders to Yosys enum attributes.
Fixes #254.
This commit is contained in:
parent
3346f2c505
commit
b4af217ed0
|
@ -306,10 +306,15 @@ class _ValueCompilerState:
|
|||
else:
|
||||
wire_name = signal.name
|
||||
|
||||
attrs = dict(signal.attrs)
|
||||
if signal._enum_class is not None:
|
||||
attrs["enum_base_type"] = signal._enum_class.__name__
|
||||
for value in signal._enum_class:
|
||||
attrs["enum_value_{:0{}b}".format(value.value, signal.width)] = value.name
|
||||
|
||||
wire_curr = self.rtlil.wire(width=signal.width, name=wire_name,
|
||||
port_id=port_id, port_kind=port_kind,
|
||||
attrs=signal.attrs,
|
||||
src=src(signal.src_loc))
|
||||
attrs=attrs, src=src(signal.src_loc))
|
||||
if signal in self.driven and self.driven[signal]:
|
||||
wire_next = self.rtlil.wire(width=signal.width, name=wire_curr + "$next",
|
||||
src=src(signal.src_loc))
|
||||
|
|
|
@ -425,7 +425,7 @@ class Value(metaclass=ABCMeta):
|
|||
|
||||
def rotate_left(self, offset):
|
||||
"""Rotate left by constant modulo 2**len(self).
|
||||
|
||||
|
||||
Parameters
|
||||
----------
|
||||
offset : int
|
||||
|
@ -443,7 +443,7 @@ class Value(metaclass=ABCMeta):
|
|||
|
||||
def rotate_right(self, offset):
|
||||
"""Rotate right by constant modulo 2**len(self).
|
||||
|
||||
|
||||
Parameters
|
||||
----------
|
||||
offset : int
|
||||
|
@ -922,8 +922,10 @@ class Signal(Value, DUID):
|
|||
except ValueError:
|
||||
return str(value)
|
||||
self.decoder = enum_decoder
|
||||
self._enum_class = decoder
|
||||
else:
|
||||
self.decoder = decoder
|
||||
self._enum_class = None
|
||||
|
||||
# Not a @classmethod because nmigen.compat requires it.
|
||||
@staticmethod
|
||||
|
|
Loading…
Reference in a new issue