# Lattice ECP5

The `amaranth.vendor.lattice_ecp5` module provides a base platform to support Lattice ECP5 devices.

The Trellis and Diamond toolchains are supported.

class amaranth.vendor.lattice_ecp5.LatticeECP5Platform(*, toolchain='Trellis')

  Trellis toolchain

  Required tools:

    - `yosys`

    - `nextpnr-ecp5`

    - `ecppack`

  The environment is populated by running the script specified in the environment variable `AMARANTH_ENV_Trellis`, if present.

  Available overrides:

    - `verbose`: enables logging of informational messages to standard error.

    - `read_verilog_opts`: adds options for `read_verilog` Yosys command.

    - `synth_opts`: adds options for `synth_ecp5` Yosys command.

    - `script_after_read`: inserts commands after `read_ilang` in Yosys script.

    - `script_after_synth`: inserts commands after `synth_ecp5` in Yosys script.

    - `yosys_opts`: adds extra options for `yosys`.

    - `nextpnr_opts`: adds extra options for `nextpnr-ecp5`.

    - `ecppack_opts`: adds extra options for `ecppack`.

    - `add_preferences`: inserts commands at the end of the LPF file.

  Build products:

    - `{{name}}.rpt`: Yosys log.

    - `{{name}}.json`: synthesized RTL.

    - `{{name}}.tim`: nextpnr log.

    - `{{name}}.config`: ASCII bitstream.

    - `{{name}}.bit`: binary bitstream.

    - `{{name}}.svf`: JTAG programming vector.

  Diamond toolchain

  Required tools:

    - `pnmainc`

    - `ddtcmd`

  The environment is populated by running the script specified in the environment variable `AMARANTH_ENV_Diamond`, if present. On Linux, diamond_env as provided by Diamond itself is a good candidate. On Windows, the following script (named `diamond_env.bat`, for instance) is known to work:

      @echo off
      set PATH=C:\lscc\diamond\%DIAMOND_VERSION%\bin\nt64;%PATH%

  Available overrides:

    - `script_project`: inserts commands before `prj_project save` in Tcl script.

    - `script_after_export`: inserts commands after `prj_run Export` in Tcl script.

    - `add_preferences`: inserts commands at the end of the LPF file.

    - `add_constraints`: inserts commands at the end of the XDC file.

  Build products:

    - `{{name}}_impl/{{name}}_impl.htm`: consolidated log.

    - `{{name}}.bit`: binary bitstream.

    - `{{name}}.svf`: JTAG programming vector.