Math Talk

Building Math Hardware implemented a math compute device on a Field Programmable Gate Array (FPGA). This sequel describes a protocol and implementation by which the FPGA can communicate with a microcontroller. The vision is to generate operands on an microcontroller; the Math Hardware then performs the operations and returns the results. The communication between the devices is the focus of this article.


The protocol that we will use is called Serial Peripheral Interface (SPI). It is a synchronous full-duplex serial interface [1], and is commonly used to communicate with on-board peripherals such as EEPROM, FLASH memory, A/D converters, temperature sensors, or in our case a Field Programmable Gate Array (FPGA).

We assume a working knowledge of the Verilog hardware description language. To learn more about Verilog refer a book such as “FPGA Prototyping with Verilog Examples” by Chu, do the free online class at, or read through the slides Intro to Verilog from MIT. Alternatively, my short introduction to the Verilog IDEs can be found at Getting Started with FPGA programming on Altera or on Xilinx.


After describing the physical connections, we look into exchanging bytes between a microcontroller and an FPGA. The last part implements an layer that allows message passing.

  1. Introduction
  2. Hardware
  3. Byte – Protocol
  4. Byte – Arduino as Master
  5. Byte – FPGA as Slave
  6. Message – Protocol
  7. Message – Arduino as Master
  8. Message – FPGA as Slave
  9. What’s next?
Embedded software developer
Passionately curious and stubbornly persistent. Enjoys to inspire and consult with others to exchange the poetry of logical ideas.

5 Replies to “Math Talk”

  1. Very well explained. I am looking some details with respect to interfacing Arduino with FPGA (Altera) using I2C where FPGA is a master and arduino is slave.

  2. Can we use this project to establish a communication between Arduino and FPGA?

  3. The Two-stage shift register here is used to synchronize only the serial clock coming from Master. Right? Or do we need to sync the rest signals (i.e MOSI, SS, MISO) ??

Leave a Reply

Your email address will not be published. Required fields are marked *


This site uses Akismet to reduce spam. Learn how your comment data is processed.