30 Mar 2013: More auto-routing
Last month, an amateur's declaration of "success" was made in getting the auto-router to complete. Since then, attempts have been made to increase the track-to-track clearance distance (which failed), increase the VIA-to-track clearance distance (also failed). Eventually it was learned that this is just going to have to be a massively-densely-populated 6-layer PCB, and to put up with 4mil track-to-track clearances. Now, the auto-router consistently completes, relatively quickly as well (around 8 minutes). Optimisation however is still taking some considerable time.
Below are a couple of screen-shots. This one shows the inter-connect around the processor. DDR3 RAM is mostly at the top. GPIO, LCD, RS232 and I2C are down the left hand side. Ethernet signals are bottom left with a few going from the top left corner as well. Bottom left-middle is the SD/MMC signals; Bottom middle is NAND. JTAG is further round the corner (above bottom right). The centre is reserved for power; this area was done by Boundary Devices and has not significantly been altered, with the exception of increasing the width of the tracks to the pins. It is somewhat unbelievable that it has taken almost 2 solid months of experimentation with the Design Rules and the auto-router to get to this point.
This picture shows what's being sought all along: no unroutes! A request on the Debian-ARM Mailing list was made for an RS232 Interface: this can be seen approx bottom-left on the 3-pin connector (2 purple pins, one green). Just to the top-right of the connector can be seen an SOT23-5 (there is one underneath it as well). It's hard to make out (2 red squares, 2 yellow, 1 dark green and 1 light green). This is a pair of level-converters, one for each of the RS232 signals. The light-green is 5V; yellow is 3.3V. In short: the RS232 interface has been made safe to use without risk of blowing up the processor.
The EOMA-68 interface can be seen down the left-hand side. The iMX6 supports 10/100/1000 Ethernet, which explains why there are 4 sets of differential pairs going to the RG-MII Ethernet (a KSZ9021RN). A full third of this PCB is filled with Power Management components! The entire left-hand side, with the exception of the EOMA-68 interface, RS232 and Ethernet, is discrete components and power regulators. In any other PCB, such a tiny area - only 48 x 30mm - would hardly be considered significant. However in this case it's quite a lot of power (i.e. heat) in quite a small space: we shall have to see how it works out. Processor and RAM are to the middle-right. Thanks to Boundary Devices, there are 4 RAM ICs: two on TOP and two directly underneath. Each is a x16 RAM chip so there is the full 64-bit memory width available (the iMX6 has two 32-bit DDR3 RAM interfaces).
Jammed together from top to bottom along the right-hand edge is: a 10-pin JTAG interface (2 pins set to GND hence the reason why their pads are marked in green); a Micro-USB (top right); underneath that (middle right) is the Micro-SD card. Partly underneath the Micro-SD interface on the BOTTOM side is a TSOP-48 NAND Flash chip. On top of it is a mixture of components, including the RTC Crystal, a 5V level-shifter for the I2C HDMI interface, the ESD protection for the HDMI lines, as well as the NAND Flash Power Capacitors. Finally, in the bottom right corner is the Amphenol mid-mount Micro-HDMI interface.
Overall, there's hardly a spot on the PCB which isn't used! The layout is however very very similar to the Allwinner A10 PCB, and, as the connectors are identical, the exact same casework from Litkconn can be used. The next phase which has begun is to double-check that the Power Planes (Layer 4) have not been "eaten into" by vias. This phase could not begin until the auto-router had had a chance to create all the necessary Vias. Ordinarily, power planes are made to be quite large, such that the creation of thermal spokes would not be an issue. However, because of the tiny space and also the reduced number of layers (only 6), the power planes have had to be made very small. Already, 5 of them have had to be removed and replaced with tracks on Layer 4: further inspection will be needed to analyse the rest. The phase after that is to run the Flood-fill, hatching and then create stitching Vias. The phase after that will be to create Gerber files and get a PCB made!
All files including datasheets, PCB schematics and PCB Layout files are available here.
29 Mar 2013: Etnaviv 3D GPU Reverse-Engineering Project
Etnaviv is the reverse-engineering project for the iMX6 3D GPU. Providing full Mesa 3D accelerated graphics, the project is aiming for Gallium 3D compliance. The code presently released is working and provides accelerated graphics. Further work is needed to provide optimisation.
The significance of this work being done by this tiny team cannot be underestimated: their work brings the Freescale iMX6 processor close to being a leading candidate for FSF-Endorseable Products. It is only the VPU which is letting the iMX6 down at the moment.
27 Feb 2013: iMX6 EOMA-68 CPU Card auto-routing success
The auto-router has been successfully convinced to do its job, and, amazingly, the actual route completion now only takes six minutes (running under QEMU). Optimisation however takes a further 15 minutes! This is still much better than 45 minutes during earlier iterations: much of the time-saving can be attributed to having got the specific order of every single CPU pin correct, as well as limiting the maximum length permitted for each group of pins. Also, the clearance validation rules have been checked, and, with some minor niggles in the DDR3 RAM area which needed very fine adjustment, these now pass
As an illustration of what an EOMA-68 CPU Card would look like, the PCB has been overlaid onto a PCMCIA card, shown here: It can be seen that, actually, the PCB layout has accidentally been made smaller than is strictly needed! The Litkconn PCMCIA connector it turns out is only 6mm deep, whereas it was previously believed to be around 12mm. If necessary, then, this gives an opportunity to use Cardbus (with its gold-coloured earthing shield covering the connector). After showing the size of the PCB, here is a close-up version where the individual tracks can be made out:
22 Feb 2013: iMX6 EOMA-68 CPU Card progress: 6 layer board
Brief update: with near relentless patience, continuous adjustment and the addition and manual ordering of every single connection to the IMX6 processor, the auto-router has been coaxed, kicking and screaming, into making the connections. The results are a stunningly dense morass of connections. The next phase will be to go over the board, checking that it fulfils design rules and passes validation tests. Track-to-track clearances must be 4mil (6mil is preferred, especially under the iMX6).
5 Feb 2013: iMX6 EOMA-68 CPU Card progress: 6 layer board
Following on from the provision of schematics by Boundary Devices, work on the iMX6 EOMA-68 CPU Card has steadily progressed. A series of 5 iterations was required to bring the PCB layout file into line with the schematics. Each iteration took more information from each file to create a library and to improve the other file. Example: the schematics was an earlier revision of the PCB file, so there were parts entirely missing. This therefore required a push from the PCB file to the schematics, but the PCB file was missing part values (10K, 22uF etc.). However, the size of parts (0402, 0603 etc.) was entirely different and the PCB file considered authoritative.
Once synchronisation was achieved, layout could continue, and the EOMA-68 parts sourced during the development of the A10 board could be added: Amphenol's Mid-mount Micro HDMI D, Litkconn's Mid-mount Micro-USB and so on. Extraneous parts were removed, and the layout completed. Design rules were added which helped the auto-router to complete all tracks.
After it had been shown that parts would definitely fit, the issue of the Sabre Lite PCB being 8 layers had to be addressed. 8 layers isn't okay not because it's 8 layers, but because the board was designed to be 1.5mm in height. 1.5mm is known to be too much, due to clearance issues in PCMCIA cases: there is only around 4.7 to 4.8mm from top to bottom. 2mm TOP surface components plus a 1.2mm PCB leaves 1.5mm clearance for BOTTOM components, which is just about acceptable. So, the two power planes of the Sabre Lite PCB had to be combined into one, and one of the GND planes removed. To say that this proved to be tricky would be an understatement. However, with enough persistence, and a lot of luck, only one power plane needed to be added to a SIG layer (VDDSOC_CAP), and it already held a power plane already (VDDSOC_CAPS).
The final task before either handing the files over to an experienced CAD/CAM engineer or going over every inch of the design with a fine tooth comb is to reduce the height of all components on BOTTOM, by either replacing them with alternatives or moving them to TOP. Mostly this is the Inductors, PMICs and the 22uF to 47uF capacitors, which are up to 2mm in height.
As can be seen from the image below, which is only 73 x 46mm, space is staggeringly tight. The total length of copper track used in that small a space is over 10 metres. By leaving the CPU and DDR3 RAM completely alone and not modifying any of the DRAM traces, it's been just about possible to arrange the new PCB layout around those 5 main ICs. However, there's very little space at the bottom, as the CPU is hard up against the edge of the PCB. Normally, BGA routing is diagonally out: the auto-router is having an extremely hard time, but by asking it - approximately - to auto-route the signals from the centre of the CPU outwards, it's been possible to get it to fully complete the CPU routing about 50% of the time, with each run taking approximately 30 minutes. Experimental reorganisation of the surrounding components has also helped.
Files are available here.
27 Jan 2013: Work on iMX6 EOMA-68 CPU Card started
Many thanks to Boundary Devices for providing schematics and PCB files, which has allowed an iMX6 EOMA-68 CPU Card to begin. By using the SABRE LITE PCB Layout and leaving the major components (DDR3, CPU and PMICs) completely alone, this preliminary draft of size 73mm x 46mm shows that it will be possible to fit all the components in place. The USB-OTG connector (bottom right) will be replaced with the Litkconn Mid-Mount connector, and the HDMI Type C replaced with an Amphenol Micro D Mid-Mount.
All required parts have already been entered into libraries (for the other CPU Card, the A10); samples negotiated with suppliers and so on. Creation of the iMX6 CPU Card should therefore be extremely rapid.