Play FPGA like Arduino

Build cool things with M10. For starters, you can build a Lego Monster Truck with it. For more fun, how about home automation through DTMF?

Similar projects worth following
Over the past 10 years, FPGA device has grown into main stream. Instead of using a hardcore MCU, embedding a soft-core MCU into FPGA, with all the peripherals customized, is now within the reach of makers. And that's where PulseRain M10 comes into play, an open source design down to the silicon level!

The M10 board takes a distinctive technical approach by embedding an open source soft MCU core (96MHz) into an Intel MAX10 FPGA, while offering an Arduino compatible software interface and form factors. And it features onboard resources like voice CODEC, microSD socket, SRAM, onchip ADC and dual IO voltages.

The M10 board can serve as a core module and easily morph into various cool things. For starters, you can build a Lego Monster Truck out of it! For more fun, how about home automation through DTMF? In fact, you can now completely replace your Arduino with M10!


Before you start, read this post to see how to make a Stick Shift Monster Truck with, and this post to see how to make a home automation system. Both projects feature PulseRain M10 as the core module board.



The PulseRain M10 Board is a versatile and expandable platform that can fit in a wide variety of scenarios, as illustrated below:

It is a FPGA platform that puts soft-core MCU into the FPGA, while presents a software interface and form factors like Arduino. It is an open source answer to the dominant proprietary solutions in the embedded systems, and it also offers the flexibility that standalone MCUs can not match. The great features it bears are as following:
  • Open Source Hardware

The schematic and layout are designed with Eagle CAD. The PCB design files can be found on GitHub, and they are licensed under "Creative Commons Attribution Share-Like 3.0".

The processor core and peripheral libraries (in System Verilog) are licensed under GPLv3. And for those who want to use them in ways that are incompatible with the GPLv3, we also offer commercial license instead.

All the firmware(sample code, libraries in C/C++) are licensed under LGPLv3 (GNU Lesser General Public License).

All the desktop software (Python script and utilities) are licensed under Apache License Version 2.0.

And the fine print of the license agreement can be found here, which is the official document that carries legal weight.

  • Versatile

This platform has the bells and whistles for common embedded applications, such as:

    • 8 channel onchip ADC in FPGA with temperature sensing diode
    • Onboard MicroSD socket. SD card controller as a peripheral in FPGA. MCU driver supports FAT32 file system.
    • 128KB onboard RAM (Microchip 23LC1024). 40KB onchip RAM for code/data in FPGA.
    • Silicon Lab Si3000 Voice Codec.
    • Switchcraft 3.5mm Phone Jack for Speaker. Onboard Microphone from CUI
    • FTDI FT232R for USB/UART
    • 3.3V / 5V IO support with Texas Instrument TXS0108E Voltage Translator.
    • PIHER 10mm Carbon Potentiometer
    • 2 Push Buttons, 3 LEDS (Blue, Red and Green)
    • DIODES, Inc. AP3429/A 1.0MHz, 2A DC-DC Buck Converter
    • 14 bit of Digital IO on Arduino Connector, 10 Position JTAG Connector that can be used for GPIO as well.
    • I2C / SPI / PWM Peripherals in FPGA
  • Expandable

M10 board's form factors are compatible with Arduino Shields in connector and mounting hole positions. The onboard FPGA (Altera 10M08SAE144C8G) can be migrated to a device as big as 25K LE, 675Kb BRAM, or as small as 4K LE, 189 Kb BRAM.

And all the peripherals are connected to the processor core through the open source Wishbone FASM bus interface, which gives users the greatest choice possible to add new peripherals. In this way, the hardware can be tailored to users' specific application.

  • Software Friendly

Arduino IDE can be used as GUI based development environment. Starting V1.5, Arduino IDE has support for 3rd party hardware integration. All you have to do is to point the "Additional Boards URL" to our GitHub repository in "File/Preference/Additional Boards URL". And then install the board support package in "Tools/Boards/Boards Manager".

  • DFM (Design for Manufacturing)
    • Regular shape (2.1 inch x 3.2 inch rectangular shape)
    • Pass DRC: Minimum Trace Width: 8 mil, Minimum Trace Clearance: 8 mil, Trace to Board Edge Clearance: 8 mil, Minimum Via Drill Diameter: 10 mil, 62 mil board thickness.
    • No Leadless Package (The FPGA is in TQFP 144 package).
    • ENIG (Electroless Nickel Immersion Gold) Finish for PCB fabrication.


