Recently, the Raspberry Pi Pico was launched by the Raspberry Pi Foundation, featuring two Programmable I/O (PIO) blocks. These blocks consist of multiple state machines designed for efficient, high-speed I/O control. As a result, the Pico is capable of handling more complex interfaces through bit-banging, even those that are not natively supported. I came across this article by Luke Wren, where he demonstrates how to implement DVI bit-banging on the Pico. Inspired by his work, I decided to create my own PCB to facilitate this functionality, and I’d like to walk you through the differential pair routing process involved.
Designing the Schematic
Following Luke’s approach, I began by designing the schematic in Altium Designer, starting with the necessary footprints for the Pico and other components. While the basic schematic design process is widely documented, I will briefly cover the essential steps. I created the Pico’s pinout and defined the footprint using castellated pads for ease of integration.
Next, I added the appropriate connections for the DVI signals: three data signals and the clock signal. These are all differential signals, so I applied the suffixes “_N” and “_P” to each signal and used the differential pair symbol to ensure proper routing.
To incorporate the differential pair symbol, simply locate it in the toolbox and add it to the corresponding signal line in the schematic.
After that, I added the HDMI connector and made the necessary connections for the differential signals, incorporating coupling resistors to maintain signal integrity. Additionally, I included a pin header to provide easy access to the Pico’s UART pins for debugging purposes.
At this point, I moved on to transferring these components onto the PCB layout in Altium Designer.
In the PCB layout stage, it is critical to arrange the components logically to minimize track lengths and avoid unnecessary crossovers. This strategy streamlines the routing process, ensuring a cleaner and more efficient design.
To further optimize the design, I aimed to minimize the overall PCB area. The goal was not to simply replicate the full length of the Raspberry Pi Pico board, but to allocate space solely for the routed signals. This reduces both size and cost.
Differential Pair Routing
Before diving into the actual PCB routing, it is essential to define design rules for the differential traces. These rules ensure that the traces meet the desired impedance characteristics. To determine the correct parameters, I used the specifications from my PCB manufacturer’s calculator. This gave me the appropriate trace width and separation to achieve the required differential impedance. For this design, the HDMI TMDS standard specifies a differential impedance of 100 Ohms, and a single-ended impedance of 50 Ohms. After experimenting with the calculator, I found that a trace separation of 6mm was optimal, which is suitable for our 2-layer PCB stackup. This results in an edge-coupled surface microstrip configuration, where the differential signals run on the top layer and the ground plane is placed on the bottom layer.
Next, I entered the values for track width and separation into the Design Rules in Altium Designer to ensure the routing followed these specifications.
Now, the routing process begins! Using the “Interactive Differential Routing” tool in Altium Designer, I was able to route the differential signals while adhering to the established design rules. As long as the schematic was set up correctly, Altium would automatically recognize the differential pairs and ensure they remained coupled, while respecting all design constraints (e.g., minimum trace spacing).
Repeating this process for the remaining signals resulted in a fully routed PCB.
The PCB is nearly complete, with most of the signals routed on the top layer. The only major connection left is the ground (GND), which will be managed using a ground plane on the bottom layer. This design approach—placing signals on the top layer and utilizing a GND/PWR plane on the bottom layer—simplifies the routing process and helps maintain signal integrity across the PCB. To create the ground plane, I used a polygon pour mapped to the board’s outline.
And there you have it: our PCB with differential traces routed and ready for production! By utilizing the 3D view in Altium, we can visualize the final product, showcasing a clean and effective design (Note: The Pico itself is not part of this design, as it was not included in the custom PCB).
If you have any questions about PCB design or PCBA, please feel free to contact me at info@wellcircuits.com.