FPGAs (Field Programmable Gate Arrays) are a popular hardware choice for many IoT solutions, providing a flexible compromise between ASICs and pure software approaches. However, there is still a perception that efficient use of FPGAs requires hardware engineering expertise and a long design cycle.
In recent years, there were numerous advances addressing these challenges. The simplest scenario involves pre-built FPGA libraries that can be used from a host-side code. A developer would call a C/C++ API and all the details such as transferring data between host CPU and FPGA card, and the complexity of algorithm implementation, are taken care of by library authors. Recently, we see a good growth of such libraries, OpenVINO™ being an example. Another extreme is a direct programming model, where developers write all the code for FPGA themselves. Historically, hardware description languages (HDL) were used for this purpose, but recent advances make it possible to use traditional program languages (like C) for this purpose and achieve project goals much faster. In practice, most projects would be somewhere between these two extremes.
In this session, we will focus on describing how software-oriented (as opposed to hardware) development environment could be set for FPGAs and how software development activities - like edit/build/debug/profile - apply to FPGAs, supporting both library usage and direct programming.