genlib/misc: add FlipFlop, Counter, Timeout
This commit is contained in:
parent
961b4bfb4c
commit
8f81ae6826
|
@ -85,3 +85,29 @@ def timeline(trigger, events):
|
||||||
sync = [If(get_cond(e), *e[1]) for e in events]
|
sync = [If(get_cond(e), *e[1]) for e in events]
|
||||||
sync.append(counterlogic)
|
sync.append(counterlogic)
|
||||||
return sync
|
return sync
|
||||||
|
|
||||||
|
@DecorateModule(InsertReset)
|
||||||
|
@DecorateModule(InsertCE)
|
||||||
|
class FlipFlop(Module):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.d = Signal(*args, **kwargs)
|
||||||
|
self.q = Signal(*args, **kwargs)
|
||||||
|
self.sync += self.q.eq(self.d)
|
||||||
|
|
||||||
|
@DecorateModule(InsertReset)
|
||||||
|
@DecorateModule(InsertCE)
|
||||||
|
class Counter(Module):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.value = Signal(**kwargs)
|
||||||
|
self.width = flen(self.value)
|
||||||
|
self.sync += self.value.eq(self.value+1)
|
||||||
|
|
||||||
|
@DecorateModule(InsertReset)
|
||||||
|
@DecorateModule(InsertCE)
|
||||||
|
class Timeout(Module):
|
||||||
|
def __init__(self, length):
|
||||||
|
self.reached = Signal()
|
||||||
|
###
|
||||||
|
value = Signal(max=length)
|
||||||
|
self.sync += If(~self.reached, value.eq(value+1))
|
||||||
|
self.comb += self.reached.eq(value == (length-1))
|
||||||
|
|
Loading…
Reference in New Issue