Avoid timing violation on ECP5 PHY PAUSE signal
authorRaptor Engineering Development Team <support@raptorengineering.com>
Sat, 9 Apr 2022 20:19:22 +0000 (15:19 -0500)
committerRaptor Engineering Development Team <support@raptorengineering.com>
Sat, 9 Apr 2022 20:19:22 +0000 (15:19 -0500)
gram/phy/ecp5ddrphy.py

index 32a679244b4dd639001f4805503b82993d2fb03d..007c143cba8c2c7ba3209246e549ad08d44ade77 100644 (file)
@@ -101,10 +101,28 @@ class _DQSBUFMSettingManager(Elaboratable):
             with m.State("Idle"):
                 with m.If(self.rdly_csr.w_stb):
                     m.d.sync += self.pause.eq(1)
-                    m.next = "RdlyUpdateRequested"
+                    m.next = "RdlyUpdateRequestedDelay1"
+
+            with m.State("RdlyUpdateRequestedDelay1"):
+                m.next = "RdlyUpdateRequestedDelay2"
+
+            with m.State("RdlyUpdateRequestedDelay2"):
+                m.next = "RdlyUpdateRequestedDelay3"
+
+            with m.State("RdlyUpdateRequestedDelay3"):
+                m.next = "RdlyUpdateRequested"
 
             with m.State("RdlyUpdateRequested"):
                 m.d.sync += self.readclksel.eq(self.rdly_csr.w_data)
+                m.next = "ResetPauseDelay1"
+
+            with m.State("ResetPauseDelay1"):
+                m.next = "ResetPauseDelay2"
+
+            with m.State("ResetPauseDelay2"):
+                m.next = "ResetPauseDelay3"
+
+            with m.State("ResetPauseDelay3"):
                 m.next = "ResetPause"
 
             with m.State("ResetPause"):