Hi all
A bit of background: I’m an amateur hardware hacker, and so far the closest I’ve got to high-speed digital is using the Wiznet W5100 ethernet IC on one of my boards (no - not the WIZ-whatever breakout board, but the actual chip on my own layout) - without any problems whatsoever. The highest frequencies on that board encountered were the 25MHz crystal and the ethernet TX/RX pairs (100Mbit ethernet having a fundamental frequency of ~33MHz, 10 meg being 20MHz using Manchester encoding). I did this on a four layer board. My strategy for this was to just keep everything high speed very short - the crystal as close as I could get to the W5100, and the ethernet magjack as close as I could possibly get to the W5100.
I’m mulling over an idea for a project that would involve using a Spartan-6 FPGA - probably an LX9 in a TQFP-144 package. I’ve not got as far yet as even thinking of a schematic, but I’m doing some background reading. As a rank amateur, one thing I’ve found slightly terrifying in Xilinx’s documentation is that the CCLK (configuration clock) from the FPGA to the platform flash (where the configuration is stored) must have a characteristic impedance of 50 ohms. They go on to describe a termination method using two 100R resistors (one to Vcc, the other to ground) coming off the side of the CCLK net and a few general bits of advice.
From what I’ve read so far, the characteristic impedance of a PCB trace depends largely on its width and how far its separated from the ground plane (and I read somewhere else that the power plane may be considered equivalent). I’ve read other documents which make it an extremely complex subject (making the subject of impedance control look very complex and very expensive to do). Furthermore, I’ve just been looking at the Digilent Spartan-3 starter kit board I have and its schematics to see what Digilent did. On their CCLK line they’ve put a 51 ohm resistor in series with the FPGA and the platform flash. The CCLK line itself seems to take a fairly circuitous route - it comes out the bottom of the FPGA on the side furthest from the platform flash, through the 51R resistor, then through a via into some internal layer before appearing through another via close to the platform flash - so they don’t do anything at all like what Xilinx suggests in their documentation.
Further reading shows that the highest CCLK frequency is 26MHz. A rough back-of-the-envelope calculation would estimate that the wavelength in copper at 26MHz would be on the order of 8 metres, and 10% of that being 80cm, so the trace would have to be absurdly long to be a transmission line. Or does the CCLK line turn into a transmission line because of the speed the edges rise and fall rather than its actual frequency? (Perhaps that’s why Digilent have put in a series resistor - to reduce the rise and fall times of the clock as it has to charge and discharge the parasitics…)
How critical is this? If I keep the trace short (say, less than 25mm between the FPGA’s CCLK pin and the platform flash’s CLK pin) - so long as it’s the right width and has the termination that Xilinx suggests - or do what Digilent has done with the 51 ohm resistor, am I likely to make a reliable circuit? Or do I have to start getting expensive engineering resources engaged at the PCB fab stage (which basically kills the project idea dead)? I note one PCB fabricator (PCB CART) has a check box for “impedance control”, but it doesn’t elaborate any more. (I am planning to use iTead’s service, since a few people have recommended it). Am I just making a mountain out of a molehill? If anyone has experience with making circuits using Xilinx FPGAs and the platform flash, I’m very interested to hear what you did.
I’m not intending to use the CCLK pin for anything after the FPGA has been configured, so the CCLK trace will have nothing except the platform flash on it. I’m intending to use a 4 layer board, with the inner layers being power and ground planes.
As a follow-up - talking of power planes - where you have multiple voltages (such as the core voltage for the FPGA and then the IO voltage for the FPGA), what’s a good practise for doing this if you don’t have enough layers to dedicate each voltage its own uninterrupted power plane?