5
5
import warnings
6
6
import sys
7
7
8
- from .._utils import flatten
8
+ from .._utils import flatten , validate_name
9
9
from ..utils import bits_for
10
10
from .. import tracer
11
11
from ._ast import *
@@ -164,6 +164,7 @@ def __init__(self, data):
164
164
self .decoding = data ["decoding" ]
165
165
166
166
def ongoing (self , name ):
167
+ validate_name (name , "FSM state" )
167
168
if name not in self .encoding :
168
169
self .encoding [name ] = len (self .encoding )
169
170
fsm_name = self ._data ["name" ]
@@ -426,6 +427,9 @@ def FSM(self, init=None, domain="sync", name="fsm", *, reset=None):
426
427
warnings .warn ("`reset=` is deprecated, use `init=` instead" ,
427
428
DeprecationWarning , stacklevel = 2 )
428
429
init = reset
430
+ validate_name (name , "FSM name" )
431
+ validate_name (init , "FSM state" , none_ok = True )
432
+ validate_name (domain , "FSM clock domain" )
429
433
fsm_data = self ._set_ctrl ("FSM" , {
430
434
"name" : name ,
431
435
"init" : init ,
@@ -455,6 +459,7 @@ def FSM(self, init=None, domain="sync", name="fsm", *, reset=None):
455
459
@contextmanager
456
460
def State (self , name ):
457
461
self ._check_context ("FSM State" , context = "FSM" )
462
+ validate_name (name , "FSM state" )
458
463
src_loc = tracer .get_src_loc (src_loc_at = 1 )
459
464
fsm_data = self ._get_ctrl ("FSM" )
460
465
if name in fsm_data ["states" ]:
@@ -481,6 +486,7 @@ def next(self):
481
486
@next .setter
482
487
def next (self , name ):
483
488
if self ._ctrl_context != "FSM" :
489
+ validate_name (name , "FSM state" )
484
490
for level , (ctrl_name , ctrl_data ) in enumerate (reversed (self ._ctrl_stack )):
485
491
if ctrl_name == "FSM" :
486
492
if name not in ctrl_data ["encoding" ]:
0 commit comments