[Credit where credit is due]
Thanks to John Piliounis (firstname.lastname@example.org) for pointing out a mistake in one of my PCIe diagrams!
First, what’s PCI Express?
PCI Express is a standard connector between your motherboard and various PC addons, such as graphics cards and Wi-Fi cards.
It’s a complex high-performance serial link. It’s also very robust and able to handle abuse from consumers building their own PCs.
Inside a desktop, they look like this:
And the cards themselves look like this:
As you may have noticed, the card-edge connector comes in various lengths, but they’re all interchangeable. You can always plug a shorter card into a longer slot, and with the right adapter you can plug a longer card into a shorter slot. The extra connections are simply not connected. PCI Express is designed to be flexible that way.
The sizes are 1x, 4x, 8x, and 16x.
In laptops, ‘mini-PCIe’ cards are used. It’s the same basic connection, but in a tighter package:
Newer laptops and small PCs use a newer slot called ‘M.2’ which is even tighter. (I don’t have a photo and I don’t want to steal one from somewhere).
PCI Express Risers
Here’s a PCIe riser:
This allows you to offset your PCIe cards from the motherboard by a short distance. This is useful for components that generate a lot of heat, like graphics cards. If your CPU and GPU are both generating a lot of heat, it’s a valid cooling strategy to move them to opposite sides of the case to increase effective airflow. These cables aren’t very long, they aren’t very flexible, but they provide high-quality electrical routing, ensuring that your graphics card isn’t bottlenecked by a bad connection to the CPU.
PCI Express Extenders
A few years ago, it became massively profitable to mine cryptocurrencies on GPUs. Tons of people who had never built a computer before jumped into the market, buying PC parts specifically to build a PC containing multiple GPUs. Someone realized that for PCIe 1x, you don’t need many wires. In fact, the USB 3.0 cables coming on the market had enough wires, in exactly the right configuration needed. Thusly, eBay is flooded with PCIe extenders like this:
Now, for high-speed signal busses like PCIe, every connector and circuit board along the way has the potential to add distortion to the signal. Because cryptocurrency mining doesn’t require lots of data transfer between the CPU and the GPU (barely any, in fact), this extension can be cheaply made, and barely meet the requirements to pass data at the slowest speed.
A De-Facto Standard
Curiously, all the eBay/AliExpress PCIe-extenders I’ve tried use the same pinout on the USB 3.0 cable. There’s really no reason for it, but it’s a cool coincidence. It means you can rely on it enough to (almost) blindly mix & match. Does this mean we’ll see actual PCIe devices start to use the USB 3.0 connector rather than a PCIe edge connector? Ehh… seems unlikely. But it opens an interesting avenue for hobbyists. If you can make your design talk PCIe, then you can just add a standard USB 3.0 jack and use this extender as an adapter to the actual PCIe slot.
The Actual Pinout
So, let’s set aside the difficulties in making a design that can communicate over PCIe. How would we go about adding a USB 3.0 connector to our design? Here’s the pinout of PCIe 1x:
(The RX, TX, and REFCLK lines are actually labeled positive and negative, I.E. the lines are actually named “REFCLK+” and “REFCLK- “, but they are interchangeable, so it doesn’t matter).
Here I’ve connected the other end of the USB 3.0 cable to a standard thru-hole USB 3.0 jack:
And here’s the pinout of the lines as they would appear on that jack (top view):
I want to see if it’s possible to connect an FPGA to PCIe with this kind of adapter. FPGAs that support PCIe typically expose the required high-speed input/output lines over a difficult-to-use “FMC” connector:
$14 each!!! Expensive…
The design would be simple, though:
(I may need capacitors on the TX lines, however. Every PCIe card seems to have them, and we’re already stretching the limits of PCIe here, so I should probably add them).