The architecture of M10 board is illustrated in the figure below. The FPGA we choose is Altera 10M08SAE144C8G that features 8K LE, 378Kb Block RAM, 172 KB flash memory, a 8-channel A/D converter with temperature sensing diode. Out of the box, we have pre-loaded...

Read more »


Quick Start Guide for PulseRain M10

Adobe Portable Document Format - 2.73 MB - 07/24/2017 at 06:28


Gerber file for M10 board, V1.11

x-zip-compressed - 268.11 kB - 10/16/2017 at 04:34



Schematic for PulseRain M10

Adobe Portable Document Format - 181.34 kB - 07/23/2017 at 08:29



Hardware Manual for the M10 board (draft)

Adobe Portable Document Format - 2.18 MB - 10/21/2017 at 06:07



Technical Reference Manual for the soft-core MCU

Adobe Portable Document Format - 2.41 MB - 10/26/2017 at 00:01


View all 17 files

  • 2 × CRCW06030000Z0EAHP Resistors (Fixed) / Zero Ohm Jumpers
  • 5 × VJ0603Y104JXJPW1BC Capacitors / Ceramic, 0.1 u
  • 6 × CRCW0603100RFKEA Resistors (Fixed) / Thick Film Surface Mount, 100 ohm
  • 6 × VJ0603Y102JXJPW1BC Capacitors / Ceramic, 1000p
  • 6 × CRCW0603100KFKEA Resistors (Fixed) / Thick Film Surface Mount, 100 K

