At the start of 2021. NLnet decided to sponsor development of modular FPGA board ULX4M (Successor of EMARD ULX3S).
At the start I first needed to completly disassemble ULX3S.
I did that in a way of spliting into modules.
Once I had everything separated I combined the parts from the same module.
After combining the parts I checked what parts could be smaller, and replaced them with a smaller part.
Once I was satisfied with the size I squeezed the parts together, to have a little space, but still be nice and tight.
All 3 power supply modules are then sorted the same way. And rounded with lines.
Now PS units are looking like a puzzle…
Supply Chain Disruptions
While first plan was to just connect power supply and LEDS, chip shortages are teaching us to do more things at once, as parts are really hard to get. Just for a insight how hard, the current wait time for lattice 85F is about 50 weeks.
CM4 IO offeres a lot of peripherals, and we also wanted to implement some new changes to ULX3S pinout.
First thing we wanted was to change big TSOP-54 to a BGA version. BGA versions are a bit more expensive, but we will get more room.
Initial routing is done, but I will need to take more time into the next version to make it more elegant.
Also changing to a BGA gives us more confidence to experiment with a DDR3 chip later. It would also be good if in the next version I did length match, as in this version I did not do that. I did check teh length and it looked fine for the SDRAM.
Next thing we wanted was to connect at least one HDMI port to ECP5 true differential pins, as on ULX3S that is not the case. So we connected previously connected pins to HDMI1 port, and routed new true differential pins to HDMI0 port. True differential pins migh give us bit higher resolutions as we might be able to use DDR2 primitives.
Next thing was to connect JTAG, and I decided to have it connected onto the board connector, and on pi GPIO pins so we can use it later from the HAT. After that the USB lines are connected. If working whis would give us the possibility to use USB bootloader, so users wouldn't need an external programmer or pi HAT.
CM4 IO USB pair is connected to MUX which is switching between micro USB connector and USB HUB PHY. So we can try to use both with just setting USB_ID pin HIGH/LOW – or it will be set high when we apply external power to micro USB connector(if connected to PC).
For v.0.0.1 I decided to stay on a 4 layer board, as I could still fit most of the things, and it would be a bit cheaper. Still I didn't expect perfect results and we will still see if the high speed signals will work.
With 4 layers it was not as easy to connect all I wanted, but I managed to connect most of it. Most of the CM4 free GPIO pins are still not connected, which will be needed for pi HAT, and we still have two DSI connectors that are not connected, but once we test two that are connected we can switch to a 6 layer board and route those two… a 6 layer board will be needed, as it is already visible that the ground plane under some pins (specialy high speed pins) is not perfect.
Connecting SDCARD was easy, but on the next version we want those connections to be available on GPIO – so we can access them with ESP32 module that will be on the HAT, as on ULX3S ESP32 has proven to be quite useful…
On ULX3S v3.1.6. we already have some serdespins out, but on ULX4M I managed to get all pins out, and connected them to capacitors. After that I routed one SERDES pair to top connector where PCIe pins are located on CM4 board. After that I did a length match on those lines. Rest of SERDES pins are directly connected to the ethernet coil. CM4 board has on board PHY that is providing Gb ethernet, but in this version we leved place for experiments with SERDES gatewares(we still do not know if something like that is possible or not, but worths a try).
For DSI interfaces I have just used one differential pair. I2C is also connected if we will need it to talk to camera or display…
Board was ordered from JLCPCB and it arrived quickly
Quality was as good as expected.
Stencil is also good, so we are good to go.
I did board assembly in Intergalaktik. At some point I found 45SUM part available, so I ordered 5 pcs. to have on stock for SERDES experimenting versions.
When it comes to assembly the Interactive HTML BOM plug-in for KiCad is an amazing helping tool.
In a HW assembly you are always missing at least one part even if you check multiple times.
When I was ordering parts for ULX4M I was sure I had some 0402 resitors, but at the time of the assembly I could not find them. Luckily 0603 could be placed on those connections it just won't look perfect.
I discovered one more thing that the oscilators I ordered are bigger than the ones i wanted, but I can do some dead bug oscilator on this version.
It turns out that I can flip dead bug oscilator on the right side, not the best way to connect a crucial part on the board, but we will see if it will work as expected…
We first need to apply paste, and we are using a stencil for that.
The bottom layer is done first, as you do not want to rebake FPGA if it is not needed. The bottom layer will give us info if the power supplies are working corectly.
Once paste is applyed I used an Interactive HTML BOM to place parts and after placement I baked the board in my soldering oven. If someone is making this board at home I really recomend using a stencil, it would be realy easy to place other parts, but this connector is not easy to solder by hand. It is possible as I already did it on the first prototype, but it is just much easier with a stencil.
The bottom side is done, and I connected the bottom assembled board to a CM4 IO board to check the connector and the power supply.
Power supplies are showing good voltages on FPGA pins(3.3V, 2.5V, 1.1V).
The board does not slip into the connector perfectly – it is probably missing 1mm. But I can make it fit into the connector by slightly bending the CM4 IO board. Once it sits there it stays in place. So in the next version I need to move those connectors 1mm away from each other.
Top side was done quicker, it has less parts, most of them are just HDMI capacitors.
Placing ECP5 and SDRAM was not a problem.
List of wishes
We already have a list of wishes.
Maybe the most important one is to add HAT to the CM4 IO.
Users that are using ULX3S really want the possibility of using a ESP32 as on a ULX3S.
So we will need to connect all pins to the GPIO and connect the SDCARD to those pins(and probably some more) to get it as on ULX3S.
On ULX3S lots of samples are already using ESP32 for example to load games with the ESP32 OSD menu that is overlaying on top of the FPGA picture…
We did the first version with care, so lot of things are already working, but still we will need more adjustments, then we will move those chages to milestone 4
Chip shortages, for now better to invest time into smaller boards.
HW companies and makers and probably others are currently facing tough issues, and that is the global chip shortages.
I will not go into depth on that field as it is already written multiple times, but I will just say that if we ordered lattice 85F chips today, soonest they can arrive is 50 weeks.
And that is almost a year of waiting for the chips to arrive.
And still no one will guarantee that the prices will not rise in that time. Another problem is that you cannot just order the chips and wait you need to pay for them, then pay more if the prices rise, and that is currently quite an issue.
Guided by that we invested double effort in first revision of modular board and made it compatible with already existing CM4 IO board.
CM4 IO boards are everywhere, and there is also a nice set of opensource boards, so instead of doing one more CM4 IO board we will just use as much as we can from already available boards on the market.
We have almost all and more peripherals on the CM4 IO board, plan is to reuse the CM4 IO board, and add missing peripherals to the HAT board..
The HAT board will need to have two USB connectors for connecting PS2 and USB keyboards, joysticks, mouse.
Would be great if we get simple a VGA on the HAT, as VGA connector is always useful to have.
I already wrote about ESP32 on HAT
As we do not have any buttons on ULX4M we need to place some of them onto the HAT board.
LEDS are always useful to have.
Maybe also simple ethernet PHY but we will first see if we can get onboard or the PCIe version working.
POE would be super useful
We could probably have one HDMI input
Would be cool if we do it respecting the CM4 board, so that users with a CM4 can also use HAT (or at least some parts of it)
DDR3 version of ULX4M is needed at some point
If SERDES version of ethernet is not possible we need to consider having a Gb ethernet chip on ULX4M board, but we also need to be careful about that as adding just one chip can prolong production by quite a long time.
Video output with usage of SDRAM
Tested and working
JTAG – on board connector
FLASH – on board flash
2 x HDMI output (one true differential – so we can try better resolutions)
USB bootloader – TinyBootloader – tnt will help us get DFU bootloader
64Mb SDRAM (tested with memtest)
SD CARD (tested with Next186)
Connected but not tested:
MIPI DSI display
MIPI DSI camera
USB HUB chip
Ethernet (we have SERDES pins connected to the connector)
I already contacted CrowdSupply and send all info needed to open ULX4M preview page. So we can check what is the interest on this board, and maybe get other valuable feedback. They will check, but they already love the board form factor.
•Adding high speed peripherals to the main board - PCIe connector is a great high speed periferal for experiments
•ULX4M repo cleanup - current repo is cloned from ULX3S, and all work in done on top of it, so it needs a good cleaning process so it becomes useful to others…
Fix for 3.3V out
discord user Philpax has answered why having a small board and a carrier board is a good idea
The board is a standard, which means there are multiple carrier boards
In the general case, same thing, just maybe not as many
By: Goran Mahovlić
This project is funded by NLnet https://nlnet.nl/project/ULX3M/