HELLO FPGA Kit - Review

Table of contents

RoadTest: HELLO FPGA Kit

Author: dang74

Creation date:

Evaluation Type: Independent Products

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: The Altera NIOS II Embedded Evaluation Kit from Terasic is similar in that an LCD is included. But unlike the Hello FPGA Kit, the FPGA on the Terasic product does not include an embedded ARM processor.

What were the biggest problems encountered?: Initially I had some difficulty setting up the software project. More detailed instructions would have been beneficial.

Detailed Review:

Overview

 

The Hello FPGA Kit is a development platform that includes camera and LCD modules.

Its principal PCB features a SmartFusion2 SoC device which combines an ARM Cortex M3 core with FPGA fabric.

 

Why I applied for this Road Test

 

It's been some time since I worked with FPGAs so I applied for the road test as a way to brush up on my skills.

Also the combination of ARM core and FPGA on a single device was really exciting to me.

 

The Unboxing

 

Opening the box reveals the LCD.  A  mini USB cable is also included.

image

 

The Hello FPGA kit is actually a stack of 3 boards.

 

On one side you'll find the camera module:

image

 

On the reverse side you'll see the LCD module:

image

 

Sandwiched in the middle you'll find the FPGA Board.

image

 

Running the Demos

 

Microsemi has prepared 3 demos for the Hello FPGA Kit.

The demos are run through the Hello FPGA GUI.

 

FIR Demo

 

I began with the FIR demo.  In this demo the user configures a filter as well as an input signal for testing the filter.

In my case I configured the filter to have a 20MHz lowpass response.  I set up the input to have a 15MHz tone and a 40MHz tone.

 

The figure that follows shows how the filter allows the 15MHz tone to pass while rejecting the 40MHz tone.

 

image

 

Camera / Display Demo

 

In this demo the image captured by the camera is displayed on the LCD.

In a sense this demo is more of an intermediate step to set up the next next demo.

image

 

Digit Recognition Demo

 

The third and final demo deals with image recognition and of the three demos this one impressed me the most.

The photo below shows how this demo works.  The camera is pointed to a handwritten number 1.

If you look at the green text on the LCD's lower left hand side, you will see that the number 1 is being correctly recognized.

 

image

 

 

Libero SoC and the Design Flow Pane

 

After running the demos I acquainted myself with Microsemi's Libero SoC tool.  The learning curve here was not too bad.

Perhaps my favourite part of the tool was the Design Flow pane which allows the user to easily navigate through the different stages of the design.

Check marks are used in the Design Flow pane to signify when a particular task like synthesis or place and route has been completed.

image

 

Smart Design

 

Smart Design is a graphical design entry method supported by Libero.

IP blocks are dragged into the Smart Design page and wired up to create your system.

The image that follows is a simple Smart Design block I developed for toggling an LED.

 

image

 

The block labelled MSS_C0_0 is the microcontroller subsystem.

If you double click this block the Smart Design for the microcontroller opens. (Refer to the image that follows).

 

You can use the microcontroller's Smart Design to configure peripherals like I2C, GPIO and Ethernet.

image

 

 

Exporting Hardware Drivers

 

Once you've created your SoC design you can use Libero to export the software drivers as shown below:

image

 

 

Soft Console IDE

 

The Soft Console IDE is used to develop the software solution for your design.  The particular version I downloaded was Soft Console 4.0.

This is the stage where I struggled the most.  Microsemi did not provide clear instructions on how to create the software project or how to properly import the drivers.

 

I spent a number of nights working through a series of linker errors.

I understand that Microsemi is targeting beginners with their Hello FPGA product so the absence of information instructing the user on how to design with the kit was an oversight on their part.

 

I Wrote a Tutorial

 

When I finally figured things out I decided to write a tutorial to guide others through the design process.

 

The tutorial encompasses the steps that need to be carried out in Libero and Soft Console and concludes with the procedure for programming the design onto the Hello FPGA board.

 

The tutorial is available here: https://github.com/Dan-Grise/Hello-FPGA-Blinking-LED-Tutorial

 

 

Experimenting with the LCD

 

To me the most interesting part of the design kit is the LCD.  Once I had a decent understanding of the toolset I decided to start experimenting with the LCD.

The top level Smart Design for this is pictured below.  Like our previous example MSS_C0_0 is the microcontroller subsystem.

 

The blocks to the left are standard cores for system reset and clocking.

The core immediately to the right is used to decode and distribute the microcontroller's advanced peripheral bus.

 

LCD_DISPLAY_0 as its name implies provides the LCD with the image to display.

I did not design the LCD_DISPLAY_0 block.  Instead I imported it from the DSP example design used in the FIR demo.

 

image

 

LCD_DISLAY Smart Design

 

Double clicking LCD_DISPLAY_0 reveals its Smart Design (see image below).

 

Initially the microcontroller configures the display's ili9488 controller.

During this stage the MUX is set to output data originating from the advanced peripheral block.

 

The microcontroller writes the image data to port A of the dual port RAM.

When configuration is complete the MUX will output data from port B of the dual port RAM causing the image to be displayed.

image

 

 

The Software Design

 

I made like a bandit and lifted much of the LCD code present in the FIR demo code.

I made sure to include the ili9488.h file.  This file and ili9488.c were obtained from the FIR demo design and contain the functions and routines for controlling the LCD.

 

image

 

You might be curious about the clara.h file.  This is a 16-bit bitmap expressed as a C array.

 

The first few lines look like this:

 

image

 

In all we have a 120 x 80 array of 16-bit words, with each 16-bit word representing a pixel.

 

The actual LCD is 480 x 320 pixels.  Originally my intent was to use the full resolution of the display so the array was initially 480 x 320.

The compiler was not happy with this so I opted for 1/4 resolution instead.

 

The main function appears below.

 

While the ILI9488_init function is executing the MUX directs data from the microcontroller to the LCD.

While show_image is executing the MUX directs data from the dual port RAM to the LCD.

 

image

There's one final thing to discuss with regards to the code.  Below you see the nested loops for sending out the pixel data.

 

At first glance it will appear that we are using the full 480 x 320 resolution.

However, if you look closely at how the index is determined you will see where the low resolution comes from.

image

 

Displaying LO RES Clara

 

So without further ado here is the Hello FPGA kit displaying the image:

 

image

 

Future Goals

 

I want to continue working with the LCD to see if I can achieve the following:

 

  • Full 480 x 320 resolution bitmaps
  • Create tile based graphics system
  • Create moving sprites and animations

 

Conclusion

 

The Hello FPGA kit is an impressive design platform that includes LCD and camera modules in addition to Arduino compatible connectors.

Its principal board has an SoC device combining an ARM core with FPGA fabric.  The possibilities with this platform are endless.

 

I had a lot of fun getting to know this product and look forward to exploring it further.

With that said I still think Microsemi needs to do a better job creating tutorials and perhaps instructional videos specifically targeting the Hello FPGA kit.

This will allow them to fully realize their goal in making this product accessible to beginners.

 

It will be interesting to see what the future has in store for this platform.

I look forward to seeing future developments from Microsemi and the design community.

Anonymous