update b76840b20d
This commit is contained in:
commit
a300102e82
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Sphinx build info version 1
|
||||||
|
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||||
|
config: 5ee66292091ff32fcf1050388dd8a28f
|
||||||
|
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -0,0 +1,20 @@
|
||||||
|
.. _compatibility:boards:
|
||||||
|
|
||||||
|
Boards
|
||||||
|
######
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
`arty` can be any of the board names from the first column.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b arty bitstream.bit # Loading in SRAM (volatile)
|
||||||
|
openFPGALoader -b arty -f bitstream.bit # Writing in flash (non-volatile)
|
||||||
|
|
||||||
|
.. include:: boards.inc
|
||||||
|
|
||||||
|
* IF: Internal Flash
|
||||||
|
* EF: External Flash
|
||||||
|
* AS: Active Serial flash mode
|
||||||
|
* NA: Not Available
|
||||||
|
* NT: Not Tested
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
.. _compatibility:cables:
|
||||||
|
|
||||||
|
Cables
|
||||||
|
######
|
||||||
|
|
||||||
|
.. include:: cable.inc
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
.. _compatibility:fpgas:
|
||||||
|
|
||||||
|
FPGAs
|
||||||
|
#####
|
||||||
|
|
||||||
|
.. include:: fpga.inc
|
||||||
|
|
||||||
|
* IF: Internal Flash
|
||||||
|
* AS: Active Serial flash mode
|
||||||
|
* NA: Not Available
|
||||||
|
* NT: Not Tested
|
||||||
|
|
@ -0,0 +1,130 @@
|
||||||
|
.. _advanced-usage:
|
||||||
|
|
||||||
|
Advanced usage of openFPGALoader
|
||||||
|
################################
|
||||||
|
|
||||||
|
Resetting an FPGA
|
||||||
|
=================
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [options] -r
|
||||||
|
|
||||||
|
Using negative edge for TDO's sampling
|
||||||
|
======================================
|
||||||
|
|
||||||
|
If transaction are unstable you can try to change read edge by using
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [options] --invert-read-edge
|
||||||
|
|
||||||
|
Reading the bitstream from STDIN
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cat /path/to/bitstream.ext | openFPGALoader --file-type ext [options]
|
||||||
|
|
||||||
|
``--file-type`` is required to detect file type.
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
It's possible to load a bitstream through network:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# FPGA side
|
||||||
|
nc -lp port | openFPGALoader --file-type xxx [option]
|
||||||
|
|
||||||
|
# Bitstream side
|
||||||
|
nc -q 0 host port < /path/to/bitstream.ext
|
||||||
|
|
||||||
|
Automatic file type detection bypass
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Default behavior is to use file extension to determine file parser.
|
||||||
|
To avoid this mechanism ``--file-type type`` must be used.
|
||||||
|
|
||||||
|
FT231/FT232 bitbang mode and pins configuration
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
FT232R and ft231X may be used as JTAG programmer.
|
||||||
|
JTAG communications are emulated in bitbang mode.
|
||||||
|
|
||||||
|
To use these devices user needs to provides both the cable and the pin mapping:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [options] -cft23XXX --pins=TDI:TDO:TCK:TMS /path/to/bitstream.ext
|
||||||
|
|
||||||
|
where:
|
||||||
|
|
||||||
|
* ft23XXX may be ``ft232RL`` or ``ft231X``.
|
||||||
|
* TDI:TDO:TCK:TMS may be the pin ID (0 <= id <= 7) or string value.
|
||||||
|
|
||||||
|
allowed values are:
|
||||||
|
|
||||||
|
===== ==
|
||||||
|
value ID
|
||||||
|
===== ==
|
||||||
|
TXD 0
|
||||||
|
RXD 1
|
||||||
|
RTS 2
|
||||||
|
CTS 3
|
||||||
|
DTR 4
|
||||||
|
DSR 5
|
||||||
|
DCD 6
|
||||||
|
RI 7
|
||||||
|
===== ==
|
||||||
|
|
||||||
|
Writing to an arbitrary address in flash memory
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
With FPGA using an external SPI flash (*xilinx*, *lattice ECP5/nexus/ice40*, *anlogic*, *efinix*) option ``-o`` allows
|
||||||
|
one to write raw binary file to an arbitrary adress in FLASH.
|
||||||
|
|
||||||
|
Detect/read/write on primary/secondary flash memories
|
||||||
|
=====================================================
|
||||||
|
|
||||||
|
With FPGA using two external SPI flash (some *xilinx* boards) option ``--target-flash`` allows to select the QSPI chip.
|
||||||
|
|
||||||
|
To detect:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b kcu105 -f --target-flash {primary,secondary} --detect
|
||||||
|
|
||||||
|
To read the primary flash memory:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b kcu105 -f --target-flash primary --dump-flash --file-size N_BYTES mydump.bin
|
||||||
|
|
||||||
|
and the second flash memory:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b kcu105 -f --target-flash secondary --dump-flash --file-size N_BYTES --secondary-bitstream mydump.bin
|
||||||
|
|
||||||
|
To write on secondary flash memory:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b kcu105 -f --target-flash secondary --secondary-bitstream mySecondaryBitstream.bin
|
||||||
|
|
||||||
|
Using an alternative directory for *spiOverJtag*
|
||||||
|
================================================
|
||||||
|
|
||||||
|
By setting ``OPENFPGALOADER_SOJ_DIR`` it's possible to override default
|
||||||
|
*spiOverJtag* bitstreams directory:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
export OPENFPGALOADER_SOJ_DIR=/somewhere
|
||||||
|
openFPGALoader xxxx
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
OPENFPGALOADER_SOJ_DIR=/somewhere openFPGALoader xxxx
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
.. _first-steps:
|
||||||
|
|
||||||
|
First steps with openFPGALoader
|
||||||
|
###############################
|
||||||
|
|
||||||
|
Install
|
||||||
|
=======
|
||||||
|
|
||||||
|
Packages are available for Linux distributions, Windows (MSYS2) and macOS:
|
||||||
|
|
||||||
|
* *Arch Linux*: ``sudo pacman -S openfpgaloader``
|
||||||
|
|
||||||
|
* *Fedora*: ``sudo dnf copr enable mobicarte/openFPGALoader; sudo dnf install openFPGALoader``
|
||||||
|
|
||||||
|
* *MSYS2*: ``pacman -S mingw-w64-ucrt-x86_64-openFPGALoader``
|
||||||
|
|
||||||
|
* *macOS*: ``brew install openfpgaloader``
|
||||||
|
|
||||||
|
More instructions for other installation scenarios are available in :ref:`install`.
|
||||||
|
|
||||||
|
Programming a development board
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Just simply replace ``my_fpga_board`` with any FPGA board from :ref:`compatibility:boards`
|
||||||
|
(or ``openFPGALoader --list-boards``) in any of the two commands below, depending on if you want to program the volatile
|
||||||
|
part of your FPGA (faster but not persistent) or the flash part of your FPGA (slower but persistent):
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b my_fpga_board my_bitstream.bit # Program to SRAM
|
||||||
|
openFPGALoader -b my_fpga_board -f my_bitstream.bit # Program to flash
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
When a bitstream file is compatible with both memory load and FLASH write, the default behavior is to load bitstream
|
||||||
|
in memory.
|
||||||
|
|
||||||
|
Programming an "standalone" FPGA
|
||||||
|
================================
|
||||||
|
|
||||||
|
If your FPGA doesn't come with a built-in programmer or if you prefer to use an external cable, you can specify a cable
|
||||||
|
to use from :ref:`compatibility:cables` (or ``openFPGALoader --list-cables``):
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -c my_cable my_bitstream.bit # Program to SRAM
|
||||||
|
openFPGALoader -c my_cable -f my_bitstream.bit # Program to flash
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
For some cable (like digilent adapters) signals from the converter are not just directly to the FPGA.
|
||||||
|
For this case, the ``-c`` must be added.
|
||||||
|
|
||||||
|
.. HINT::
|
||||||
|
FTDI/FTDI-compatible cable users: the ``-d`` option lets you specify a specific FTDI device:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -d /dev/ttyUSBX
|
||||||
|
|
||||||
|
When the ``-d`` option is not provided, openFPGALoader will opens the first FTDI adapter it finds.
|
||||||
|
Therefore it is preferable to use this flag if your computer is connected to multiple FTDI devices.
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
===============
|
||||||
|
|
||||||
|
Please refer to :ref:`troubleshooting`.
|
||||||
|
|
@ -0,0 +1,207 @@
|
||||||
|
.. _install:
|
||||||
|
|
||||||
|
Installing openFPGALoader
|
||||||
|
#########################
|
||||||
|
|
||||||
|
Linux
|
||||||
|
=====
|
||||||
|
|
||||||
|
Debian/Ubuntu
|
||||||
|
----------
|
||||||
|
|
||||||
|
openFPGALoader is available in the default repositories:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt install openfpgaloader
|
||||||
|
|
||||||
|
Guix
|
||||||
|
----------
|
||||||
|
|
||||||
|
openFPGALoader is available in the default repositories:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
guix install openfpgaloader
|
||||||
|
|
||||||
|
To use openFPGALoader under GuixSystem without root privileges it is necessary to install the necessary udev rules. This can be done by extending ``udev-service-type`` in the ``operating-system`` configuration file with this package
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
(udev-rules-service 'openfpgaloader openfpgaloader #:groups '(\"plugdev\")
|
||||||
|
|
||||||
|
Additionally, ``plugdev`` group should be registered in the ``supplementary-groups`` field of your ``user-account``declaration. Refer to ``Base Services`` section in the manual for examples.
|
||||||
|
|
||||||
|
Arch Linux
|
||||||
|
----------
|
||||||
|
|
||||||
|
openFPGALoader is available in the default repositories:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo pacman -S openfpgaloader
|
||||||
|
|
||||||
|
Alternatively, you could build from source. First: install required libraries:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo pacman -S git cmake make gcc pkgconf libftdi libusb zlib hidapi gzip
|
||||||
|
|
||||||
|
Build step is similar as Debian
|
||||||
|
|
||||||
|
Fedora
|
||||||
|
------
|
||||||
|
|
||||||
|
openFPGALoader is available as a Copr repository:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo dnf copr enable mobicarte/openFPGALoader
|
||||||
|
sudo dnf install openFPGALoader
|
||||||
|
|
||||||
|
From source
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
This application uses ``libftdi1``, so this library must be installed (and, depending on the distribution, headers too):
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt install \
|
||||||
|
git \
|
||||||
|
gzip \
|
||||||
|
libftdi1-2 \
|
||||||
|
libftdi1-dev \
|
||||||
|
libhidapi-hidraw0 \
|
||||||
|
libhidapi-dev \
|
||||||
|
libudev-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
cmake \
|
||||||
|
pkg-config \
|
||||||
|
make \
|
||||||
|
g++
|
||||||
|
|
||||||
|
.. HINT::
|
||||||
|
``libudev-dev`` is optional, may be replaced by ``eudev-dev`` or just not installed.
|
||||||
|
|
||||||
|
By default, ``(e)udev`` support is enabled (used to open a device by his ``/dev/xx`` node).
|
||||||
|
If you don't want this option, use:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-DENABLE_UDEV=OFF
|
||||||
|
|
||||||
|
By default, ``cmsisdap`` support is enabled (used for colorlight I5, I9).
|
||||||
|
If you don't want this option, use:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-DENABLE_CMSISDAP=OFF
|
||||||
|
|
||||||
|
Alternatively you can manually specify the location of ``libusb`` and ``libftdi1``:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-DUSE_PKGCONFIG=OFF \
|
||||||
|
-DLIBUSB_LIBRARIES=<path_to_libusb> \
|
||||||
|
-DLIBFTDI_LIBRARIES=<path_to_libftdi> \
|
||||||
|
-DLIBFTDI_VERSION=<version> \
|
||||||
|
-DCMAKE_CXX_FLAGS="-I<libusb_include_dir> -I<libftdi1_include_dir>"
|
||||||
|
|
||||||
|
You may also need to add this if you see link errors between ``libusb`` and ``pthread``:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-DLINK_CMAKE_THREADS=ON
|
||||||
|
|
||||||
|
By default, ``libgpiod`` support is enabled
|
||||||
|
If you don't want this option, use:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-DENABLE_LIBGPIOD=OFF
|
||||||
|
|
||||||
|
Additionaly you have to install ``libgpiod``
|
||||||
|
|
||||||
|
To build the app:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
git clone https://github.com/trabucayre/openFPGALoader
|
||||||
|
cd openFPGALoader
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. # add -DBUILD_STATIC=ON to build a static version
|
||||||
|
# add -DENABLE_UDEV=OFF to disable udev support and -d /dev/xxx
|
||||||
|
# add -DENABLE_CMSISDAP=OFF to disable CMSIS DAP support
|
||||||
|
cmake --build .
|
||||||
|
# or
|
||||||
|
make -j$(nproc)
|
||||||
|
|
||||||
|
To install
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ sudo make install
|
||||||
|
|
||||||
|
The default install path is ``/usr/local``, to change it, use ``-DCMAKE_INSTALL_PREFIX=myInstallDir`` in cmake invokation.
|
||||||
|
|
||||||
|
Udev rules
|
||||||
|
----------
|
||||||
|
|
||||||
|
By default, users have no access to converters.
|
||||||
|
A rule file (:ghsrc:`99-openfpgaloader.rules <99-openfpgaloader.rules>`) for ``udev`` is provided at the root directory
|
||||||
|
of this repository.
|
||||||
|
These rules set access right and group (``plugdev``) when a converter is plugged.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo cp 99-openfpgaloader.rules /etc/udev/rules.d/
|
||||||
|
sudo udevadm control --reload-rules && sudo udevadm trigger # force udev to take new rule
|
||||||
|
sudo usermod -a $USER -G plugdev # add user to plugdev group
|
||||||
|
|
||||||
|
After that you need to unplug and replug your device.
|
||||||
|
|
||||||
|
.. HINT::
|
||||||
|
``usermod`` is used to add ``$USER`` as a member of ``plugdev`` group.
|
||||||
|
However this update is not taken into account immediately: it's required to
|
||||||
|
logout from current session and login again.
|
||||||
|
Check, by using ``id $USER``, if ``plugdev`` is mentioned after ``groups=``.
|
||||||
|
An alternate (and temporary) solution is to use ``sudo - $USER`` to have
|
||||||
|
your user seen as a member of ``plugdev`` group (works only for the current terminal).
|
||||||
|
|
||||||
|
macOS
|
||||||
|
=====
|
||||||
|
|
||||||
|
openFPGALoader is available as a `Homebrew <https://brew.sh>`__ formula:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
brew install openfpgaloader
|
||||||
|
|
||||||
|
Alternatively, if you want to build it by hand:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
brew install --only-dependencies openfpgaloader
|
||||||
|
brew install cmake pkg-config zlib gzip
|
||||||
|
git clone https://github.com/trabucayre/openFPGALoader
|
||||||
|
cd openFPGALoader
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
make -j
|
||||||
|
|
||||||
|
Windows
|
||||||
|
=======
|
||||||
|
|
||||||
|
Common
|
||||||
|
======
|
||||||
|
|
||||||
|
Bitstreams for *XC2C (coolrunner-II)* needs to be remapped using ``.map`` shipped with *ISE*.
|
||||||
|
*ISE* path is set at configure time using:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-DISE_PATH=/somewhere/Xilinx/ISE_VERS/
|
||||||
|
|
||||||
|
default: ``/opt/Xilinx/14.7``.
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
.. _troubleshooting:
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
###############
|
||||||
|
|
||||||
|
I installed openFPGALoader but it says `command not found` when I try to launch it
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
The correct spelling of the program is *openFPGALoader* with FPGA and the "L" of "Loader" in uppercase.
|
||||||
|
Ensure the spelling of the program is correct.
|
||||||
|
|
||||||
|
Gowin device could not communicate since last bitstream flashed. (issue `#206 <https://github.com/trabucayre/openFPGALoader/issues/206>`_)
|
||||||
|
==========================================================================================================================================
|
||||||
|
|
||||||
|
Gowin's FPGA may fails to be detected if **JTAGSEL_N** (pin 08 for *GW1N-4K*) is used as a GPIO.
|
||||||
|
To recover you have to pull down this pin (before power up) to recover JTAG interface (*UG292 - JTAGSELL_N section*).
|
||||||
|
|
||||||
|
JTAG init failed
|
||||||
|
================
|
||||||
|
|
||||||
|
Avoid using USB hubs and connect it directly to your PC USB port.
|
||||||
|
|
||||||
|
|
||||||
|
Tang Primer 20k program slow and stucked (issue `#250 <https://github.com/trabucayre/openFPGALoader/issues/250>`_)
|
||||||
|
==================================================================================================================
|
||||||
|
|
||||||
|
Check your openFPGALoader version:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
openFPGALoader -V
|
||||||
|
|
||||||
|
If it is older than release then v0.9.0, install the most recent version (from commit `f5b89bff68a5e2147404a895c075773884077438 <https://github.com/trabucayre/openFPGALoader/commit/fe259fb78d185b3113661d04cd7efa9ae0232425>`_ or later).
|
||||||
|
|
||||||
|
Cannot flash Tang Nano 20k (issue `#251 <https://github.com/trabucayre/openFPGALoader/issues/511>`_)
|
||||||
|
====================================================================================================
|
||||||
|
|
||||||
|
Some firmware version cannot be flashed on Linux-based systems. Version 2024122312 is such an example. It seems this version was not published on the `SiPeed website <https://api.dl.sipeed.com/TANG/Debugger/onboard/BL616/>`_, however some boards sold have this firmware.
|
||||||
|
|
||||||
|
The cause of the problem is the debugger on the Tang Nano, specifically the firmware of this debugger. This firmware can be easily updated by following `these <https://wiki.sipeed.com/hardware/en/tang/common-doc/update_debugger.html>`_ steps.
|
||||||
|
|
||||||
|
Cannot flash Tang Nano 9k (issue `#251 <https://github.com/trabucayre/openFPGALoader/issues/251>`_)
|
||||||
|
===================================================================================================
|
||||||
|
|
||||||
|
This is a device issue, erase its Embedded Flash using Official GoWin Programmer (preferentially in Windows) and SRAM too, then you can use openFPGALoader again.
|
||||||
|
|
||||||
|
Unable to open FTDI device: -4 (usb_open() failed) (issue `#245 <https://github.com/trabucayre/openFPGALoader/issues/245>`_)
|
||||||
|
============================================================================================================================
|
||||||
|
|
||||||
|
Edit your `/etc/udev/rules.d/99-ftdi.rules` file exchanging your programming device permissions.
|
||||||
|
|
||||||
|
For more information, check the udev section from `this guide <install.rst>`_
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
openFPGALoader: universal utility for programming FPGA
|
||||||
|
######################################################
|
||||||
|
|
||||||
|
Welcome to the documentation of openFPGALoader!
|
||||||
|
|
||||||
|
openFPGALoader is a universal utility for programming FPGAs.
|
||||||
|
Compatible with many boards, cables and FPGA from major manufacturers (Xilinx, Altera/Intel, Lattice, Gowin, Efinix, Anlogic, Cologne Chip).
|
||||||
|
openFPGALoader works on Linux, Windows and macOS.
|
||||||
|
|
||||||
|
Not sure if your hardware is supported? Check the hardware compatibility lists:
|
||||||
|
|
||||||
|
* :ref:`compatibility:fpgas`
|
||||||
|
* :ref:`compatibility:boards`
|
||||||
|
* :ref:`compatibility:cables`
|
||||||
|
|
||||||
|
Also checkout the vendor-specific documentation:
|
||||||
|
|
||||||
|
* `Anlogic <https://trabucayre.github.io/openFPGALoader/vendors/anlogic.html>`__
|
||||||
|
* `Cologne Chip <https://trabucayre.github.io/openFPGALoader/vendors/colognechip.html>`__
|
||||||
|
* `Efinix <https://trabucayre.github.io/openFPGALoader/vendors/efinix.html>`__
|
||||||
|
* `Gowin <https://trabucayre.github.io/openFPGALoader/vendors/gowin.html>`__
|
||||||
|
* `Intel/Altera <https://trabucayre.github.io/openFPGALoader/vendors/intel.html>`__
|
||||||
|
* `Lattice <https://trabucayre.github.io/openFPGALoader/vendors/lattice.html>`__
|
||||||
|
* `Xilinx <https://trabucayre.github.io/openFPGALoader/vendors/xilinx.html>`__
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: User Guide
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
guide/first-steps
|
||||||
|
guide/install
|
||||||
|
guide/troubleshooting
|
||||||
|
guide/advanced
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: Compatibility
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
compatibility/fpga
|
||||||
|
compatibility/board
|
||||||
|
compatibility/cable
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: Vendors
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
vendors/anlogic
|
||||||
|
vendors/colognechip
|
||||||
|
vendors/efinix
|
||||||
|
vendors/gowin
|
||||||
|
vendors/intel
|
||||||
|
vendors/lattice
|
||||||
|
vendors/xilinx
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: Development
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
todo
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
.. _todo:
|
||||||
|
|
||||||
|
To Do
|
||||||
|
#####
|
||||||
|
|
||||||
|
Global
|
||||||
|
======
|
||||||
|
|
||||||
|
* improve error message (be more precise)
|
||||||
|
* catch all exception
|
||||||
|
* documentation (code + API)
|
||||||
|
|
||||||
|
Cable
|
||||||
|
=====
|
||||||
|
|
||||||
|
* fix *ch552* (*Sipeed tangNano*): works with *SRAM*, fails with *Flash*
|
||||||
|
* *busblaster* support
|
||||||
|
* *anlogic* cable support
|
||||||
|
|
||||||
|
Devices/boards
|
||||||
|
==============
|
||||||
|
|
||||||
|
* improve frequency configuration. Use FPGA, cable or --freq args maximum frequency
|
||||||
|
* rework *cyclone10* eeprom access to avoid using FT2232 interfaceB Spi emulation (only supported by trenz board)
|
||||||
|
* fix checksum computation with *gowin GW2A*
|
||||||
|
* add support for *tangPrimer* (*anlogic EG4S20*)
|
||||||
|
|
||||||
|
Misc
|
||||||
|
====
|
||||||
|
|
||||||
|
* fix spiFlash class to be able to write everywhere (currently offset is hardcoded to 0)
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
.. _anlogic:
|
||||||
|
|
||||||
|
Anlogic notes
|
||||||
|
#############
|
||||||
|
|
||||||
|
Sipeed Lichee Tang
|
||||||
|
==================
|
||||||
|
|
||||||
|
For this target, *openFPGALoader* supports *svf* and *bit*.
|
||||||
|
|
||||||
|
bit file load (memory)
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -m -b licheeTang /somewhere/project/prj/*.bit
|
||||||
|
|
||||||
|
Since ``-m`` is the default, this argument is optional.
|
||||||
|
|
||||||
|
bit file load (spi flash)
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -f -b licheeTang /somewhere/project/prj/*.bit
|
||||||
|
|
||||||
|
svf file load
|
||||||
|
-------------
|
||||||
|
|
||||||
|
It's possible to produce this file by using *TD*:
|
||||||
|
|
||||||
|
* Tools->Device Chain
|
||||||
|
* Add your bit file
|
||||||
|
* Option : Create svf
|
||||||
|
|
||||||
|
or by using `prjtang project <https://github.com/mmicko/prjtang>`__:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ../
|
||||||
|
make
|
||||||
|
|
||||||
|
Now a file called *tangbit* is present in current directory and has to be used as follows:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
tangbit --input /somewhere.bit --svf bitstream.svf
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b licheeTang /somewhere/*.svf
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
.. _colognechip:
|
||||||
|
|
||||||
|
Cologne Chip notes
|
||||||
|
##################
|
||||||
|
|
||||||
|
Supported Boards/Cables
|
||||||
|
=======================
|
||||||
|
|
||||||
|
* GateMate Evaluation Board using board parameters ``-b gatemate_evb_jtag`` or ``-b gatemate_evb_spi``
|
||||||
|
* GateMate Programmer using cable parameter ``-c gatemate_pgm``
|
||||||
|
|
||||||
|
Programming Modes
|
||||||
|
=================
|
||||||
|
|
||||||
|
Supported configuration files are bitfiles ``*.bit`` and it's ASCII equivalents ``*.cfg``.
|
||||||
|
|
||||||
|
JTAG Configuration
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Performs an active hardware reset and writes the configuration into the FPGA latches via JTAG. The configuration mode pins ``CFG_MD[3:0]`` must be set to 0xC (JTAG).
|
||||||
|
|
||||||
|
1. Program using Evaluation Board:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_evb_jtag <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
2. Program using Programmer Cable:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -c gatemate_pgm <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
SPI Configuration
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Performs an active hardware reset and writes the configuration into the FPGA latches via SPI. The configuration mode pins ``CFG_MD[3:0]`` must be set to 0x4 (SPI passive).
|
||||||
|
|
||||||
|
1. Program using Evaluation Board:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_evb_spi <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
2. Program using Programmer Cable:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_pgm_spi <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
JTAG Flash Access
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
It is possible to access external flashes via the internal JTAG-SPI-bypass. The configuration mode pins ``CFG_MD[3:0]`` must be set to 0xC (JTAG). Note that the FPGA will not start automatically.
|
||||||
|
|
||||||
|
1. Write to flash using Evaluation Board:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_evb_jtag <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
2. Write to flash using Programmer Cable:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -c gatemate_pgm -f <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
The `offset` parameter can be used to store data at any point in the flash, e.g.:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_evb_jtag -o <offset> <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
SPI Flash Access
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If the programming device and FPGA share the same SPI signals, it is possible to hold the FPGA in reset and write data to the flash. The configuration mode can be set as desired. If the FPGA should start from the external memory after reset, the configuration mode pins ``CFG_MD[3:0]`` set to 0x0 (SPI active).
|
||||||
|
|
||||||
|
1. Write to flash using Evaluation Board:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_evb_spi -f <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
2. Write to flash using Programmer Cable:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_pgm_spi -f <bitfile>.cfg.bit
|
||||||
|
|
||||||
|
The `offset` parameter can be used to store data at any point in the flash, e.g.:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b gatemate_evb_spi -o <offset> <bitfile>.cfg.bit
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
.. _efinix:
|
||||||
|
|
||||||
|
Efinix notes
|
||||||
|
############
|
||||||
|
|
||||||
|
Firant and Xyloni boards (efinix trion T8)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
``.hex`` file is the default format generated by *Efinity IDE*, so nothing special must be done to generates this file.
|
||||||
|
|
||||||
|
*openFPGALoader* supports only active mode (SPI) (*JTAG* is WIP).
|
||||||
|
|
||||||
|
hex file load
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b fireant /somewhere/project/outflow/*.hex
|
||||||
|
|
||||||
|
or, for xyloni board
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b xyloni_spi /somewhere/project/outflow/*.hex
|
||||||
|
|
||||||
|
Since openFPGALoader access the flash directly in SPI mode the ``-b fireant``, ``-b xyloni_spi`` is required (no
|
||||||
|
autodetection possible).
|
||||||
|
|
||||||
|
Trion and Titanium JTAG usage
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
*openFPGALoader* supports loading to RAM and SPI Flash with JTAG
|
||||||
|
|
||||||
|
Tested with J-Link BASE
|
||||||
|
|
||||||
|
bin file load
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader --cable jlink_base -m /somewhere/project/outflow/*.bin
|
||||||
|
|
||||||
|
hex file flash
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Example for ti60f225.
|
||||||
|
NOTE: JTAG chains with more than one device (eg --index-chain) are currently not supported for writing to SPI flash
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader --cable jlink_base --fpga-part ti60f225 -f /somewhere/project/outflow/*.hex
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
.. _gowin:
|
||||||
|
|
||||||
|
Gowin notes
|
||||||
|
###########
|
||||||
|
|
||||||
|
GOWIN GW1N
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
|
||||||
|
* Trenz TEC0117
|
||||||
|
* Sipeed Tang Nano
|
||||||
|
* Sipeed Tang Nano 4K
|
||||||
|
* Honeycomb
|
||||||
|
* RUNBER
|
||||||
|
|
||||||
|
``.fs`` file is the default format generated by *Gowin IDE*, so nothing special must be done to generates this file.
|
||||||
|
|
||||||
|
Since the same file is used for SRAM and Flash a CLI argument is used to specify the destination.
|
||||||
|
|
||||||
|
Flash SRAM
|
||||||
|
----------
|
||||||
|
|
||||||
|
with ``-m``:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -m -b BOARD_NAME impl/pnr/*.fs
|
||||||
|
|
||||||
|
where ``BOARD_NAME`` is:
|
||||||
|
|
||||||
|
* ``tec0117``
|
||||||
|
* ``tangnano``
|
||||||
|
* ``tangnano1k``
|
||||||
|
* ``tangnano4k``
|
||||||
|
* ``tangnano9k``
|
||||||
|
* ``tangnano20k``
|
||||||
|
* ``tangprimer20k``
|
||||||
|
* ``runber``
|
||||||
|
|
||||||
|
Flash
|
||||||
|
-----
|
||||||
|
|
||||||
|
.. ATTENTION::
|
||||||
|
Only with Trenz TEC0117 and runber.
|
||||||
|
|
||||||
|
with ``-f``, file load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -f -b BOARD_NAME impl/pnr/*.fs
|
||||||
|
|
||||||
|
where ``BOARD_NAME`` is:
|
||||||
|
|
||||||
|
* ``tec0117``
|
||||||
|
* ``runber``
|
||||||
|
|
||||||
|
It's possible to flash external SPI Flash (connected to MSPI) in bscan mode by using ``--external-flash`` instead of
|
||||||
|
``-f``.
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
|
||||||
|
Gowin's FPGA may fails to be detected if **JTAGSEL_N** (pin 08 for *GW1N-4K*) is used as a GPIO.
|
||||||
|
To recover you have to pull down this pin (before power up) to recover JTAG interface (*UG292 - JTAGSELL_N section*).
|
||||||
|
|
||||||
|
User Flash
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. ATTENTION::
|
||||||
|
User Flash support is based on reverse engineering of the JTAG protocol. This functionality should be considered
|
||||||
|
experimental as it hasn't been thoroughly tested, and may in some circumstances destroy your device.
|
||||||
|
|
||||||
|
Gowin FPGA come with extra flash space that can be read and written from the programmable logic ("User Flash"). This
|
||||||
|
flash section can also be programmed via the JTAG interface:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader --write-flash /path/to/bitstream.fs --user-flash /path/to/flash.bin
|
||||||
|
|
@ -0,0 +1,222 @@
|
||||||
|
.. _intel:
|
||||||
|
|
||||||
|
Intel notes
|
||||||
|
###########
|
||||||
|
|
||||||
|
Intel/Altera
|
||||||
|
============
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
|
||||||
|
* CYC1000
|
||||||
|
* C10LP-RefKit
|
||||||
|
* DE0
|
||||||
|
* de0nano
|
||||||
|
|
||||||
|
Loading a bitstream
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
SVF and RBF files are supported.
|
||||||
|
|
||||||
|
``sof`` to ``svf`` generation:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
quartus_cpf -c -q 12.0MHz -g 3.3 -n p project_name.sof project_name.svf
|
||||||
|
|
||||||
|
``sof`` to ``rbf`` generation:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
quartus_cpf --option=bitstream_compression=off -c project_name.sof project_name.rbf
|
||||||
|
|
||||||
|
.. WARNING::
|
||||||
|
As mentioned in ``cyclone`` handbooks, real-time decompression is not supported by FPGA in JTAG mode.
|
||||||
|
Keep in mind to disable this option.
|
||||||
|
|
||||||
|
You can have Quartus automatically generate SVF and RBF files by adding these lines to the ``qsf`` file, or include them in a ``tcl`` file in FuseSoC
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF
|
||||||
|
set_global_assignment -name GENERATE_RBF_FILE ON
|
||||||
|
set_global_assignment -name GENERATE_SVF_FILE ON
|
||||||
|
|
||||||
|
file load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b boardname project_name.svf
|
||||||
|
# or
|
||||||
|
openFPGALoader -b boardname project_name.rbf
|
||||||
|
|
||||||
|
with ``boardname`` = ``de0``, ``cyc1000``, ``c10lp-refkit``, ``de0nano``, ``de0nanoSoc`` or ``qmtechCycloneV``.
|
||||||
|
|
||||||
|
SPI flash
|
||||||
|
---------
|
||||||
|
|
||||||
|
RPD and RBF are supported. POF is only supported for MAX10 (internal flash).
|
||||||
|
|
||||||
|
``pof`` to ``rpd``:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
quartus_cpf -c project_name.pof project_name.rpd
|
||||||
|
|
||||||
|
``sof`` to ``rpd``:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# CYC1000
|
||||||
|
quartus_cpf -o auto_create_rpd=on -c -d EPCQ16A -s 10CL025YU256C8G project_name.svf project_name.jic
|
||||||
|
# C10LP-RefKit
|
||||||
|
quartus_cpf -o auto_create_rpd=on -c -d EPCQ16A -s 10CL055YU484C8G project_name.svf project_name.jic
|
||||||
|
|
||||||
|
file load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b boardname -r project_name_auto.rpd
|
||||||
|
# or
|
||||||
|
openFPGALoader -b boardname -r project_name.rbf
|
||||||
|
|
||||||
|
with ``boardname`` = ``cyc1000``, ``c10lp-refkit``.
|
||||||
|
|
||||||
|
MAX10: FPGA Programming Guide
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Supported Boards:
|
||||||
|
|
||||||
|
* step-max10_v1
|
||||||
|
* analogMax
|
||||||
|
|
||||||
|
Supported File Types:
|
||||||
|
|
||||||
|
* ``svf``
|
||||||
|
* ``pof``
|
||||||
|
* ``bin`` (arbitrary binary files)
|
||||||
|
|
||||||
|
Internal Flash Organization
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
The internal flash is divided into five sections:
|
||||||
|
|
||||||
|
- ``UFM1`` and ``UFM0`` for user data
|
||||||
|
- ``CFM2``, ``CFM1``, and ``CFM0`` for storing one or two bitstreams
|
||||||
|
|
||||||
|
.. image:: ../figs/max10_flash-memory.png
|
||||||
|
:alt: max10 internal flash memory structure
|
||||||
|
|
||||||
|
Flash usage depends on the configuration mode. In all modes:
|
||||||
|
|
||||||
|
- ``CFM0`` is used to store a bitstream
|
||||||
|
- ``UFM0`` and ``UFM1`` are available for user data
|
||||||
|
- The remaining ``CFMx`` sections (``CFM1``, ``CFM2``) can be used for
|
||||||
|
additional bitstreams or user data
|
||||||
|
|
||||||
|
Using ``svf``
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This method is the **simplest** (and slowest) way to load or write a bitstream.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This method is required to load a bitstream into *SRAM*.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b boardname] -c cablename the_svf_file.svf
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
* ``boardname``: One of the boards supported by ``openFPGALoader`` (optional).
|
||||||
|
* ``cablename``: One of the supported cables (see ``--list-cables``).
|
||||||
|
|
||||||
|
Using ``pof``
|
||||||
|
-------------
|
||||||
|
|
||||||
|
To write a bitstream into the internal flash, using a ``pof`` file is the
|
||||||
|
**fastest** approach.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b boardname] [--flash-sector] -c cablename the_pof_file.pof
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
* ``boardname``: A board supported by ``openFPGALoader`` (optional).
|
||||||
|
* ``cablename``: One of the supported cables (see ``--list-cables``).
|
||||||
|
* ``--flash-sector``: Optional. Comma-separated list of sectors to update.
|
||||||
|
If omitted, the entire flash is erased and reprogrammed.
|
||||||
|
|
||||||
|
Accepted Flash Sectors:
|
||||||
|
|
||||||
|
* ``UFM0``, ``UFM1``: User Flash Memory sections.
|
||||||
|
* ``CFM0``, ``CFM1``, ``CFM2``: Configuration Flash Memory sectors.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -c usb-blaster --flash-sector UFM1,CFM0,CFM2 the_pof_file.pof
|
||||||
|
|
||||||
|
This command updates ``UFM1``, ``CFM0``, and ``CFM2``, leaving all other
|
||||||
|
sectors unchanged.
|
||||||
|
|
||||||
|
Using an arbitrary binary file
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Unlike Altera Quartus, it supports any binary format without limitations
|
||||||
|
(not limited to a ``.bin``).
|
||||||
|
With this feature, it's not required to provides the file at gateware build
|
||||||
|
time: it may be updated at any time without gateware modification/rebuild.
|
||||||
|
|
||||||
|
.. note:: This approach is useful to updates, for example, a softcore CPU firmware.
|
||||||
|
|
||||||
|
**Basic usage:**
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b boardname] -c cablename [--offset $OFFSET] the_bin_file.bin
|
||||||
|
|
||||||
|
* ``boardname``: a boards supported by ``openFPGALoader`` (optional).
|
||||||
|
* ``cablename``: One of the supported cables (see ``--list-cables``).
|
||||||
|
* ``$OFFSET``: To start writing ``$OFFSET`` bytes after *User Flash memory*
|
||||||
|
start address (optional, default: 0x00).
|
||||||
|
|
||||||
|
This command erases and writes the contents of ``the_bin_file.bin`` into
|
||||||
|
``UFM1`` and ``UFM0``. If ``--offset`` is specified, the binary content is
|
||||||
|
written starting from that offset.
|
||||||
|
|
||||||
|
Depending on the max10 configuration mode (see picture), it's possible to
|
||||||
|
extend *User Flash Memory* area by using `CFM2` and `CFM1`. This is not the
|
||||||
|
default behavior and user must explictly change this by using
|
||||||
|
`--flash-sector` argument:
|
||||||
|
|
||||||
|
* ``--flash-sector UFMx`` or ``--flash-sector CFMy`` (with x= 1 or 0 and
|
||||||
|
y = 2 or 1) to specify only one sector
|
||||||
|
* ``--flash-sector UFM1,UFM0`` is equivalent to the default behavior
|
||||||
|
* ``--flash-sector UFM1,CFM2`` to erase and update ``UFM1``, ``UFM0``
|
||||||
|
and ``CFM2`` (equivalent to ``--flash-sector UFM1,UFM0,CFM2``)
|
||||||
|
|
||||||
|
Intel/Altera (Old Boards)
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
|
||||||
|
* Cyclone II (FPGA) (Tested OK: EP2C5T144C8N)
|
||||||
|
* Max II (CPLD) (Tested OK: EPM240T100C5N)
|
||||||
|
|
||||||
|
Loading a Serial Vector Format (.svf)
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
SVF files are supported.
|
||||||
|
|
||||||
|
To load the file:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -c usb-blaster project_name.svf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
.. _lattice:
|
||||||
|
|
||||||
|
Lattice notes
|
||||||
|
#############
|
||||||
|
|
||||||
|
MachXO2/MachXO3
|
||||||
|
===============
|
||||||
|
|
||||||
|
Flash memory
|
||||||
|
------------
|
||||||
|
|
||||||
|
``.jed`` file is the default format generated by *Lattice Diamond*, so nothing special must be done to generates this
|
||||||
|
file.
|
||||||
|
|
||||||
|
File load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b yourboard] [--flash-sector CFG0] impl1/*.jed
|
||||||
|
|
||||||
|
where ``yourboard`` may be:
|
||||||
|
|
||||||
|
* ``machX02EVN``
|
||||||
|
* ``machX03EVN``
|
||||||
|
* ``machXO3SK``
|
||||||
|
|
||||||
|
and where ``--flash-sector CFG0`` is needed for the MachXO3D Breakout Board.
|
||||||
|
|
||||||
|
``.bit`` may also be used for *machXO2*
|
||||||
|
|
||||||
|
SRAM
|
||||||
|
----
|
||||||
|
|
||||||
|
To generates ``.bit`` file *Bitstream file* must be checked under *Exports Files* in *Lattice Diamond* left panel.
|
||||||
|
|
||||||
|
File load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b yourboard] impl1/*.bit
|
||||||
|
|
||||||
|
where ``yourboard`` may be:
|
||||||
|
|
||||||
|
* ``machX02EVN``
|
||||||
|
* ``machX03EVN``
|
||||||
|
* ``machXO3SK``
|
||||||
|
|
||||||
|
iCE40
|
||||||
|
=====
|
||||||
|
|
||||||
|
``.bin`` is the default format generated by *nextpnr*, so nothing special must be done.
|
||||||
|
|
||||||
|
Since most ice40 boards uses the same pinout between *FTDI* and *SPI flash* a generic *ice40_generic* board is provided.
|
||||||
|
|
||||||
|
For the specific case of the *iCE40HXXK-EVB* where no onboard programmer is present, please use this:
|
||||||
|
|
||||||
|
============= ===============
|
||||||
|
FTDI iCE40HXXK-EVB
|
||||||
|
============= ===============
|
||||||
|
SI (ADBUS1) Pin 8
|
||||||
|
SCK (ADBUS0) Pin 9
|
||||||
|
SO (ADBUS2) Pin 7
|
||||||
|
CS (ABDUS4) Pin 10
|
||||||
|
RST (ADBUS6 Pin 6
|
||||||
|
DONE (ADBUS7) Pin 5
|
||||||
|
============= ===============
|
||||||
|
|
||||||
|
Bin file load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader -b ice40_generic /somewhere/*.bin
|
||||||
|
|
||||||
|
Since it's a direct access to the flash (SPI) the ``-b`` option is required.
|
||||||
|
|
||||||
|
ECP5/ECP3/Certus-NX/CertusPro-NX/Crosslink-NX
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
SRAM
|
||||||
|
----
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b yourBoard] [-c yourCable] -m project_name/*.bit
|
||||||
|
|
||||||
|
.. HINT::
|
||||||
|
By default, openFPGALoader loads bitstream in memory, so the ``-m`` argument is optional.
|
||||||
|
|
||||||
|
SPI Flash
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
SPI Flash write is not supported for ECP3 family.
|
||||||
|
|
||||||
|
BIT:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b yourBoard] [-c yourCable] -f project_name/*.bit # or *.bin
|
||||||
|
|
||||||
|
MCS:
|
||||||
|
|
||||||
|
To generate ``.mcs`` file *PROM File* must be checked under *Exports Files* in *Lattice Diamond* left panel.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-b yourBoard] [-c yourCable] project_name/*.mcs
|
||||||
|
|
@ -0,0 +1,124 @@
|
||||||
|
.. _xilinx:
|
||||||
|
|
||||||
|
Xilinx notes
|
||||||
|
############
|
||||||
|
|
||||||
|
To simplify further explanations, we consider the project is generated in the current directory.
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
1. Spartan Edge Accelerator Board has only pinheader, so the cable must be provided
|
||||||
|
|
||||||
|
2. A *JTAG* <-> *SPI* bridge (used to write bitstream in FLASH) is available for some device, see
|
||||||
|
:ghsrc:`spiOverJtag <spiOverJtag>` to check if your model is supported.
|
||||||
|
|
||||||
|
3. Board provides the device/package model, but if the targeted board is not officially supported but the FPGA yes,
|
||||||
|
you can use ``--fpga-part`` to provide the model.
|
||||||
|
|
||||||
|
4. With spartan3, the flash is an independent JTAG device.
|
||||||
|
User has to use ``--index-chain`` to access FPGA (RAM only) or flash (write/read only).
|
||||||
|
|
||||||
|
.. WARNING::
|
||||||
|
``*.bin`` may be loaded in memory or in flash, but this extension is a classic extension for CPU firmware and, by
|
||||||
|
default, *openFPGALoader* loads file in memory.
|
||||||
|
Double check ``-m`` / ``-f`` when you want to use a firmware for a softcore (or anything, other than a bitstream) to
|
||||||
|
write somewhere in the FLASH device).
|
||||||
|
|
||||||
|
``.bit`` file is the default format generated by *vivado*, so nothing special task must be done to generate this
|
||||||
|
bitstream.
|
||||||
|
|
||||||
|
``.bin`` is not, by default, produced.
|
||||||
|
To have access to this file you need to configure the tool:
|
||||||
|
|
||||||
|
- GUI: *Tools* -> *Settings* -> *Bitstreams* -> check ``-bin_file``.
|
||||||
|
- TCL: append your *TCL* file with ``set_property STEPS.WRITE_BITSTREAM.ARGS.BIN_FILE true [get_runs impl_1]``.
|
||||||
|
|
||||||
|
.. WARNING::
|
||||||
|
For alchitry board the bitstream must be configured with a buswidth of 1 or 2.
|
||||||
|
Quad mode can't be used with alchitry's FLASH.
|
||||||
|
|
||||||
|
.. WARNING::
|
||||||
|
For boards based on a Zynq (7000 or MPSoC), boot mode must be configured for JTAG (for Zedboard JP7->JP11 must be
|
||||||
|
to GND).
|
||||||
|
|
||||||
|
Loading a bitstream
|
||||||
|
===================
|
||||||
|
|
||||||
|
``.bit`` and ``.bin`` are allowed to be loaded in memory.
|
||||||
|
|
||||||
|
File load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-m] -b arty *.runs/impl_1/*.bit (or *.bin)
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [-m] -b spartanEdgeAccelBoard -c digilent_hs2 *.runs/impl_1/*.bit (or *.bin)
|
||||||
|
|
||||||
|
|
||||||
|
SPI flash
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
``.bit``, ``.bin``, and ``.mcs`` are supported for FLASH.
|
||||||
|
|
||||||
|
``.mcs`` must be generated through Vivado with a tcl script like:
|
||||||
|
|
||||||
|
.. WARNING::
|
||||||
|
For boards based on Zynq device (7000 and MPSoC) SPI flash is not accessible through PL.
|
||||||
|
|
||||||
|
.. code-block:: tcl
|
||||||
|
|
||||||
|
set project [lindex $argv 0]
|
||||||
|
|
||||||
|
set bitfile "${project}.runs/impl_1/${project}.bit"
|
||||||
|
set mcsfile "${project}.runs/impl_1/${project}.mcs"
|
||||||
|
|
||||||
|
write_cfgmem -format mcs -interface spix4 -size 16 \
|
||||||
|
-loadbit "up 0x0 $bitfile" -loaddata "" \
|
||||||
|
-file $mcsfile -force
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
``-interface spix4`` and ``-size 16`` depends on SPI flash capability and size.
|
||||||
|
|
||||||
|
The tcl script is used with:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
vivado -nolog -nojournal -mode batch -source script.tcl -tclargs myproject
|
||||||
|
|
||||||
|
File load:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader [--fpga-part xxxx] -f -b arty *.runs/impl_1/*.mcs (or .bit / .bin)
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
``-f`` is required to write bitstream (without them ``.bit`` and ``.bin`` are loaded in memory).
|
||||||
|
|
||||||
|
.. NOTE::
|
||||||
|
``--fpga-part`` is only required if this information is not provided at ``board.hpp`` level or if the board is not
|
||||||
|
officially supported.
|
||||||
|
device/package format is something like xc7a35tcsg324 (arty model).
|
||||||
|
See :ghsrc:`src/board.hpp <src/board.hpp>`, or :ghsrc:`spiOverJtag <spiOverJtag>` directory for examples.
|
||||||
|
|
||||||
|
Some boards with UltraScale FPGAs, like the VCU118 and KCU16, support the SPIx8 (Dual Quad SPI) configuration.
|
||||||
|
In this case, the ``spix8`` option ``write_cfgmem`` on the above example can be used to generate two ``.mcs`` files,
|
||||||
|
to fit bigger designs or for faster programming. Only ``.mcs`` files can be used to program the FPGA in this case.
|
||||||
|
|
||||||
|
In this case, to load the two ``.mcs`` files:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader --board vcu118 -f --target-flash both --bitstream *.runs/impl_1/*_primary.mcs --secondary-bitstream *.runs/impl_1/*_secondary.mcs
|
||||||
|
|
||||||
|
On these boards, each SPI flash can be programmed independently with the ``--target-flash`` option.
|
||||||
|
The default target is the ``primary`` flash.
|
||||||
|
|
||||||
|
For example, to program only the secondary flash with arbitrary data not related to FPGA configuration:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
openFPGALoader --board vcu118 -f --target-flash secondary --bitstream arbitrary_data
|
||||||
|
|
@ -0,0 +1,925 @@
|
||||||
|
/*
|
||||||
|
* basic.css
|
||||||
|
* ~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Sphinx stylesheet -- basic theme.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* -- main layout ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.clearer {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.section::after {
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- relbar ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.related {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related h3 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0 10px;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related li.right {
|
||||||
|
float: right;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- sidebar --------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.sphinxsidebarwrapper {
|
||||||
|
padding: 10px 5px 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar {
|
||||||
|
float: left;
|
||||||
|
width: 230px;
|
||||||
|
margin-left: -100%;
|
||||||
|
font-size: 90%;
|
||||||
|
word-wrap: break-word;
|
||||||
|
overflow-wrap : break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul ul,
|
||||||
|
div.sphinxsidebar ul.want-points {
|
||||||
|
margin-left: 20px;
|
||||||
|
list-style: square;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar form {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar input {
|
||||||
|
border: 1px solid #98dbcc;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar #searchbox form.search {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar #searchbox input[type="text"] {
|
||||||
|
float: left;
|
||||||
|
width: 80%;
|
||||||
|
padding: 0.25em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar #searchbox input[type="submit"] {
|
||||||
|
float: left;
|
||||||
|
width: 20%;
|
||||||
|
border-left: none;
|
||||||
|
padding: 0.25em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- search page ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
ul.search {
|
||||||
|
margin: 10px 0 0 20px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.search li {
|
||||||
|
padding: 5px 0 5px 20px;
|
||||||
|
background-image: url(file.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.search li a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.search li p.context {
|
||||||
|
color: #888;
|
||||||
|
margin: 2px 0 0 30px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.keywordmatches li.goodmatch a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- index page ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
table.contentstable {
|
||||||
|
width: 90%;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.contentstable p.biglink {
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.biglink {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.linkdescr {
|
||||||
|
font-style: italic;
|
||||||
|
padding-top: 5px;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- general index --------------------------------------------------------- */
|
||||||
|
|
||||||
|
table.indextable {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable td {
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable > tbody > tr > td > ul {
|
||||||
|
padding-left: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable tr.pcap {
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable tr.cap {
|
||||||
|
margin-top: 10px;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.toggler {
|
||||||
|
margin-right: 3px;
|
||||||
|
margin-top: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.modindex-jumpbox {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
margin: 1em 0 1em 0;
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.genindex-jumpbox {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
margin: 1em 0 1em 0;
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- domain module index --------------------------------------------------- */
|
||||||
|
|
||||||
|
table.modindextable td {
|
||||||
|
padding: 2px;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- general body styles --------------------------------------------------- */
|
||||||
|
|
||||||
|
div.body {
|
||||||
|
min-width: 360px;
|
||||||
|
max-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p, div.body dd, div.body li, div.body blockquote {
|
||||||
|
-moz-hyphens: auto;
|
||||||
|
-ms-hyphens: auto;
|
||||||
|
-webkit-hyphens: auto;
|
||||||
|
hyphens: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.headerlink {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: #551A8B;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:hover > a.headerlink,
|
||||||
|
h2:hover > a.headerlink,
|
||||||
|
h3:hover > a.headerlink,
|
||||||
|
h4:hover > a.headerlink,
|
||||||
|
h5:hover > a.headerlink,
|
||||||
|
h6:hover > a.headerlink,
|
||||||
|
dt:hover > a.headerlink,
|
||||||
|
caption:hover > a.headerlink,
|
||||||
|
p.caption:hover > a.headerlink,
|
||||||
|
div.code-block-caption:hover > a.headerlink {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p.caption {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.rubric {
|
||||||
|
margin-top: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
||||||
|
clear: left;
|
||||||
|
float: left;
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
||||||
|
clear: right;
|
||||||
|
float: right;
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-default, figure.align-default, .figure.align-default {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-default {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- sidebars -------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.sidebar,
|
||||||
|
aside.sidebar {
|
||||||
|
margin: 0 0 0.5em 1em;
|
||||||
|
border: 1px solid #ddb;
|
||||||
|
padding: 7px;
|
||||||
|
background-color: #ffe;
|
||||||
|
width: 40%;
|
||||||
|
float: right;
|
||||||
|
clear: right;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.sidebar-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.contents,
|
||||||
|
aside.topic,
|
||||||
|
div.admonition, div.topic, blockquote {
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- topics ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
nav.contents,
|
||||||
|
aside.topic,
|
||||||
|
div.topic {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 7px;
|
||||||
|
margin: 10px 0 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.topic-title {
|
||||||
|
font-size: 1.1em;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- admonitions ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.admonition {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.admonition dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.admonition-title {
|
||||||
|
margin: 0px 10px 5px 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p.centered {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
||||||
|
|
||||||
|
div.sidebar > :last-child,
|
||||||
|
aside.sidebar > :last-child,
|
||||||
|
nav.contents > :last-child,
|
||||||
|
aside.topic > :last-child,
|
||||||
|
div.topic > :last-child,
|
||||||
|
div.admonition > :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sidebar::after,
|
||||||
|
aside.sidebar::after,
|
||||||
|
nav.contents::after,
|
||||||
|
aside.topic::after,
|
||||||
|
div.topic::after,
|
||||||
|
div.admonition::after,
|
||||||
|
blockquote::after {
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- tables ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
table.docutils {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.align-center {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.align-default {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table caption span.caption-number {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
table caption span.caption-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
table.docutils td, table.docutils th {
|
||||||
|
padding: 1px 8px 1px 5px;
|
||||||
|
border-top: 0;
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
border-bottom: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.citation {
|
||||||
|
border-left: solid 1px gray;
|
||||||
|
margin-left: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.citation td {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
th > :first-child,
|
||||||
|
td > :first-child {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th > :last-child,
|
||||||
|
td > :last-child {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- figures --------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.figure, figure {
|
||||||
|
margin: 0.5em;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.figure p.caption, figcaption {
|
||||||
|
padding: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.figure p.caption span.caption-number,
|
||||||
|
figcaption span.caption-number {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.figure p.caption span.caption-text,
|
||||||
|
figcaption span.caption-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- field list styles ----------------------------------------------------- */
|
||||||
|
|
||||||
|
table.field-list td, table.field-list th {
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-list ul {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-list p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-name {
|
||||||
|
-moz-hyphens: manual;
|
||||||
|
-ms-hyphens: manual;
|
||||||
|
-webkit-hyphens: manual;
|
||||||
|
hyphens: manual;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- hlist styles ---------------------------------------------------------- */
|
||||||
|
|
||||||
|
table.hlist {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.hlist td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- object description styles --------------------------------------------- */
|
||||||
|
|
||||||
|
.sig {
|
||||||
|
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-name, code.descname {
|
||||||
|
background-color: transparent;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-name {
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.descname {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-prename, code.descclassname {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optional {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-paren {
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-param.n {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* C++ specific styling */
|
||||||
|
|
||||||
|
.sig-inline.c-texpr,
|
||||||
|
.sig-inline.cpp-texpr {
|
||||||
|
font-family: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .k, .sig.c .kt,
|
||||||
|
.sig.cpp .k, .sig.cpp .kt {
|
||||||
|
color: #0033B3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .m,
|
||||||
|
.sig.cpp .m {
|
||||||
|
color: #1750EB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .s, .sig.c .sc,
|
||||||
|
.sig.cpp .s, .sig.cpp .sc {
|
||||||
|
color: #067D17;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -- other body styles ----------------------------------------------------- */
|
||||||
|
|
||||||
|
ol.arabic {
|
||||||
|
list-style: decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.loweralpha {
|
||||||
|
list-style: lower-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.upperalpha {
|
||||||
|
list-style: upper-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.lowerroman {
|
||||||
|
list-style: lower-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.upperroman {
|
||||||
|
list-style: upper-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(li) > ol > li:first-child > :first-child,
|
||||||
|
:not(li) > ul > li:first-child > :first-child {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(li) > ol > li:last-child > :last-child,
|
||||||
|
:not(li) > ul > li:last-child > :last-child {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.simple ol p,
|
||||||
|
ol.simple ul p,
|
||||||
|
ul.simple ol p,
|
||||||
|
ul.simple ul p {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.simple > li:not(:first-child) > p,
|
||||||
|
ul.simple > li:not(:first-child) > p {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.simple p,
|
||||||
|
ul.simple p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.footnote > span,
|
||||||
|
div.citation > span {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
aside.footnote > span:last-of-type,
|
||||||
|
div.citation > span:last-of-type {
|
||||||
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
aside.footnote > p {
|
||||||
|
margin-left: 2em;
|
||||||
|
}
|
||||||
|
div.citation > p {
|
||||||
|
margin-left: 4em;
|
||||||
|
}
|
||||||
|
aside.footnote > p:last-of-type,
|
||||||
|
div.citation > p:last-of-type {
|
||||||
|
margin-bottom: 0em;
|
||||||
|
}
|
||||||
|
aside.footnote > p:last-of-type:after,
|
||||||
|
div.citation > p:last-of-type:after {
|
||||||
|
content: "";
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: fit-content(30%) auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list > dt {
|
||||||
|
font-weight: bold;
|
||||||
|
word-break: break-word;
|
||||||
|
padding-left: 0.5em;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list > dd {
|
||||||
|
padding-left: 0.5em;
|
||||||
|
margin-top: 0em;
|
||||||
|
margin-left: 0em;
|
||||||
|
margin-bottom: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd > :first-child {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd ul, dd table {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig dd {
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig dl {
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl > dd:last-child,
|
||||||
|
dl > dd:last-child > :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt:target, span.highlighted {
|
||||||
|
background-color: #fbe54e;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.highlighted {
|
||||||
|
fill: #fbe54e;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.glossary dt {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.versionmodified {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-message {
|
||||||
|
background-color: #fda;
|
||||||
|
padding: 5px;
|
||||||
|
border: 3px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footnote:target {
|
||||||
|
background-color: #ffa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-block {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-block .line-block {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-left: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guilabel, .menuselection {
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.accelerator {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.classifier {
|
||||||
|
font-style: oblique;
|
||||||
|
}
|
||||||
|
|
||||||
|
.classifier:before {
|
||||||
|
font-style: normal;
|
||||||
|
margin: 0 0.5em;
|
||||||
|
content: ":";
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr, acronym {
|
||||||
|
border-bottom: dotted 1px;
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
||||||
|
.translated {
|
||||||
|
background-color: rgba(207, 255, 207, 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
.untranslated {
|
||||||
|
background-color: rgba(255, 207, 207, 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- code displays --------------------------------------------------------- */
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||||
|
}
|
||||||
|
|
||||||
|
pre, div[class*="highlight-"] {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.pre {
|
||||||
|
-moz-hyphens: none;
|
||||||
|
-ms-hyphens: none;
|
||||||
|
-webkit-hyphens: none;
|
||||||
|
hyphens: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[class*="highlight-"] {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.linenos pre {
|
||||||
|
border: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable tbody {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable tr {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td.linenos {
|
||||||
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td.code {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight .hll {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight pre,
|
||||||
|
table.highlighttable pre {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption + div {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption {
|
||||||
|
margin-top: 1em;
|
||||||
|
padding: 2px 5px;
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption code {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td.linenos,
|
||||||
|
span.linenos,
|
||||||
|
div.highlight span.gp { /* gp: Generic.Prompt */
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: text; /* Safari fallback only */
|
||||||
|
-webkit-user-select: none; /* Chrome/Safari */
|
||||||
|
-moz-user-select: none; /* Firefox */
|
||||||
|
-ms-user-select: none; /* IE10+ */
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption span.caption-number {
|
||||||
|
padding: 0.1em 0.3em;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption span.caption-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
div.literal-block-wrapper {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.xref, a code {
|
||||||
|
background-color: transparent;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewcode-link {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewcode-back {
|
||||||
|
float: right;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.viewcode-block:target {
|
||||||
|
margin: -1px -10px;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- math display ---------------------------------------------------------- */
|
||||||
|
|
||||||
|
img.math {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body div.math p {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.eqno {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.eqno a.headerlink {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.math:hover a.headerlink {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- printout stylesheet --------------------------------------------------- */
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
div.document,
|
||||||
|
div.documentwrapper,
|
||||||
|
div.bodywrapper {
|
||||||
|
margin: 0 !important;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar,
|
||||||
|
div.related,
|
||||||
|
div.footer,
|
||||||
|
#top-link {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1f1f;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#262626;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #404040}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,156 @@
|
||||||
|
/*
|
||||||
|
* doctools.js
|
||||||
|
* ~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Base JavaScript utilities for all Sphinx HTML documentation.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
|
||||||
|
"TEXTAREA",
|
||||||
|
"INPUT",
|
||||||
|
"SELECT",
|
||||||
|
"BUTTON",
|
||||||
|
]);
|
||||||
|
|
||||||
|
const _ready = (callback) => {
|
||||||
|
if (document.readyState !== "loading") {
|
||||||
|
callback();
|
||||||
|
} else {
|
||||||
|
document.addEventListener("DOMContentLoaded", callback);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Small JavaScript module for the documentation.
|
||||||
|
*/
|
||||||
|
const Documentation = {
|
||||||
|
init: () => {
|
||||||
|
Documentation.initDomainIndexTable();
|
||||||
|
Documentation.initOnKeyListeners();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i18n support
|
||||||
|
*/
|
||||||
|
TRANSLATIONS: {},
|
||||||
|
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
|
||||||
|
LOCALE: "unknown",
|
||||||
|
|
||||||
|
// gettext and ngettext don't access this so that the functions
|
||||||
|
// can safely bound to a different name (_ = Documentation.gettext)
|
||||||
|
gettext: (string) => {
|
||||||
|
const translated = Documentation.TRANSLATIONS[string];
|
||||||
|
switch (typeof translated) {
|
||||||
|
case "undefined":
|
||||||
|
return string; // no translation
|
||||||
|
case "string":
|
||||||
|
return translated; // translation exists
|
||||||
|
default:
|
||||||
|
return translated[0]; // (singular, plural) translation tuple exists
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
ngettext: (singular, plural, n) => {
|
||||||
|
const translated = Documentation.TRANSLATIONS[singular];
|
||||||
|
if (typeof translated !== "undefined")
|
||||||
|
return translated[Documentation.PLURAL_EXPR(n)];
|
||||||
|
return n === 1 ? singular : plural;
|
||||||
|
},
|
||||||
|
|
||||||
|
addTranslations: (catalog) => {
|
||||||
|
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
|
||||||
|
Documentation.PLURAL_EXPR = new Function(
|
||||||
|
"n",
|
||||||
|
`return (${catalog.plural_expr})`
|
||||||
|
);
|
||||||
|
Documentation.LOCALE = catalog.locale;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to focus on search bar
|
||||||
|
*/
|
||||||
|
focusSearchBar: () => {
|
||||||
|
document.querySelectorAll("input[name=q]")[0]?.focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise the domain index toggle buttons
|
||||||
|
*/
|
||||||
|
initDomainIndexTable: () => {
|
||||||
|
const toggler = (el) => {
|
||||||
|
const idNumber = el.id.substr(7);
|
||||||
|
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
|
||||||
|
if (el.src.substr(-9) === "minus.png") {
|
||||||
|
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
|
||||||
|
toggledRows.forEach((el) => (el.style.display = "none"));
|
||||||
|
} else {
|
||||||
|
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
|
||||||
|
toggledRows.forEach((el) => (el.style.display = ""));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const togglerElements = document.querySelectorAll("img.toggler");
|
||||||
|
togglerElements.forEach((el) =>
|
||||||
|
el.addEventListener("click", (event) => toggler(event.currentTarget))
|
||||||
|
);
|
||||||
|
togglerElements.forEach((el) => (el.style.display = ""));
|
||||||
|
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
|
||||||
|
},
|
||||||
|
|
||||||
|
initOnKeyListeners: () => {
|
||||||
|
// only install a listener if it is really needed
|
||||||
|
if (
|
||||||
|
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
|
||||||
|
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
|
||||||
|
document.addEventListener("keydown", (event) => {
|
||||||
|
// bail for input elements
|
||||||
|
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||||
|
// bail with special keys
|
||||||
|
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
||||||
|
|
||||||
|
if (!event.shiftKey) {
|
||||||
|
switch (event.key) {
|
||||||
|
case "ArrowLeft":
|
||||||
|
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||||
|
|
||||||
|
const prevLink = document.querySelector('link[rel="prev"]');
|
||||||
|
if (prevLink && prevLink.href) {
|
||||||
|
window.location.href = prevLink.href;
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "ArrowRight":
|
||||||
|
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||||
|
|
||||||
|
const nextLink = document.querySelector('link[rel="next"]');
|
||||||
|
if (nextLink && nextLink.href) {
|
||||||
|
window.location.href = nextLink.href;
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// some keyboard layouts may need Shift to get /
|
||||||
|
switch (event.key) {
|
||||||
|
case "/":
|
||||||
|
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
|
||||||
|
Documentation.focusSearchBar();
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// quick alias for translations
|
||||||
|
const _ = Documentation.gettext;
|
||||||
|
|
||||||
|
_ready(Documentation.init);
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
const DOCUMENTATION_OPTIONS = {
|
||||||
|
VERSION: 'latest',
|
||||||
|
LANGUAGE: 'en',
|
||||||
|
COLLAPSE_INDEX: false,
|
||||||
|
BUILDER: 'html',
|
||||||
|
FILE_SUFFIX: '.html',
|
||||||
|
LINK_SUFFIX: '.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt',
|
||||||
|
NAVIGATION_WITH_KEYS: false,
|
||||||
|
SHOW_SEARCH_SUMMARY: true,
|
||||||
|
ENABLE_SEARCH_SHORTCUTS: true,
|
||||||
|
};
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 286 B |
|
|
@ -0,0 +1 @@
|
||||||
|
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
/**
|
||||||
|
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||||
|
*/
|
||||||
|
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
/**
|
||||||
|
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||||
|
*/
|
||||||
|
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,199 @@
|
||||||
|
/*
|
||||||
|
* language_data.js
|
||||||
|
* ~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* This script contains the language-specific data used by searchtools.js,
|
||||||
|
* namely the list of stopwords, stemmer, scorer and splitter.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
|
||||||
|
|
||||||
|
|
||||||
|
/* Non-minified version is copied as a separate JS file, is available */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Porter Stemmer
|
||||||
|
*/
|
||||||
|
var Stemmer = function() {
|
||||||
|
|
||||||
|
var step2list = {
|
||||||
|
ational: 'ate',
|
||||||
|
tional: 'tion',
|
||||||
|
enci: 'ence',
|
||||||
|
anci: 'ance',
|
||||||
|
izer: 'ize',
|
||||||
|
bli: 'ble',
|
||||||
|
alli: 'al',
|
||||||
|
entli: 'ent',
|
||||||
|
eli: 'e',
|
||||||
|
ousli: 'ous',
|
||||||
|
ization: 'ize',
|
||||||
|
ation: 'ate',
|
||||||
|
ator: 'ate',
|
||||||
|
alism: 'al',
|
||||||
|
iveness: 'ive',
|
||||||
|
fulness: 'ful',
|
||||||
|
ousness: 'ous',
|
||||||
|
aliti: 'al',
|
||||||
|
iviti: 'ive',
|
||||||
|
biliti: 'ble',
|
||||||
|
logi: 'log'
|
||||||
|
};
|
||||||
|
|
||||||
|
var step3list = {
|
||||||
|
icate: 'ic',
|
||||||
|
ative: '',
|
||||||
|
alize: 'al',
|
||||||
|
iciti: 'ic',
|
||||||
|
ical: 'ic',
|
||||||
|
ful: '',
|
||||||
|
ness: ''
|
||||||
|
};
|
||||||
|
|
||||||
|
var c = "[^aeiou]"; // consonant
|
||||||
|
var v = "[aeiouy]"; // vowel
|
||||||
|
var C = c + "[^aeiouy]*"; // consonant sequence
|
||||||
|
var V = v + "[aeiou]*"; // vowel sequence
|
||||||
|
|
||||||
|
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
||||||
|
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
||||||
|
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
||||||
|
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
||||||
|
|
||||||
|
this.stemWord = function (w) {
|
||||||
|
var stem;
|
||||||
|
var suffix;
|
||||||
|
var firstch;
|
||||||
|
var origword = w;
|
||||||
|
|
||||||
|
if (w.length < 3)
|
||||||
|
return w;
|
||||||
|
|
||||||
|
var re;
|
||||||
|
var re2;
|
||||||
|
var re3;
|
||||||
|
var re4;
|
||||||
|
|
||||||
|
firstch = w.substr(0,1);
|
||||||
|
if (firstch == "y")
|
||||||
|
w = firstch.toUpperCase() + w.substr(1);
|
||||||
|
|
||||||
|
// Step 1a
|
||||||
|
re = /^(.+?)(ss|i)es$/;
|
||||||
|
re2 = /^(.+?)([^s])s$/;
|
||||||
|
|
||||||
|
if (re.test(w))
|
||||||
|
w = w.replace(re,"$1$2");
|
||||||
|
else if (re2.test(w))
|
||||||
|
w = w.replace(re2,"$1$2");
|
||||||
|
|
||||||
|
// Step 1b
|
||||||
|
re = /^(.+?)eed$/;
|
||||||
|
re2 = /^(.+?)(ed|ing)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
re = new RegExp(mgr0);
|
||||||
|
if (re.test(fp[1])) {
|
||||||
|
re = /.$/;
|
||||||
|
w = w.replace(re,"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (re2.test(w)) {
|
||||||
|
var fp = re2.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re2 = new RegExp(s_v);
|
||||||
|
if (re2.test(stem)) {
|
||||||
|
w = stem;
|
||||||
|
re2 = /(at|bl|iz)$/;
|
||||||
|
re3 = new RegExp("([^aeiouylsz])\\1$");
|
||||||
|
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||||
|
if (re2.test(w))
|
||||||
|
w = w + "e";
|
||||||
|
else if (re3.test(w)) {
|
||||||
|
re = /.$/;
|
||||||
|
w = w.replace(re,"");
|
||||||
|
}
|
||||||
|
else if (re4.test(w))
|
||||||
|
w = w + "e";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 1c
|
||||||
|
re = /^(.+?)y$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re = new RegExp(s_v);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem + "i";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 2
|
||||||
|
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
suffix = fp[2];
|
||||||
|
re = new RegExp(mgr0);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem + step2list[suffix];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3
|
||||||
|
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
suffix = fp[2];
|
||||||
|
re = new RegExp(mgr0);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem + step3list[suffix];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 4
|
||||||
|
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
||||||
|
re2 = /^(.+?)(s|t)(ion)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re = new RegExp(mgr1);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem;
|
||||||
|
}
|
||||||
|
else if (re2.test(w)) {
|
||||||
|
var fp = re2.exec(w);
|
||||||
|
stem = fp[1] + fp[2];
|
||||||
|
re2 = new RegExp(mgr1);
|
||||||
|
if (re2.test(stem))
|
||||||
|
w = stem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 5
|
||||||
|
re = /^(.+?)e$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re = new RegExp(mgr1);
|
||||||
|
re2 = new RegExp(meq1);
|
||||||
|
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||||
|
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
||||||
|
w = stem;
|
||||||
|
}
|
||||||
|
re = /ll$/;
|
||||||
|
re2 = new RegExp(mgr1);
|
||||||
|
if (re.test(w) && re2.test(w)) {
|
||||||
|
re = /.$/;
|
||||||
|
w = w.replace(re,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
// and turn initial Y back to y
|
||||||
|
if (firstch == "y")
|
||||||
|
w = firstch.toLowerCase() + w.substr(1);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 90 B |
Binary file not shown.
|
After Width: | Height: | Size: 90 B |
|
|
@ -0,0 +1,85 @@
|
||||||
|
pre { line-height: 125%; }
|
||||||
|
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight .hll { background-color: #49483e }
|
||||||
|
.highlight { background: #232629; color: #cccccc }
|
||||||
|
.highlight .c { color: #777777; font-style: italic } /* Comment */
|
||||||
|
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||||
|
.highlight .esc { color: #cccccc } /* Escape */
|
||||||
|
.highlight .g { color: #cccccc } /* Generic */
|
||||||
|
.highlight .k { color: #7686bb; font-weight: bold } /* Keyword */
|
||||||
|
.highlight .l { color: #cccccc } /* Literal */
|
||||||
|
.highlight .n { color: #cccccc } /* Name */
|
||||||
|
.highlight .o { color: #cccccc } /* Operator */
|
||||||
|
.highlight .x { color: #cccccc } /* Other */
|
||||||
|
.highlight .p { color: #cccccc } /* Punctuation */
|
||||||
|
.highlight .ch { color: #777777; font-style: italic } /* Comment.Hashbang */
|
||||||
|
.highlight .cm { color: #777777; font-style: italic } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #777777; font-style: italic } /* Comment.Preproc */
|
||||||
|
.highlight .cpf { color: #777777; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
.highlight .c1 { color: #777777; font-style: italic } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #777777; font-style: italic } /* Comment.Special */
|
||||||
|
.highlight .gd { color: #cccccc } /* Generic.Deleted */
|
||||||
|
.highlight .ge { color: #cccccc } /* Generic.Emph */
|
||||||
|
.highlight .ges { color: #cccccc } /* Generic.EmphStrong */
|
||||||
|
.highlight .gr { color: #cccccc } /* Generic.Error */
|
||||||
|
.highlight .gh { color: #cccccc } /* Generic.Heading */
|
||||||
|
.highlight .gi { color: #cccccc } /* Generic.Inserted */
|
||||||
|
.highlight .go { color: #cccccc } /* Generic.Output */
|
||||||
|
.highlight .gp { color: #ffffff } /* Generic.Prompt */
|
||||||
|
.highlight .gs { color: #cccccc } /* Generic.Strong */
|
||||||
|
.highlight .gu { color: #cccccc } /* Generic.Subheading */
|
||||||
|
.highlight .gt { color: #cccccc } /* Generic.Traceback */
|
||||||
|
.highlight .kc { color: #7686bb; font-weight: bold } /* Keyword.Constant */
|
||||||
|
.highlight .kd { color: #7686bb; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.highlight .kn { color: #7686bb; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
.highlight .kp { color: #7686bb; font-weight: bold } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { color: #7686bb; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #7686bb; font-weight: bold } /* Keyword.Type */
|
||||||
|
.highlight .ld { color: #cccccc } /* Literal.Date */
|
||||||
|
.highlight .m { color: #4FB8CC } /* Literal.Number */
|
||||||
|
.highlight .s { color: #51cc99 } /* Literal.String */
|
||||||
|
.highlight .na { color: #cccccc } /* Name.Attribute */
|
||||||
|
.highlight .nb { color: #cccccc } /* Name.Builtin */
|
||||||
|
.highlight .nc { color: #cccccc } /* Name.Class */
|
||||||
|
.highlight .no { color: #cccccc } /* Name.Constant */
|
||||||
|
.highlight .nd { color: #cccccc } /* Name.Decorator */
|
||||||
|
.highlight .ni { color: #cccccc } /* Name.Entity */
|
||||||
|
.highlight .ne { color: #cccccc } /* Name.Exception */
|
||||||
|
.highlight .nf { color: #6a6aff } /* Name.Function */
|
||||||
|
.highlight .nl { color: #cccccc } /* Name.Label */
|
||||||
|
.highlight .nn { color: #cccccc } /* Name.Namespace */
|
||||||
|
.highlight .nx { color: #e2828e } /* Name.Other */
|
||||||
|
.highlight .py { color: #cccccc } /* Name.Property */
|
||||||
|
.highlight .nt { color: #cccccc } /* Name.Tag */
|
||||||
|
.highlight .nv { color: #7AB4DB; font-weight: bold } /* Name.Variable */
|
||||||
|
.highlight .ow { color: #cccccc } /* Operator.Word */
|
||||||
|
.highlight .pm { color: #cccccc } /* Punctuation.Marker */
|
||||||
|
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||||
|
.highlight .mb { color: #4FB8CC } /* Literal.Number.Bin */
|
||||||
|
.highlight .mf { color: #4FB8CC } /* Literal.Number.Float */
|
||||||
|
.highlight .mh { color: #4FB8CC } /* Literal.Number.Hex */
|
||||||
|
.highlight .mi { color: #4FB8CC } /* Literal.Number.Integer */
|
||||||
|
.highlight .mo { color: #4FB8CC } /* Literal.Number.Oct */
|
||||||
|
.highlight .sa { color: #51cc99 } /* Literal.String.Affix */
|
||||||
|
.highlight .sb { color: #51cc99 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #51cc99 } /* Literal.String.Char */
|
||||||
|
.highlight .dl { color: #51cc99 } /* Literal.String.Delimiter */
|
||||||
|
.highlight .sd { color: #51cc99 } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #51cc99 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #51cc99 } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #51cc99 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #51cc99 } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #51cc99 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #51cc99 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #51cc99 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #51cc99 } /* Literal.String.Symbol */
|
||||||
|
.highlight .bp { color: #cccccc } /* Name.Builtin.Pseudo */
|
||||||
|
.highlight .fm { color: #6a6aff } /* Name.Function.Magic */
|
||||||
|
.highlight .vc { color: #7AB4DB; font-weight: bold } /* Name.Variable.Class */
|
||||||
|
.highlight .vg { color: #BE646C; font-weight: bold } /* Name.Variable.Global */
|
||||||
|
.highlight .vi { color: #7AB4DB; font-weight: bold } /* Name.Variable.Instance */
|
||||||
|
.highlight .vm { color: #7AB4DB; font-weight: bold } /* Name.Variable.Magic */
|
||||||
|
.highlight .il { color: #4FB8CC } /* Literal.Number.Integer.Long */
|
||||||
|
|
@ -0,0 +1,574 @@
|
||||||
|
/*
|
||||||
|
* searchtools.js
|
||||||
|
* ~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Sphinx JavaScript utilities for the full-text search.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple result scoring code.
|
||||||
|
*/
|
||||||
|
if (typeof Scorer === "undefined") {
|
||||||
|
var Scorer = {
|
||||||
|
// Implement the following function to further tweak the score for each result
|
||||||
|
// The function takes a result array [docname, title, anchor, descr, score, filename]
|
||||||
|
// and returns the new score.
|
||||||
|
/*
|
||||||
|
score: result => {
|
||||||
|
const [docname, title, anchor, descr, score, filename] = result
|
||||||
|
return score
|
||||||
|
},
|
||||||
|
*/
|
||||||
|
|
||||||
|
// query matches the full name of an object
|
||||||
|
objNameMatch: 11,
|
||||||
|
// or matches in the last dotted part of the object name
|
||||||
|
objPartialMatch: 6,
|
||||||
|
// Additive scores depending on the priority of the object
|
||||||
|
objPrio: {
|
||||||
|
0: 15, // used to be importantResults
|
||||||
|
1: 5, // used to be objectResults
|
||||||
|
2: -5, // used to be unimportantResults
|
||||||
|
},
|
||||||
|
// Used when the priority is not in the mapping.
|
||||||
|
objPrioDefault: 0,
|
||||||
|
|
||||||
|
// query found in title
|
||||||
|
title: 15,
|
||||||
|
partialTitle: 7,
|
||||||
|
// query found in terms
|
||||||
|
term: 5,
|
||||||
|
partialTerm: 2,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const _removeChildren = (element) => {
|
||||||
|
while (element && element.lastChild) element.removeChild(element.lastChild);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
||||||
|
*/
|
||||||
|
const _escapeRegExp = (string) =>
|
||||||
|
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||||
|
|
||||||
|
const _displayItem = (item, searchTerms, highlightTerms) => {
|
||||||
|
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
|
||||||
|
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
||||||
|
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
||||||
|
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
|
||||||
|
const contentRoot = document.documentElement.dataset.content_root;
|
||||||
|
|
||||||
|
const [docName, title, anchor, descr, score, _filename] = item;
|
||||||
|
|
||||||
|
let listItem = document.createElement("li");
|
||||||
|
let requestUrl;
|
||||||
|
let linkUrl;
|
||||||
|
if (docBuilder === "dirhtml") {
|
||||||
|
// dirhtml builder
|
||||||
|
let dirname = docName + "/";
|
||||||
|
if (dirname.match(/\/index\/$/))
|
||||||
|
dirname = dirname.substring(0, dirname.length - 6);
|
||||||
|
else if (dirname === "index/") dirname = "";
|
||||||
|
requestUrl = contentRoot + dirname;
|
||||||
|
linkUrl = requestUrl;
|
||||||
|
} else {
|
||||||
|
// normal html builders
|
||||||
|
requestUrl = contentRoot + docName + docFileSuffix;
|
||||||
|
linkUrl = docName + docLinkSuffix;
|
||||||
|
}
|
||||||
|
let linkEl = listItem.appendChild(document.createElement("a"));
|
||||||
|
linkEl.href = linkUrl + anchor;
|
||||||
|
linkEl.dataset.score = score;
|
||||||
|
linkEl.innerHTML = title;
|
||||||
|
if (descr) {
|
||||||
|
listItem.appendChild(document.createElement("span")).innerHTML =
|
||||||
|
" (" + descr + ")";
|
||||||
|
// highlight search terms in the description
|
||||||
|
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
||||||
|
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
||||||
|
}
|
||||||
|
else if (showSearchSummary)
|
||||||
|
fetch(requestUrl)
|
||||||
|
.then((responseData) => responseData.text())
|
||||||
|
.then((data) => {
|
||||||
|
if (data)
|
||||||
|
listItem.appendChild(
|
||||||
|
Search.makeSearchSummary(data, searchTerms)
|
||||||
|
);
|
||||||
|
// highlight search terms in the summary
|
||||||
|
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
||||||
|
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
||||||
|
});
|
||||||
|
Search.output.appendChild(listItem);
|
||||||
|
};
|
||||||
|
const _finishSearch = (resultCount) => {
|
||||||
|
Search.stopPulse();
|
||||||
|
Search.title.innerText = _("Search Results");
|
||||||
|
if (!resultCount)
|
||||||
|
Search.status.innerText = Documentation.gettext(
|
||||||
|
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
|
||||||
|
);
|
||||||
|
else
|
||||||
|
Search.status.innerText = _(
|
||||||
|
`Search finished, found ${resultCount} page(s) matching the search query.`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
const _displayNextItem = (
|
||||||
|
results,
|
||||||
|
resultCount,
|
||||||
|
searchTerms,
|
||||||
|
highlightTerms,
|
||||||
|
) => {
|
||||||
|
// results left, load the summary and display it
|
||||||
|
// this is intended to be dynamic (don't sub resultsCount)
|
||||||
|
if (results.length) {
|
||||||
|
_displayItem(results.pop(), searchTerms, highlightTerms);
|
||||||
|
setTimeout(
|
||||||
|
() => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
|
||||||
|
5
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// search finished, update title and status message
|
||||||
|
else _finishSearch(resultCount);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
|
||||||
|
* custom function per language.
|
||||||
|
*
|
||||||
|
* The regular expression works by splitting the string on consecutive characters
|
||||||
|
* that are not Unicode letters, numbers, underscores, or emoji characters.
|
||||||
|
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
|
||||||
|
*/
|
||||||
|
if (typeof splitQuery === "undefined") {
|
||||||
|
var splitQuery = (query) => query
|
||||||
|
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
|
||||||
|
.filter(term => term) // remove remaining empty strings
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search Module
|
||||||
|
*/
|
||||||
|
const Search = {
|
||||||
|
_index: null,
|
||||||
|
_queued_query: null,
|
||||||
|
_pulse_status: -1,
|
||||||
|
|
||||||
|
htmlToText: (htmlString) => {
|
||||||
|
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
|
||||||
|
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
|
||||||
|
const docContent = htmlElement.querySelector('[role="main"]');
|
||||||
|
if (docContent !== undefined) return docContent.textContent;
|
||||||
|
console.warn(
|
||||||
|
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
|
||||||
|
);
|
||||||
|
return "";
|
||||||
|
},
|
||||||
|
|
||||||
|
init: () => {
|
||||||
|
const query = new URLSearchParams(window.location.search).get("q");
|
||||||
|
document
|
||||||
|
.querySelectorAll('input[name="q"]')
|
||||||
|
.forEach((el) => (el.value = query));
|
||||||
|
if (query) Search.performSearch(query);
|
||||||
|
},
|
||||||
|
|
||||||
|
loadIndex: (url) =>
|
||||||
|
(document.body.appendChild(document.createElement("script")).src = url),
|
||||||
|
|
||||||
|
setIndex: (index) => {
|
||||||
|
Search._index = index;
|
||||||
|
if (Search._queued_query !== null) {
|
||||||
|
const query = Search._queued_query;
|
||||||
|
Search._queued_query = null;
|
||||||
|
Search.query(query);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
hasIndex: () => Search._index !== null,
|
||||||
|
|
||||||
|
deferQuery: (query) => (Search._queued_query = query),
|
||||||
|
|
||||||
|
stopPulse: () => (Search._pulse_status = -1),
|
||||||
|
|
||||||
|
startPulse: () => {
|
||||||
|
if (Search._pulse_status >= 0) return;
|
||||||
|
|
||||||
|
const pulse = () => {
|
||||||
|
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||||
|
Search.dots.innerText = ".".repeat(Search._pulse_status);
|
||||||
|
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
|
||||||
|
};
|
||||||
|
pulse();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* perform a search for something (or wait until index is loaded)
|
||||||
|
*/
|
||||||
|
performSearch: (query) => {
|
||||||
|
// create the required interface elements
|
||||||
|
const searchText = document.createElement("h2");
|
||||||
|
searchText.textContent = _("Searching");
|
||||||
|
const searchSummary = document.createElement("p");
|
||||||
|
searchSummary.classList.add("search-summary");
|
||||||
|
searchSummary.innerText = "";
|
||||||
|
const searchList = document.createElement("ul");
|
||||||
|
searchList.classList.add("search");
|
||||||
|
|
||||||
|
const out = document.getElementById("search-results");
|
||||||
|
Search.title = out.appendChild(searchText);
|
||||||
|
Search.dots = Search.title.appendChild(document.createElement("span"));
|
||||||
|
Search.status = out.appendChild(searchSummary);
|
||||||
|
Search.output = out.appendChild(searchList);
|
||||||
|
|
||||||
|
const searchProgress = document.getElementById("search-progress");
|
||||||
|
// Some themes don't use the search progress node
|
||||||
|
if (searchProgress) {
|
||||||
|
searchProgress.innerText = _("Preparing search...");
|
||||||
|
}
|
||||||
|
Search.startPulse();
|
||||||
|
|
||||||
|
// index already loaded, the browser was quick!
|
||||||
|
if (Search.hasIndex()) Search.query(query);
|
||||||
|
else Search.deferQuery(query);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* execute search (requires search index to be loaded)
|
||||||
|
*/
|
||||||
|
query: (query) => {
|
||||||
|
const filenames = Search._index.filenames;
|
||||||
|
const docNames = Search._index.docnames;
|
||||||
|
const titles = Search._index.titles;
|
||||||
|
const allTitles = Search._index.alltitles;
|
||||||
|
const indexEntries = Search._index.indexentries;
|
||||||
|
|
||||||
|
// stem the search terms and add them to the correct list
|
||||||
|
const stemmer = new Stemmer();
|
||||||
|
const searchTerms = new Set();
|
||||||
|
const excludedTerms = new Set();
|
||||||
|
const highlightTerms = new Set();
|
||||||
|
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
|
||||||
|
splitQuery(query.trim()).forEach((queryTerm) => {
|
||||||
|
const queryTermLower = queryTerm.toLowerCase();
|
||||||
|
|
||||||
|
// maybe skip this "word"
|
||||||
|
// stopwords array is from language_data.js
|
||||||
|
if (
|
||||||
|
stopwords.indexOf(queryTermLower) !== -1 ||
|
||||||
|
queryTerm.match(/^\d+$/)
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// stem the word
|
||||||
|
let word = stemmer.stemWord(queryTermLower);
|
||||||
|
// select the correct list
|
||||||
|
if (word[0] === "-") excludedTerms.add(word.substr(1));
|
||||||
|
else {
|
||||||
|
searchTerms.add(word);
|
||||||
|
highlightTerms.add(queryTermLower);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
|
||||||
|
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.debug("SEARCH: searching for:");
|
||||||
|
// console.info("required: ", [...searchTerms]);
|
||||||
|
// console.info("excluded: ", [...excludedTerms]);
|
||||||
|
|
||||||
|
// array of [docname, title, anchor, descr, score, filename]
|
||||||
|
let results = [];
|
||||||
|
_removeChildren(document.getElementById("search-progress"));
|
||||||
|
|
||||||
|
const queryLower = query.toLowerCase();
|
||||||
|
for (const [title, foundTitles] of Object.entries(allTitles)) {
|
||||||
|
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
||||||
|
for (const [file, id] of foundTitles) {
|
||||||
|
let score = Math.round(100 * queryLower.length / title.length)
|
||||||
|
results.push([
|
||||||
|
docNames[file],
|
||||||
|
titles[file] !== title ? `${titles[file]} > ${title}` : title,
|
||||||
|
id !== null ? "#" + id : "",
|
||||||
|
null,
|
||||||
|
score,
|
||||||
|
filenames[file],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// search for explicit entries in index directives
|
||||||
|
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
|
||||||
|
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
|
||||||
|
for (const [file, id] of foundEntries) {
|
||||||
|
let score = Math.round(100 * queryLower.length / entry.length)
|
||||||
|
results.push([
|
||||||
|
docNames[file],
|
||||||
|
titles[file],
|
||||||
|
id ? "#" + id : "",
|
||||||
|
null,
|
||||||
|
score,
|
||||||
|
filenames[file],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// lookup as object
|
||||||
|
objectTerms.forEach((term) =>
|
||||||
|
results.push(...Search.performObjectSearch(term, objectTerms))
|
||||||
|
);
|
||||||
|
|
||||||
|
// lookup as search terms in fulltext
|
||||||
|
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
||||||
|
|
||||||
|
// let the scorer override scores with a custom scoring function
|
||||||
|
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
|
||||||
|
|
||||||
|
// now sort the results by score (in opposite order of appearance, since the
|
||||||
|
// display function below uses pop() to retrieve items) and then
|
||||||
|
// alphabetically
|
||||||
|
results.sort((a, b) => {
|
||||||
|
const leftScore = a[4];
|
||||||
|
const rightScore = b[4];
|
||||||
|
if (leftScore === rightScore) {
|
||||||
|
// same score: sort alphabetically
|
||||||
|
const leftTitle = a[1].toLowerCase();
|
||||||
|
const rightTitle = b[1].toLowerCase();
|
||||||
|
if (leftTitle === rightTitle) return 0;
|
||||||
|
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
||||||
|
}
|
||||||
|
return leftScore > rightScore ? 1 : -1;
|
||||||
|
});
|
||||||
|
|
||||||
|
// remove duplicate search results
|
||||||
|
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
|
||||||
|
let seen = new Set();
|
||||||
|
results = results.reverse().reduce((acc, result) => {
|
||||||
|
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
|
||||||
|
if (!seen.has(resultStr)) {
|
||||||
|
acc.push(result);
|
||||||
|
seen.add(resultStr);
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
results = results.reverse();
|
||||||
|
|
||||||
|
// for debugging
|
||||||
|
//Search.lastresults = results.slice(); // a copy
|
||||||
|
// console.info("search results:", Search.lastresults);
|
||||||
|
|
||||||
|
// print the results
|
||||||
|
_displayNextItem(results, results.length, searchTerms, highlightTerms);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* search for object names
|
||||||
|
*/
|
||||||
|
performObjectSearch: (object, objectTerms) => {
|
||||||
|
const filenames = Search._index.filenames;
|
||||||
|
const docNames = Search._index.docnames;
|
||||||
|
const objects = Search._index.objects;
|
||||||
|
const objNames = Search._index.objnames;
|
||||||
|
const titles = Search._index.titles;
|
||||||
|
|
||||||
|
const results = [];
|
||||||
|
|
||||||
|
const objectSearchCallback = (prefix, match) => {
|
||||||
|
const name = match[4]
|
||||||
|
const fullname = (prefix ? prefix + "." : "") + name;
|
||||||
|
const fullnameLower = fullname.toLowerCase();
|
||||||
|
if (fullnameLower.indexOf(object) < 0) return;
|
||||||
|
|
||||||
|
let score = 0;
|
||||||
|
const parts = fullnameLower.split(".");
|
||||||
|
|
||||||
|
// check for different match types: exact matches of full name or
|
||||||
|
// "last name" (i.e. last dotted part)
|
||||||
|
if (fullnameLower === object || parts.slice(-1)[0] === object)
|
||||||
|
score += Scorer.objNameMatch;
|
||||||
|
else if (parts.slice(-1)[0].indexOf(object) > -1)
|
||||||
|
score += Scorer.objPartialMatch; // matches in last name
|
||||||
|
|
||||||
|
const objName = objNames[match[1]][2];
|
||||||
|
const title = titles[match[0]];
|
||||||
|
|
||||||
|
// If more than one term searched for, we require other words to be
|
||||||
|
// found in the name/title/description
|
||||||
|
const otherTerms = new Set(objectTerms);
|
||||||
|
otherTerms.delete(object);
|
||||||
|
if (otherTerms.size > 0) {
|
||||||
|
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
|
||||||
|
if (
|
||||||
|
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let anchor = match[3];
|
||||||
|
if (anchor === "") anchor = fullname;
|
||||||
|
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
|
||||||
|
|
||||||
|
const descr = objName + _(", in ") + title;
|
||||||
|
|
||||||
|
// add custom score for some objects according to scorer
|
||||||
|
if (Scorer.objPrio.hasOwnProperty(match[2]))
|
||||||
|
score += Scorer.objPrio[match[2]];
|
||||||
|
else score += Scorer.objPrioDefault;
|
||||||
|
|
||||||
|
results.push([
|
||||||
|
docNames[match[0]],
|
||||||
|
fullname,
|
||||||
|
"#" + anchor,
|
||||||
|
descr,
|
||||||
|
score,
|
||||||
|
filenames[match[0]],
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
Object.keys(objects).forEach((prefix) =>
|
||||||
|
objects[prefix].forEach((array) =>
|
||||||
|
objectSearchCallback(prefix, array)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return results;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* search for full-text terms in the index
|
||||||
|
*/
|
||||||
|
performTermsSearch: (searchTerms, excludedTerms) => {
|
||||||
|
// prepare search
|
||||||
|
const terms = Search._index.terms;
|
||||||
|
const titleTerms = Search._index.titleterms;
|
||||||
|
const filenames = Search._index.filenames;
|
||||||
|
const docNames = Search._index.docnames;
|
||||||
|
const titles = Search._index.titles;
|
||||||
|
|
||||||
|
const scoreMap = new Map();
|
||||||
|
const fileMap = new Map();
|
||||||
|
|
||||||
|
// perform the search on the required terms
|
||||||
|
searchTerms.forEach((word) => {
|
||||||
|
const files = [];
|
||||||
|
const arr = [
|
||||||
|
{ files: terms[word], score: Scorer.term },
|
||||||
|
{ files: titleTerms[word], score: Scorer.title },
|
||||||
|
];
|
||||||
|
// add support for partial matches
|
||||||
|
if (word.length > 2) {
|
||||||
|
const escapedWord = _escapeRegExp(word);
|
||||||
|
Object.keys(terms).forEach((term) => {
|
||||||
|
if (term.match(escapedWord) && !terms[word])
|
||||||
|
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
||||||
|
});
|
||||||
|
Object.keys(titleTerms).forEach((term) => {
|
||||||
|
if (term.match(escapedWord) && !titleTerms[word])
|
||||||
|
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// no match but word was a required one
|
||||||
|
if (arr.every((record) => record.files === undefined)) return;
|
||||||
|
|
||||||
|
// found search word in contents
|
||||||
|
arr.forEach((record) => {
|
||||||
|
if (record.files === undefined) return;
|
||||||
|
|
||||||
|
let recordFiles = record.files;
|
||||||
|
if (recordFiles.length === undefined) recordFiles = [recordFiles];
|
||||||
|
files.push(...recordFiles);
|
||||||
|
|
||||||
|
// set score for the word in each file
|
||||||
|
recordFiles.forEach((file) => {
|
||||||
|
if (!scoreMap.has(file)) scoreMap.set(file, {});
|
||||||
|
scoreMap.get(file)[word] = record.score;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// create the mapping
|
||||||
|
files.forEach((file) => {
|
||||||
|
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
|
||||||
|
fileMap.get(file).push(word);
|
||||||
|
else fileMap.set(file, [word]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// now check if the files don't contain excluded terms
|
||||||
|
const results = [];
|
||||||
|
for (const [file, wordList] of fileMap) {
|
||||||
|
// check if all requirements are matched
|
||||||
|
|
||||||
|
// as search terms with length < 3 are discarded
|
||||||
|
const filteredTermCount = [...searchTerms].filter(
|
||||||
|
(term) => term.length > 2
|
||||||
|
).length;
|
||||||
|
if (
|
||||||
|
wordList.length !== searchTerms.size &&
|
||||||
|
wordList.length !== filteredTermCount
|
||||||
|
)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// ensure that none of the excluded terms is in the search result
|
||||||
|
if (
|
||||||
|
[...excludedTerms].some(
|
||||||
|
(term) =>
|
||||||
|
terms[term] === file ||
|
||||||
|
titleTerms[term] === file ||
|
||||||
|
(terms[term] || []).includes(file) ||
|
||||||
|
(titleTerms[term] || []).includes(file)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// select one (max) score for the file.
|
||||||
|
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
|
||||||
|
// add result to the result list
|
||||||
|
results.push([
|
||||||
|
docNames[file],
|
||||||
|
titles[file],
|
||||||
|
"",
|
||||||
|
null,
|
||||||
|
score,
|
||||||
|
filenames[file],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to return a node containing the
|
||||||
|
* search summary for a given text. keywords is a list
|
||||||
|
* of stemmed words.
|
||||||
|
*/
|
||||||
|
makeSearchSummary: (htmlText, keywords) => {
|
||||||
|
const text = Search.htmlToText(htmlText);
|
||||||
|
if (text === "") return null;
|
||||||
|
|
||||||
|
const textLower = text.toLowerCase();
|
||||||
|
const actualStartPosition = [...keywords]
|
||||||
|
.map((k) => textLower.indexOf(k.toLowerCase()))
|
||||||
|
.filter((i) => i > -1)
|
||||||
|
.slice(-1)[0];
|
||||||
|
const startWithContext = Math.max(actualStartPosition - 120, 0);
|
||||||
|
|
||||||
|
const top = startWithContext === 0 ? "" : "...";
|
||||||
|
const tail = startWithContext + 240 < text.length ? "..." : "";
|
||||||
|
|
||||||
|
let summary = document.createElement("p");
|
||||||
|
summary.classList.add("context");
|
||||||
|
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
|
||||||
|
|
||||||
|
return summary;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
_ready(Search.init);
|
||||||
|
|
@ -0,0 +1,154 @@
|
||||||
|
/* Highlighting utilities for Sphinx HTML documentation. */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const SPHINX_HIGHLIGHT_ENABLED = true
|
||||||
|
|
||||||
|
/**
|
||||||
|
* highlight a given string on a node by wrapping it in
|
||||||
|
* span elements with the given class name.
|
||||||
|
*/
|
||||||
|
const _highlight = (node, addItems, text, className) => {
|
||||||
|
if (node.nodeType === Node.TEXT_NODE) {
|
||||||
|
const val = node.nodeValue;
|
||||||
|
const parent = node.parentNode;
|
||||||
|
const pos = val.toLowerCase().indexOf(text);
|
||||||
|
if (
|
||||||
|
pos >= 0 &&
|
||||||
|
!parent.classList.contains(className) &&
|
||||||
|
!parent.classList.contains("nohighlight")
|
||||||
|
) {
|
||||||
|
let span;
|
||||||
|
|
||||||
|
const closestNode = parent.closest("body, svg, foreignObject");
|
||||||
|
const isInSVG = closestNode && closestNode.matches("svg");
|
||||||
|
if (isInSVG) {
|
||||||
|
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||||
|
} else {
|
||||||
|
span = document.createElement("span");
|
||||||
|
span.classList.add(className);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||||
|
const rest = document.createTextNode(val.substr(pos + text.length));
|
||||||
|
parent.insertBefore(
|
||||||
|
span,
|
||||||
|
parent.insertBefore(
|
||||||
|
rest,
|
||||||
|
node.nextSibling
|
||||||
|
)
|
||||||
|
);
|
||||||
|
node.nodeValue = val.substr(0, pos);
|
||||||
|
/* There may be more occurrences of search term in this node. So call this
|
||||||
|
* function recursively on the remaining fragment.
|
||||||
|
*/
|
||||||
|
_highlight(rest, addItems, text, className);
|
||||||
|
|
||||||
|
if (isInSVG) {
|
||||||
|
const rect = document.createElementNS(
|
||||||
|
"http://www.w3.org/2000/svg",
|
||||||
|
"rect"
|
||||||
|
);
|
||||||
|
const bbox = parent.getBBox();
|
||||||
|
rect.x.baseVal.value = bbox.x;
|
||||||
|
rect.y.baseVal.value = bbox.y;
|
||||||
|
rect.width.baseVal.value = bbox.width;
|
||||||
|
rect.height.baseVal.value = bbox.height;
|
||||||
|
rect.setAttribute("class", className);
|
||||||
|
addItems.push({ parent: parent, target: rect });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (node.matches && !node.matches("button, select, textarea")) {
|
||||||
|
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const _highlightText = (thisNode, text, className) => {
|
||||||
|
let addItems = [];
|
||||||
|
_highlight(thisNode, addItems, text, className);
|
||||||
|
addItems.forEach((obj) =>
|
||||||
|
obj.parent.insertAdjacentElement("beforebegin", obj.target)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Small JavaScript module for the documentation.
|
||||||
|
*/
|
||||||
|
const SphinxHighlight = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* highlight the search words provided in localstorage in the text
|
||||||
|
*/
|
||||||
|
highlightSearchWords: () => {
|
||||||
|
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
|
||||||
|
|
||||||
|
// get and clear terms from localstorage
|
||||||
|
const url = new URL(window.location);
|
||||||
|
const highlight =
|
||||||
|
localStorage.getItem("sphinx_highlight_terms")
|
||||||
|
|| url.searchParams.get("highlight")
|
||||||
|
|| "";
|
||||||
|
localStorage.removeItem("sphinx_highlight_terms")
|
||||||
|
url.searchParams.delete("highlight");
|
||||||
|
window.history.replaceState({}, "", url);
|
||||||
|
|
||||||
|
// get individual terms from highlight string
|
||||||
|
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
|
||||||
|
if (terms.length === 0) return; // nothing to do
|
||||||
|
|
||||||
|
// There should never be more than one element matching "div.body"
|
||||||
|
const divBody = document.querySelectorAll("div.body");
|
||||||
|
const body = divBody.length ? divBody[0] : document.querySelector("body");
|
||||||
|
window.setTimeout(() => {
|
||||||
|
terms.forEach((term) => _highlightText(body, term, "highlighted"));
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
const searchBox = document.getElementById("searchbox");
|
||||||
|
if (searchBox === null) return;
|
||||||
|
searchBox.appendChild(
|
||||||
|
document
|
||||||
|
.createRange()
|
||||||
|
.createContextualFragment(
|
||||||
|
'<p class="highlight-link">' +
|
||||||
|
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
|
||||||
|
_("Hide Search Matches") +
|
||||||
|
"</a></p>"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to hide the search marks again
|
||||||
|
*/
|
||||||
|
hideSearchWords: () => {
|
||||||
|
document
|
||||||
|
.querySelectorAll("#searchbox .highlight-link")
|
||||||
|
.forEach((el) => el.remove());
|
||||||
|
document
|
||||||
|
.querySelectorAll("span.highlighted")
|
||||||
|
.forEach((el) => el.classList.remove("highlighted"));
|
||||||
|
localStorage.removeItem("sphinx_highlight_terms")
|
||||||
|
},
|
||||||
|
|
||||||
|
initEscapeListener: () => {
|
||||||
|
// only install a listener if it is really needed
|
||||||
|
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
|
||||||
|
|
||||||
|
document.addEventListener("keydown", (event) => {
|
||||||
|
// bail for input elements
|
||||||
|
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||||
|
// bail with special keys
|
||||||
|
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
|
||||||
|
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
|
||||||
|
SphinxHighlight.hideSearchWords();
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
_ready(() => {
|
||||||
|
/* Do not call highlightSearchWords() when we are on the search page.
|
||||||
|
* It will highlight words from the *previous* search query.
|
||||||
|
*/
|
||||||
|
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
|
||||||
|
SphinxHighlight.initEscapeListener();
|
||||||
|
});
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,352 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Cables — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Anlogic notes" href="../vendors/anlogic.html" />
|
||||||
|
<link rel="prev" title="Boards" href="board.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Cables</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/compatibility/cable.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="cables">
|
||||||
|
<span id="compatibility-cables"></span><h1>Cables<a class="headerlink" href="#cables" title="Link to this heading">¶</a></h1>
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>keyword</p></th>
|
||||||
|
<th class="head"><p>Name</p></th>
|
||||||
|
<th class="head"><p>Description</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p>anlogicCable</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/AnlogicInfo/anlogic-usbjtag">anlogic JTAG adapter</a></p></td>
|
||||||
|
<td><p>JTAG adapter firmware for stm32</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>arm-usb-ocd-h</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/">Olimex ARM-USB-OCD-H adapter</a></p></td>
|
||||||
|
<td><p>High-speed 3-IN-1 fast USB ARM JTAG, USB-to-RS232 virtual port and power supply 5VDC device</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>arm-usb-tiny-h</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY-H/">Olimex ARM-USB-TINY-H adapter</a></p></td>
|
||||||
|
<td><p>Low-cost high-speed ARM USB JTAG</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>bus_blaster</p></td>
|
||||||
|
<td><p><a class="reference external" href="http://dangerousprototypes.com/docs/Bus_Blaster">Dangerousprototypes Bus Blaster</a></p></td>
|
||||||
|
<td><p>Jtag adapter based on ft2232</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>bus_blaster_b</p></td>
|
||||||
|
<td><p><a class="reference external" href="http://dangerousprototypes.com/docs/Bus_Blaster">Dangerousprototypes Bus Blaster</a></p></td>
|
||||||
|
<td><p>Jtag adapter based on ft2232 (interface B)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ch347_jtag</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.wch-ic.com/products/CH347.html">ch347 JTAG adapter</a></p></td>
|
||||||
|
<td><p>QinHeng Electronics USB To UART+JTAG (mode 3)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ch552_jtag</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/diodep/ch55x_jtag">ch552 JTAG adapter</a></p></td>
|
||||||
|
<td><p>Tang Nano USB-JTAG interface. FT2232C clone firmware for CH552 microcontroler</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>cmsisdap</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://os.mbed.com/docs/mbed-os/v6.11/debug-test/daplink.html">ARM CMSIS DAP protocol interface</a></p></td>
|
||||||
|
<td><p>ARM CMSIS DAP protocol interface (hid only)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>gatemate_pgm</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://colognechip.com/programmable-logic/gatemate/">gatemate pgm</a></p></td>
|
||||||
|
<td><p>Cologne Chip GateMate FPGA Programmer. FT232H-based JTAG/SPI programmer cable</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>gatemate_evb_jtag</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://colognechip.com/programmable-logic/gatemate/">gatemate evb JTAG</a></p></td>
|
||||||
|
<td><p>Cologne Chip GateMate JTAG programmer</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>gatemate_evb_spi</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://colognechip.com/programmable-logic/gatemate/">gatemate evb spi</a></p></td>
|
||||||
|
<td><p>Cologne Chip GateMate SPI programmer</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>gwu2x</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.gowinsemi.com/en/product/detail/55/">gwu2x</a></p></td>
|
||||||
|
<td><p>Gowin GWUX2X</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>dfu</p></td>
|
||||||
|
<td><p><a class="reference external" href="http://www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf">DFU interface</a></p></td>
|
||||||
|
<td><p>DFU (Device Firmware Upgrade) USB device compatible with DFU protocol</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>digilent</p></td>
|
||||||
|
<td><p>digilent cable</p></td>
|
||||||
|
<td><p>FT2232 JTAG / UART cable</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>diglent_b</p></td>
|
||||||
|
<td><p>digilent cable</p></td>
|
||||||
|
<td><p>digilent FT2232 JTAG / UART cable (interface B)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>digilent_hs2</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://store.digilentinc.com/jtag-hs2-programming-cable/">digilent hs2 cable</a></p></td>
|
||||||
|
<td><p>FT232H JTAG programmer cable from digilent</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>digilent_hs3</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://digilent.com/shop/jtag-hs3-programming-cable/">digilent hs3</a></p></td>
|
||||||
|
<td><p>JTAG programmer cable from digilent</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>dirtyJtag</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/jeanthom/DirtyJTAG">dirty Jtag</a></p></td>
|
||||||
|
<td><p>JTAG probe firmware for STM32F1</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>efinix_spi_ft4232</p></td>
|
||||||
|
<td><p>efinix SPI (ft4232)</p></td>
|
||||||
|
<td><p>efinix SPI interface (FTDI4232 interface A)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>efinix_jtag_ft4232</p></td>
|
||||||
|
<td><p>efinix JTAG (ft4232)</p></td>
|
||||||
|
<td><p>efinix JTAG interface (FTDI4232 interface B)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>efinix_spi_ft2232</p></td>
|
||||||
|
<td><p>efinix SPI (ft2232)</p></td>
|
||||||
|
<td><p>efinix SPI interface (FTDI2232 interface A)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>efinix_jtag_ft2232</p></td>
|
||||||
|
<td><p>efinix JTAG (ft2232)</p></td>
|
||||||
|
<td><p>efinix JTAG interface (FTDI2232 interface B)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ft2232</p></td>
|
||||||
|
<td><p>FT2232 C/D/H</p></td>
|
||||||
|
<td><p>generic programmer cable based on Ftdi FT2232 (interface A)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ft2232</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/sipeed/RV-Debugger-BL702">Tang Nano (1k, 4k, 8k) USB-JTAG interface</a></p></td>
|
||||||
|
<td><p>USB-JTAG/UART debugger based on BL702 microcontroler.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ft2232</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/sipeed/RV-Debugger-BL702">Sipeed RV-Debugger-BL702</a></p></td>
|
||||||
|
<td><p>RV-Debugger-BL702 is an opensource project that implement a JTAG+UART debugger with BL702C-A0.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ft2232</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/Disasm/f042-ftdi">honeycomb USB-JTAG interface.</a></p></td>
|
||||||
|
<td><p>FT2232C clone based on STM32F042 microcontroler</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ft2232_b</p></td>
|
||||||
|
<td><p>FT2232 C/D/H</p></td>
|
||||||
|
<td><p>generic programmer cable based on Ftdi FT2232 (interface B)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ft231X</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.ftdichip.com/old2020/Products/ICs/FT231X.html">FT231X</a></p></td>
|
||||||
|
<td><p>generic USB<->UART converters in bitbang mode (with some limitations and workaround)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ft232</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://ftdichip.com/products/ft232hl/">FT232H</a></p></td>
|
||||||
|
<td><p>generic programmer cable based on Ftdi FT232Hx. One interface, MPSSE capable</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ft232RL</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://ftdichip.com/products/ft232rl/">FT232RL</a></p></td>
|
||||||
|
<td><p>generic USB<->UART converters in bitbang mode (with some limitations and workaround)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ft4232</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://ftdichip.com/products/ft4232h-56q/">FT4232</a></p></td>
|
||||||
|
<td><p>quad interface programmer cable. MPSSE capable.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ft4232hp</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://ftdichip.com/wp-content/uploads/2023/02/DS_FT4233HP.pdf">FT4232HP (interface A)</a></p></td>
|
||||||
|
<td><p>quad interface programmer cable. MPSSE capable. High Speed USB Bridge with Type-C/PD3.0 Controller</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ft4232hp_b</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://ftdichip.com/wp-content/uploads/2023/02/DS_FT4233HP.pdf">FT4232HP (interface B)</a></p></td>
|
||||||
|
<td><p>quad interface programmer cable. MPSSE capable. High Speed USB Bridge with Type-C/PD3.0 Controller</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>ecpix5-debug</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://shop.lambdaconcept.com/home/46-ecpix-5.html">ecpix5-debug</a></p></td>
|
||||||
|
<td><p>LambdaConcept ECPIX5 (45k/85k) UART/JTAG interface</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>jlink</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.segger.com/products/debug-probes/j-link">jlink</a></p></td>
|
||||||
|
<td><p>SEGGER J-Link Debug Probes</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>jlink</p></td>
|
||||||
|
<td><p>jlink_base</p></td>
|
||||||
|
<td><p>SEGGER J-Link BASE Debug Probes</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>jlink</p></td>
|
||||||
|
<td><p>jtrace_pro</p></td>
|
||||||
|
<td><p>SEGGER J-Trace PRO Debug Probes</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>jtag-smt2-nc</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://digilent.com/shop/jtag-smt2-nc-surface-mount-programming-module">jtag-smt2-nc</a></p></td>
|
||||||
|
<td><p>JTAG-SMT2-NC Surface-mount Programming Module</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>lpc-link2</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.nxp.com/design/microcontrollers-developer-resources/lpc-link2:OM13054">lpc-link2</a></p></td>
|
||||||
|
<td><p>LPC-Link2 (OM13054) cmsisDAP firmware</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>numato</p></td>
|
||||||
|
<td><p>numato</p></td>
|
||||||
|
<td><p>Embedded cable for Numato Systems Mimas-A7 board</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>orbtrace</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/orbcode/orbtrace">orbtrace interface</a></p></td>
|
||||||
|
<td><p>Open source FPGA-based debug and trace interface</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>papilio</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://papilio.cc/">papilio</a></p></td>
|
||||||
|
<td><p>Papilio FPGA Platform</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>steppenprobe</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/diegoherranz/steppenprobe">steppenprobe</a></p></td>
|
||||||
|
<td><p>Open Source Hardware JTAG/SWD/UART/SWO interface board based on FTDI FT2232H</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>remote-bitgang</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/openocd-org/openocd/blob/master/doc/manual/jtag/drivers/remote_bitbang.txt">OpenOCD remote bitbang</a></p></td>
|
||||||
|
<td><p>The remote_bitbang JTAG driver is used to drive JTAG from a remote (TCP) process</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>tigard</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.crowdsupply.com/securinghw/tigard">tigard</a></p></td>
|
||||||
|
<td><p>SWD/JTAG/UART/SPI programmer based on Ftdi FT2232HQ</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>usb-blaster</p></td>
|
||||||
|
<td><p>intel USB Blaster I interface</p></td>
|
||||||
|
<td><p>JTAG programmer cable from intel/altera (FT245 + EPM7064)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>usb-blasterII</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_usb_blstr_ii_cable.pdf">intel USB Blaster II interface</a></p></td>
|
||||||
|
<td><p>JTAG programmer cable from intel/altera (EZ-USB FX2 + EPM570)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>usb-blasterIII</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_usb_blstr_ii_cable.pdf">intel USB Blaster III interface</a></p></td>
|
||||||
|
<td><p>JTAG programmer cable from intel/altera (FTDI2232 with custom VID/PID)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>xvc-client</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/Xilinx/XilinxVirtualCable">Xilinx Virtual Cable</a></p></td>
|
||||||
|
<td><p>Xilinx Virtual Cable (XVC) is a TCP/IP-based protocol that acts like a JTAG cable.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>xvc-server</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/Xilinx/XilinxVirtualCable">Xilinx Virtual Cable (server side)</a></p></td>
|
||||||
|
<td><p>Xilinx Virtual Cable (XVC) is a TCP/IP-based protocol that acts like a JTAG cable.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>libgpiod</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/">Bitbang GPIO</a></p></td>
|
||||||
|
<td><p>Bitbang GPIO pins on Linux host.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>jetson-nano-gpio</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/jwatte/jetson-gpio-example">Bitbang GPIO</a></p></td>
|
||||||
|
<td><p>Bitbang GPIO pins on Jetson Nano Linux host. Use /dev/mem to have a faster clock.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>ch347</p></td>
|
||||||
|
<td><p><a class="reference external" href="https://github.com/wuxx/USB-HS-Bridge">CH347</a></p></td>
|
||||||
|
<td><p>CH347 is a USB HS bus converter with UART, I2C, SPI and JTAG interfaces</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="board.html" class="btn btn-neutral float-left" title="Boards" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="../vendors/anlogic.html" class="btn btn-neutral float-right" title="Anlogic notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,418 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>FPGAs — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Boards" href="board.html" />
|
||||||
|
<link rel="prev" title="Advanced usage of openFPGALoader" href="../guide/advanced.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>FPGAs</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/compatibility/fpga.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="fpgas">
|
||||||
|
<span id="compatibility-fpgas"></span><h1>FPGAs<a class="headerlink" href="#fpgas" title="Link to this heading">¶</a></h1>
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>Vendor</p></th>
|
||||||
|
<th class="head"><p>Description</p></th>
|
||||||
|
<th class="head"><p>Model</p></th>
|
||||||
|
<th class="head"><p>Memory</p></th>
|
||||||
|
<th class="head"><p>Flash</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/anlogic.html#anlogic"><span class="std std-ref">Anlogic</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.anlogic.com/en/product/fpga/saleagle/eg4">EG4</a></p></td>
|
||||||
|
<td><p>EG4D20, EG4S20</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>AS</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/anlogic.html#anlogic"><span class="std std-ref">Anlogic</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.anlogic.com/en/product/fpga/salelf/salelf2">SALELF 2</a></p></td>
|
||||||
|
<td><p>EF2M45</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/colognechip.html#colognechip"><span class="std std-ref">Cologne Chip</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://colognechip.com/programmable-logic/gatemate/">GateMate Series</a></p></td>
|
||||||
|
<td><p>CCGM1A1, CCGM1A2, CCGM1A4, CCGM1A9, CCGM1A16, CCGM1A25</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/efinix.html#efinix"><span class="std std-ref">Efinix</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.efinixinc.com/products-trion.html">Trion</a></p></td>
|
||||||
|
<td><p>T8, T13</p></td>
|
||||||
|
<td><p>NA</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/efinix.html#efinix"><span class="std std-ref">Efinix</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.efinixinc.com/products-titanium.html">Titanium</a></p></td>
|
||||||
|
<td><p>Ti60, Ti180</p></td>
|
||||||
|
<td><p>NA</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/gowin.html#gowin"><span class="std std-ref">Gowin</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.gowinsemi.com/en/product/detail/46/">LittleBee (GW1N)</a></p></td>
|
||||||
|
<td><p>GW1N-1, GW1N-4, GW1NR-9, GW1NR-9C, GW1NS-2C, GW1NSR-4C, GW1NZ-1</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>IF</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/gowin.html#gowin"><span class="std std-ref">Gowin</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.gowinsemi.com/en/product/detail/38/">Arora (GW2A)</a></p></td>
|
||||||
|
<td><p>GW2A-18C, GW2A-55</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>EF</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/gowin.html#gowin"><span class="std std-ref">Gowin</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.gowinsemi.com/en/product/detail/60/">Arora V (GW5A)</a></p></td>
|
||||||
|
<td><p>GW5A-25, GW5AST-138, GW5AT-60, GW5AT-138</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>EF</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/support/programmable/support-resources/devices/max-ii-support.html">Max II(CPLD)</a></p></td>
|
||||||
|
<td><p>EPM240T100C5N</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/support/programmable/support-resources/devices/cyclone-ii-support.html">Cyclone II</a></p></td>
|
||||||
|
<td><p>EP2C5T144C8N</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/programmable/products/fpga/cyclone-series/cyclone-iii/support.html">Cyclone III</a></p></td>
|
||||||
|
<td><p>EP3C16</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-iv/features.html">Cyclone IV CE</a></p></td>
|
||||||
|
<td><p>EP4CE22, EP4CE115</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/products/details/fpga/cyclone/iv/gx/products.html">Cyclone IV GX</a></p></td>
|
||||||
|
<td><p>EP4CGX150</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-v.html">Cyclone V E</a></p></td>
|
||||||
|
<td><p>5CEA2, 5CEA5, 5CEBA4, 5CEBA9</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-v.html">Cyclone V SE SoC</a></p></td>
|
||||||
|
<td><p>5CSEBA6, 5CSEMA4, 5CSEMA5</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>NT</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.de/content/www/de/de/products/sku/210318/stratix-v-5sgsd5-fpga/specifications.html">Stratix V GS</a></p></td>
|
||||||
|
<td><p>5SGSD5</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-10.html">Cyclone 10 LP</a></p></td>
|
||||||
|
<td><p>10CL025</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/intel.html#intel"><span class="std std-ref">Intel</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.intel.fr/content/www/fr/fr/products/details/fpga/max/10.html">Max 10</a></p></td>
|
||||||
|
<td><p>10M02, 10M08</p></td>
|
||||||
|
<td><p>SVF</p></td>
|
||||||
|
<td><p>POF</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.latticesemi.com/Products/FPGAandCPLD/Certus-NX">Certus-NX</a></p></td>
|
||||||
|
<td><p>LFD2NX-40</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.latticesemi.com/Products/FPGAandCPLD/Certus-NX">CertusPro-NX</a></p></td>
|
||||||
|
<td><p>LFCPNX-100</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.latticesemi.com/en/Products/FPGAandCPLD/CrossLink-NX">CrossLink-NX</a></p></td>
|
||||||
|
<td><p>LIFCL-40</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.latticesemi.com/Products/FPGAandCPLD/LatticeECP3">ECP3</a></p></td>
|
||||||
|
<td><p>LFE3-70E</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>TBD</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="http://www.latticesemi.com/Products/FPGAandCPLD/ECP5">ECP5</a></p></td>
|
||||||
|
<td><p>LFE5U-12, LFE5U-25, LFE5U-45, LFE5U-85, LFE5UM-25, LFE5UM-45, LFE5UM-85, LFE5UM5G-25, LFE5UM5G-45, LFE5UM5G-85</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.latticesemi.com/en/Products/FPGAandCPLD/iCE40">iCE40</a></p></td>
|
||||||
|
<td><p>HX1K, HX4K, HX8K, UP5K</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>AS</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO2">MachXO2</a></p></td>
|
||||||
|
<td><p>256, 640, 640U, 1200, 1200U, 2000, 2000U, 4000, 7000</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="http://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO3D.aspx">MachXO3D</a></p></td>
|
||||||
|
<td><p>4300, 9400</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/lattice.html#lattice"><span class="std std-ref">Lattice</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="http://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO3.aspx">MachXO3LF</a></p></td>
|
||||||
|
<td><p>640, 1300, 2100, 4300, 6900, 9400</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/artix-7.html">Artix 7</a></p></td>
|
||||||
|
<td><p>xc7a25t, xc7a35ti, xc7a50t, xc7a75t, xc7a100t, xc7a200t</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/kintex-7.html#productTable">Kintex 7</a></p></td>
|
||||||
|
<td><p>xc7k70t, xc7k160t, xc7k325t, xc7k410t, xc7k420t, xc7k480t</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/virtex-7.html#productTable">Virtex 7</a></p></td>
|
||||||
|
<td><p>xc7v585t, xc7v2000t, xc7vx330t, xc7vx415t, xc7vx485t, xc7vx550t, xc7vx690t, xc7vx980t, xc7vx1140t, xc7vh580t, xc7vh870t</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/artix-ultrascale-plus.html">Artix UltraScale+</a></p></td>
|
||||||
|
<td><p>xcau15p, xcau25p</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>TBD</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/kintex-ultrascale.html#productTable">Kintex UltraScale</a></p></td>
|
||||||
|
<td><p>xcku035, xcku040, xcku060, xcku115</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK (primary)</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/kintex-ultrascale-plus.html#productTable">Kintex UltraScale+</a></p></td>
|
||||||
|
<td><p>xcku3p, xcku5p</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/virtex-6.html">Virtex 6</a></p></td>
|
||||||
|
<td><p>xc6vlx130t</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.amd.com/en/products/adaptive-socs-and-fpgas/fpga/virtex-ultrascale.html#productTable">Virtex UltraScale</a></p></td>
|
||||||
|
<td><p>xcvu095</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>TBD</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/virtex-ultrascale-plus.html#productTable">Virtex UltraScale+</a></p></td>
|
||||||
|
<td><p>xcvu9p</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.amd.com/en/products/adaptive-socs-and-fpgas/fpga/spartan-ultrascale-plus.html#productTable">Spartan UltraScale+</a></p></td>
|
||||||
|
<td><p>xcsu35p</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>TBD</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/spartan-3.html">Spartan 3</a></p></td>
|
||||||
|
<td><p>xc3s200, xc3s500e</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/spartan-6.html">Spartan 6</a></p></td>
|
||||||
|
<td><p>xc6slx9, xc6slx16, xc6slx25, xc6slx45, xc6slx45T, xc6slx150T</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/fpga/spartan-7.html">Spartan 7</a></p></td>
|
||||||
|
<td><p>xc7s15, xc7s25, xc7s50</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/support/documentation/data_sheets/ds054.pdf">XC9500XL</a></p></td>
|
||||||
|
<td><p>xc9536xl, xc9572xl, xc95144xl, xc95188xl</p></td>
|
||||||
|
<td><p>NA</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/support/documentation/data_sheets/ds090.pdf">XC2C/XA2C (coolrunner II)</a></p></td>
|
||||||
|
<td><p>xc2c32a, xa2c64a</p></td>
|
||||||
|
<td><p>TBD</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/configuration-memory/platform-flash.html">XCF</a></p></td>
|
||||||
|
<td><p>xcf01s, xcf02s, xcf04s</p></td>
|
||||||
|
<td><p>NA</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html">Zynq7000</a></p></td>
|
||||||
|
<td><p>xc7z010, xc7z020</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>NA</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p><a class="reference internal" href="../vendors/xilinx.html#xilinx"><span class="std std-ref">Xilinx</span></a></p></td>
|
||||||
|
<td><p><a class="reference external" href="https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html">ZynqMPSoC</a></p></td>
|
||||||
|
<td><p>xczu2cg, xczu9eg, xczu11eg, xczu17eg</p></td>
|
||||||
|
<td><p>OK</p></td>
|
||||||
|
<td><p>NA</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>IF: Internal Flash</p></li>
|
||||||
|
<li><p>AS: Active Serial flash mode</p></li>
|
||||||
|
<li><p>NA: Not Available</p></li>
|
||||||
|
<li><p>NT: Not Tested</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="../guide/advanced.html" class="btn btn-neutral float-left" title="Advanced usage of openFPGALoader" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="board.html" class="btn btn-neutral float-right" title="Boards" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Index — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="#" />
|
||||||
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Index</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/genindex" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
|
||||||
|
<h1 id="index">Index</h1>
|
||||||
|
|
||||||
|
<div class="genindex-jumpbox">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,262 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Advanced usage of openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="FPGAs" href="../compatibility/fpga.html" />
|
||||||
|
<link rel="prev" title="Troubleshooting" href="troubleshooting.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Advanced usage of openFPGALoader</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#resetting-an-fpga">Resetting an FPGA</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#using-negative-edge-for-tdo-s-sampling">Using negative edge for TDO’s sampling</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#reading-the-bitstream-from-stdin">Reading the bitstream from STDIN</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#automatic-file-type-detection-bypass">Automatic file type detection bypass</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#ft231-ft232-bitbang-mode-and-pins-configuration">FT231/FT232 bitbang mode and pins configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#writing-to-an-arbitrary-address-in-flash-memory">Writing to an arbitrary address in flash memory</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#detect-read-write-on-primary-secondary-flash-memories">Detect/read/write on primary/secondary flash memories</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#using-an-alternative-directory-for-spioverjtag">Using an alternative directory for <em>spiOverJtag</em></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Advanced usage of openFPGALoader</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/guide/advanced.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="advanced-usage-of-openfpgaloader">
|
||||||
|
<span id="advanced-usage"></span><h1>Advanced usage of openFPGALoader<a class="headerlink" href="#advanced-usage-of-openfpgaloader" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="resetting-an-fpga">
|
||||||
|
<h2>Resetting an FPGA<a class="headerlink" href="#resetting-an-fpga" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>options<span class="o">]</span><span class="w"> </span>-r
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="using-negative-edge-for-tdo-s-sampling">
|
||||||
|
<h2>Using negative edge for TDO’s sampling<a class="headerlink" href="#using-negative-edge-for-tdo-s-sampling" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>If transaction are unstable you can try to change read edge by using</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>options<span class="o">]</span><span class="w"> </span>--invert-read-edge
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="reading-the-bitstream-from-stdin">
|
||||||
|
<h2>Reading the bitstream from STDIN<a class="headerlink" href="#reading-the-bitstream-from-stdin" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>cat<span class="w"> </span>/path/to/bitstream.ext<span class="w"> </span><span class="p">|</span><span class="w"> </span>openFPGALoader<span class="w"> </span>--file-type<span class="w"> </span>ext<span class="w"> </span><span class="o">[</span>options<span class="o">]</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">--file-type</span></code> is required to detect file type.</p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>It’s possible to load a bitstream through network:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># FPGA side</span>
|
||||||
|
nc<span class="w"> </span>-lp<span class="w"> </span>port<span class="w"> </span><span class="p">|</span><span class="w"> </span>openFPGALoader<span class="w"> </span>--file-type<span class="w"> </span>xxx<span class="w"> </span><span class="o">[</span>option<span class="o">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Bitstream side</span>
|
||||||
|
nc<span class="w"> </span>-q<span class="w"> </span><span class="m">0</span><span class="w"> </span>host<span class="w"> </span>port<span class="w"> </span><<span class="w"> </span>/path/to/bitstream.ext
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="automatic-file-type-detection-bypass">
|
||||||
|
<h2>Automatic file type detection bypass<a class="headerlink" href="#automatic-file-type-detection-bypass" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Default behavior is to use file extension to determine file parser.
|
||||||
|
To avoid this mechanism <code class="docutils literal notranslate"><span class="pre">--file-type</span> <span class="pre">type</span></code> must be used.</p>
|
||||||
|
</section>
|
||||||
|
<section id="ft231-ft232-bitbang-mode-and-pins-configuration">
|
||||||
|
<h2>FT231/FT232 bitbang mode and pins configuration<a class="headerlink" href="#ft231-ft232-bitbang-mode-and-pins-configuration" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>FT232R and ft231X may be used as JTAG programmer.
|
||||||
|
JTAG communications are emulated in bitbang mode.</p>
|
||||||
|
<p>To use these devices user needs to provides both the cable and the pin mapping:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>options<span class="o">]</span><span class="w"> </span>-cft23XXX<span class="w"> </span>--pins<span class="o">=</span>TDI:TDO:TCK:TMS<span class="w"> </span>/path/to/bitstream.ext
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>where:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>ft23XXX may be <code class="docutils literal notranslate"><span class="pre">ft232RL</span></code> or <code class="docutils literal notranslate"><span class="pre">ft231X</span></code>.</p></li>
|
||||||
|
<li><p>TDI:TDO:TCK:TMS may be the pin ID (0 <= id <= 7) or string value.</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>allowed values are:</p>
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>value</p></th>
|
||||||
|
<th class="head"><p>ID</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p>TXD</p></td>
|
||||||
|
<td><p>0</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>RXD</p></td>
|
||||||
|
<td><p>1</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>RTS</p></td>
|
||||||
|
<td><p>2</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>CTS</p></td>
|
||||||
|
<td><p>3</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>DTR</p></td>
|
||||||
|
<td><p>4</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>DSR</p></td>
|
||||||
|
<td><p>5</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>DCD</p></td>
|
||||||
|
<td><p>6</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>RI</p></td>
|
||||||
|
<td><p>7</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<section id="writing-to-an-arbitrary-address-in-flash-memory">
|
||||||
|
<h2>Writing to an arbitrary address in flash memory<a class="headerlink" href="#writing-to-an-arbitrary-address-in-flash-memory" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>With FPGA using an external SPI flash (<em>xilinx</em>, <em>lattice ECP5/nexus/ice40</em>, <em>anlogic</em>, <em>efinix</em>) option <code class="docutils literal notranslate"><span class="pre">-o</span></code> allows
|
||||||
|
one to write raw binary file to an arbitrary adress in FLASH.</p>
|
||||||
|
</section>
|
||||||
|
<section id="detect-read-write-on-primary-secondary-flash-memories">
|
||||||
|
<h2>Detect/read/write on primary/secondary flash memories<a class="headerlink" href="#detect-read-write-on-primary-secondary-flash-memories" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>With FPGA using two external SPI flash (some <em>xilinx</em> boards) option <code class="docutils literal notranslate"><span class="pre">--target-flash</span></code> allows to select the QSPI chip.</p>
|
||||||
|
<p>To detect:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>kcu105<span class="w"> </span>-f<span class="w"> </span>--target-flash<span class="w"> </span><span class="o">{</span>primary,secondary<span class="o">}</span><span class="w"> </span>--detect
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>To read the primary flash memory:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>kcu105<span class="w"> </span>-f<span class="w"> </span>--target-flash<span class="w"> </span>primary<span class="w"> </span>--dump-flash<span class="w"> </span>--file-size<span class="w"> </span>N_BYTES<span class="w"> </span>mydump.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>and the second flash memory:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>kcu105<span class="w"> </span>-f<span class="w"> </span>--target-flash<span class="w"> </span>secondary<span class="w"> </span>--dump-flash<span class="w"> </span>--file-size<span class="w"> </span>N_BYTES<span class="w"> </span>--secondary-bitstream<span class="w"> </span>mydump.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>To write on secondary flash memory:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>kcu105<span class="w"> </span>-f<span class="w"> </span>--target-flash<span class="w"> </span>secondary<span class="w"> </span>--secondary-bitstream<span class="w"> </span>mySecondaryBitstream.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="using-an-alternative-directory-for-spioverjtag">
|
||||||
|
<h2>Using an alternative directory for <em>spiOverJtag</em><a class="headerlink" href="#using-an-alternative-directory-for-spioverjtag" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>By setting <code class="docutils literal notranslate"><span class="pre">OPENFPGALOADER_SOJ_DIR</span></code> it’s possible to override default
|
||||||
|
<em>spiOverJtag</em> bitstreams directory:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">OPENFPGALOADER_SOJ_DIR</span><span class="o">=</span>/somewhere
|
||||||
|
openFPGALoader<span class="w"> </span>xxxx
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>or</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nv">OPENFPGALOADER_SOJ_DIR</span><span class="o">=</span>/somewhere<span class="w"> </span>openFPGALoader<span class="w"> </span>xxxx
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="troubleshooting.html" class="btn btn-neutral float-left" title="Troubleshooting" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="../compatibility/fpga.html" class="btn btn-neutral float-right" title="FPGAs" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,189 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>First steps with openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Installing openFPGALoader" href="install.html" />
|
||||||
|
<link rel="prev" title="openFPGALoader: universal utility for programming FPGA" href="../index.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">First steps with openFPGALoader</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#install">Install</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#programming-a-development-board">Programming a development board</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#programming-an-standalone-fpga">Programming an “standalone” FPGA</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#troubleshooting">Troubleshooting</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>First steps with openFPGALoader</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/guide/first-steps.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="first-steps-with-openfpgaloader">
|
||||||
|
<span id="first-steps"></span><h1>First steps with openFPGALoader<a class="headerlink" href="#first-steps-with-openfpgaloader" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="install">
|
||||||
|
<h2>Install<a class="headerlink" href="#install" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Packages are available for Linux distributions, Windows (MSYS2) and macOS:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><em>Arch Linux</em>: <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">pacman</span> <span class="pre">-S</span> <span class="pre">openfpgaloader</span></code></p></li>
|
||||||
|
<li><p><em>Fedora</em>: <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">dnf</span> <span class="pre">copr</span> <span class="pre">enable</span> <span class="pre">mobicarte/openFPGALoader;</span> <span class="pre">sudo</span> <span class="pre">dnf</span> <span class="pre">install</span> <span class="pre">openFPGALoader</span></code></p></li>
|
||||||
|
<li><p><em>MSYS2</em>: <code class="docutils literal notranslate"><span class="pre">pacman</span> <span class="pre">-S</span> <span class="pre">mingw-w64-ucrt-x86_64-openFPGALoader</span></code></p></li>
|
||||||
|
<li><p><em>macOS</em>: <code class="docutils literal notranslate"><span class="pre">brew</span> <span class="pre">install</span> <span class="pre">openfpgaloader</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
<p>More instructions for other installation scenarios are available in <a class="reference internal" href="install.html#install"><span class="std std-ref">Installing openFPGALoader</span></a>.</p>
|
||||||
|
</section>
|
||||||
|
<section id="programming-a-development-board">
|
||||||
|
<h2>Programming a development board<a class="headerlink" href="#programming-a-development-board" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Just simply replace <code class="docutils literal notranslate"><span class="pre">my_fpga_board</span></code> with any FPGA board from <a class="reference internal" href="../compatibility/board.html#compatibility-boards"><span class="std std-ref">Boards</span></a>
|
||||||
|
(or <code class="docutils literal notranslate"><span class="pre">openFPGALoader</span> <span class="pre">--list-boards</span></code>) in any of the two commands below, depending on if you want to program the volatile
|
||||||
|
part of your FPGA (faster but not persistent) or the flash part of your FPGA (slower but persistent):</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>my_fpga_board<span class="w"> </span>my_bitstream.bit<span class="w"> </span><span class="c1"># Program to SRAM</span>
|
||||||
|
openFPGALoader<span class="w"> </span>-b<span class="w"> </span>my_fpga_board<span class="w"> </span>-f<span class="w"> </span>my_bitstream.bit<span class="w"> </span><span class="c1"># Program to flash</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>When a bitstream file is compatible with both memory load and FLASH write, the default behavior is to load bitstream
|
||||||
|
in memory.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="programming-an-standalone-fpga">
|
||||||
|
<h2>Programming an “standalone” FPGA<a class="headerlink" href="#programming-an-standalone-fpga" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>If your FPGA doesn’t come with a built-in programmer or if you prefer to use an external cable, you can specify a cable
|
||||||
|
to use from <a class="reference internal" href="../compatibility/cable.html#compatibility-cables"><span class="std std-ref">Cables</span></a> (or <code class="docutils literal notranslate"><span class="pre">openFPGALoader</span> <span class="pre">--list-cables</span></code>):</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-c<span class="w"> </span>my_cable<span class="w"> </span>my_bitstream.bit<span class="w"> </span><span class="c1"># Program to SRAM</span>
|
||||||
|
openFPGALoader<span class="w"> </span>-c<span class="w"> </span>my_cable<span class="w"> </span>-f<span class="w"> </span>my_bitstream.bit<span class="w"> </span><span class="c1"># Program to flash</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>For some cable (like digilent adapters) signals from the converter are not just directly to the FPGA.
|
||||||
|
For this case, the <code class="docutils literal notranslate"><span class="pre">-c</span></code> must be added.</p>
|
||||||
|
</div>
|
||||||
|
<div class="admonition hint">
|
||||||
|
<p class="admonition-title">Hint</p>
|
||||||
|
<p>FTDI/FTDI-compatible cable users: the <code class="docutils literal notranslate"><span class="pre">-d</span></code> option lets you specify a specific FTDI device:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-d<span class="w"> </span>/dev/ttyUSBX
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>When the <code class="docutils literal notranslate"><span class="pre">-d</span></code> option is not provided, openFPGALoader will opens the first FTDI adapter it finds.
|
||||||
|
Therefore it is preferable to use this flag if your computer is connected to multiple FTDI devices.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="troubleshooting">
|
||||||
|
<h2>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Please refer to <a class="reference internal" href="troubleshooting.html#troubleshooting"><span class="std std-ref">Troubleshooting</span></a>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="../index.html" class="btn btn-neutral float-left" title="openFPGALoader: universal utility for programming FPGA" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="install.html" class="btn btn-neutral float-right" title="Installing openFPGALoader" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,307 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Installing openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Troubleshooting" href="troubleshooting.html" />
|
||||||
|
<link rel="prev" title="First steps with openFPGALoader" href="first-steps.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Installing openFPGALoader</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#linux">Linux</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#debian-ubuntu">Debian/Ubuntu</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#guix">Guix</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#arch-linux">Arch Linux</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#fedora">Fedora</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#from-source">From source</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#udev-rules">Udev rules</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#macos">macOS</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#windows">Windows</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#common">Common</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Installing openFPGALoader</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/guide/install.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="installing-openfpgaloader">
|
||||||
|
<span id="install"></span><h1>Installing openFPGALoader<a class="headerlink" href="#installing-openfpgaloader" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="linux">
|
||||||
|
<h2>Linux<a class="headerlink" href="#linux" title="Link to this heading">¶</a></h2>
|
||||||
|
<section id="debian-ubuntu">
|
||||||
|
<h3>Debian/Ubuntu<a class="headerlink" href="#debian-ubuntu" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>openFPGALoader is available in the default repositories:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>openfpgaloader
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="guix">
|
||||||
|
<h3>Guix<a class="headerlink" href="#guix" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>openFPGALoader is available in the default repositories:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>guix<span class="w"> </span>install<span class="w"> </span>openfpgaloader
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>To use openFPGALoader under GuixSystem without root privileges it is necessary to install the necessary udev rules. This can be done by extending <code class="docutils literal notranslate"><span class="pre">udev-service-type</span></code> in the <code class="docutils literal notranslate"><span class="pre">operating-system</span></code> configuration file with this package</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">(</span>udev-rules-service<span class="w"> </span><span class="s1">'openfpgaloader openfpgaloader #:groups '</span><span class="o">(</span><span class="se">\"</span>plugdev<span class="se">\"</span><span class="o">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Additionally, <code class="docutils literal notranslate"><span class="pre">plugdev</span></code> group should be registered in the <code class="docutils literal notranslate"><span class="pre">supplementary-groups</span></code> field of your <code class="docutils literal notranslate"><span class="pre">user-account``declaration.</span>  <span class="pre">Refer</span> <span class="pre">to</span> <span class="pre">``Base</span> <span class="pre">Services</span></code> section in the manual for examples.</p>
|
||||||
|
</section>
|
||||||
|
<section id="arch-linux">
|
||||||
|
<h3>Arch Linux<a class="headerlink" href="#arch-linux" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>openFPGALoader is available in the default repositories:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>pacman<span class="w"> </span>-S<span class="w"> </span>openfpgaloader
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Alternatively, you could build from source. First: install required libraries:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>pacman<span class="w"> </span>-S<span class="w"> </span>git<span class="w"> </span>cmake<span class="w"> </span>make<span class="w"> </span>gcc<span class="w"> </span>pkgconf<span class="w"> </span>libftdi<span class="w"> </span>libusb<span class="w"> </span>zlib<span class="w"> </span>hidapi<span class="w"> </span>gzip
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Build step is similar as Debian</p>
|
||||||
|
</section>
|
||||||
|
<section id="fedora">
|
||||||
|
<h3>Fedora<a class="headerlink" href="#fedora" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>openFPGALoader is available as a Copr repository:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>dnf<span class="w"> </span>copr<span class="w"> </span><span class="nb">enable</span><span class="w"> </span>mobicarte/openFPGALoader
|
||||||
|
sudo<span class="w"> </span>dnf<span class="w"> </span>install<span class="w"> </span>openFPGALoader
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="from-source">
|
||||||
|
<h3>From source<a class="headerlink" href="#from-source" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>This application uses <code class="docutils literal notranslate"><span class="pre">libftdi1</span></code>, so this library must be installed (and, depending on the distribution, headers too):</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>git<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>gzip<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>libftdi1-2<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>libftdi1-dev<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>libhidapi-hidraw0<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>libhidapi-dev<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>libudev-dev<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>zlib1g-dev<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>cmake<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>pkg-config<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>make<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>g++
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition hint">
|
||||||
|
<p class="admonition-title">Hint</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">libudev-dev</span></code> is optional, may be replaced by <code class="docutils literal notranslate"><span class="pre">eudev-dev</span></code> or just not installed.</p>
|
||||||
|
</div>
|
||||||
|
<p>By default, <code class="docutils literal notranslate"><span class="pre">(e)udev</span></code> support is enabled (used to open a device by his <code class="docutils literal notranslate"><span class="pre">/dev/xx</span></code> node).
|
||||||
|
If you don’t want this option, use:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-DENABLE_UDEV<span class="o">=</span>OFF
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>By default, <code class="docutils literal notranslate"><span class="pre">cmsisdap</span></code> support is enabled (used for colorlight I5, I9).
|
||||||
|
If you don’t want this option, use:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-DENABLE_CMSISDAP<span class="o">=</span>OFF
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Alternatively you can manually specify the location of <code class="docutils literal notranslate"><span class="pre">libusb</span></code> and <code class="docutils literal notranslate"><span class="pre">libftdi1</span></code>:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-DUSE_PKGCONFIG<span class="o">=</span>OFF<span class="w"> </span><span class="se">\</span>
|
||||||
|
-DLIBUSB_LIBRARIES<span class="o">=</span><path_to_libusb><span class="w"> </span><span class="se">\</span>
|
||||||
|
-DLIBFTDI_LIBRARIES<span class="o">=</span><path_to_libftdi><span class="w"> </span><span class="se">\</span>
|
||||||
|
-DLIBFTDI_VERSION<span class="o">=</span><version><span class="w"> </span><span class="se">\</span>
|
||||||
|
-DCMAKE_CXX_FLAGS<span class="o">=</span><span class="s2">"-I<libusb_include_dir> -I<libftdi1_include_dir>"</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>You may also need to add this if you see link errors between <code class="docutils literal notranslate"><span class="pre">libusb</span></code> and <code class="docutils literal notranslate"><span class="pre">pthread</span></code>:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-DLINK_CMAKE_THREADS<span class="o">=</span>ON
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>By default, <code class="docutils literal notranslate"><span class="pre">libgpiod</span></code> support is enabled
|
||||||
|
If you don’t want this option, use:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-DENABLE_LIBGPIOD<span class="o">=</span>OFF
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Additionaly you have to install <code class="docutils literal notranslate"><span class="pre">libgpiod</span></code></p>
|
||||||
|
<p>To build the app:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/trabucayre/openFPGALoader
|
||||||
|
<span class="nb">cd</span><span class="w"> </span>openFPGALoader
|
||||||
|
mkdir<span class="w"> </span>build
|
||||||
|
<span class="nb">cd</span><span class="w"> </span>build
|
||||||
|
cmake<span class="w"> </span>..<span class="w"> </span><span class="c1"># add -DBUILD_STATIC=ON to build a static version</span>
|
||||||
|
<span class="w"> </span><span class="c1"># add -DENABLE_UDEV=OFF to disable udev support and -d /dev/xxx</span>
|
||||||
|
<span class="w"> </span><span class="c1"># add -DENABLE_CMSISDAP=OFF to disable CMSIS DAP support</span>
|
||||||
|
cmake<span class="w"> </span>--build<span class="w"> </span>.
|
||||||
|
<span class="c1"># or</span>
|
||||||
|
make<span class="w"> </span>-j<span class="k">$(</span>nproc<span class="k">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>To install</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>sudo<span class="w"> </span>make<span class="w"> </span>install
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>The default install path is <code class="docutils literal notranslate"><span class="pre">/usr/local</span></code>, to change it, use <code class="docutils literal notranslate"><span class="pre">-DCMAKE_INSTALL_PREFIX=myInstallDir</span></code> in cmake invokation.</p>
|
||||||
|
</section>
|
||||||
|
<section id="udev-rules">
|
||||||
|
<h3>Udev rules<a class="headerlink" href="#udev-rules" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>By default, users have no access to converters.
|
||||||
|
A rule file (<a class="reference external" href="https://github.com/trabucayre/openFPGALoader/blob/master/99-openfpgaloader.rules">99-openfpgaloader.rules</a>) for <code class="docutils literal notranslate"><span class="pre">udev</span></code> is provided at the root directory
|
||||||
|
of this repository.
|
||||||
|
These rules set access right and group (<code class="docutils literal notranslate"><span class="pre">plugdev</span></code>) when a converter is plugged.</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>cp<span class="w"> </span><span class="m">99</span>-openfpgaloader.rules<span class="w"> </span>/etc/udev/rules.d/
|
||||||
|
sudo<span class="w"> </span>udevadm<span class="w"> </span>control<span class="w"> </span>--reload-rules<span class="w"> </span><span class="o">&&</span><span class="w"> </span>sudo<span class="w"> </span>udevadm<span class="w"> </span>trigger<span class="w"> </span><span class="c1"># force udev to take new rule</span>
|
||||||
|
sudo<span class="w"> </span>usermod<span class="w"> </span>-a<span class="w"> </span><span class="nv">$USER</span><span class="w"> </span>-G<span class="w"> </span>plugdev<span class="w"> </span><span class="c1"># add user to plugdev group</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>After that you need to unplug and replug your device.</p>
|
||||||
|
<div class="admonition hint">
|
||||||
|
<p class="admonition-title">Hint</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">usermod</span></code> is used to add <code class="docutils literal notranslate"><span class="pre">$USER</span></code> as a member of <code class="docutils literal notranslate"><span class="pre">plugdev</span></code> group.
|
||||||
|
However this update is not taken into account immediately: it’s required to
|
||||||
|
logout from current session and login again.
|
||||||
|
Check, by using <code class="docutils literal notranslate"><span class="pre">id</span> <span class="pre">$USER</span></code>, if <code class="docutils literal notranslate"><span class="pre">plugdev</span></code> is mentioned after <code class="docutils literal notranslate"><span class="pre">groups=</span></code>.
|
||||||
|
An alternate (and temporary) solution is to use <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">-</span> <span class="pre">$USER</span></code> to have
|
||||||
|
your user seen as a member of <code class="docutils literal notranslate"><span class="pre">plugdev</span></code> group (works only for the current terminal).</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="macos">
|
||||||
|
<h2>macOS<a class="headerlink" href="#macos" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>openFPGALoader is available as a <a class="reference external" href="https://brew.sh">Homebrew</a> formula:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>brew<span class="w"> </span>install<span class="w"> </span>openfpgaloader
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Alternatively, if you want to build it by hand:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>brew<span class="w"> </span>install<span class="w"> </span>--only-dependencies<span class="w"> </span>openfpgaloader
|
||||||
|
brew<span class="w"> </span>install<span class="w"> </span>cmake<span class="w"> </span>pkg-config<span class="w"> </span>zlib<span class="w"> </span>gzip
|
||||||
|
git<span class="w"> </span>clone<span class="w"> </span>https://github.com/trabucayre/openFPGALoader
|
||||||
|
<span class="nb">cd</span><span class="w"> </span>openFPGALoader
|
||||||
|
mkdir<span class="w"> </span>build
|
||||||
|
<span class="nb">cd</span><span class="w"> </span>build
|
||||||
|
cmake<span class="w"> </span>..
|
||||||
|
make<span class="w"> </span>-j
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="windows">
|
||||||
|
<h2>Windows<a class="headerlink" href="#windows" title="Link to this heading">¶</a></h2>
|
||||||
|
</section>
|
||||||
|
<section id="common">
|
||||||
|
<h2>Common<a class="headerlink" href="#common" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Bitstreams for <em>XC2C (coolrunner-II)</em> needs to be remapped using <code class="docutils literal notranslate"><span class="pre">.map</span></code> shipped with <em>ISE</em>.
|
||||||
|
<em>ISE</em> path is set at configure time using:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-DISE_PATH<span class="o">=</span>/somewhere/Xilinx/ISE_VERS/
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>default: <code class="docutils literal notranslate"><span class="pre">/opt/Xilinx/14.7</span></code>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="first-steps.html" class="btn btn-neutral float-left" title="First steps with openFPGALoader" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="troubleshooting.html" class="btn btn-neutral float-right" title="Troubleshooting" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,175 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Troubleshooting — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Advanced usage of openFPGALoader" href="advanced.html" />
|
||||||
|
<link rel="prev" title="Installing openFPGALoader" href="install.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Troubleshooting</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#i-installed-openfpgaloader-but-it-says-command-not-found-when-i-try-to-launch-it">I installed openFPGALoader but it says <cite>command not found</cite> when I try to launch it</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#gowin-device-could-not-communicate-since-last-bitstream-flashed-issue-206">Gowin device could not communicate since last bitstream flashed. (issue #206)</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#jtag-init-failed">JTAG init failed</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#tang-primer-20k-program-slow-and-stucked-issue-250">Tang Primer 20k program slow and stucked (issue #250)</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#cannot-flash-tang-nano-20k-issue-251">Cannot flash Tang Nano 20k (issue #251)</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#cannot-flash-tang-nano-9k-issue-251">Cannot flash Tang Nano 9k (issue #251)</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#unable-to-open-ftdi-device-4-usb-open-failed-issue-245">Unable to open FTDI device: -4 (usb_open() failed) (issue #245)</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Troubleshooting</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/guide/troubleshooting.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="troubleshooting">
|
||||||
|
<span id="id1"></span><h1>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="i-installed-openfpgaloader-but-it-says-command-not-found-when-i-try-to-launch-it">
|
||||||
|
<h2>I installed openFPGALoader but it says <cite>command not found</cite> when I try to launch it<a class="headerlink" href="#i-installed-openfpgaloader-but-it-says-command-not-found-when-i-try-to-launch-it" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>The correct spelling of the program is <em>openFPGALoader</em> with FPGA and the “L” of “Loader” in uppercase.
|
||||||
|
Ensure the spelling of the program is correct.</p>
|
||||||
|
</section>
|
||||||
|
<section id="gowin-device-could-not-communicate-since-last-bitstream-flashed-issue-206">
|
||||||
|
<h2>Gowin device could not communicate since last bitstream flashed. (issue <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/issues/206">#206</a>)<a class="headerlink" href="#gowin-device-could-not-communicate-since-last-bitstream-flashed-issue-206" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Gowin’s FPGA may fails to be detected if <strong>JTAGSEL_N</strong> (pin 08 for <em>GW1N-4K</em>) is used as a GPIO.
|
||||||
|
To recover you have to pull down this pin (before power up) to recover JTAG interface (<em>UG292 - JTAGSELL_N section</em>).</p>
|
||||||
|
</section>
|
||||||
|
<section id="jtag-init-failed">
|
||||||
|
<h2>JTAG init failed<a class="headerlink" href="#jtag-init-failed" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Avoid using USB hubs and connect it directly to your PC USB port.</p>
|
||||||
|
</section>
|
||||||
|
<section id="tang-primer-20k-program-slow-and-stucked-issue-250">
|
||||||
|
<h2>Tang Primer 20k program slow and stucked (issue <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/issues/250">#250</a>)<a class="headerlink" href="#tang-primer-20k-program-slow-and-stucked-issue-250" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Check your openFPGALoader version:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-V
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>If it is older than release then v0.9.0, install the most recent version (from commit <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/commit/fe259fb78d185b3113661d04cd7efa9ae0232425">f5b89bff68a5e2147404a895c075773884077438</a> or later).</p>
|
||||||
|
</section>
|
||||||
|
<section id="cannot-flash-tang-nano-20k-issue-251">
|
||||||
|
<h2>Cannot flash Tang Nano 20k (issue <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/issues/511">#251</a>)<a class="headerlink" href="#cannot-flash-tang-nano-20k-issue-251" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Some firmware version cannot be flashed on Linux-based systems. Version 2024122312 is such an example. It seems this version was not published on the <a class="reference external" href="https://api.dl.sipeed.com/TANG/Debugger/onboard/BL616/">SiPeed website</a>, however some boards sold have this firmware.</p>
|
||||||
|
<p>The cause of the problem is the debugger on the Tang Nano, specifically the firmware of this debugger. This firmware can be easily updated by following <a class="reference external" href="https://wiki.sipeed.com/hardware/en/tang/common-doc/update_debugger.html">these</a> steps.</p>
|
||||||
|
</section>
|
||||||
|
<section id="cannot-flash-tang-nano-9k-issue-251">
|
||||||
|
<h2>Cannot flash Tang Nano 9k (issue <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/issues/251">#251</a>)<a class="headerlink" href="#cannot-flash-tang-nano-9k-issue-251" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>This is a device issue, erase its Embedded Flash using Official GoWin Programmer (preferentially in Windows) and SRAM too, then you can use openFPGALoader again.</p>
|
||||||
|
</section>
|
||||||
|
<section id="unable-to-open-ftdi-device-4-usb-open-failed-issue-245">
|
||||||
|
<h2>Unable to open FTDI device: -4 (usb_open() failed) (issue <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/issues/245">#245</a>)<a class="headerlink" href="#unable-to-open-ftdi-device-4-usb-open-failed-issue-245" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Edit your <cite>/etc/udev/rules.d/99-ftdi.rules</cite> file exchanging your programming device permissions.</p>
|
||||||
|
<p>For more information, check the udev section from <a class="reference external" href="install.rst">this guide</a></p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="install.html" class="btn btn-neutral float-left" title="Installing openFPGALoader" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="advanced.html" class="btn btn-neutral float-right" title="Advanced usage of openFPGALoader" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,145 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>openFPGALoader: universal utility for programming FPGA — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
<link rel="next" title="First steps with openFPGALoader" href="guide/first-steps.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="#" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="#">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="openfpgaloader-universal-utility-for-programming-fpga">
|
||||||
|
<h1>openFPGALoader: universal utility for programming FPGA<a class="headerlink" href="#openfpgaloader-universal-utility-for-programming-fpga" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>Welcome to the documentation of openFPGALoader!</p>
|
||||||
|
<p>openFPGALoader is a universal utility for programming FPGAs.
|
||||||
|
Compatible with many boards, cables and FPGA from major manufacturers (Xilinx, Altera/Intel, Lattice, Gowin, Efinix, Anlogic, Cologne Chip).
|
||||||
|
openFPGALoader works on Linux, Windows and macOS.</p>
|
||||||
|
<p>Not sure if your hardware is supported? Check the hardware compatibility lists:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference internal" href="compatibility/fpga.html#compatibility-fpgas"><span class="std std-ref">FPGAs</span></a></p></li>
|
||||||
|
<li><p><a class="reference internal" href="compatibility/board.html#compatibility-boards"><span class="std std-ref">Boards</span></a></p></li>
|
||||||
|
<li><p><a class="reference internal" href="compatibility/cable.html#compatibility-cables"><span class="std std-ref">Cables</span></a></p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Also checkout the vendor-specific documentation:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/anlogic.html">Anlogic</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/colognechip.html">Cologne Chip</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/efinix.html">Efinix</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/gowin.html">Gowin</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/intel.html">Intel/Altera</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/lattice.html">Lattice</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://trabucayre.github.io/openFPGALoader/vendors/xilinx.html">Xilinx</a></p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
</div>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
</div>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
</div>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="guide/first-steps.html" class="btn btn-neutral float-right" title="First steps with openFPGALoader" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Sphinx inventory version 2
|
||||||
|
# Project: openFPGALoader: universal utility for programming FPGA
|
||||||
|
# Version: latest
|
||||||
|
# The remainder of this file is compressed using zlib.
|
||||||
|
xÚ…•ÁŽÛ †ï~
|
||||||
|
¤íÕ<EFBFBD>zÍm›vW•¶R¤öÐ+1ØF"Œepvóö5ŽO67ÃÌ÷›a~€‹7<>õdy'™ub¯ùIjVcݤ„Üñ˜ñµwgýô…=Ç1CZƒ4/Ç×ç7àBŽ7:ÕäZiŒvƒ7±˜kÀI[50<35>Œlz5Ðt’°(pŠ<´ÈœîÔIiå®»ðQ9<01>#ÂAŒ}÷Ÿ%Þð“–÷ñFüà?K¼:~ŸöQ„ýþì>,Íæ;qoñOY Ž(UÑ>,ùSÙµ¨B6¢T¥{_˧ª·bQqd«Œú ›<C2A0>±¥ï?1;ުѺÚ:9XÊÂIxÁ_üCâ]¹¾4q'<27>2BKYf±g¿ügÕÁ»2ôŠChùãkÈÃõæ'+õq柸M•[Åro@À”±Žk½Õ‹<C395>e#Â@™ŽVq#LÞ1=€óIµ"Uÿæ“ÕÚ<C395>È&È»g“Q9Z®Ùä‚ËX#FèF~>û5øì*-¯ðLZàܽû%*㤦ûB«‚ÏÃþkîœj$MÅà½Å\$Ï _×z à~ü1Í×:4‰>ÀŽW׃Éi+ùØô9ˆsÈüÁøq¶få@@Ú!?ŽÍöÖøMé–1Ws³½¡ìâùÂ0Å›“.ŒzŽŠÇˆxs(…òI¢¤ü£T’»-¿Ù²«„"×;&»a2RÜêÍÌ™… )2õgáÎ%åc>s†,#ÈþÃ,Dds"hns†ýT§*Y
|
||||||
|
|
@ -0,0 +1,141 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Search — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
||||||
|
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="_static/js/theme.js"></script>
|
||||||
|
<script src="_static/searchtools.js"></script>
|
||||||
|
<script src="_static/language_data.js"></script>
|
||||||
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="#" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="#" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Search</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<noscript>
|
||||||
|
<div id="fallback" class="admonition warning">
|
||||||
|
<p class="last">
|
||||||
|
Please activate JavaScript to enable the search functionality.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="search-results">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
jQuery(function() { Search.loadIndex("searchindex.js"); });
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script id="searchindexloader"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,165 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>To Do — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
<link rel="prev" title="Xilinx notes" href="vendors/xilinx.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="vendors/xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">To Do</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#global">Global</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#cable">Cable</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#devices-boards">Devices/boards</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#misc">Misc</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>To Do</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/todo.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="to-do">
|
||||||
|
<span id="todo"></span><h1>To Do<a class="headerlink" href="#to-do" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="global">
|
||||||
|
<h2>Global<a class="headerlink" href="#global" title="Link to this heading">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>improve error message (be more precise)</p></li>
|
||||||
|
<li><p>catch all exception</p></li>
|
||||||
|
<li><p>documentation (code + API)</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="cable">
|
||||||
|
<h2>Cable<a class="headerlink" href="#cable" title="Link to this heading">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>fix <em>ch552</em> (<em>Sipeed tangNano</em>): works with <em>SRAM</em>, fails with <em>Flash</em></p></li>
|
||||||
|
<li><p><em>busblaster</em> support</p></li>
|
||||||
|
<li><p><em>anlogic</em> cable support</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="devices-boards">
|
||||||
|
<h2>Devices/boards<a class="headerlink" href="#devices-boards" title="Link to this heading">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>improve frequency configuration. Use FPGA, cable or –freq args maximum frequency</p></li>
|
||||||
|
<li><p>rework <em>cyclone10</em> eeprom access to avoid using FT2232 interfaceB Spi emulation (only supported by trenz board)</p></li>
|
||||||
|
<li><p>fix checksum computation with <em>gowin GW2A</em></p></li>
|
||||||
|
<li><p>add support for <em>tangPrimer</em> (<em>anlogic EG4S20</em>)</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="misc">
|
||||||
|
<h2>Misc<a class="headerlink" href="#misc" title="Link to this heading">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>fix spiFlash class to be able to write everywhere (currently offset is hardcoded to 0)</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="vendors/xilinx.html" class="btn btn-neutral float-left" title="Xilinx notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,178 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Anlogic notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Cologne Chip notes" href="colognechip.html" />
|
||||||
|
<link rel="prev" title="Cables" href="../compatibility/cable.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Anlogic notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#sipeed-lichee-tang">Sipeed Lichee Tang</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#bit-file-load-memory">bit file load (memory)</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#bit-file-load-spi-flash">bit file load (spi flash)</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#svf-file-load">svf file load</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Anlogic notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/anlogic.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="anlogic-notes">
|
||||||
|
<span id="anlogic"></span><h1>Anlogic notes<a class="headerlink" href="#anlogic-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="sipeed-lichee-tang">
|
||||||
|
<h2>Sipeed Lichee Tang<a class="headerlink" href="#sipeed-lichee-tang" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>For this target, <em>openFPGALoader</em> supports <em>svf</em> and <em>bit</em>.</p>
|
||||||
|
<section id="bit-file-load-memory">
|
||||||
|
<h3>bit file load (memory)<a class="headerlink" href="#bit-file-load-memory" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-m<span class="w"> </span>-b<span class="w"> </span>licheeTang<span class="w"> </span>/somewhere/project/prj/*.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Since <code class="docutils literal notranslate"><span class="pre">-m</span></code> is the default, this argument is optional.</p>
|
||||||
|
</section>
|
||||||
|
<section id="bit-file-load-spi-flash">
|
||||||
|
<h3>bit file load (spi flash)<a class="headerlink" href="#bit-file-load-spi-flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-f<span class="w"> </span>-b<span class="w"> </span>licheeTang<span class="w"> </span>/somewhere/project/prj/*.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="svf-file-load">
|
||||||
|
<h3>svf file load<a class="headerlink" href="#svf-file-load" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>It’s possible to produce this file by using <em>TD</em>:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Tools->Device Chain</p></li>
|
||||||
|
<li><p>Add your bit file</p></li>
|
||||||
|
<li><p>Option : Create svf</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>or by using <a class="reference external" href="https://github.com/mmicko/prjtang">prjtang project</a>:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mkdir<span class="w"> </span>build
|
||||||
|
<span class="nb">cd</span><span class="w"> </span>build
|
||||||
|
cmake<span class="w"> </span>../
|
||||||
|
make
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Now a file called <em>tangbit</em> is present in current directory and has to be used as follows:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>tangbit<span class="w"> </span>--input<span class="w"> </span>/somewhere.bit<span class="w"> </span>--svf<span class="w"> </span>bitstream.svf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>licheeTang<span class="w"> </span>/somewhere/*.svf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="../compatibility/cable.html" class="btn btn-neutral float-left" title="Cables" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="colognechip.html" class="btn btn-neutral float-right" title="Cologne Chip notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,223 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Cologne Chip notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Efinix notes" href="efinix.html" />
|
||||||
|
<link rel="prev" title="Anlogic notes" href="anlogic.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Cologne Chip notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#supported-boards-cables">Supported Boards/Cables</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#programming-modes">Programming Modes</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#jtag-configuration">JTAG Configuration</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#spi-configuration">SPI Configuration</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#jtag-flash-access">JTAG Flash Access</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#spi-flash-access">SPI Flash Access</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Cologne Chip notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/colognechip.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="cologne-chip-notes">
|
||||||
|
<span id="colognechip"></span><h1>Cologne Chip notes<a class="headerlink" href="#cologne-chip-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="supported-boards-cables">
|
||||||
|
<h2>Supported Boards/Cables<a class="headerlink" href="#supported-boards-cables" title="Link to this heading">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>GateMate Evaluation Board using board parameters <code class="docutils literal notranslate"><span class="pre">-b</span> <span class="pre">gatemate_evb_jtag</span></code> or <code class="docutils literal notranslate"><span class="pre">-b</span> <span class="pre">gatemate_evb_spi</span></code></p></li>
|
||||||
|
<li><p>GateMate Programmer using cable parameter <code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">gatemate_pgm</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="programming-modes">
|
||||||
|
<h2>Programming Modes<a class="headerlink" href="#programming-modes" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Supported configuration files are bitfiles <code class="docutils literal notranslate"><span class="pre">*.bit</span></code> and it’s ASCII equivalents <code class="docutils literal notranslate"><span class="pre">*.cfg</span></code>.</p>
|
||||||
|
<section id="jtag-configuration">
|
||||||
|
<h3>JTAG Configuration<a class="headerlink" href="#jtag-configuration" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Performs an active hardware reset and writes the configuration into the FPGA latches via JTAG. The configuration mode pins <code class="docutils literal notranslate"><span class="pre">CFG_MD[3:0]</span></code> must be set to 0xC (JTAG).</p>
|
||||||
|
<ol class="arabic simple">
|
||||||
|
<li><p>Program using Evaluation Board:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_evb_jtag<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<ol class="arabic simple" start="2">
|
||||||
|
<li><p>Program using Programmer Cable:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-c<span class="w"> </span>gatemate_pgm<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="spi-configuration">
|
||||||
|
<h3>SPI Configuration<a class="headerlink" href="#spi-configuration" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Performs an active hardware reset and writes the configuration into the FPGA latches via SPI. The configuration mode pins <code class="docutils literal notranslate"><span class="pre">CFG_MD[3:0]</span></code> must be set to 0x4 (SPI passive).</p>
|
||||||
|
<ol class="arabic simple">
|
||||||
|
<li><p>Program using Evaluation Board:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_evb_spi<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<ol class="arabic simple" start="2">
|
||||||
|
<li><p>Program using Programmer Cable:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_pgm_spi<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="jtag-flash-access">
|
||||||
|
<h3>JTAG Flash Access<a class="headerlink" href="#jtag-flash-access" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>It is possible to access external flashes via the internal JTAG-SPI-bypass. The configuration mode pins <code class="docutils literal notranslate"><span class="pre">CFG_MD[3:0]</span></code> must be set to 0xC (JTAG). Note that the FPGA will not start automatically.</p>
|
||||||
|
<ol class="arabic simple">
|
||||||
|
<li><p>Write to flash using Evaluation Board:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_evb_jtag<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<ol class="arabic simple" start="2">
|
||||||
|
<li><p>Write to flash using Programmer Cable:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-c<span class="w"> </span>gatemate_pgm<span class="w"> </span>-f<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>The <cite>offset</cite> parameter can be used to store data at any point in the flash, e.g.:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_evb_jtag<span class="w"> </span>-o<span class="w"> </span><offset><span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="spi-flash-access">
|
||||||
|
<h3>SPI Flash Access<a class="headerlink" href="#spi-flash-access" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>If the programming device and FPGA share the same SPI signals, it is possible to hold the FPGA in reset and write data to the flash. The configuration mode can be set as desired. If the FPGA should start from the external memory after reset, the configuration mode pins <code class="docutils literal notranslate"><span class="pre">CFG_MD[3:0]</span></code> set to 0x0 (SPI active).</p>
|
||||||
|
<ol class="arabic simple">
|
||||||
|
<li><p>Write to flash using Evaluation Board:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_evb_spi<span class="w"> </span>-f<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<ol class="arabic simple" start="2">
|
||||||
|
<li><p>Write to flash using Programmer Cable:</p></li>
|
||||||
|
</ol>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_pgm_spi<span class="w"> </span>-f<span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>The <cite>offset</cite> parameter can be used to store data at any point in the flash, e.g.:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>gatemate_evb_spi<span class="w"> </span>-o<span class="w"> </span><offset><span class="w"> </span><bitfile>.cfg.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="anlogic.html" class="btn btn-neutral float-left" title="Anlogic notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="efinix.html" class="btn btn-neutral float-right" title="Efinix notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,177 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Efinix notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Gowin notes" href="gowin.html" />
|
||||||
|
<link rel="prev" title="Cologne Chip notes" href="colognechip.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Efinix notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#firant-and-xyloni-boards-efinix-trion-t8">Firant and Xyloni boards (efinix trion T8)</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#hex-file-load">hex file load</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#trion-and-titanium-jtag-usage">Trion and Titanium JTAG usage</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#bin-file-load">bin file load</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#hex-file-flash">hex file flash</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Efinix notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/efinix.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="efinix-notes">
|
||||||
|
<span id="efinix"></span><h1>Efinix notes<a class="headerlink" href="#efinix-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="firant-and-xyloni-boards-efinix-trion-t8">
|
||||||
|
<h2>Firant and Xyloni boards (efinix trion T8)<a class="headerlink" href="#firant-and-xyloni-boards-efinix-trion-t8" title="Link to this heading">¶</a></h2>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.hex</span></code> file is the default format generated by <em>Efinity IDE</em>, so nothing special must be done to generates this file.</p>
|
||||||
|
<p><em>openFPGALoader</em> supports only active mode (SPI) (<em>JTAG</em> is WIP).</p>
|
||||||
|
<section id="hex-file-load">
|
||||||
|
<h3>hex file load<a class="headerlink" href="#hex-file-load" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>fireant<span class="w"> </span>/somewhere/project/outflow/*.hex
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>or, for xyloni board</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>xyloni_spi<span class="w"> </span>/somewhere/project/outflow/*.hex
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Since openFPGALoader access the flash directly in SPI mode the <code class="docutils literal notranslate"><span class="pre">-b</span> <span class="pre">fireant</span></code>, <code class="docutils literal notranslate"><span class="pre">-b</span> <span class="pre">xyloni_spi</span></code> is required (no
|
||||||
|
autodetection possible).</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="trion-and-titanium-jtag-usage">
|
||||||
|
<h2>Trion and Titanium JTAG usage<a class="headerlink" href="#trion-and-titanium-jtag-usage" title="Link to this heading">¶</a></h2>
|
||||||
|
<p><em>openFPGALoader</em> supports loading to RAM and SPI Flash with JTAG</p>
|
||||||
|
<p>Tested with J-Link BASE</p>
|
||||||
|
<section id="bin-file-load">
|
||||||
|
<h3>bin file load<a class="headerlink" href="#bin-file-load" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>--cable<span class="w"> </span>jlink_base<span class="w"> </span>-m<span class="w"> </span>/somewhere/project/outflow/*.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="hex-file-flash">
|
||||||
|
<h3>hex file flash<a class="headerlink" href="#hex-file-flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Example for ti60f225.
|
||||||
|
NOTE: JTAG chains with more than one device (eg –index-chain) are currently not supported for writing to SPI flash</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>--cable<span class="w"> </span>jlink_base<span class="w"> </span>--fpga-part<span class="w"> </span>ti60f225<span class="w"> </span>-f<span class="w"> </span>/somewhere/project/outflow/*.hex
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="colognechip.html" class="btn btn-neutral float-left" title="Cologne Chip notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="gowin.html" class="btn btn-neutral float-right" title="Gowin notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,207 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Gowin notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Intel notes" href="intel.html" />
|
||||||
|
<link rel="prev" title="Efinix notes" href="efinix.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Gowin notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#gowin-gw1n">GOWIN GW1N</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#flash-sram">Flash SRAM</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#flash">Flash</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#user-flash">User Flash</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Gowin notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/gowin.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="gowin-notes">
|
||||||
|
<span id="gowin"></span><h1>Gowin notes<a class="headerlink" href="#gowin-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="gowin-gw1n">
|
||||||
|
<h2>GOWIN GW1N<a class="headerlink" href="#gowin-gw1n" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Trenz TEC0117</p></li>
|
||||||
|
<li><p>Sipeed Tang Nano</p></li>
|
||||||
|
<li><p>Sipeed Tang Nano 4K</p></li>
|
||||||
|
<li><p>Honeycomb</p></li>
|
||||||
|
<li><p>RUNBER</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.fs</span></code> file is the default format generated by <em>Gowin IDE</em>, so nothing special must be done to generates this file.</p>
|
||||||
|
<p>Since the same file is used for SRAM and Flash a CLI argument is used to specify the destination.</p>
|
||||||
|
<section id="flash-sram">
|
||||||
|
<h3>Flash SRAM<a class="headerlink" href="#flash-sram" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>with <code class="docutils literal notranslate"><span class="pre">-m</span></code>:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-m<span class="w"> </span>-b<span class="w"> </span>BOARD_NAME<span class="w"> </span>impl/pnr/*.fs
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>where <code class="docutils literal notranslate"><span class="pre">BOARD_NAME</span></code> is:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tec0117</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tangnano</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tangnano1k</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tangnano4k</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tangnano9k</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tangnano20k</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tangprimer20k</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">runber</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="flash">
|
||||||
|
<h3>Flash<a class="headerlink" href="#flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="admonition attention">
|
||||||
|
<p class="admonition-title">Attention</p>
|
||||||
|
<p>Only with Trenz TEC0117 and runber.</p>
|
||||||
|
</div>
|
||||||
|
<p>with <code class="docutils literal notranslate"><span class="pre">-f</span></code>, file load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-f<span class="w"> </span>-b<span class="w"> </span>BOARD_NAME<span class="w"> </span>impl/pnr/*.fs
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>where <code class="docutils literal notranslate"><span class="pre">BOARD_NAME</span></code> is:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">tec0117</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">runber</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
<p>It’s possible to flash external SPI Flash (connected to MSPI) in bscan mode by using <code class="docutils literal notranslate"><span class="pre">--external-flash</span></code> instead of
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">-f</span></code>.</p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>Gowin’s FPGA may fails to be detected if <strong>JTAGSEL_N</strong> (pin 08 for <em>GW1N-4K</em>) is used as a GPIO.
|
||||||
|
To recover you have to pull down this pin (before power up) to recover JTAG interface (<em>UG292 - JTAGSELL_N section</em>).</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="user-flash">
|
||||||
|
<h3>User Flash<a class="headerlink" href="#user-flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="admonition attention">
|
||||||
|
<p class="admonition-title">Attention</p>
|
||||||
|
<p>User Flash support is based on reverse engineering of the JTAG protocol. This functionality should be considered
|
||||||
|
experimental as it hasn’t been thoroughly tested, and may in some circumstances destroy your device.</p>
|
||||||
|
</div>
|
||||||
|
<p>Gowin FPGA come with extra flash space that can be read and written from the programmable logic (“User Flash”). This
|
||||||
|
flash section can also be programmed via the JTAG interface:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>--write-flash<span class="w"> </span>/path/to/bitstream.fs<span class="w"> </span>--user-flash<span class="w"> </span>/path/to/flash.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="efinix.html" class="btn btn-neutral float-left" title="Efinix notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="intel.html" class="btn btn-neutral float-right" title="Intel notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,339 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Intel notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Lattice notes" href="lattice.html" />
|
||||||
|
<link rel="prev" title="Gowin notes" href="gowin.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Intel notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#intel-altera">Intel/Altera</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#loading-a-bitstream">Loading a bitstream</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#spi-flash">SPI flash</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#max10-fpga-programming-guide">MAX10: FPGA Programming Guide</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#internal-flash-organization">Internal Flash Organization</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#using-svf">Using <code class="docutils literal notranslate"><span class="pre">svf</span></code></a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#using-pof">Using <code class="docutils literal notranslate"><span class="pre">pof</span></code></a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#using-an-arbitrary-binary-file">Using an arbitrary binary file</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#intel-altera-old-boards">Intel/Altera (Old Boards)</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#loading-a-serial-vector-format-svf">Loading a Serial Vector Format (.svf)</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Intel notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/intel.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="intel-notes">
|
||||||
|
<span id="intel"></span><h1>Intel notes<a class="headerlink" href="#intel-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="intel-altera">
|
||||||
|
<h2>Intel/Altera<a class="headerlink" href="#intel-altera" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>CYC1000</p></li>
|
||||||
|
<li><p>C10LP-RefKit</p></li>
|
||||||
|
<li><p>DE0</p></li>
|
||||||
|
<li><p>de0nano</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<section id="loading-a-bitstream">
|
||||||
|
<h3>Loading a bitstream<a class="headerlink" href="#loading-a-bitstream" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>SVF and RBF files are supported.</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">sof</span></code> to <code class="docutils literal notranslate"><span class="pre">svf</span></code> generation:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>quartus_cpf<span class="w"> </span>-c<span class="w"> </span>-q<span class="w"> </span><span class="m">12</span>.0MHz<span class="w"> </span>-g<span class="w"> </span><span class="m">3</span>.3<span class="w"> </span>-n<span class="w"> </span>p<span class="w"> </span>project_name.sof<span class="w"> </span>project_name.svf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">sof</span></code> to <code class="docutils literal notranslate"><span class="pre">rbf</span></code> generation:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>quartus_cpf<span class="w"> </span>--option<span class="o">=</span><span class="nv">bitstream_compression</span><span class="o">=</span>off<span class="w"> </span>-c<span class="w"> </span>project_name.sof<span class="w"> </span>project_name.rbf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>As mentioned in <code class="docutils literal notranslate"><span class="pre">cyclone</span></code> handbooks, real-time decompression is not supported by FPGA in JTAG mode.
|
||||||
|
Keep in mind to disable this option.</p>
|
||||||
|
</div>
|
||||||
|
<p>You can have Quartus automatically generate SVF and RBF files by adding these lines to the <code class="docutils literal notranslate"><span class="pre">qsf</span></code> file, or include them in a <code class="docutils literal notranslate"><span class="pre">tcl</span></code> file in FuseSoC</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">set_global_assignment</span> <span class="o">-</span><span class="n">name</span> <span class="n">ON_CHIP_BITSTREAM_DECOMPRESSION</span> <span class="n">OFF</span>
|
||||||
|
<span class="n">set_global_assignment</span> <span class="o">-</span><span class="n">name</span> <span class="n">GENERATE_RBF_FILE</span> <span class="n">ON</span>
|
||||||
|
<span class="n">set_global_assignment</span> <span class="o">-</span><span class="n">name</span> <span class="n">GENERATE_SVF_FILE</span> <span class="n">ON</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>file load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>boardname<span class="w"> </span>project_name.svf
|
||||||
|
<span class="c1"># or</span>
|
||||||
|
openFPGALoader<span class="w"> </span>-b<span class="w"> </span>boardname<span class="w"> </span>project_name.rbf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>with <code class="docutils literal notranslate"><span class="pre">boardname</span></code> = <code class="docutils literal notranslate"><span class="pre">de0</span></code>, <code class="docutils literal notranslate"><span class="pre">cyc1000</span></code>, <code class="docutils literal notranslate"><span class="pre">c10lp-refkit</span></code>, <code class="docutils literal notranslate"><span class="pre">de0nano</span></code>, <code class="docutils literal notranslate"><span class="pre">de0nanoSoc</span></code> or <code class="docutils literal notranslate"><span class="pre">qmtechCycloneV</span></code>.</p>
|
||||||
|
</section>
|
||||||
|
<section id="spi-flash">
|
||||||
|
<h3>SPI flash<a class="headerlink" href="#spi-flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>RPD and RBF are supported. POF is only supported for MAX10 (internal flash).</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">pof</span></code> to <code class="docutils literal notranslate"><span class="pre">rpd</span></code>:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>quartus_cpf<span class="w"> </span>-c<span class="w"> </span>project_name.pof<span class="w"> </span>project_name.rpd
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">sof</span></code> to <code class="docutils literal notranslate"><span class="pre">rpd</span></code>:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># CYC1000</span>
|
||||||
|
quartus_cpf<span class="w"> </span>-o<span class="w"> </span><span class="nv">auto_create_rpd</span><span class="o">=</span>on<span class="w"> </span>-c<span class="w"> </span>-d<span class="w"> </span>EPCQ16A<span class="w"> </span>-s<span class="w"> </span>10CL025YU256C8G<span class="w"> </span>project_name.svf<span class="w"> </span>project_name.jic
|
||||||
|
<span class="c1"># C10LP-RefKit</span>
|
||||||
|
quartus_cpf<span class="w"> </span>-o<span class="w"> </span><span class="nv">auto_create_rpd</span><span class="o">=</span>on<span class="w"> </span>-c<span class="w"> </span>-d<span class="w"> </span>EPCQ16A<span class="w"> </span>-s<span class="w"> </span>10CL055YU484C8G<span class="w"> </span>project_name.svf<span class="w"> </span>project_name.jic
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>file load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>boardname<span class="w"> </span>-r<span class="w"> </span>project_name_auto.rpd
|
||||||
|
<span class="c1"># or</span>
|
||||||
|
openFPGALoader<span class="w"> </span>-b<span class="w"> </span>boardname<span class="w"> </span>-r<span class="w"> </span>project_name.rbf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>with <code class="docutils literal notranslate"><span class="pre">boardname</span></code> = <code class="docutils literal notranslate"><span class="pre">cyc1000</span></code>, <code class="docutils literal notranslate"><span class="pre">c10lp-refkit</span></code>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="max10-fpga-programming-guide">
|
||||||
|
<h2>MAX10: FPGA Programming Guide<a class="headerlink" href="#max10-fpga-programming-guide" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Supported Boards:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>step-max10_v1</p></li>
|
||||||
|
<li><p>analogMax</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Supported File Types:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">svf</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">pof</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">bin</span></code> (arbitrary binary files)</p></li>
|
||||||
|
</ul>
|
||||||
|
<section id="internal-flash-organization">
|
||||||
|
<h3>Internal Flash Organization<a class="headerlink" href="#internal-flash-organization" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>The internal flash is divided into five sections:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">UFM1</span></code> and <code class="docutils literal notranslate"><span class="pre">UFM0</span></code> for user data</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">CFM2</span></code>, <code class="docutils literal notranslate"><span class="pre">CFM1</span></code>, and <code class="docutils literal notranslate"><span class="pre">CFM0</span></code> for storing one or two bitstreams</p></li>
|
||||||
|
</ul>
|
||||||
|
<img alt="max10 internal flash memory structure" src="../_images/max10_flash-memory.png" />
|
||||||
|
<p>Flash usage depends on the configuration mode. In all modes:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">CFM0</span></code> is used to store a bitstream</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">UFM0</span></code> and <code class="docutils literal notranslate"><span class="pre">UFM1</span></code> are available for user data</p></li>
|
||||||
|
<li><p>The remaining <code class="docutils literal notranslate"><span class="pre">CFMx</span></code> sections (<code class="docutils literal notranslate"><span class="pre">CFM1</span></code>, <code class="docutils literal notranslate"><span class="pre">CFM2</span></code>) can be used for
|
||||||
|
additional bitstreams or user data</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="using-svf">
|
||||||
|
<h3>Using <code class="docutils literal notranslate"><span class="pre">svf</span></code><a class="headerlink" href="#using-svf" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>This method is the <strong>simplest</strong> (and slowest) way to load or write a bitstream.</p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>This method is required to load a bitstream into <em>SRAM</em>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>boardname<span class="o">]</span><span class="w"> </span>-c<span class="w"> </span>cablename<span class="w"> </span>the_svf_file.svf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><strong>Parameters:</strong></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">boardname</span></code>: One of the boards supported by <code class="docutils literal notranslate"><span class="pre">openFPGALoader</span></code> (optional).</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">cablename</span></code>: One of the supported cables (see <code class="docutils literal notranslate"><span class="pre">--list-cables</span></code>).</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="using-pof">
|
||||||
|
<h3>Using <code class="docutils literal notranslate"><span class="pre">pof</span></code><a class="headerlink" href="#using-pof" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>To write a bitstream into the internal flash, using a <code class="docutils literal notranslate"><span class="pre">pof</span></code> file is the
|
||||||
|
<strong>fastest</strong> approach.</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>boardname<span class="o">]</span><span class="w"> </span><span class="o">[</span>--flash-sector<span class="o">]</span><span class="w"> </span>-c<span class="w"> </span>cablename<span class="w"> </span>the_pof_file.pof
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><strong>Parameters:</strong></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">boardname</span></code>: A board supported by <code class="docutils literal notranslate"><span class="pre">openFPGALoader</span></code> (optional).</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">cablename</span></code>: One of the supported cables (see <code class="docutils literal notranslate"><span class="pre">--list-cables</span></code>).</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">--flash-sector</span></code>: Optional. Comma-separated list of sectors to update.
|
||||||
|
If omitted, the entire flash is erased and reprogrammed.</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Accepted Flash Sectors:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">UFM0</span></code>, <code class="docutils literal notranslate"><span class="pre">UFM1</span></code>: User Flash Memory sections.</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">CFM0</span></code>, <code class="docutils literal notranslate"><span class="pre">CFM1</span></code>, <code class="docutils literal notranslate"><span class="pre">CFM2</span></code>: Configuration Flash Memory sectors.</p></li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>Example:</strong></p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-c<span class="w"> </span>usb-blaster<span class="w"> </span>--flash-sector<span class="w"> </span>UFM1,CFM0,CFM2<span class="w"> </span>the_pof_file.pof
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>This command updates <code class="docutils literal notranslate"><span class="pre">UFM1</span></code>, <code class="docutils literal notranslate"><span class="pre">CFM0</span></code>, and <code class="docutils literal notranslate"><span class="pre">CFM2</span></code>, leaving all other
|
||||||
|
sectors unchanged.</p>
|
||||||
|
</section>
|
||||||
|
<section id="using-an-arbitrary-binary-file">
|
||||||
|
<h3>Using an arbitrary binary file<a class="headerlink" href="#using-an-arbitrary-binary-file" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Unlike Altera Quartus, it supports any binary format without limitations
|
||||||
|
(not limited to a <code class="docutils literal notranslate"><span class="pre">.bin</span></code>).
|
||||||
|
With this feature, it’s not required to provides the file at gateware build
|
||||||
|
time: it may be updated at any time without gateware modification/rebuild.</p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>This approach is useful to updates, for example, a softcore CPU firmware.</p>
|
||||||
|
</div>
|
||||||
|
<p><strong>Basic usage:</strong></p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>boardname<span class="o">]</span><span class="w"> </span>-c<span class="w"> </span>cablename<span class="w"> </span><span class="o">[</span>--offset<span class="w"> </span><span class="nv">$OFFSET</span><span class="o">]</span><span class="w"> </span>the_bin_file.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">boardname</span></code>: a boards supported by <code class="docutils literal notranslate"><span class="pre">openFPGALoader</span></code> (optional).</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">cablename</span></code>: One of the supported cables (see <code class="docutils literal notranslate"><span class="pre">--list-cables</span></code>).</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">$OFFSET</span></code>: To start writing <code class="docutils literal notranslate"><span class="pre">$OFFSET</span></code> bytes after <em>User Flash memory</em>
|
||||||
|
start address (optional, default: 0x00).</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>This command erases and writes the contents of <code class="docutils literal notranslate"><span class="pre">the_bin_file.bin</span></code> into
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">UFM1</span></code> and <code class="docutils literal notranslate"><span class="pre">UFM0</span></code>. If <code class="docutils literal notranslate"><span class="pre">--offset</span></code> is specified, the binary content is
|
||||||
|
written starting from that offset.</p>
|
||||||
|
<p>Depending on the max10 configuration mode (see picture), it’s possible to
|
||||||
|
extend <em>User Flash Memory</em> area by using <cite>CFM2</cite> and <cite>CFM1</cite>. This is not the
|
||||||
|
default behavior and user must explictly change this by using
|
||||||
|
<cite>–flash-sector</cite> argument:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">--flash-sector</span> <span class="pre">UFMx</span></code> or <code class="docutils literal notranslate"><span class="pre">--flash-sector</span> <span class="pre">CFMy</span></code> (with x= 1 or 0 and
|
||||||
|
y = 2 or 1) to specify only one sector</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">--flash-sector</span> <span class="pre">UFM1,UFM0</span></code> is equivalent to the default behavior</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">--flash-sector</span> <span class="pre">UFM1,CFM2</span></code> to erase and update <code class="docutils literal notranslate"><span class="pre">UFM1</span></code>, <code class="docutils literal notranslate"><span class="pre">UFM0</span></code>
|
||||||
|
and <code class="docutils literal notranslate"><span class="pre">CFM2</span></code> (equivalent to <code class="docutils literal notranslate"><span class="pre">--flash-sector</span> <span class="pre">UFM1,UFM0,CFM2</span></code>)</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="intel-altera-old-boards">
|
||||||
|
<h2>Intel/Altera (Old Boards)<a class="headerlink" href="#intel-altera-old-boards" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Cyclone II (FPGA) (Tested OK: EP2C5T144C8N)</p></li>
|
||||||
|
<li><p>Max II (CPLD) (Tested OK: EPM240T100C5N)</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<section id="loading-a-serial-vector-format-svf">
|
||||||
|
<h3>Loading a Serial Vector Format (.svf)<a class="headerlink" href="#loading-a-serial-vector-format-svf" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>SVF files are supported.</p>
|
||||||
|
<p>To load the file:</p>
|
||||||
|
<blockquote>
|
||||||
|
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-c<span class="w"> </span>usb-blaster<span class="w"> </span>project_name.svf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div></blockquote>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="gowin.html" class="btn btn-neutral float-left" title="Gowin notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="lattice.html" class="btn btn-neutral float-right" title="Lattice notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,244 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Lattice notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="Xilinx notes" href="xilinx.html" />
|
||||||
|
<link rel="prev" title="Intel notes" href="intel.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Lattice notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#machxo2-machxo3">MachXO2/MachXO3</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#flash-memory">Flash memory</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#sram">SRAM</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#ice40">iCE40</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#ecp5-ecp3-certus-nx-certuspro-nx-crosslink-nx">ECP5/ECP3/Certus-NX/CertusPro-NX/Crosslink-NX</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#id1">SRAM</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#spi-flash">SPI Flash</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="xilinx.html">Xilinx notes</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Lattice notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/lattice.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="lattice-notes">
|
||||||
|
<span id="lattice"></span><h1>Lattice notes<a class="headerlink" href="#lattice-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="machxo2-machxo3">
|
||||||
|
<h2>MachXO2/MachXO3<a class="headerlink" href="#machxo2-machxo3" title="Link to this heading">¶</a></h2>
|
||||||
|
<section id="flash-memory">
|
||||||
|
<h3>Flash memory<a class="headerlink" href="#flash-memory" title="Link to this heading">¶</a></h3>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.jed</span></code> file is the default format generated by <em>Lattice Diamond</em>, so nothing special must be done to generates this
|
||||||
|
file.</p>
|
||||||
|
<p>File load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>yourboard<span class="o">]</span><span class="w"> </span><span class="o">[</span>--flash-sector<span class="w"> </span>CFG0<span class="o">]</span><span class="w"> </span>impl1/*.jed
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>where <code class="docutils literal notranslate"><span class="pre">yourboard</span></code> may be:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">machX02EVN</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">machX03EVN</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">machXO3SK</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
<p>and where <code class="docutils literal notranslate"><span class="pre">--flash-sector</span> <span class="pre">CFG0</span></code> is needed for the MachXO3D Breakout Board.</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.bit</span></code> may also be used for <em>machXO2</em></p>
|
||||||
|
</section>
|
||||||
|
<section id="sram">
|
||||||
|
<h3>SRAM<a class="headerlink" href="#sram" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>To generates <code class="docutils literal notranslate"><span class="pre">.bit</span></code> file <em>Bitstream file</em> must be checked under <em>Exports Files</em> in <em>Lattice Diamond</em> left panel.</p>
|
||||||
|
<p>File load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>yourboard<span class="o">]</span><span class="w"> </span>impl1/*.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>where <code class="docutils literal notranslate"><span class="pre">yourboard</span></code> may be:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">machX02EVN</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">machX03EVN</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">machXO3SK</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="ice40">
|
||||||
|
<h2>iCE40<a class="headerlink" href="#ice40" title="Link to this heading">¶</a></h2>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.bin</span></code> is the default format generated by <em>nextpnr</em>, so nothing special must be done.</p>
|
||||||
|
<p>Since most ice40 boards uses the same pinout between <em>FTDI</em> and <em>SPI flash</em> a generic <em>ice40_generic</em> board is provided.</p>
|
||||||
|
<p>For the specific case of the <em>iCE40HXXK-EVB</em> where no onboard programmer is present, please use this:</p>
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>FTDI</p></th>
|
||||||
|
<th class="head"><p>iCE40HXXK-EVB</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p>SI (ADBUS1)</p></td>
|
||||||
|
<td><p>Pin 8</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>SCK (ADBUS0)</p></td>
|
||||||
|
<td><p>Pin 9</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>SO (ADBUS2)</p></td>
|
||||||
|
<td><p>Pin 7</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>CS (ABDUS4)</p></td>
|
||||||
|
<td><p>Pin 10</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>RST (ADBUS6</p></td>
|
||||||
|
<td><p>Pin 6</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>DONE (ADBUS7)</p></td>
|
||||||
|
<td><p>Pin 5</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p>Bin file load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>-b<span class="w"> </span>ice40_generic<span class="w"> </span>/somewhere/*.bin
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Since it’s a direct access to the flash (SPI) the <code class="docutils literal notranslate"><span class="pre">-b</span></code> option is required.</p>
|
||||||
|
</section>
|
||||||
|
<section id="ecp5-ecp3-certus-nx-certuspro-nx-crosslink-nx">
|
||||||
|
<h2>ECP5/ECP3/Certus-NX/CertusPro-NX/Crosslink-NX<a class="headerlink" href="#ecp5-ecp3-certus-nx-certuspro-nx-crosslink-nx" title="Link to this heading">¶</a></h2>
|
||||||
|
<section id="id1">
|
||||||
|
<h3>SRAM<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>yourBoard<span class="o">]</span><span class="w"> </span><span class="o">[</span>-c<span class="w"> </span>yourCable<span class="o">]</span><span class="w"> </span>-m<span class="w"> </span>project_name/*.bit
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition hint">
|
||||||
|
<p class="admonition-title">Hint</p>
|
||||||
|
<p>By default, openFPGALoader loads bitstream in memory, so the <code class="docutils literal notranslate"><span class="pre">-m</span></code> argument is optional.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="spi-flash">
|
||||||
|
<h3>SPI Flash<a class="headerlink" href="#spi-flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>SPI Flash write is not supported for ECP3 family.</p>
|
||||||
|
</div>
|
||||||
|
<p>BIT:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>yourBoard<span class="o">]</span><span class="w"> </span><span class="o">[</span>-c<span class="w"> </span>yourCable<span class="o">]</span><span class="w"> </span>-f<span class="w"> </span>project_name/*.bit<span class="w"> </span><span class="c1"># or *.bin</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>MCS:</p>
|
||||||
|
<p>To generate <code class="docutils literal notranslate"><span class="pre">.mcs</span></code> file <em>PROM File</em> must be checked under <em>Exports Files</em> in <em>Lattice Diamond</em> left panel.</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-b<span class="w"> </span>yourBoard<span class="o">]</span><span class="w"> </span><span class="o">[</span>-c<span class="w"> </span>yourCable<span class="o">]</span><span class="w"> </span>project_name/*.mcs
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="intel.html" class="btn btn-neutral float-left" title="Intel notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="xilinx.html" class="btn btn-neutral float-right" title="Xilinx notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,244 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="writer-html5" lang="en" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Xilinx notes — openFPGALoader: universal utility for programming FPGA latest documentation</title>
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="../_static/js/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||||||
|
<script src="../_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<script src="../_static/js/theme.js"></script>
|
||||||
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
|
<link rel="next" title="To Do" href="../todo.html" />
|
||||||
|
<link rel="prev" title="Lattice notes" href="lattice.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
<a href="../index.html" class="icon icon-home"> openFPGALoader: universal utility for programming FPGA
|
||||||
|
</a>
|
||||||
|
<div class="version">
|
||||||
|
latest
|
||||||
|
</div>
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/first-steps.html">First steps with openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/install.html">Installing openFPGALoader</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../guide/advanced.html">Advanced usage of openFPGALoader</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Compatibility</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/fpga.html">FPGAs</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/board.html">Boards</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../compatibility/cable.html">Cables</a></li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Vendors</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="anlogic.html">Anlogic notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="colognechip.html">Cologne Chip notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="efinix.html">Efinix notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="gowin.html">Gowin notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intel.html">Intel notes</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="lattice.html">Lattice notes</a></li>
|
||||||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Xilinx notes</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="#loading-a-bitstream">Loading a bitstream</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#spi-flash">SPI flash</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Development</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../todo.html">To Do</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../index.html">openFPGALoader: universal utility for programming FPGA</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="Page navigation">
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||||||
|
<li>Xilinx notes</li>
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
<a href="https://github.com/trabucayre/openFPGALoader/blob/master/doc/vendors/xilinx.rst" class="fa fa-github"> Edit on GitHub</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<section id="xilinx-notes">
|
||||||
|
<span id="xilinx"></span><h1>Xilinx notes<a class="headerlink" href="#xilinx-notes" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>To simplify further explanations, we consider the project is generated in the current directory.</p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<ol class="arabic simple">
|
||||||
|
<li><p>Spartan Edge Accelerator Board has only pinheader, so the cable must be provided</p></li>
|
||||||
|
<li><p>A <em>JTAG</em> <-> <em>SPI</em> bridge (used to write bitstream in FLASH) is available for some device, see
|
||||||
|
<a class="reference external" href="https://github.com/trabucayre/openFPGALoader/blob/master/spiOverJtag">spiOverJtag</a> to check if your model is supported.</p></li>
|
||||||
|
<li><p>Board provides the device/package model, but if the targeted board is not officially supported but the FPGA yes,
|
||||||
|
you can use <code class="docutils literal notranslate"><span class="pre">--fpga-part</span></code> to provide the model.</p></li>
|
||||||
|
<li><p>With spartan3, the flash is an independent JTAG device.
|
||||||
|
User has to use <code class="docutils literal notranslate"><span class="pre">--index-chain</span></code> to access FPGA (RAM only) or flash (write/read only).</p></li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">*.bin</span></code> may be loaded in memory or in flash, but this extension is a classic extension for CPU firmware and, by
|
||||||
|
default, <em>openFPGALoader</em> loads file in memory.
|
||||||
|
Double check <code class="docutils literal notranslate"><span class="pre">-m</span></code> / <code class="docutils literal notranslate"><span class="pre">-f</span></code> when you want to use a firmware for a softcore (or anything, other than a bitstream) to
|
||||||
|
write somewhere in the FLASH device).</p>
|
||||||
|
</div>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.bit</span></code> file is the default format generated by <em>vivado</em>, so nothing special task must be done to generate this
|
||||||
|
bitstream.</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.bin</span></code> is not, by default, produced.
|
||||||
|
To have access to this file you need to configure the tool:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>GUI: <em>Tools</em> -> <em>Settings</em> -> <em>Bitstreams</em> -> check <code class="docutils literal notranslate"><span class="pre">-bin_file</span></code>.</p></li>
|
||||||
|
<li><p>TCL: append your <em>TCL</em> file with <code class="docutils literal notranslate"><span class="pre">set_property</span> <span class="pre">STEPS.WRITE_BITSTREAM.ARGS.BIN_FILE</span> <span class="pre">true</span> <span class="pre">[get_runs</span> <span class="pre">impl_1]</span></code>.</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>For alchitry board the bitstream must be configured with a buswidth of 1 or 2.
|
||||||
|
Quad mode can’t be used with alchitry’s FLASH.</p>
|
||||||
|
</div>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>For boards based on a Zynq (7000 or MPSoC), boot mode must be configured for JTAG (for Zedboard JP7->JP11 must be
|
||||||
|
to GND).</p>
|
||||||
|
</div>
|
||||||
|
<section id="loading-a-bitstream">
|
||||||
|
<h2>Loading a bitstream<a class="headerlink" href="#loading-a-bitstream" title="Link to this heading">¶</a></h2>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.bit</span></code> and <code class="docutils literal notranslate"><span class="pre">.bin</span></code> are allowed to be loaded in memory.</p>
|
||||||
|
<p>File load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-m<span class="o">]</span><span class="w"> </span>-b<span class="w"> </span>arty<span class="w"> </span>*.runs/impl_1/*.bit<span class="w"> </span><span class="o">(</span>or<span class="w"> </span>*.bin<span class="o">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>or</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>-m<span class="o">]</span><span class="w"> </span>-b<span class="w"> </span>spartanEdgeAccelBoard<span class="w"> </span>-c<span class="w"> </span>digilent_hs2<span class="w"> </span>*.runs/impl_1/*.bit<span class="w"> </span><span class="o">(</span>or<span class="w"> </span>*.bin<span class="o">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<section id="spi-flash">
|
||||||
|
<h3>SPI flash<a class="headerlink" href="#spi-flash" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.bit</span></code>, <code class="docutils literal notranslate"><span class="pre">.bin</span></code>, and <code class="docutils literal notranslate"><span class="pre">.mcs</span></code> are supported for FLASH.</p>
|
||||||
|
</div>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">.mcs</span></code> must be generated through Vivado with a tcl script like:</p>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>For boards based on Zynq device (7000 and MPSoC) SPI flash is not accessible through PL.</p>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-tcl notranslate"><div class="highlight"><pre><span></span><span class="k">set</span><span class="w"> </span>project<span class="w"> </span><span class="k">[</span><span class="nb">lindex</span><span class="w"> </span><span class="nv">$argv</span><span class="w"> </span><span class="mi">0</span><span class="k">]</span>
|
||||||
|
|
||||||
|
<span class="k">set</span><span class="w"> </span>bitfile<span class="w"> </span><span class="s2">"${project}.runs/impl_1/${project}.bit"</span>
|
||||||
|
<span class="k">set</span><span class="w"> </span>mcsfile<span class="w"> </span><span class="s2">"${project}.runs/impl_1/${project}.mcs"</span>
|
||||||
|
|
||||||
|
<span class="nv">write_cfgmem</span><span class="w"> </span><span class="o">-</span>format<span class="w"> </span>mcs<span class="w"> </span><span class="o">-</span>interface<span class="w"> </span>spix4<span class="w"> </span><span class="o">-</span>size<span class="w"> </span><span class="mi">16</span><span class="w"> </span><span class="err">\</span>
|
||||||
|
<span class="w"> </span><span class="nv">-loadbit</span><span class="w"> </span><span class="s2">"up 0x0 $bitfile"</span><span class="w"> </span><span class="o">-</span>loaddata<span class="w"> </span><span class="s2">""</span><span class="w"> </span><span class="err">\</span>
|
||||||
|
<span class="w"> </span><span class="nv">-file</span><span class="w"> </span><span class="nv">$mcsfile</span><span class="w"> </span><span class="o">-</span>force
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">-interface</span> <span class="pre">spix4</span></code> and <code class="docutils literal notranslate"><span class="pre">-size</span> <span class="pre">16</span></code> depends on SPI flash capability and size.</p>
|
||||||
|
</div>
|
||||||
|
<p>The tcl script is used with:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>vivado<span class="w"> </span>-nolog<span class="w"> </span>-nojournal<span class="w"> </span>-mode<span class="w"> </span>batch<span class="w"> </span>-source<span class="w"> </span>script.tcl<span class="w"> </span>-tclargs<span class="w"> </span>myproject
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>File load:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span><span class="o">[</span>--fpga-part<span class="w"> </span>xxxx<span class="o">]</span><span class="w"> </span>-f<span class="w"> </span>-b<span class="w"> </span>arty<span class="w"> </span>*.runs/impl_1/*.mcs<span class="w"> </span><span class="o">(</span>or<span class="w"> </span>.bit<span class="w"> </span>/<span class="w"> </span>.bin<span class="o">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">-f</span></code> is required to write bitstream (without them <code class="docutils literal notranslate"><span class="pre">.bit</span></code> and <code class="docutils literal notranslate"><span class="pre">.bin</span></code> are loaded in memory).</p>
|
||||||
|
</div>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">--fpga-part</span></code> is only required if this information is not provided at <code class="docutils literal notranslate"><span class="pre">board.hpp</span></code> level or if the board is not
|
||||||
|
officially supported.
|
||||||
|
device/package format is something like xc7a35tcsg324 (arty model).
|
||||||
|
See <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/blob/master/src/board.hpp">src/board.hpp</a>, or <a class="reference external" href="https://github.com/trabucayre/openFPGALoader/blob/master/spiOverJtag">spiOverJtag</a> directory for examples.</p>
|
||||||
|
</div>
|
||||||
|
<p>Some boards with UltraScale FPGAs, like the VCU118 and KCU16, support the SPIx8 (Dual Quad SPI) configuration.
|
||||||
|
In this case, the <code class="docutils literal notranslate"><span class="pre">spix8</span></code> option <code class="docutils literal notranslate"><span class="pre">write_cfgmem</span></code> on the above example can be used to generate two <code class="docutils literal notranslate"><span class="pre">.mcs</span></code> files,
|
||||||
|
to fit bigger designs or for faster programming. Only <code class="docutils literal notranslate"><span class="pre">.mcs</span></code> files can be used to program the FPGA in this case.</p>
|
||||||
|
<p>In this case, to load the two <code class="docutils literal notranslate"><span class="pre">.mcs</span></code> files:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>--board<span class="w"> </span>vcu118<span class="w"> </span>-f<span class="w"> </span>--target-flash<span class="w"> </span>both<span class="w"> </span>--bitstream<span class="w"> </span>*.runs/impl_1/*_primary.mcs<span class="w"> </span>--secondary-bitstream<span class="w"> </span>*.runs/impl_1/*_secondary.mcs
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>On these boards, each SPI flash can be programmed independently with the <code class="docutils literal notranslate"><span class="pre">--target-flash</span></code> option.
|
||||||
|
The default target is the <code class="docutils literal notranslate"><span class="pre">primary</span></code> flash.</p>
|
||||||
|
<p>For example, to program only the secondary flash with arbitrary data not related to FPGA configuration:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>openFPGALoader<span class="w"> </span>--board<span class="w"> </span>vcu118<span class="w"> </span>-f<span class="w"> </span>--target-flash<span class="w"> </span>secondary<span class="w"> </span>--bitstream<span class="w"> </span>arbitrary_data
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||||
|
<a href="lattice.html" class="btn btn-neutral float-left" title="Lattice notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||||
|
<a href="../todo.html" class="btn btn-neutral float-right" title="To Do" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.</p>
|
||||||
|
</div>Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||||||
|
<a href="https://github.com/buildthedocs/sphinx.theme">theme</a>
|
||||||
|
provided by <a href="https://buildthedocs.github.io">Build the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue