@@ -86,9 +86,6 @@ def __init__(self, m, name, clk, rst, width=32, initname='init',
8686
8787 # -------------------------------------------------------------------------
8888 def goto (self , dst , cond = None , else_dst = None ):
89- if isinstance (dst , State ):
90- dst = dst .index
91-
9289 if cond is None and 'cond' in self .next_kwargs :
9390 cond = self .next_kwargs ['cond' ]
9491
@@ -108,7 +105,7 @@ def goto(self, dst, cond=None, else_dst=None):
108105 src = index
109106
110107 self ._go (src , dst , cond , else_dst )
111- return State ( self , dst )
108+ return dst
112109
113110 def goto_init (self , cond = None ):
114111 if cond is None and 'cond' in self .next_kwargs :
@@ -131,7 +128,7 @@ def goto_init(self, cond=None):
131128
132129 dst = 0
133130 self ._go (src , dst , cond )
134- return State ( self , dst )
131+ return dst
135132
136133 def goto_next (self , cond = None ):
137134 if cond is None and 'cond' in self .next_kwargs :
@@ -155,15 +152,9 @@ def goto_next(self, cond=None):
155152 dst = src + 1
156153 self ._go (src , dst , cond = cond )
157154 self .inc ()
158- return State ( self , dst )
155+ return dst
159156
160157 def goto_from (self , src , dst , cond = None , else_dst = None ):
161- if isinstance (src , State ):
162- src = src .index
163-
164- if isinstance (dst , State ):
165- dst = dst .index
166-
167158 if cond is None and 'cond' in self .next_kwargs :
168159 cond = self .next_kwargs ['cond' ]
169160
@@ -173,7 +164,7 @@ def goto_from(self, src, dst, cond=None, else_dst=None):
173164 # self._clear_elif_cond()
174165
175166 self ._go (src , dst , cond , else_dst )
176- return State ( self , dst )
167+ return dst
177168
178169 def inc (self ):
179170 return self ._set_index (None )
@@ -300,6 +291,12 @@ def Elif(self, *cond):
300291
301292 return self
302293
294+ def Then (self ):
295+ cond = self ._make_cond (self .last_cond )
296+ self ._clear_last_cond ()
297+ self .If (cond )
298+ return self
299+
303300 def Delay (self , delay ):
304301 self .next_kwargs ['delay' ] = delay
305302 return self
@@ -308,12 +305,6 @@ def Keep(self, keep):
308305 self .next_kwargs ['keep' ] = keep
309306 return self
310307
311- def Then (self ):
312- cond = self ._make_cond (self .last_cond )
313- self ._clear_last_cond ()
314- self .If (cond )
315- return self
316-
317308 def LazyCond (self , value = True ):
318309 self .next_kwargs ['lazy_cond' ] = value
319310 return self
@@ -326,6 +317,11 @@ def When(self, index):
326317 self .next_kwargs ['index' ] = index
327318 return self
328319
320+ def State (self , index = None ):
321+ if index is None :
322+ index = fsm .current
323+ return State (self , index )
324+
329325 def Clear (self ):
330326 self ._clear_next_kwargs ()
331327 self ._clear_last_if_statement ()
@@ -340,15 +336,15 @@ def Always(self):
340336
341337 @property
342338 def init (self ):
343- return State ( self , 0 )
339+ return 0
344340
345341 @property
346342 def current (self ):
347- return State ( self , self .state_count )
343+ return self .state_count
348344
349345 @property
350346 def next (self ):
351- return State ( self , self .state_count + 1 )
347+ return self .state_count + 1
352348
353349 @property
354350 def current_delay (self ):
0 commit comments