I've made a lot of circuit boards for clients and my own company. All of those boards were interesting but there was always some motivation to sell them. I've decided to just make a board that I want to make. I'm going to document the process on Github and Youtube. This is all relatively new to me but I think there could be some benefit for everyone.
The board will look like a large portable console it will have a 7 inch LCD capacitive touch display along with joystick inputs. WIFI, MicroSD, USB Type C port, etc... There will be a lot of expansion connectors on the back. In a future design I'll get away from the picozed board and design in the Zynq chip directly on the board but for this first version I can save a lot of headache by just using the Picozed board.
My hope is that this board or subcircuits can be used for other peoples projects including things like homemade oscilloscopes that can capture > GHz waveforms and custom game consoles to name a few
I worked through a second and third video and then I realized that the PicoZed board didn't have enough pins for what I wanted. I started designing my own Zynq carrier board from the ground up... This was something I didn't want to do. I have a few other projects for work and I wanted this to be fun quick project so I was becoming dissuaded until I saw this:
I spent a day reviewing it and then was back on track with the carrier board. Now with an open source design and a team supporting it.
I still had to make trade offs regarding the number of connectors but I think I ended up with something I will be happy with. Well at least I'll have a lot of HDL and kernel work to do to get this thing up and running.
I was watching a Spacex launch and saw that they played some electronic music when there was nothing particularly interesting going on it inspired me. I was about to do a small layout for a client of mine when I had the idea of capturing a frame every second of my layout. Then reducing it down so that 1 minute equals 1 hour. Partly because I thought it was cool and partly because I wanted to show them how long a layout took.
I put these two ideas together and came up with this video. It took roughly 28 hours of pure layout. I found an artist who let me put his music in the video.
I am a little concerned about seizures. There are some flashing images.
I would have been done sooner except my son was born right in the middle of it and you wouldn't believe how much energy a small 10 pound little boy takes up!
It's been a month and I've had a chance to finish this off.
I plan to add more instructional videos about different aspects of the design, specifically about
USB Type C
4-Cell Li-Po battery manager
FMC Layout with signal swapping and length tunning
My next video was going to talk about pin planning, and then I started doing that... Before I started working on the project I naively figured that the Picozed would have more than enough processor IO to support the following peripherals:
Not a chance!
I opened up Vivado and selected the chip on the for the Picozed board, created a block diagram and dropped in a Zynq block on the page. When you open up that Zynq block you get this neat interface:
It shows how the processor is connected to the outside world as well as to the FPGA.
When you select the 'Peripheral I/O Pins' you get this:
In order to configure the processor to use a specific peripheral you just need to highlight it.
As an example the 'SD1' is selected on pins: 10 - 15, this will be used for the EMMC or SD card. If those physical pins don't work for your physical design, you can use the 'SD1' on pins: 22-27 but if you do you won't have access to 'Enet0' (Ethernet) so to use this you will need to make tradeoffs.
This information along with a lot of other configuration data is used to write the "Device Tree Source" for the Linux kernel, which configures the kernel to use those peripherals.
Unfortunately the Picozed board uses the Ethernet so if you don't want to use the Ethernet you are out of luck.
I thought about it for a while. Should I drop the WIFI in favor of the Ethernet. I ended up answering no to this. I think it would be more convenient for the user to have WIFI so I'm going to drop Ethernet and use 'SD0' for WIFI. I was thinking about a board mounted USB WIFI chip but they are hard to find.
I really want to have both the WIFI and SDIO. I'm hoping I can do this with a multiplexer or a 'chip select' but I don't know just yet. If I can get both the WIFI and SD card support I'll be very happy.
Either way the only way to accomplish this is to capture the entire Zynq chip on Enigma itself instead of using the Picozed connectors. This may not be that hard because the reference design is available and it's already in Altium so the process of adding a routed Zynq and DDR3 memory to my board may just be a matter of dragging and dropping it into my design and layout. It's not trivial but it's far from starting from zero.
Unfortunately this will drive up the price of the board! I was hoping I could get away with a 6 layer board but I think at minimum I'll need an 8-layer board to accomplish the routing of the DDR3 and FPGA signals. Not to mention the chip by itself is $209 where the Picozed module is $250!
The project is being built on the back of a lot of older projects so throughout the build process there will be parts of the design that will just appear like:
The connector configuration for both the high speed and Arduino header expansion port.
Picozed Carrier Connector.
SD Card Slot.
USB 2.0 Connector and ESD.
An (untested) USB Type C connector and support with Display Port functionality.
A (partially tested) multi-cell Lithium ion battery manager.
I'm still working through part selection for the following:
WIFI/Bluetooth: I like the SDIO solution (For WIFI). It seems like the throughput can be around 50MB/s with deterministic timing as apposed to a USB based solution. It's important that the driver is open source as well. I've found that TI has some SDIO based drivers that look promising but I haven't solidified on a part yet.
Audio: I'm planning on using some well documented chip used in other open source projects.
USB Type C Connector Interface: I have a TI based design that I've been working on for one of my other in house projects. This should allow the user to charge up the board using a standard USB Type C hub/Power Cable. (I love the idea of one power cord for all devices). The Zynq chip doesn't have built in USB 3.0 support so I'm planning on just using USB 2.0 as well as the 'alternate mode' and routing out 'Display Port' through the Type C connector.
3 Cell LIPO battery manager: I've designed a board that has this battery charger on it but made a fatal design flaw. I'm hoping I can nail it on this board.
I'll talk more about the different components as I start working on them.
If I can bear hearing my own voice I should get the first video up soon.