FPGA + µC expansion card

Hello!
I am designing an FPGA expansion card.

I’m posting here to get some input / advice on some technical choices.

Here is the basic idea:

An FPGA dev board, that can communicate through USB / to a µC with some analog and digital outputs/inputs available . It should be rugged enough to not need special care with ESD. I want to have access to all the FPGA fabric (so no bootloader for the programming)

Here are some things that are mostly set:

FPGA :

ICE40LP8K-CM81 - there was a nice modified footprint used by the tinyFPGA BX to use it on 4 layers boards - it’s also one of the most powerful FPGAs usable with OSS-CAD-SUITE that are still small enough

FPGA programmer / µC:
RP2040 - programming the FPGA as an SPI slave, it’s the cheapest option and quite easy to implement. the remapping of the communications pins will make routing easier . It’s quite big, but it’s so cheap and easy to use that i don’t really see any alternative.

USB HUB:
USB2422 - it needs two ports to get the FPGA and the RP2040 connected - and this is the cheapest / smallest that i could find. It’s only a single transaction type, but it shouldn’t really matter with the small throughput that each device can have.

analog IOs:
SGTL5000XNLA3 - quite cheap, quite small, and as two inputs and two outputs

Power:
MPM38111 - couldn’t find something smaller that had two rails that could do 1.2 and 3.3V at a reasonable price - if you know of any, let me know!

digital IO connector:
USB -C - i will need to design a key to make it non-reversible - it adds a step for making a board, but at least breakouts are easy to find and it’s durable

analog IO connector:
3,5mm jack - one input and one output will go on it, the other two will be on the USB - C

Everything seems to fit and should be doable on a 4 layer board with only one side with components, and 0.2mm vias without the need to cap them.

I could maybe add capacitive buttons used through the RP2040, but it would add a level of difficulty in routing the bottom layer. I will see when the project will be a little more advanced.

Any input / changes that you think would be interesting is welcome.

3 Likes

this is awesome to see, would it fully fit into the expansion card footprint or be like the ethernet port and stick out?

Everything will fit. I may need to put one or two things on the bottom side of the PCB if i really have no space on the top , but i don’t want to have anything sticking out. That was one of the major constraints that i putted for myself, there is no use in making it a module if i need to swap it out every time i use it.

1 Like

Hello!
Here is an update on the project:
I can, it seems ,fit almost everything on the top (will most likely need to put the reset / usb boot/power buttons on the bottom)
However, i cant find a reference for a short body 3.5mm jack that is still in production , here is the only one that i could find

I did find the right usb-c short body

So, I will ditch the 3.5mm connector (more routing space, may be able to fit a nice RGB LED on the edge) and connect the analog IOs like the USB-C headsets to still have an easy way to connect a mic / audio output. it still leave 12 digital IOs (considering 2 ground and 2 3.3V to avoid magic smoke if i put something backwards)

I may have some space left after all the routing, so if you would find a particular type of sensor useful in such module, i will try to see if i can find one small / cheap enough.

Here is the current state of the board (it will be press-fitted with a custom 3D printed enclosure, so no mounting holes needed ) the big square is the size of the USB-C , i didn’t make a footprint for it yet.

3 Likes

Routing/signals update:
I sadly couldn’t fit all the signals of either the external IOs or the µC IOs on a single bank.
I could, however, manage the skew :

  • For the external IOs, it’s per IO bank (16 and 8mm)
  • for the µC it’s a global length of 23mm

It definitely isn’t the prettiest thing that i have done, and i am not sure about signal quality since my skews are made all over the place, and signals are on top of each other.I will try to stitch ground vias to help it at the end.

Here is how the bank are used for now:

1 Like

Hello!
I finished routing / reviewing and just put the order for the PCBs & components.
Here is the “finished” (v1.0) board:


when i will have made the schematic prettier / verified that the board mostly work i will publish it on a github as Open Source. I still need to figure out which license to use though.

Here are the new things:

  • an addressable LED was added - 587-1034-147F
  • an accelerometer was added - MC3479
  • a button to make a slide ON/OFF switch on the bottom of the board
  • the USB-C pinout was updated to include both line-in at the CC1/2 pins (shorted to ground using an audio accessory, so not viable for digital IOs) . The outputs are line outs.

Here are the non-optimal things that i prefer to live with than get a more expensive board/ stick out of the module:

  • a 3.3V rail goes under 6 digital IOs - that will limit their maximum usable speed
  • the lengths for the I2S is not tuned to the master clock - may not even be a problem, or will need some delay constraints for the FPGA
  • the FPGA doesn’t really have enough capacitors - i used feed-through caps to help with space (witch somewhat behave like multiple caps at high frequencies), but there is a chance that it wont be able to go too high in frequency / drive a lot of current.

In the end, i managed to fit everything on a single side, so it shouldn’t be that hard to make.

I ordered enough components for 3 boards (& 10 PCBs), so if i don’t fry any i would be able to send at least one if someone is interested.
The BOM & PCB cost was quite high (130€ BOM & 70€ PCBs) but it should lower quite a bit per board if there is enough people wanting to get one.

Here is a poll to know how many people would be interested:

  • I would like to buy one
  • I prefer to make one myself
  • I am not interested
0 voters
4 Likes

that is awesome!!

1 Like

@_H4
Looks great!
Let us know some use cases, this would help sales.

1 Like

Hello!
thank you for your reply.

It’s designed to be an easy dev board for an FPGA platform with, if needed, a µC co-processor .

FPGAs are only really useful for true real-time signal processing (in the ns) that can be deterministic (encryption, data switching…), or things that need a LOT of high speed / parallel / asynchronous IOs (ADCs, cameras…).

It basically serves as a bridge where you can transform however you like some input data really fast and in any format - some ethernet switch even use FPGAs (but bigger ones)
you can then do whatever you like as an output :

  • simple yes/ no with pattern recognition
  • filtered data from a noisy source
  • add effects / transforms to the input data
  • transfer commands to the right interface
  • encrypts data really fast
  • accurately timestamp sensitive data…

The biggest strength of FPGAs is that they can make complex transformations with way less latency than with a GPU/ CPU to get data to a usefull state to (most of the time) give it to something else to process further - here, a simple RP2040 µC, or through the direct USB connection.

I made it so that the simpler ideas can directly be developed with only this board - as an audio DSP with the analog IOs and as a raw data converter/ processing unit with the USB / µC connection.

The LED is there to add some visual info, while the accelerometer is there to be able to get some unknown / test data.

You could quite easily rig something up for a strange interface you want to convert if it’s low speed enough using a readily available USB-C breakout board - but a big part of use-cases would need a simple PCB design to have same-length traces and use CMS components for higher (MHz range) speed.

2 Likes

This is super impressive, and I’m amazed you got it all to fit on one side of the board.

3 Likes