Skip to content

Commit a40631c

Browse files
committed
fsm.add() supports keep attributes for specifying the signal sustain length.
1 parent 237baba commit a40631c

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

sample/tests/lib_fsm/delayed_cond/led.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def mkLed():
2020

2121
# assert valid if the condition is satisfied
2222
# then de-assert 3 cycles later with same condition
23-
fsm.add( valid(1), cond=c)
23+
fsm.add( valid(1), cond=c, keep=3)
2424
fsm.add( valid(0), cond=c, delay=3)
2525
fsm.goto_next(cond=c)
2626

@@ -33,7 +33,7 @@ def mkLed():
3333
# assert valid 1 cycle later if the condition is satisfied now
3434
# then de-assert 4 cycles later with same condition
3535
for i in range(8):
36-
fsm.add( valid(1), cond=c, delay=1)
36+
fsm.add( valid(1), cond=c, delay=1, keep=3)
3737
fsm.add( valid(0), cond=c, delay=4 )
3838
fsm.goto_next(cond=c)
3939

veriloggen/lib/fsm.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,16 @@ def add_delayed_cond(self, statement, index, delay):
9292

9393
#---------------------------------------------------------------------------
9494
def add(self, *statement, **kwargs):
95+
keep = kwargs['keep'] if 'keep' in kwargs else None
9596
delay = kwargs['delay'] if 'delay' in kwargs else None
97+
98+
if keep is not None:
99+
del kwargs['keep']
100+
for i in range(keep):
101+
kwargs['delay'] = i if delay is None else delay + i
102+
self.add(*statement, **kwargs)
103+
return self
104+
96105
if delay is not None and delay > 0:
97106
self.add_delayed_state(delay)
98107
index = self.current()
@@ -106,6 +115,7 @@ def add(self, *statement, **kwargs):
106115
return self
107116

108117
cond = kwargs['cond'] if 'cond' in kwargs else None
118+
109119
if cond is not None:
110120
statement = [ vtypes.If(cond)(*statement) ]
111121

0 commit comments

Comments
 (0)