hdl.dsl: make referencing undefined FSM states an error.
authorwhitequark <whitequark@whitequark.org>
Thu, 6 Feb 2020 17:47:46 +0000 (17:47 +0000)
committerwhitequark <whitequark@whitequark.org>
Thu, 6 Feb 2020 17:47:46 +0000 (17:47 +0000)
commitfafe21d9ac339321cf90642270f8cfdf126a1708
treebdc6cf65c65babb25e337a4de95236623b073ff0
parente31de13c6b757079e6ada82b2b120361dc31349c
hdl.dsl: make referencing undefined FSM states an error.

Before this commit, doing something like:

    with m.FSM():
        with m.State("FOO"):
            m.next = "bAR"
        with m.State("BAR"):
            m.next = "FOO"

would silently create an empty state `bAR` and get stuck in it until
the module is reset. This was done intentionally (in Migen, this code
would in fact miscompile), but in retrospect was clearly a bad idea;
it turns typos into bugs, while in the rare case that branching to
a completely empty state is desired, it is trivial to define one.

Fixes #315.
nmigen/hdl/dsl.py
nmigen/test/test_hdl_dsl.py