View all 52 components

  • Crowd Funding for the M10

    Changyi Gu11/17/2017 at 07:24 0 comments

    The crowd funding campaign for the M10 board has officially started today on Crowd Supply:

    If possible, please do me a favor to spread the words. Thanks!

    And come to grab the early birds offer!

  • HW Manual and TRM for MCU core

    Changyi Gu10/21/2017 at 06:02 0 comments

    As a supplementary document to the schematic, the Hardware Manual (draft) and soft MCU's TRM are uploaded to the "Files" section 

  • TRM for Peripherals

    Changyi Gu10/15/2017 at 06:26 0 comments
  • Home Automation with DTMF

    Changyi Gu10/14/2017 at 01:52 0 comments

    The M10 is  a FPGA board with a soft core MCU running at 96MHz. It also features a rich set of onboard peripherals like voice CODEC, (including microphone and speaker jack), microSD socket, SRAM, onchip A/D converter, Temperature sensor diode and dual voltage IO etc. It can be used as a core module and can morph into a lot of cool things. Below is a demo of using the M10 board to make a small home automation system that allows you to check your home temperature when you are away.

    Here is how the demo system works:

    1. You call your home number from somewhere far away
    2. The answer machine will pick up the call after it rings twice.
    3. When the answer machine asks you to leave a message after the tone, key in the pass-code that is configured beforehand. In this case, it will be *1234#
    4. The M10 board has onboard microphone and voice codec. The keys you pressed will be heard as DTMF signals over the answer machine, and those DTMF keys will be collected and decoded by the M10 board.
    5. If the pass-code matches, the M10 board will pick up the phone.
    6. To make the demo more interesting, the phone is actually picked up through a DC motor that ties to a Lego crane, as shown above in the diagram.
    7. BTW, To drive the DC motor, you need two things: one is the PWM signal, which the M10 board has hardware controller and software drivers built-in. The other is a motor driver that has a H bridge in it, so you can drive the DC motor with high current, and control the direction the motor rotates. For that, an Arduino shield from Sparkfun it used.
    8. After the phone is picked up, a welcome message will be played out. The welcome message is actually played from an audio wave file stored on the microSD card.
    9. At this point, you can start to key in commands that are predefined. In this demo, command *888# will trigger an action to get the current temperature, and read the temperature numbers out loud by playing audio files for each digit.
    10. To hang up. Key in the command *999#, which will rotate the DC motor in opposite direction and hang off the phone. Or you could choose to sit idle and let the system timeout after about 20 seconds, which will also trigger the DC motor and hang off the phone.

    Now, without further ado, let me give the demo:

  • New Files Uploaded

    Changyi Gu07/24/2017 at 06:35 0 comments

    To meet the entry requirement for Hackaday Prize 2017, the following new files have been uploaded:

    *) Quick Start Guide for PulseRain M10

    *) Schematic for PulseRain M10

    *) Datasheet for FP8051 1T core

  • Hack a Dual Axis Gear Motor for Lego

    Changyi Gu07/13/2017 at 07:54 0 comments

    This is a follow up post to Stick Shift Lego Monster Truck


    Last Month Hackaday had a post for "Converting a Robotic Motor For Lego Blocks",

    and I happen to be building a Lego Monster Truck and I need a good way to power steering my vehicle. So I followed the instructions in the above post. But it turns out it requires more hand craft skill than I thought, and I don't have the 4.8 mm drill bit either, thanks to the imperial systems (The closest one I have is 3/16 inch, but I couldn't make it to work).

    Fortunately, since I only control the gear box on one side, I found another way to hack:

    1) Get a DC 3V-6V Dual Axis Gear Motor. The motor can be obtain from, or AliExpress for less than $1

    2) Use a 5/64 inch drill bit to drill a hole on one end of a Lego axle, as illustrated below. For the Lego axle, find the end that has a small dip, which is easy to position your drill bit.

    3) The DC motor has two axle heads, with one on each side. One of the axle head is tied to a gear inside the yellow gearbox, so there is not much you can do unless you open the yellow gear box. But the other axle head can be pulled out without opening the yellow gear box. And that one is attached to a metal axle with a seesaw head. Plug the reworked Lego axle from (2) into the metal axle, and you get yourself something that can be used to drive the Lego gear box

    4) Use PWM to control the motor, which will drive the Lego gear box (shown below before motor is mounted). Now my Lego monster truck can make turns left and right!

    PS: ways to mount the dollar motor

    There are many ways to mount the motor onto the Lego bricks. I simply use cable ties to attach the motor firmly to the Lego gearbox.
    But you can also stick a 2 x 4 plates (with holes in the middle) to the motor.

    Or you can use a Lego compatible DC motor support from the following

    (The motor in the following is NOT the same as the one I hacked)

  • Stick Shift Lego Monster Truck

    Changyi Gu07/10/2017 at 07:15 2 comments

    My daughter was pouting her lips last week because she found out her Lego bricks were stolen by her daddy. Fortunately, I'm now able to make it up by giving her something better.

    The Lego Monster Truck you see in the following video is a demonstration of PulseRain M10's capability. It uses one PulseRain M10 board, one PWM shield and one ESP8266 shield. Both shields are from Sparkfun.

    This monster trunk has two DC motors. One is for driving while the other is for steering. Most Wifi Robot cars on the market are using 4 wheel drive or 2+ 1 (Two wheels plus one caster). With 4 wheels or 2+1, the designers can avoid dealing with the steering mechanism. And to make turns, those cars will spin the wheels on each side in opposite direction. However, the drawback of such design is that each driving wheel was pushed by a separate DC motor. And no two DC motors are the same, especially for cheap ones used by toy. This makes it hard for those cars to go straight lines.

    Of course, those can be fixed by:

    (1) Manual calibration, where a potentiometer (or something with similar nature) can be used to keep the two DC motors spin the same way

    (2) Use better motors and better control mechanism. Instead of using open loop, a close loop control can be adopted. However, close loop requires a sensor (such as speed, position etc) for feedback. Those will just make things a lot complicated or more expensive.

    The Lego Monster Truck shown below takes a different approach. It uses Lego gears and beams for steering. To make it happen, I made a hack to one of the DC motor and the Lego axle (more to follow on this part) so that the motor can work with a Lego gear box.

    For driving force, another DC motor was used to drive two wheels with one axle. In this way, no need to worry about any mismatch of motors.

    And to control the truck, I chose a retro style joystick that is compatible with Atari 2600 . Yes, this is a stick shift vehicle :-)  For hardware building instructions, please go to . For firmware and host software, please go to .

    Now, without further ado, Let me give you the Lego Monster Truck:

  • Attach Wifi Shield

    Changyi Gu06/13/2017 at 06:29 0 comments

    Got ESP8266 Wifi Shield from Sparkfun. Initially I thought I need to replace the DC Power Jack with a low profile one. But now it seems that is unnecessary :-)

  • A Few New Releases on GitHub

    Changyi Gu05/01/2017 at 01:09 0 comments

    RTL lib 1.1 is released on GitHub.

    Updated flash_loader for M10 high speed configuration solution.

    FP51_fast_core 1.0 is released on GitHub

    FP51-1T MCU core

    M10 High Speed Config Utility 1.0 is released on GitHub

    GUI to program M10 onchip flash

  • BOM on

    Changyi Gu04/30/2017 at 06:11 0 comments

    The BOM of this project has also been uploaded to to streamline the supply chain. The good news is is a very handy tool to gauge the BOM cost and available stocks. The bad news is that we've just found the microSD socket in the current BOM (SCHD3A0100) is obsolete. Fortunately, we have found a pin compatible part from Molex (47219-2001)

