The Architect Sketch.

OldDogBlog post 8.

OK, that one showed my age as it is an obscure Monty Python TV show reference. This post will expand on the board architecture and discuss the preliminary BOM used to estimate the cost-of-goods sold (COGS).

In addition to the Intel MAX10 10M08 FPGA used on ezPixel, some other chips will be required to build a complete product. First up is a USB/UART chip to connect to a host PC. This can be used to send pixel content, board level debug, production test, and FPGA image reprogramming, among other things.

On previous projects I’ve used USB/serial chips from FTDI as they are fairly ubiquitous and they have worked well for me many times over the years. However, FTDI corporately has done some things I consider to be questionable in recent years regarding their host PC drivers and “bricking” devices that they decree to be using counterfeit FTDI devices. This isn’t an issue I want to debate now, but the practice doesn’t sit well with me. FTDI devices also tend to be more expensive than some other choices. For these reasons I decided to see what else was available.

After some researching I settled on the CP2102N chip from Silicon Labs. This device is physically small, inexpensive and has the ability to run at up to 3 Mbps serial rate. This is useful if I want to send pixel values via USB/serial instead of SPI and want to maintain a reasonable refresh rate to the pixels. This chip only requires some capacitors and the USB connector to drop right into a design. Nice.

The MAX10 FPGA has an internal oscillator that could be used to drive the circuits that connect to the pixels. However, a quick look at the MAX10 data sheet version 2016.10.31 page 28 shows the frequency to have a wide tolerance, swinging from 55 – 116 MHz.. This would make it very difficult to create strict, repeatable timing to drive the pixels. For this reason I decided to add a better oscillator external to the MAX10.

After some sleuthing I settled on the ASEMB-50.000MHZ-LC-T from Abracon. It is inexpensive, readily available and can be purchased in many different frequencies. I chose 50 MHz as a starting point somewhat arbitrarily. The PLLs inside the MAX10 can be used to generate higher/lower frequencies quite easily. I may change the value before going into production.

My intent is to power ezPixel from +5V USB power or an external +5V supply. The MAX10 device requires a single +3.3V supply so I will need a DC-DC converter. It seems that there are more DC-DC converters to choose from than grains of sand on a beach. I could easily spend days trying to find the absolute best price with multiple second source options etc. Or, I could decide relatively quickly and move onto other things. Refer back to post #1 regarding paralysis through analysis. I doubt that I will ever sell enough ezPixels to justify saving a few pennies per board.

I decided to use a linear regulator as they require few external components and are therefore easier to layout on the PCB. My past experiences are that they just work with minimal effort. I chose the  LD1117S33CTR from STMicroelectronics and others. A quick search indicates that they are readily available, inexpensive, and there are numerous second sources that will fit on the same footprint. Analysis done.

WS2812B smart pixels require 5V logic levels for the data interface. Yes, I have read of folks who have had success driving them with 3.3V logic levels. I don’t consider this to be good product design practice. The manufacturer publishes the specs for a reason and my best chance to get repeatable, reliable and robust product designs is to follow the manufacturer recommendations. For this reason I’ve added logic level translators to the design. These will convert the +3.3V FPGA outputs to the +5V levels required by the pixels.

I chose 74LVC8T245PW from Nexperia based on ready availability and low cost. I included enough translators to drive 32 separate pixel strings. Each translator chip handles eight strings, so four chips total. These chips are bi-directional and can also be configured to take a 5V input and convert it to a 3.3V output that connects to an FPGA input pin. This could be useful for users creating custom FPGA designs to replace the factory ezPixel design.

I’ll need some push button switches to allow me to boot the factory load. I aimed for small and inexpensive. They won’t be used much and therefore don’t need to be rated for millions of actuation cycles.

No board is complete without a few blinky lights. Again, there are so many to choose from that I made a quick decision based on general availability and cost.

Last on the list is connectors — the bane of many a product designer’s existence. Connectors are expensive. Connectors that are exactly what you want can be hard, if not impossible, to find. Sometimes you are so lucky that the perfect connector exists only to be out-of-stock for 16+ weeks.

I wanted as few connectors as possible. 

One easy decision was to get rid of connectors for pixel strings. I’m planning on simply putting mounting holes with 0.1″ spacing along the edges of the board. Connect to them as necessary with discrete wires or solder in 0.1″ headers of whatever gender you need. The holes will be designed to accept press-fit header pins making it easier to install them, although I recommend soldering the header anyway.

Instead of burdening every board with the cost of headers I took the cost away completely. Besides, what are the odds that I would pick the correct header gender for your application? Better that you decide to install them or not.

The only header I will populate is a 3-pin surface mount header that is used to select +5V USB power or external +5V power. A jumper will allow you to pick one or the other.

I will also need a USB connector — micro-A for now. Most folks have this type of cable to charge their cell phones and the micro-A is more durable than the mini-B size in addition to being physically smaller. This connector type tends not to be easily second sourced as many manufacturers make the body size, pinout and structural tab locations unique. So, fingers crossed, I picked 10118193-0001LF from Amphenol FCI primarily due to low cost and ready availability from both Mouser and Digi-Key.

Figure 1 shows a simple block diagram of the ezPixel board.

Figure 1: ezPixel Block Diagram.

Table 1 shows an estimated BOM with price breakdown for different numbers of units:







                                              Table 1: Estimated Component Costs.

This represents parts cost only and doesn’t include the cost of the bare PCB, assembling the parts onto the PCB, testing the assembled board, then shipping it to a customer. There are also additional overhead costs to consider, such as setting up and maintaining a website, advertising etc. Some parts are listed as coming from a “Distributor” named MacroFab. These are actually “house parts” from MacroFab, the company that will fab and stuff the prototype boards. House parts can be had at reduced cost from MacroFab and they keep a supply in stock. I will discuss the MacroFab decision in a future post.

I’ve worked hard at keeping component costs low and avoiding feature creep. This is enough of a baseline to allow me to start the schematic design.

Next up: OrCad, Kicad, Eagle, lizard, Spock…


Tom Burke