gen/genlib/cdc/gearbox: fix possible pointers overlap by removing AsyncResetSynchroni...
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 24 Jul 2017 11:38:12 +0000 (13:38 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 24 Jul 2017 11:39:08 +0000 (13:39 +0200)
read/write clocks don't have the same frequencies, using AsyncResetSynchronizers cause differents delay when releasing reset and can cause pointers overlap.

litex/gen/genlib/cdc.py

index 1fa66543f66671ff59da6e70dde480be0cd78cec..3ba1a2627d237579a0eef79b9bd21af72f08f8ea 100644 (file)
@@ -211,17 +211,15 @@ class Gearbox(Module):
 
         # # #
 
-        reset = Signal()
+        rst = Signal()
         cd_write = ClockDomain()
         cd_read = ClockDomain()
         self.comb += [
+            rst.eq(ResetSignal(idomain) | ResetSignal(odomain)),
             cd_write.clk.eq(ClockSignal(idomain)),
             cd_read.clk.eq(ClockSignal(odomain)),
-            reset.eq(ResetSignal(idomain) | ResetSignal(odomain))
-        ]
-        self.specials += [
-            AsyncResetSynchronizer(cd_write, reset),
-            AsyncResetSynchronizer(cd_read, reset)
+            cd_write.rst.eq(rst),
+            cd_read.rst.eq(rst)
         ]
         self.clock_domains += cd_write, cd_read