add rising edge function for generating pulse
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 9 Aug 2020 18:44:09 +0000 (19:44 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 9 Aug 2020 18:44:09 +0000 (19:44 +0100)
src/nmutil/util.py

index 3aae6efeb2dc35bb8589f4da4c35f91b0c771076..5e8660b9c070e8b167e01d1bc2b109c7b53e3af3 100644 (file)
@@ -1,5 +1,5 @@
 from collections.abc import Iterable
-from nmigen import Mux
+from nmigen import Mux, Signal
 
 # XXX this already exists in nmigen._utils
 # see https://bugs.libre-soc.org/show_bug.cgi?id=297
@@ -46,3 +46,15 @@ def wrap(process):
         yield from process
     return wrapper
 
+
+# a "rising edge" generator.  can take signals of greater than width 1
+
+def rising_edge(m, sig):
+    delay = Signal.like(sig)
+    rising = Signal.like(sig)
+    delay.name = "%s_dly" % sig.name
+    rising.name = "%s_rise" % sig.name
+    m.d.sync += delay.eq(sig) # 1 clock delay
+    m.d.comb += rising.eq(sig & ~delay) # sig is hi but delay-sig is lo
+    return rising
+