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)
commita1c58633e644fa5266ff1c042b560055f5753ad6
treebdc6cf65c65babb25e337a4de95236623b073ff0
parent97cc78a3db546f72a7fb971dce800ef1cfd060d4
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