compat.fhdl.decorators: port from oMigen.
authorwhitequark <whitequark@whitequark.org>
Thu, 8 Aug 2019 08:09:28 +0000 (08:09 +0000)
committerwhitequark <whitequark@whitequark.org>
Thu, 8 Aug 2019 08:09:28 +0000 (08:09 +0000)
nmigen/compat/__init__.py
nmigen/compat/fhdl/decorators.py [new file with mode: 0644]

index b8f412d694dbed11a55e209cfc87131788c22628..bdf13138ca0e4660f0222d58ad06c0fce6b3bd09 100644 (file)
@@ -2,7 +2,7 @@ from .fhdl.structure import *
 from .fhdl.module import *
 from .fhdl.specials import *
 from .fhdl.bitcontainer import *
-from .fhdl.decorators import *
+from .fhdl.decorators import *
 # from .fhdl.simplify import *
 
 from .sim import *
diff --git a/nmigen/compat/fhdl/decorators.py b/nmigen/compat/fhdl/decorators.py
new file mode 100644 (file)
index 0000000..933dcc0
--- /dev/null
@@ -0,0 +1,41 @@
+from ...hdl.ast import *
+from ...hdl.xfrm import ResetInserter as NativeResetInserter
+from ...hdl.xfrm import CEInserter as NativeCEInserter
+from ...hdl.xfrm import DomainRenamer as NativeDomainRenamer
+
+
+__all__ = ["ResetInserter", "CEInserter", "ClockDomainsRenamer"]
+
+
+class _CompatControlInserter:
+    _control_name = None
+    _native_inserter = None
+
+    def __init__(self, clock_domains=None):
+        self.clock_domains = clock_domains
+
+    def __call__(self, module):
+        if self.clock_domains is None:
+            signals = {self._control_name: ("sync", Signal(name=self._control_name))}
+        else:
+            def name(cd):
+                return self._control_name + "_" + cd
+            signals = {name(cd): (cd, Signal(name=name(cd))) for cd in self.clock_domains}
+        for name, (cd, signal) in signals.items():
+            setattr(module, name, signal)
+        return self._native_inserter(dict(signals.values()))(module)
+
+
+class CompatResetInserter(_CompatControlInserter):
+    _control_name = "reset"
+    _native_inserter = NativeResetInserter
+
+
+class CompatCEInserter(_CompatControlInserter):
+    _control_name = "ce"
+    _native_inserter = NativeCEInserter
+
+
+ResetInserter = CompatResetInserter
+CEInserter = CompatCEInserter
+ClockDomainsRenamer = NativeDomainRenamer