Being a very fresh member of the ‘latter group’ (knowing little more than a basic understanding of what an FPGA is), I figured I’d comment on what I have run into so far (in case it helps a ‘getting started’ tutorial).
Last night, a friend of mine handed me a couple of boards out of his Dumpster Dive and said he figured I would get more use out of them than he would. One of which was a discontinued BOB-08595, a breakout board for a Spartan 3E. I have to say that the first impression I had reading about what the chip contained was amazement. The last time I looked at any kind of programmable array was PALs and GALs in the '90s, and at that point I wasn’t sure what the benefit was over just using discrete logic 7400 series DIPs (considering the high cost of a programmer to a hobbyist, and the high availability of 7400 series chips via scrap circuit boards from the 70s my dad had laying around). I lost interest. Back to today, though, when I realized I had a project that couldn’t be accomplished with about anything around (a small network of several Arduinos.) It hit me that the FPGA I was handed might be a way to do it.
My quick probing on the internet and on the site returned mixed results. I found some example code (on how to make a UART on FPGA of all things), and references to how things work on the chips, but I felt as though there was a gap of understanding: How do I get either my schematic or block diagram from my head into the chip? So far, this is what I have learned (or need to learn):
-There are two main processes for “programming” or “burning” an FPGA: Schematic Capture and Hardware Descriptive Language (HDL). For me, (having a good understanding of how to create circuits from a box of components such as resistors, capacitors, diodes, transistors, gates, inverters, etc) it seems like Schematic Capture would be the way to go, but there is such an attitude of rejection of this process it is hard to find ANY information about it beyond what it is. HDL is much more widely supported and is perhaps a little friendlier for those acquainted with programming a standard processor, I guess. The two main flavors that I am finding are VHDL and Verilog. Most of the software I am coming across is propriatary and “pay” software, which really discourages a “switch” to FPGA for me. I have no problem paying for software I know I will use, but I am used to Arduino and C that have plenty of resources around so you can see if it is going to fit what you need first. (I have seen the Web version of Xilinx’s ISE, but as it is 5-7GB of download it will have to wait until I can work a download to mess with it.)
-Compilers/loaders/whathaveyou seem to be proprietary. For an Arduino, you could go with an ARM development package from a variety of vendors, or the Arduino software, and I’m not sure there aren’t many other ways of going about playing with them. This Xilinx FPGA appears to be locked into using Xilinx software and I’m not sure what hardware will be needed to connect to it, if I will also need to buy additional or proprietary cables, USB boards, or whatever else. I’m not expecting to get much support for an obsolete Sparkfun product, but the Spartan seems to be fairly common and out on the web I find little that doesn’t direct me to Xilinx, and little information about actually using the chip.
Well, I’ll add more as I learn more. I guess what I’m saying is that, after working with Arduino, it would be nice to have a specific “getting started” tutorial that lists:
-What hardware you will need to complete the tutorial (complete list, assuming nothing)
-What software you will need to complete the tutorial (complete list, with “common” alternatives if there are any)
-Step by step process to upload a (very) simple ‘program’, such as the ‘blink LED’ example I believe is on this site.
-Simple breakdown of what the example program is doing, what resources are being used on the chip, how many gates it took.
-A reference (link) to perhaps a code dictionary, similar to Arduino.cc’s code library
-Notes of ‘what not to do’ that could ruin the device or make things really frustrating.
I think this would help me out as a beginner. Lacking a physical mentor I can ask questions, the next best way I learn is to go through the process at least once or twice. (Remembering back to when I started learning Arduino, there were so many times I got stuck with the simplest of quandries, such as, “if I upload my program, will it overwrite the bootloader and possibly lock the controller into just running THAT program?” If I had just had a walkthrough or someone there to say, ‘no, the Bootloader and your program are handled seperately.’ it would have saved me some stress. Bringing “simple” things up on forums these days can be frustrating, especially for beginners who don’t grasp or use terminology correctly yet).
EDIT:
I will say that the tutorial link to the Mojo site for the Mojo board is pretty good. A little less scary now. Now if I can get the ISE downloaded…