QuickLogic-Corp / symbiflow-arch-defs

FOSS architecture definitions of FPGA hardware useful for doing PnR device generation.
https://symbiflow.github.io/
ISC License
4 stars 6 forks source link

SymbiFlow Architecture Definitions

This repository is used during the development of architecture support in SymbiFlow, if you are looking to use the toolchain you should start with the symbiflow-examples repository.

License status Build Status Documentation Status

This repo contains documentation of various FPGA architectures, it is currently concentrating on;

The aim is to include useful documentation (both human and machine readable) on the primitives and routing infrastructure for these architectures. We hope this enables growth in the open source FPGA tools space.

The repo includes;

The documentation can be generated using Sphinx.

Getting Started

To initialize submodules and setup the CMake build system, from the root of the symbiflow-arch-defs directory run:

make env

To build all demo bitstreams there are 3 useful targets:

# Build all demo bitstreams, targetting all architectures
make all_demos

# Build all 7-series demo bitstreams
make all_xc7

# Build all ice40 demo bitstreams
make all_ice40

Specific bitstreams can be built by specifying their target name, followed by a suffix specifying the desired output. For example, the LUT-RAM test for the RAM64X1D primative is called dram_test_64x1d. Example targets are:

# Just run synthesis on the input Verilog
make dram_test_64x1d_eblif

# Complete synthesis and place and route the circuit
make dram_test_64x1d_route

# Create the output bitstream (including synthesis and place and route)
make dram_test_64x1d_bin

# Run bitstream back into Vivado for timing checks, etc.
make dram_test_64x1d_vivado

Tools installed via submodules

Tools installed via conda

Tools potentially used in the future

Resource Requirements

To run examples provided, please make sure these resources are available:

Development notes

Because symbiflow-arch-defs relies on yosys and VPR, it may be useful to override the default packaged binaries with locally supplied binaries. The build system allows this via environment variables matching the executable name. Here is a list of common environment variables to defined when doing local yosys and VPR development.

There are more binaries that are packaged (e.g. VVP), but the packaged versions are typically good enough for most use cases.

After setting or clearing one of these environment variables, CMake needs to be re-run.