PYNQ is an open-source project from Xilinx®. It provides a Jupyter-based framework with Python APIs for using Xilinx platforms. PYNQ supports Zynq® and Zynq Ultrascale+™, Zynq RFSoC™, Alveo™ and AWS-F1 instances.
PYNQ enables architects, engineers and programmers who design embedded systems to use Zynq devices, without having to use ASIC-style design tools to design programmable logic circuits.
- Programmable logic circuits are presented as hardware libraries called overlays. These overlays are analogous to software libraries. A software engineer can select the overlay that best matches their application. The overlay can be accessed through an Python API. Creating a new overlay still requires engineers with expertise in designing programmable logic circuits. The key difference however, is the build once, re-use many times paradigm. Overlays, like software libraries, are designed to be configurable and re-used as often as possible in many different applications.
This is a familiar approach that borrows from best-practice in the software community. Every day, the Linux kernel is used by hundreds of thousands of embedded designers. The kernel is developed and maintained by fewer than one thousand, high-skilled, software architects and engineers. The extensive re-use of the work of a relatively small number of very talented engineers enable many more software engineers to work at higher levels of abstraction. Hardware libraries or overlays are inspired by the success of the Linux kernel model in abstracting so many of the details of low-level, hardware-dependent software.
- PYNQ supports Python for programming both the embedded processors and the overlays. Python is a “productivity-level” language. To date, C or C++ are the most common, embedded programming languages. In contrast, Python raises the level of programming abstraction and programmer productivity. These are not mutually exclusive choices, however. PYNQ uses CPython which is written in C, and integrates thousands of C libraries and can be extended with optimized code written in C. Wherever practical, the more productive Python environment should be used, and whenever efficiency dictates, lower-level C code can be used.
PYNQ is the first project to combine the following elements to simplify and improve Xilinx system design:
- A high-level productivity language (Python in this case)
- FPGA overlays with extensive APIs exposed as Python libraries
- A web-based architecture served from the embedded processors, and
- The Jupyter Notebook framework deployed in an embedded context