For my current project, a backplane bus, I need to distribute a shared clock signal to all participants on the bus. I don’t want to impose any rules on the topology of the bus and the number of participants and bus length (as in length of the wires) is variable. This means that I have to assume that there will be quite a few reflections. This is no problem for the data lines as they will only be read out once they have stabilised, but the signal to read or write is transmitted as a clock and reflections there can be messy.
Today I would like to present a little tutorial how to program a CPLD (in this case a Xilinx XC9572XL) using Ubuntu 12.4 LTS (64 bit) and the Bus Pirate v3. All the information needed to achieve this is already out there, but not conveniently boiled down to a tutorial. At least I did not find one. So here we go:
The first thing you will need to program Xilinx CPLDs, is Xilinx’s ISE development environment. Fortunately there is a version for Linux, but unfortunately it took a few tricks to make it work on my system. I cannot guarantee that any of this will be necessary or even advisable for you since it might depend on your flavour of Linux and version of ISE, but it worked for me.
Now that I have a proper power supply, I can start building proper lab equipment and the first thing I set out to build was a Time to Digital Converter (TDC). Well, it’s really just a stop watch with microsecond resolution, but TDC sounds much fancier. 😉
And here it is:
Now, how does this thing work?
What is the most basic ingredient you need, to dabble in hobby electronics?
For years I got mine by tapping an old AT-PSU with crocodile clips. It worked, but the unused cables were always in the way and the clips weren’t exactly the most fit connections for a power supply. So I decided to clean up my table, put the PSU into a nice case and — while I’m on it — include a variable voltage source.
I designed the case with
QCAD LibreCAD, gave some finishing touches with Inkscape and had it produced by Formulor, the German Ponoko.
This is the result of my efforts: