Blog

In the balance.

In the last post I described the basic functional requirements for ezPixel along with the timing requirements needed to control WS2812B smart pixels. I also looked at specific FPGAs and how they compare with a goal of deciding which FPGA to proceed with. The FPGA is the most expensive and most important component on the board – it drives the cost, size and functionality of the board.

Here are some of the considerations that get put into the decision balance:

Part cost?

Ancillary parts required? If so, what are their costs?

Part package: EQFP vs. BGA

Physical size of the FPGA as it will impact size of the printed circuit board (PCB)

EQFP easier to route than BGA.

FPGA design tools.

Availability of the FPGA.

Can different FPGAs fit on the same footprint as the chosen part?

Is there something new/fun for me to learn?

At this point it was basically a decision between Spartan6 and MAX10 devices. Here are some pros/cons for each family:

MAX10 pros: They have some interesting features such as no external boot prom required and, in some parts, the ability to store two FPGA images and load the device from either one. Some devices also have on-board ADC which would be a new thing for me to work with inside an FPGA. Only one voltage regulator is required to power the chip.

MAX10 cons: These are relatively new parts and availability is in question. Will I be able to get parts when I want to manufacture some boards?

Spartan6 pros: Well established parts with good availability. Internal 6-input look-up table architecture is superior, in my opinion, to the older 4 input LUT that MAX10 uses.

Spartan6 cons: Can only use the older, and now unsupported, ISE tools to design with these parts. Requires external boot prom and two voltage regulators, increasing both cost and board real-estate.

In the balance, both are excellent part families and would be a good choice. But, I have to choose one and get out of the analysis phase and into the product design phase.

This raises secondary questions:

BGA parts are physically smaller so a PCB can be smaller in size.

On the one hand, BGA parts are more difficult to work with in board layout and can have higher assembly/manufacturing costs.

On the other hand, some manufacturing houses also add an upcharge for fine pitch components. The EQFP144 packages from both vendors are 0.5mm pin pitch and that would be qualify for a fine pitch up-charge. So, BGA is not necessarily that much different in assembly cost from EQFP.

On the other-other hand, I have never personally done a PCB layout with BGAs so this would be challenge and a chance to learn something new.

On the other-other-other hand, BGA parts would require having a contract manufacturer stuff the prototype boards versus me hand soldering EQFP parts. This adds a bit more to the prototyping costs although this isn’t necessarily a big concern.

MAX10 has some interesting attributes. Of particular interest to me was the fact that the devices can hold two FPGA design images in the onboard FLASH and can boot into either one. I started thinking about a different way to load an FPGA image onto the board. With Spartan6, Cyclone and Lattice parts, a special download cable connected to the board would be required to load a new FPGA image. This is just another thing to buy, maintain and occasionally be frustrated with.

However, a dual-boot scenario would allow me to put a custom “factory” load into one FPGA image that could be used to download a “user” image into the second image location in the device. This could be done with a simple USB UART chip which I planned to have on the board anyway. The FPGA could default to loading the ezPixel design (or a custom user design if desired). Two push buttons could then be used to re-load the FPGA with the factory image. The only time a download cable would be required would be during production test to load the factory image.

I’m liking this idea a LOT. This would make it very easy to change the FPGA design and load it into the board with a simple serial terminal on a host PC. No expensive download cable would be required. Hmmm……

Decision time!

Ultimately the cost difference between Spartan6 and MAX10 were not huge and either part family could accomplish the design goals. Both parts would allow migrating to larger parts if needed without changing the PCB.

I ultimately decided to go with the 10M08 for a number of reasons:

I believe I can make use of the dual boot capability to reduce cost to the end user.

I prefer Quartus tools to ISE – my personal preference. Both tools are offered for free but ISE is no longer being updated by Xilinx. The Spartan6 parts are not supported by the newer Vivado tools so I would be stuck using old tools. I can use the latest Quartus tools for the MAX10 family and will get the benefits associated with any tool upgrades.

The cost of a Spartan6 LX4 EQFP plus one extra regulator plus a serial boot prom is more than the cost of a 10M08 BGA, but the 10M08 has twice the resources. I can do more strings and more pixels in a 10M08 for less component cost.

I would have a chance to do a PCB layout with a BGA so I could learn something new.

Engineering is about making choices and design decisions. I’ve made a major decision on this project, but before going to the time and trouble of doing a board layout I thought I should do some more FPGA design prototyping to see what I could actually fit into the parts. Next up: A series of epic fails…