| Getting started |
| ############### |
| |
| To begin using F4PGA, you might want to take a look at the :ref:`GettingStarted:Guidelines` below, which make for a good |
| starting point. |
| They will guide you through the process of installing and using the flows, explaining how to generate and load a |
| bitstream into your FPGA. |
| |
| F4PGA flows are composed of multiple tools, scripts and CLI utilities. |
| Fortunately, various alternatives exist for setting up the whole ecosystem without going through the daunting task of |
| installing pieces one-by-one. |
| See :ref:`GettingStarted:ToolchainInstallation` below. |
| |
| .. _GettingStarted:Guidelines: |
| |
| Guidelines |
| ========== |
| |
| This is the main documentation, which gathers info about the :ref:`Python CLI tools and APIs <pyF4PGA>` and the |
| :ref:`Design Flows <Flows>` supported by F4PGA, along with a :ref:`Glossary`, references to specifications, plugins and |
| :ref:`publications <References>`. |
| |
| Since F4PGA is meant for users with varying backgrounds and expertise, three paths are provided to walk into the ecosystem. |
| |
| **Newcomers** are invited to go through `Examples ➚ <https://f4pga-examples.readthedocs.io>`__, which provides |
| step-by-step guidelines to install the tools through `Conda ➚ <https://conda.io>`__, generate a bitstream from one of the |
| provided designs and load the bitstream into a development board. |
| See :ref:`examples:CustomizingMakefiles` for adapting the build plumbing to your own desings. |
| |
| For **Intermediate** users and contributors, who are already familiar with installing the tools and building bitstreams, |
| it is recommended to read the shell scripts in subdir :ghsrc:`scripts`, as well as the Continuous Integration |
| :ghsrc:`Pipeline <.github/workflows/Pipeline.yml>`. |
| Moreover, workflow `containers-conda-f4pga.yml <https://github.com/hdl/packages/blob/main/.github/workflows/containers-conda-f4pga.yml>`__ |
| in :gh:`hdl/packages` shows how to use the ``*/conda/f4pga/*`` containers from :gh:`hdl/containers` |
| (see `workflow runs <https://github.com/hdl/packages/actions/workflows/containers-conda-f4pga.yml>`__ and |
| :ref:`GettingStarted:ToolchainInstallation:Other:Containers`). |
| |
| **Advanced** users and developers willing to support new devices and/or enhance the features of the supported families |
| (see `F4PGA Architectures Visualizer ➚ <https://chipsalliance.github.io/f4pga-database-visualizer/>`__) |
| should head to `Architecture Definitions ➚ <https://f4pga.readthedocs.io/projects/arch-defs>`__. |
| The effort to document the details of each device/family are distributed on multiple projects: |
| |
| * `Project X-Ray ➚ <https://f4pga.readthedocs.io/projects/prjxray/en/latest/>`__ |
| |
| * `X-Ray Quickstart ➚ <https://f4pga.readthedocs.io/projects/prjxray/en/latest/db_dev_process/readme.html#quickstart-guide>`__ |
| |
| * `Project Trellis ➚ <https://prjtrellis.readthedocs.io/en/latest/>`__ |
| |
| * :gh:`Project Icestorm ➚ <f4pga/icestorm>` |
| |
| |
| .. _GettingStarted:ToolchainInstallation: |
| |
| Toolchain installation |
| ====================== |
| |
| F4PGA flows require multiple radpidly moving tools, assets and scripts, which makes it difficult for system packagers to |
| catch up. |
| Although some of the tools used in F4PGA (such as yosys, nextpnr or vpr) are available already through ``apt``, ``dnf``, |
| ``pacman``, etc. they typically use pinned versions which are not the latest. |
| Therefore, the recommended installation procedure to follow the guidelines in F4PGA is repositories is using `Conda ➚ <https://conda.io>`__, |
| or some other pre-packaged solution combining latest releases. |
| |
| |
| .. _GettingStarted:ToolchainInstallation:Conda: |
| |
| Conda (Recommended) |
| ------------------- |
| |
| .. IMPORTANT:: |
| Due to size constraints, Architecture Definition packages cannot be distributed through Conda. |
| Hence, installing a functional F4PGA system is a two step process: bootstraping the conda environment and getting the |
| tarballs (or vice versa). |
| In the future, getting and managing the tarballs might be handled by F4PGA. |
| |
| In coherence with the :ref:`GettingStarted:Guidelines` above, multiple Conda environments are provided: |
| |
| * **Newcomers** will find environment and requirements files in :gh:`chipsalliance/f4pga-examples`, which are to be used |
| as explained in :ref:`examples:Getting`. |
| |
| * **Intermediate** users and contributors can use the minimal environment and requirements files included in the |
| Architecture Definition packages, as is done in the CI of this repository. |
| |
| * **Advanced** users and developers will get all the dependencies by bootstraping the environment in :gh:`SymbiFlow/f4pga-arch-defs`. |
| |
| Summarizing, the installation procedure implies: |
| |
| * Setting environment variables ``F4PGA_INSTALL_DIR`` and ``F4PGA_FAM`` (and optionally ``F4PGA_SHARE_DIR``), so that |
| CLI utilities can find tools and assets. |
| * Downloading and extracting the Architecture Definition tarballs. |
| * Getting the environment and requirements files, by cloning f4pga-examples or f4pga-arch-defs, or by using the ones |
| included in the tarballs. |
| * Bootstraping the Conda environment and optionally installing additional tools. |
| |
| .. NOTE:: |
| Architecture Definition packages are built and released in :gh:`SymbiFlow/f4pga-arch-defs`. |
| In this repository and in :gh:`chipsalliance/f4pga-examples`, pinned versions of the packages are used. |
| However, tracking the *latest* release is also supported. |
| See :ref:`arch-defs:Packages`. |
| |
| |
| .. _GettingStarted:ToolchainInstallation:Conda:Bumping: |
| |
| Bumping/overriding specific tools |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Find guidelines to tweak the Conda environment and to override specific tools at :ref:`conda-eda:Usage:Bumping`. |
| |
| In order to bump the Architecture Definition packages to an specific version, check the TIMESTAMP and the commit hash in |
| the job named ``GCS`` in a successful run of workflow :gh:`Automerge <SymbiFlow/f4pga-arch-defs/actions/workflows/Automerge.yml>` |
| on branch ``main`` of :gh:`SymbiFlow/f4pga-arch-defs`. |
| Alternatively, use the latest as explained in :ref:`arch-defs:Packages`. |
| |
| |
| .. _GettingStarted:ToolchainInstallation:Other: |
| |
| Other |
| ----- |
| |
| Apart from Conda, multiple other solutions exist for setting up all the tools required in F4PGA. |
| :gh:`hdl/packages` *is an index for several projects providing great prepackaged/prebuilt and easy-to-set-up |
| bleeding-edge packages/environments of electronic design automation (EDA) tools/projects*. |
| |
| |
| .. _GettingStarted:ToolchainInstallation:Other:Containers: |
| |
| Containers |
| ~~~~~~~~~~ |
| |
| Ready-to-use docker/podman containers are maintained in :gh:`hdl/containers` and made available through |
| `gcr.io/hdl-containers` or `ghcr.io/hdl/containers`. |
| Some of those include Conda, the Architecture Definitions and the f4pga Python package, so they are ready to use along |
| with the examples in :gh:`chipsalliance/f4pga-examples`. |
| See :ref:`containers:tools-and-images:f4pga`. |
| |
| .. HINT:: |
| :ghsharp:`574` is work in progress to provide an F4PGA Action |
| (see `Understanding GitHub Actions <https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions>`__) |
| based on ``*/conda/f4pga/*`` containers. |
| |
| |
| .. _GettingStarted:LoadingBitstreams: |
| |
| Loading bitstreams |
| ================== |
| |
| For every board, the loading process may vary and different tools may be required. |
| Typically, each tool supports a specific target family or the lines of products of a vendor. |
| Some of the most known are listed in :ref:`hdl/constraints: Programming and debugging <constraints:ProgDebug>`. |
| The tools used in the F4PGA Toolchain are e.g. ``OpenOCD``, ``tinyfpgab`` or ``tinyprog``. |
| Moreover, :gh:`OpenFPGALoader <trabucayre/openFPGALoader>` is a universal utility for programming FPGA devices, which is |
| becoming an alternative to the fragmentation in bitstream loading tools. |
| OpenFPGALoader supports many different boards with FPGAs based on the architectures including xc7, ECP5, iCE40 and many |
| more. |
| It can utilize a variety of the programming adapters based on JTAG, DAP interface, ORBTrace, DFU and FTDI chips. |
| |
| Installing OpenFPGALoader |
| ------------------------- |
| |
| OpenFPGALoader is available in several packaging solutions. |
| It can be installed with distribution specific package managers on Arch Linux and Fedora. |
| There are also prebuilt packages available in `conda <https://anaconda.org/litex-hub/openfpgaloader>`__ |
| or packages in tool :gh:`repository <trabucayre/openFPGALoader/releases>`. |
| OpenFPGALoader can also be built from sources. |
| For installation guidelines using both prebuilt packages and building from source, please refer to instructions in |
| :gh:`readme <trabucayre/openFPGALoader/blob/master/INSTALL.md>`. |
| |
| Usage |
| ----- |
| |
| For programming the FPGA, use one of these commands: |
| |
| .. sourcecode:: bash |
| |
| openFPGALoader -b <board> <bitstream> # (e.g. arty) |
| openFPGALoader -c <cable> <bitstream> # (e.g. digilent) |
| openFPGALoader -d <device> <bitstream> # (e.g. /dev/ttyUSB0) |
| |
| You can also list the supported boards, cables and FPGAs: |
| |
| .. sourcecode:: bash |
| |
| openFPGALoader --list-boards |
| openFPGALoader --list-cables |
| openFPGALoader --list-fpga |
| |
| If you encounter any issues, please refer to :doc:`openfpgaloader:index`. |