Arduino MKR Vidor 4000: The FPGA-Powered Microcontroller for Advanced Projects
A powerful Arduino board featuring an Intel Cyclone 10 FPGA and SAMD21 microcontroller, ideal for high-performance and custom hardware applications.
The Arduino MKR Vidor 4000 is a significant departure from typical Arduino boards, integrating a powerful Intel Cyclone 10 FPGA alongside the familiar SAMD21 Cortex-M0+ microcontroller found on other MKR boards. This dual-chip architecture allows for parallel processing, hardware acceleration, and the creation of custom digital logic, making it suitable for applications requiring high-speed data processing, real-time control, or custom hardware interfaces that go beyond the capabilities of a standard microcontroller.
At its heart, the SAMD21 microcontroller handles the general-purpose tasks, communication protocols, and Arduino sketch execution, while the FPGA is a blank canvas for digital hardware design. Users can program the FPGA using high-level synthesis (HLS) tools or traditional Hardware Description Languages (HDLs) like Verilog or VHDL to implement custom logic, accelerators, or even soft-core processors. This versatility positions the MKR Vidor 4000 as a bridge between traditional microcontroller development and hardware design, appealing to embedded engineers, advanced makers, and students looking to explore FPGA technology.
Released around 2018, the MKR Vidor 4000 was designed to push the boundaries of what was possible with an Arduino platform. It offers a unique combination of ease of use for microcontroller tasks with the raw power and flexibility of an FPGA. This makes it an excellent choice for projects involving machine vision, advanced sensor fusion, high-frequency signal processing, custom communication protocols, or even implementing entirely new hardware peripherals that can be defined by the user.
The board is part of the Arduino MKR family, known for its compact size and focus on IoT applications. However, the Vidor 4000 elevates this by adding significant computational and hardware design capabilities. It's best suited for users who are comfortable with both software programming and have an interest in or a need for hardware acceleration and custom digital logic design. It's not a simple drop-in replacement for a basic Arduino Uno but rather a platform for more ambitious and complex projects.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | Microchip SAMD21 Cortex-M0+ and Intel Cyclone 10CL016 FPGA |
| Architecture | 32-bit ARM Cortex-M0+ (SAMD21) / FPGA (Intel Cyclone 10) |
| Clock speed | SAMD21: 48 MHz / FPGA: Varies based on design |
| Flash / Storage | SAMD21: 256 KB Flash / FPGA: Configuration memory (e.g., 16 MB SDRAM, 2 MB QSPI Flash) |
| RAM / SRAM | SAMD21: 32 KB SRAM / FPGA: External SDRAM (e.g., 16 MB) and internal block RAM |
| Operating voltage | 3.3V |
| Digital I/O pins | SAMD21: 22 GPIO / FPGA: Up to 100+ pins mappable to FPGA logic |
| Analog / ADC | SAMD21: 8x 12-bit ADC channels |
| PWM | SAMD21: 10x PWM channels |
| Connectivity | Wi-Fi 802.11 b/g/n (U-blox NINA-W102 module), Bluetooth 4.2 |
| USB | Micro-USB connector for programming and power |
| Power input | 5V via Micro-USB or VIN pin (regulated to 3.3V internally) |
| Dimensions | 67.64mm x 25mm |
Pinout & pin functions
| Pin | Function |
|---|---|
| 3V3 | 3.3V power output |
| GND | Ground |
| VIN | Input voltage (typically 5V, regulated internally) |
| RESET | System reset pin |
| D0 (RX) | Digital I/O, UART RX |
| D1 (TX) | Digital I/O, UART TX |
| D2 | Digital I/O |
| D3 | Digital I/O, PWM capable |
| D4 | Digital I/O |
| D5 | Digital I/O, PWM capable |
| D6 | Digital I/O, PWM capable |
| D7 | Digital I/O |
| D8 | Digital I/O |
| D9 | Digital I/O, PWM capable |
| D10 | Digital I/O, SPI SS (Slave Select) |
| D11 | Digital I/O, SPI MOSI, PWM capable |
| D12 | Digital I/O, SPI MISO |
| D13 | Digital I/O, SPI SCK |
| A0 | Analog Input, ADC channel 0 |
| A1 | Analog Input, ADC channel 1 |
| A2 | Analog Input, ADC channel 2 |
| A3 | Analog Input, ADC channel 3 |
| A4 (SDA) | Analog Input, ADC channel 4, I2C SDA |
| A5 (SCL) | Analog Input, ADC channel 5, I2C SCL |
| LED_BUILTIN | Onboard LED, connected to digital pin 13 |
| FPGA_PIN_0 to FPGA_PIN_15 | General purpose I/O pins for the FPGA |
| FPGA_PIN_16 to FPGA_PIN_31 | General purpose I/O pins for the FPGA |
| FPGA_PIN_32 to FPGA_PIN_47 | General purpose I/O pins for the FPGA |
| FPGA_PIN_48 to FPGA_PIN_63 | General purpose I/O pins for the FPGA |
| FPGA_PIN_64 to FPGA_PIN_79 | General purpose I/O pins for the FPGA |
| FPGA_PIN_80 to FPGA_PIN_95 | General purpose I/O pins for the FPGA |
| FPGA_PIN_96 to FPGA_PIN_111 | General purpose I/O pins for the FPGA |
| FPGA_PIN_112 to FPGA_PIN_127 | General purpose I/O pins for the FPGA |
| FPGA_PIN_128 to FPGA_PIN_131 | General purpose I/O pins for the FPGA |
Wiring & circuit basics
The Arduino MKR Vidor 4000 operates at a logic level of 3.3V. It is crucial to ensure that any external components connected to its digital I/O pins are also rated for 3.3V or are properly level-shifted. Connecting 5V devices directly to the 3.3V GPIO pins can damage the SAMD21 microcontroller. Powering the board can be done via the Micro-USB port, which supplies 5V, or through the VIN pin, also expecting 5V. An onboard voltage regulator will step this down to the 3.3V required by the SAMD21 and other onboard components.
When powering external devices, use the 3V3 pin for low-power 3.3V components or the VIN pin (connected to the 5V USB supply) for devices that require 5V, provided the total current draw does not exceed the capacity of the USB port or power supply. Always include current-limiting resistors when connecting LEDs to prevent damage to both the LED and the microcontroller pin. For example, to light an LED, connect its anode to a digital pin (e.g., D5), then connect the cathode through a resistor (typically 220-330 ohms) to GND.
For sensors or modules that use I2C communication, the SDA and SCL pins are conveniently located on A4 and A5 respectively. For example, to connect an I2C sensor like the BME280, connect its VCC to the 3V3 pin, GND to a GND pin, SDA to A4, and SCL to A5. Ensure the sensor's operating voltage is compatible with 3.3V. The FPGA pins can also be configured to act as I2C interfaces, offering more flexibility if the SAMD21's pins are already in use.
Programming & getting started
The Arduino MKR Vidor 4000 can be programmed using the Arduino IDE. The SAMD21 microcontroller is supported natively, allowing you to write and upload standard Arduino sketches. To program the FPGA, you will typically use Intel's Quartus Prime software, which supports high-level synthesis (HLS) or HDL (Verilog/VHDL) for designing custom logic. The Arduino IDE can be extended to manage FPGA bitstream generation and loading onto the board, often through a specific board manager package. Uploading your first sketch involves selecting the 'Arduino MKR Vidor 4000' from the board menu in the Arduino IDE, connecting the board via USB, and clicking the Upload button.
For more advanced FPGA development, you would directly use Quartus Prime to create your hardware design, compile it into a bitstream, and then use a specific tool or script provided by Arduino (or a third-party integration) to load this bitstream onto the FPGA, often in conjunction with a SAMD21 firmware that interacts with the FPGA logic. This allows for complex hardware acceleration and custom peripherals to be defined and utilized by your embedded system.