Introduction

StreamLogic's Reify FPGA is a cloud-based, no-code FPGA development environment. Its purpose is to provide rapid application development for audio and computer vision applications on FPGAs for users with or without any FPGA experience.

StreamLogic Reify uses diagrams to describe an application using a programming paradigm known as dataflow programming. In the dataflow model, the diagram depicts how data received from sources such as a camera flows through various operators that transform data and finally output by consumers such as a display.

In StreamLogic applications, also called pipelines, data flows from top to bottom. The following example demonstrates a simple pipeline:

Example

This pipeline operates as follows:

  1. MIPICam source is a camera that produces images that flow into
  2. Sobel which performs edge detection and produces images that flow into
  3. PixelMap that performs a custom pixel color transformation and produces images that flow into
  4. FX3Video which is a consumer that sends the images over a USB port.

FPGAs Basics

If you are not familiar with FPGAs, here are a few basics that will be helpful to you as a StreamLogic user. An FPGA is one class of "programmable logic" chips. Programmable logic means that you can program (and re-program) the behavior of the chip in the field. This is different than a computer or micro-controller. Although these can also perform arbitrary behavior, they do so by providing them with instructions for the behavior; the chips themselves have a fixed functionality which is the ability to perform a fixed set of instructions.

CPUs execute functions one at a time by reading their instructions from memory. On FPGAs, each function has its own dedicated region on the chip that performs that function. A benefit of that is that functions can be running simultaneously. On the other hand, it means you can only have a limited number of functions because they each take up space on the chip. Furthermore, FPGAs have a limited number of resources such as multipliers, adders, and storage for variables. This means for example, if you have 4 different functions that use multiplications, than the FPGA must have at least 4 separate multipliers available; they are not shared.

To summarize, here are some key take always:

  1. FPGAs can provide high performance by performing operations in parallel.
  2. FPGAs are resource-constrained which you may need to pay attention to.