55import warnings
66import sys
77
8- from .._utils import flatten
8+ from .._utils import flatten , validate_name
99from ..utils import bits_for
1010from .. import tracer
1111from ._ast import *
@@ -164,6 +164,7 @@ def __init__(self, data):
164164 self .decoding = data ["decoding" ]
165165
166166 def ongoing (self , name ):
167+ validate_name (name , "FSM state" )
167168 if name not in self .encoding :
168169 self .encoding [name ] = len (self .encoding )
169170 fsm_name = self ._data ["name" ]
@@ -426,6 +427,9 @@ def FSM(self, init=None, domain="sync", name="fsm", *, reset=None):
426427 warnings .warn ("`reset=` is deprecated, use `init=` instead" ,
427428 DeprecationWarning , stacklevel = 2 )
428429 init = reset
430+ validate_name (name , "FSM name" )
431+ validate_name (init , "FSM state" , none_ok = True )
432+ validate_name (domain , "FSM clock domain" )
429433 fsm_data = self ._set_ctrl ("FSM" , {
430434 "name" : name ,
431435 "init" : init ,
@@ -455,6 +459,7 @@ def FSM(self, init=None, domain="sync", name="fsm", *, reset=None):
455459 @contextmanager
456460 def State (self , name ):
457461 self ._check_context ("FSM State" , context = "FSM" )
462+ validate_name (name , "FSM state" )
458463 src_loc = tracer .get_src_loc (src_loc_at = 1 )
459464 fsm_data = self ._get_ctrl ("FSM" )
460465 if name in fsm_data ["states" ]:
@@ -481,6 +486,7 @@ def next(self):
481486 @next .setter
482487 def next (self , name ):
483488 if self ._ctrl_context != "FSM" :
489+ validate_name (name , "FSM state" )
484490 for level , (ctrl_name , ctrl_data ) in enumerate (reversed (self ._ctrl_stack )):
485491 if ctrl_name == "FSM" :
486492 if name not in ctrl_data ["encoding" ]:
0 commit comments