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:
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.
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.
Opening the box reveals the LCD. A mini USB cable is also included.
The Hello FPGA kit is actually a stack of 3 boards.
On one side you'll find the camera module:
On the reverse side you'll see the LCD module:
Sandwiched in the middle you'll find the FPGA Board.
Microsemi has prepared 3 demos for the Hello FPGA Kit.
The demos are run through the Hello FPGA GUI.
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.
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.
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.
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.
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.
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.
Once you've created your SoC design you can use Libero to export the software drivers as shown below:
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.
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
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.
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.
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.
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:
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.
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.
So without further ado here is the Hello FPGA kit displaying the image:
I want to continue working with the LCD to see if I can achieve the following:
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.
Top Comments
Yes, they make is sound easy and you get a free board.
There is no such thing as free. Everything has a cost and a good road test is hard work.
DAB
Thanks for the review.
One thing is not clear to me - in the first demo how is the system generating and measuring the 15 and 40 MHz tone - I didn't think it had fast ADC and DAC on board.
MK
Your hunch is correct. The data that is input into the filter is generated internally.