amaranth/nmigen/vendor
whitequark b9e57fd67b build.plat,vendor: always synchronize reset in default sync domain.
This change achieves two related goals.

First, default_rst is no longer assumed to be synchronous to
default_clk, which is  the safer option, since it can be connected to
e.g. buttons on some evaluation boards.

Second, since the power-on / configuration reset is inherently
asynchronous to any user clock, the default create_missing_domain()
behavior is to use a reset synchronizer with `0` as input. Since,
like all reset synchronizers, it uses Signal(reset=1) for its
synchronization stages, after power-on reset it keeps its subordinate
clock domain in reset, and releases it after fabric flops start
toggling.

The latter change is helpful to architectures that lack an end-of-
configuration signal, i.e. most of them. ECP5 was already using
a similar scheme (and is not changed here). Xilinx devices with EOS
use EOS to drive a BUFGMUX, which is more efficient than using
a global reset when the design does not need one; Xilinx devices
without EOS use the new scheme. iCE40 requires a post-configuration
timer because of BRAM silicon bug, and was changed to add a reset
synchronizer if user clock is provided.
2019-10-09 20:02:33 +00:00
..
__init__.py vendor.fpga.lattice_ice40: implement. 2019-06-01 16:47:01 +00:00
lattice_ecp5.py build.plat: strip internal attributes from Verilog output. 2019-09-24 14:56:00 +00:00
lattice_ice40.py build.plat,vendor: always synchronize reset in default sync domain. 2019-10-09 20:02:33 +00:00
xilinx_7series.py build.plat,vendor: always synchronize reset in default sync domain. 2019-10-09 20:02:33 +00:00
xilinx_spartan_3_6.py build.plat,vendor: always synchronize reset in default sync domain. 2019-10-09 20:02:33 +00:00