vendor.xilinx_7series: override reset synchronizer.
authorwhitequark <whitequark@whitequark.org>
Mon, 23 Sep 2019 20:15:29 +0000 (20:15 +0000)
committerwhitequark <whitequark@whitequark.org>
Mon, 23 Sep 2019 20:15:29 +0000 (20:15 +0000)
nmigen/vendor/xilinx_7series.py

index b25c4e95c56a2389c556158d89632560bb63c8e1..e3ea1fae89e3e7d5e4be2edd58fe873d863a9d20 100644 (file)
@@ -371,3 +371,18 @@ class Xilinx7SeriesPlatform(TemplatedPlatform):
             m.d[ff_sync._o_domain] += o.eq(i)
         m.d.comb += ff_sync.o.eq(flops[-1])
         return m
+
+    def get_reset_sync(self, reset_sync):
+        m = Module()
+        m.domains += ClockDomain("reset_sync", async_reset=True, local=True)
+        flops = [Signal(1, name="stage{}".format(index), reset=1,
+                        attrs={"ASYNC_REG": "TRUE"})
+                 for index in range(reset_sync._stages)]
+        for i, o in zip((0, *flops), flops):
+            m.d.reset_sync += o.eq(i)
+        m.d.comb += [
+            ClockSignal("reset_sync").eq(ClockSignal(reset_sync._domain)),
+            ResetSignal("reset_sync").eq(reset_sync.arst),
+            ResetSignal(reset_sync._domain).eq(flops[-1])
+        ]
+        return m