build.res: simplify clock constraints.
authorwhitequark <cz@m-labs.hk>
Sat, 21 Sep 2019 14:12:29 +0000 (14:12 +0000)
committerwhitequark <cz@m-labs.hk>
Sat, 21 Sep 2019 14:12:29 +0000 (14:12 +0000)
commit51f2792923b5227623142e96e7058fc3a5274e80
treec9f74a7c80c346dc33f9a70fe5a2063f1ac75905
parent7040727012d1cce706dde27deec36f0f90489c3b
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