build.res: simplify clock constraints.
authorwhitequark <whitequark@whitequark.org>
Sat, 21 Sep 2019 14:12:29 +0000 (14:12 +0000)
committerwhitequark <whitequark@whitequark.org>
Sat, 21 Sep 2019 14:12:29 +0000 (14:12 +0000)
commit8050cfaa986793433c52efcbe505ca57a92cd5e2
treec9f74a7c80c346dc33f9a70fe5a2063f1ac75905
parent07a82ed70e9d3c1efc41db8189409b62343e6081
build.res: simplify clock constraints.

Before this commit, it was possible to set and get clock constraints
placed on Pin objects. This was not a very good implementation, since
it relied on matching the identity of the provided Pin object to
a previously requested one. The only reason it worked like that is
deficiencies in nextpnr.

Since then, nextpnr has been fixed to allow setting constraints on
arbitrary nets. Correspondingly, backends that are using Synplify
were changed to use [get_nets] instead of [get_ports] in SDC files.
However, in some situations, Synplify does not allow specifying
ports in [get_nets]. (In fact, nextpnr had a similar problem, but
it has also been fixed.)

The simplest way to address this is to refer to the interior net
(after the input buffer), which always works. The only downside
of this is that requesting a clock as a raw pin using
    platform.request("clk", dir="-")
and directly applying a constraint to it could fail in some cases.
This is not a significant issue.
nmigen/build/res.py
nmigen/test/test_build_res.py