"Sooner or later, many designers will find that the firmware running on the microcontroller or microprocessor may become too slow. Field programmable gate array (FPGA) provides a programmable method to solve the problems of high-speed, real-time and embedded design with hardware speed. However, in order to maximize the use of FPGA, a technology learning curve is traditionally involved, but many engineers can not afford such a learning curve due to cost and deadline pressure.
The learning curve of FPGA often involves learning a new programming language (Verilog or VHDL), downloading a large development kit, learning a new tool development process to generate FPGA bitstream, and it may cost a lot of money (possibly hundreds or thousands of dollars) to buy FPGA development board. Due to these obstacles, although FPGA is an extremely useful tool in the embedded design toolbox, many design engineers avoid using them.
Some suppliers try to reduce the obstacles of using FPGA by providing entry-level FPGA board, but the necessity of learning new hardware description language and development tools is still a high threshold, which hinders the wider adoption of FPGA. In order to overcome these obstacles, Arduino has made the latest efforts to launch a new low-cost development board called Arduino MKR Vidor 4000, which represents a unique method of using FPGA in embedded system design.
Arduino MKR Vidor 4000 provides a variety of FPGA programming methods that can be seamlessly integrated into the popular Arduino ide. In this way, FPGA level performance can be obtained through special Arduino library expansion, so that embedded system developers can quickly benefit from Arduino sketches directly. At the same time, as more advanced designers have greater confidence in the technology, they can adopt more complex FPGA usage models.
This paper will first discuss the requirements of FPGA, and then introduce the functions of MKR Vidor 4000 development board. Then, this paper will deeply explain how to use Arduino's new simplified method to use FPGA.
First generation Arduino development board
The first Arduino development board launched in 2005 was based on a simple 8-bit microcontroller: ATMEL (now microchip technology) AVR. Many subsequent products of this development board are also based on different devices of the microcontroller series. Due to the low cost and easy use of Arduino IDE, Arduino development board series has become a popular platform for Internet of things (IOT) product development, which is commonly used in stem / steam projects. In fact, the original Arduino board was the first widely successful open source hardware project.
Now, thousands of designers, engineers, developers and makers around the world are using various versions of Arduino development board series, which has become the first choice for students to contact embedded programming for the first time. People's creativity is unlimited. It has a wide range of applications, from music, games, toys, smart homes, agriculture to autonomous vehicles.
As Arduino users continue to push the original Arduino architecture into more and more complex application fields, performance problems begin to appear. Part of the problem is that the 8-bit architecture of the original Arduino microcontroller is too simple. Another part of the problem is the software implementation of many real-time peripherals, especially time critical peripherals, such as high-speed timer, high-frequency PWM (pulse width modulation) output and quadrature encoder. One solution to this problem is to use faster and more powerful microcontrollers, but ultimately the software can do limited things in a real-time environment. Some high-speed real-time functions must be implemented in hardware.
Combination of Arduino and FPGA
The challenge is to enable embedded developers using Arduino to use FPGA resources without compromising the simplicity of Arduino. Arduino solves this challenge from the perspective of hardware: add FPGA to Arduino architecture, so that FPGA can expand Arduino's microcontroller peripheral resources through Arduino library. Existing Arduino users are familiar with these libraries; These libraries are often used when using Arduino's native peripherals and when adding a peripheral board to the Arduino extension pin.
The resulting Arduino development board is called MKR Vidor 4000, which combines 32-bit arm ® Cortex ®- The processing power of microchip technology samd21 low-power microcontroller with M0 + processor core is the same as that of Intel (formerly Altera) Cyclone 10 10cl016 FPGA (Figure 1).
The FPGA includes 15408 programmable logic units, 516096 bit embedded RAM and 56 18 x 18 Bit hardware multipliers, which can be used to realize high-speed DSP. The I / O pin switching speed of each FPGA is faster than 150 MHz, which is much faster than that of the on-board samd21 microcontroller. In short, the on-board FPGA provides considerable processing and I / O capabilities for the Arduino MKR Vidor 4000 board.
Arduino MKR Vidor 4000 belongs to maker Arduino board series, and the overall dimensions of its new MKR are inconsistent with the previous Arduino board. The MKR series also includes:
Arduino MKR Wan 1300 connection board with onboard Lora RF module for Internet of things applications
Arduino MKR GSM 1400 connection board with onboard cellular RF module is suitable for Internet of things applications requiring global GSM connection
Like the previous Arduino development board, the MKR series of Arduino is not only developed for beginners, but also professionals can use it to quickly develop system prototypes. Arduino organization found that more and more formal engineering projects use Arduino development boards for prototype development and even production, so it developed this series of boards.
The Arduino MKR Vidor 4000 includes many peripherals, several of which were not involved in the earlier and simpler Arduino. There is a 28 pin MKR row pin interface, which is conceptually similar to the original Arduino expansion board row pin, but physically different. The I / O pins in the pin array interface can be controlled by samd21 microcontroller or Intel cyclone 10 FPGA. In addition to the standardized MKR pin interface, the list of peripheral ports on the Arduino MKR Vidor 4000 board also includes:
Micro USB connector
Mini HDMI video output connector
Mipi camera connector compatible with raspberry PI camera module
Wi Fi and ble (low power Bluetooth) RF interfaces realized by u-blox nina-w102 RF transceiver module
Minipcie connector with up to 25 user programmable pins
Note that the Arduino MKR Vidor 4000 development board does not have a true PCIe interface port. It only modified the connector related to the minipcie port, and tapped many I / O pins of the cyclone 10 FPGA on the minipcie edge connector. This is an economical high-capacity connector, which has been widely used in millions of PC motherboards, which is enough to prove its reliability. The minipcie connector can be used to easily plug the Arduino MKR Vidor 4000 board into a larger system or I / O expansion board.
Despite so many I / O connectors, the Arduino MKR Vidor 4000 development board is small. Its size is 83 mm (3.25 inches) × 25 mm (0.98 inch), which is suitable for installation in a narrow space where embedded computing applications are becoming more and more common. The current consumption rating of the board is 100 Ma, so it should also be suitable for the power envelope of many embedded system projects, including battery powered systems.
The board has a connector for direct connection to a 3.7 volt lithium polymer (lipo) battery, as shown in Figure 1. However, the current consumption will depend on the functions implemented in FPGA and the running speed of instantiated hardware, which will complicate the calculation of battery capacity. Finally, some experiments will be needed to determine the correct size of the battery.
The video output of MKR Vidor 4000 board is the real HDMI video output generated by Intel cyclone 10 FPGA. The Arduino ide of the Arduino MKR Vidor 4000 board contains the adafruit gfx graphics core library, which allows the samd21 microcontroller to generate graphics under software control using Arduino sketches.
In addition, Arduino adds several hardware IP blocks to the Arduino ide through two main libraries specially created for the MKR Vidor 4000 board: Vidor peripherals and Vidor graphics. When the Arduino sketch contains relevant peripheral libraries, the Intel cyclone 10 FPGA on the Arduino MKR Vidor 4000 will automatically build these hardware IP blocks. The current list of peripheral IP blocks includes:
I2C port
SPI port
UART
High frequency PWM controller
High speed timer
High speed quadrature decoder
Adafruit neopixel addressable RGB intelligent LED controller
Similarly, the software library of the Arduino MKR Vidor 4000 board contains the video capture code for the Mipi camera input of the board. Routines in this library can capture 640 x 480 pixel video images from connected cameras. The 24 bit RGB image of the camera is stored in the 8 MB SDRAM of the development board, which is directly connected to the cyclone 10 FPGA. In addition, the control and status registers of the connected cameras can be accessed using one of the I2C interfaces of the Arduino MKR Vidor 4000 board.
Some of these peripherals (such as I2C and SPI) have been used as software IP blocks for the previous Arduino board. The difference between these early software implementations and the equivalent IP blocks implemented on the FPGA of Arduino MKR Vidor 4000 board is that the peripheral performance of FPGA version is better.
For example, each I2C and SPI instantiation is implemented through an independent programmable hardware block inside the on-board FPGA. Therefore, there is no performance loss when instantiating several such serial ports.
FPGA speed example: fast orthogonal coding
Orthogonal encoder is often used as the positioning feedback mechanism of stepping motor used in 3D printer. Software based encoders may have problems because of their limited speed; These encoders may miss counts when the processor is busy executing other code. The orthogonal encoder of Arduino MKR Vidor 4000 board is implemented in cyclone 10 FPGA hardware. Its clock frequency is 100 MHz and is realized by 32-bit hardware counter. Therefore, it will not miss counting in any actual physical system.
Each instantiated orthogonal encoder is implemented by a separate FPGA block, so there will be no performance loss when instantiating multiple encoders. To implement more encoders, you only need to use more internal programmable logic of FPGA. This is the key advantage of FPGA hardware parallelism.
Easy to use FPGA Arduino mode
By implementing peripheral blocks with FPGA hardware and making them available with the same library mechanism familiar to countless Arduino sketch writers, the Arduino MKR Vidor 4000 board simplifies the use of FPGA. There is no need to learn a new hardware description language (HDL) such as VHDL or Verilog. For developers, FPGA based peripherals are no different from any other C + + object in the eyes of programmers. Arduino plans to add more such hardware IP block peripherals in the future.
Arduino has completed this magic. By using a software stack far lower than that of the original Arduino IDE, the FPGA hardware looks like a hardwired peripheral block. The software stack of MKR Vidor 4000 board uses remote procedure call to establish a link between the advanced sketch written in Arduino C + + version and the FPGA hardware of the development board; These procedure calls are sent to the mailbox instantiated on the FPGA, which is connected to the samd21 microcontroller through JTAG (Figure 2).
Using this software stack to access FPGA based peripherals is very simple. Just call the appropriate Vidor peripheral library correctly. Arduino sketch writers do not have to know how Vidor's FPGA magic works. It is effective.
An effective way to improve the system performance with the help of FPGA is to access the predefined peripheral IP blocks implemented by programmable hardware, but the performance improvement obtained in this way is only a small part of the full capacity of FPGA. Nevertheless, Arduino encourages MKR Vidor 4000 users to develop more peripheral blocks in order to expand their choice through the large Arduino open source community
Our other product: