fhdl: allow use of ResetSignal() on resetless clock domains
authorSebastien Bourdeauducq <sb@m-labs.hk>
Sun, 26 Jul 2015 17:51:52 +0000 (01:51 +0800)
committerSebastien Bourdeauducq <sb@m-labs.hk>
Sun, 26 Jul 2015 17:51:52 +0000 (01:51 +0800)
migen/fhdl/structure.py
migen/fhdl/tools.py

index 45ab79452fd90370736a21966d5798a6f0eabb38..b474e856e53ff5010812cf180651bd29f725f463 100644 (file)
@@ -327,10 +327,14 @@ class ResetSignal(Value):
     ----------
     cd : str
         Clock domain to obtain a reset signal for. Defaults to `"sys"`.
+    allow_resetless : bool
+        If the clock domain is resetless, return 0 instead of reporting an
+        error.
     """
-    def __init__(self, cd="sys"):
+    def __init__(self, cd="sys", allow_resetless=False):
         Value.__init__(self)
         self.cd = cd
+        self.allow_resetless = allow_resetless
 
 # statements
 
index 685f4df375b68663eb659debfdec56f69eccf213..f9f62f789ae4d47d5147e749525f99bb8a2a0f7e 100644 (file)
@@ -191,7 +191,15 @@ class _BasicLowerer(_Lowerer):
         return self.clock_domains[node.cd].clk
 
     def visit_ResetSignal(self, node):
-        return self.clock_domains[node.cd].rst
+        rst = self.clock_domains[node.cd].rst
+        if rst is None:
+            if node.allow_resetless:
+                return 0
+            else:
+                raise ValueError("Attempted to get reset signal of resetless"
+                                 " domain '{}'".format(node.cd))
+        else:
+            return rst
 
 
 class _ComplexSliceLowerer(_Lowerer):