View all 16 project logs

View all instructions

Enjoy this project?



Capt. Flatus O'Flaherty ☠ wrote 04/02/2017 at 13:10 point

I want one of these - what's the approximate retail cost based on 1,000 units?

  Are you sure? yes | no

Changyi Gu wrote 04/03/2017 at 07:36 point

Thanks for your strong interest in this project! The PCB fabrication/assembly is currently in the pilot run for production. Like most other hardware products, there could be a variety of factors weighing in as the volume ramps up. That's why I hesitate to give your a number right now. 

Our plan is to start a crowd-funding campaign when we see the green light for volume production (Hopefully in a few months). And we shall have a better idea for pricing at that point. Stay tuned, please :-)

  Are you sure? yes | no

Ember Leona wrote 03/31/2017 at 23:04 point

Im am confused by the project. Its like Orgonian to me.

  Are you sure? yes | no

Changyi Gu wrote 04/01/2017 at 06:27 point

Think of it as an Arduino. But this time, instead of using an off-the-shelf Micro-controller like ATmega328P, you get to have a custom-made micro-controller with all the peripherals tailed to your application. 

  Are you sure? yes | no

Yann Guidon / YGDES wrote 03/24/2017 at 03:00 point

This reminds me of the Actuino project, that I started about 6 years ago, since then discontinued...

Why use a 8051 core ?

  Are you sure? yes | no

Changyi Gu wrote 03/24/2017 at 04:30 point

Thanks for asking. There are several possible options for the soft-core MCU:

(1) AVR. 

(2) 8051

(3) RISC-V

(4) LEON

For option (1), AVR is a nice choice. However, AVR is solely owned my Atmel (now Microchip). And ATMEL has never granted any license to anyone to implement AVR instruction set, and there could be potential patent issues as well. Although there are open source AVR cores available, it does not mean those implementations have the blessing from Atmel (Microchip). That's why AVR is a no-go.

For option (2), 8051 instruction set has been around for so long that it has already fallen into public domain. That's why you can find a plethora of vendors that supply various enhanced 8051 (As of today, there are more than 70 of them.) 8051 is widely adopted, has a large ecosystem, and is not burdened by license/royalty/patent to implement. That's why we pick it as a good choice for 8-bit implementation.

Option (3) is also a good option. And it is on our road map for 32-bit implementation.

Option(4) is a no-go, although LEON is also an open source core. That is because (A) Sparc V8 is not so popular, and (B) You still need to apply for a license if you want to put LEON into commercial use.

BTW, our 1T  8051 implementation can reach very high clock rate (more than 100MHz on Altera C8 grade device). Most other implementation will fall flat at 50~60 MHz. And the Arduino UNO is only running at a clock below 20MHz.

With a software library to support Arduino language, I think our offering is a good alternative to standard alone MCU.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates