vendor.xilinx_{7series,ultrascale}: add (*keep*) on constrained clocks.
authorwhitequark <whitequark@whitequark.org>
Wed, 20 May 2020 04:58:03 +0000 (04:58 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 31 Dec 2021 13:31:52 +0000 (13:31 +0000)
commiteb27295b083513b868e9c5ea7b2a842c7663823b
treecdb7453978a625d2c62d8a9ba9f4520d9395dd9c
parent539e977e74f59e723726319a81454d348cfc9954
vendor.xilinx_{7series,ultrascale}: add (*keep*) on constrained clocks.

If the clock signal is not a top-level port and has aliases, it can
be optimized out, and then the constraint will no longer apply.
To prevent this, make sure the constrained signal is preferred over
any aliases by using the `keep` attribute.

Vivado does not parse attributes like (* keep = 32'd1 *) as valid
even though, AFAICT, they are equivalent to (* keep = 1 *) or simply
(* keep *) per IEEE 1364. To work around this, use the solution we
currently use for Quartus, which is `write_verilog -decimal`.

Fixes #373.
nmigen/vendor/intel.py
nmigen/vendor/xilinx_7series.py
nmigen/vendor/xilinx_ultrascale.py