Suggestions For Learning FPGA Development At Home?
Doug writes "I've recently been inspired to take up amateur electronics, specifically with FPGAs. I have an understanding of the basics, plus a solid programming background. From my research so far I've concluded that I should start with a simple FPGA development board and a couple of books on Verilog and/or VHDL and go from there. I found this Ask Slashdot discussion on Verilog vs VHDL very useful, but it focuses more on the development language rather than hardware. I'd be very interested in hearing peoples' recommendations for an entry-level kit that is simple, flexible, and affordable (sub-£200), and preferably Linux-friendly, and indeed any other wise words that experienced FPGA developers (professional or amateur) might have for a novice just starting out in the world of circuit design."
Unless you are very experienced designing with TTL chips, you won't get far in HDL without first getting good coverage of logic theory. My experience may be a little dated as it was 10 years ago that I started learning programmable logic, but at the time I enjoyed the first edition of Fundamentals of Digital Logic with VHDL Design. Not that logic theory has changed, but newer books might come with better examples or easier to use software. What I liked about that book was that it covered the theory in a very complete way while introducing the vhdl concepts at a manageable pace.
As far as development tools, they're overwhelmingly Windows based. You may have to run a VM so that you can use the most common tools (eg Xilinx WebPACK) until you're up to speed, then try a linux solution later. There are lots of hardware trainers out there - it's really not that important which one you use initially, although if whatever books you're reading have a recommended one, use that.
Your experience in the software world will help you somewhat, but be prepared for a vastly steeper learning curve than picking up a new programming language. There are not a lot of engineers who go very deep on both the software and hardware/logic sides - if you do you will end up with some valuable skills indeed. good luck!
Hardware: I highly recommend the Spartan Starter Kits. They're dirt cheap, well supported by the industry, and come with a good toolkit. There's not much more you need to know other than you'll probably want a serial cable in addition to the JTAG cable the kit ships with.
I'll grant you that the fabric isn't very large by today's standards, but it's still enough space to learn about the hardware. By the time you outgrow the fabric, you should have a good idea of what size hardware you want. In fact, your next board may even be a custom design based on a bus like wishbone. ;-)
Software: The Xilinx stuff (pronounced "Zy-Links") comes with a full toolkit for VHDL/Verilog development including an IDE, place and route tools, and software to reconfigure the FPGA. It's all quite slick and easy for a beginner to use.
Language: The most common route taken by new hardware developers is to learn Verilog. They do this because it's similar to C and that makes them comfortable. THIS IS A BAD IDEA. I can't count how many hardware designers swear up a storm when they see a Verilog project with loops and other software constructs stuck into them. See, the comfort and familarity of C makes new hardware developers forget that the hardware is a fixed layout. There is no for loops or control logic as you think of it. It all ends up flattening to hardware. If you write regular software constructs, you'll end up with the least efficient circuit possible.
From this perspective, learning VHDL is better because you won't have that comfort and familiarity that might tempt you into creating poor circuits.
I actually recommend doing some JHDL code for a while. It's lower level than VHDL, but that's a good thing. You have to think about every wire connection and how it all links up. When you're done, you can easily step through your circuit and see how it plays out in hardware. Even better, you learn how to properly use software constructs like loops to create a large number of static hardware objects. This will make your code better without falling in the trap of trying to write software.
That's my 2 cents anyway. Good luck! :-)
Javascript + Nintendo DSi = DSiCade
Use Xilinx's FPGA Starter Kit. I bought the old version 5 years ago, and it also came with a CPLD dev kit. The dev tools run on linux too. It was something like $99 IIRC. It's made by Digilent. Last time I checked they had a better board for an extra $50 with an LCD display and 64MB SDRAM.
Otherwise, check fpga4fun.com . They use a tiny FPGA board, which reminds me of the Arduino: it has everything you need and nothing more.
Xilinx: http://www.xilinx.com/products/devkits/HW-SPAR3AN-SK-UNI-G.htm
Altera: http://www.altera.com/products/devkits/altera/kit-cyc3-starter.html
Both are very mainline FPGAs, both have full devkits, references designs, include the tools, linux support on Xilinx at least (not sure on Altera), and are both at your price point.
Test your net with Netalyzr
1. Get a (the) Spartan-3 starter board. It's got the 500 variant of the Spartan-3 on it which is big enough to implement even small processors. The board also has some very limited VGA output, and a heap of other things that makes it fun to work with (Serial I/F, etc). The manual for this board is one of the better ones for beginners, as well. I broke my own teeth on this board. It's 149 US schmucks from digilent.
2. Get Xilinx's free tool suite; its nicely compatible with that board. Free download from the web. Heck, you can even download and play with it without the / any board (but then you don't, of course, get the blinkenlights.) You can however try out and simulate designs before going to FPGA, and thus figure out why the (redacted) it doesn't (redacted) work. Simulations are your main way of verifying your design once you're past 20-odd gates.
3. Learn the HDL of your choice. Read the books. One warning only: it is NOT a programming language - the entire model in your head about how software works needs to be replaced. Case statements are king. Productivity with HDL's are generally way lower than software; don't be surprised by this.
4. Do points 1 through 3 in reverse order. Having a shiny 150 schmucker board won't help anything if you still have to spend two weeks grokking HDL's.
HTH.
Hardhack isn't a tag, it's a category. It stands for Hardware Hacking and is included by default. Try mousing over the story icon.
Interested in open source engine management for your Subaru?
Actually, FPGAs are much more similar to hardware than they are to traditional software. Even though the configuration is volatile on most SRAM-based FPGAs, the "software" does not describe a set of procedural steps to perform as software does for microprocessors.
Rather, an FPGA configuration (personality), describes how the internal gates, storage elements, and interconnect is switched. This makes a configured FPGA almost indiscernible from an ASIC in function.
An FPGA isn't software loaded to "mimic" the functionality of an IC, it is software loaded to "describe" the functionality of the IC.
This is why VHDL and Verilog aren't strictly software programming languages. Rather, they are hardware description languages. Although they can be executed by software simulators in a fashion similar to software, they really describe hardware either behaviorally (procedurally or event-based) or structurally (netlist).
I write FPGA code for a living, more in VHDL than Verilog, and more for Xilinx than Altera.
I would actually recommend that you don't buy a board at first. You can pick one out so you can decide on a vendor's chip, that's fine, but simulate everything, because that's what HDL design is all about. Both vendors offer a free version of their toolset and there's a free simulator with each of those. Or you can download ModelSim Starter edition. I wouldn't call either one Linux friendly.
As far as the board goes, I would recommend one of Altera's Nios II Embedded Dev Kits. I feel that although Altera has a slightly steeper learning curve than Xilinx, they also have a nicer overall package than what Xilinx is currently offering. I'm speaking from the point of embedding a soft processor though, if that doesn't interest you, then either of the cheap Altera Cyclone or Xilinx Spartan kits will get the job done.
This is the only book you need on VHDL: The Designer's Guide to VHDL by Peter Ashenden.
I haven't found a Verilog book of similar quality.
Buy several books on Verification and testbench writing. That's where the real work comes in, and it's significantly more work than whatever circuit design you're doing. Spend the time to learn how to write self-checking testbenches.
Read over the Synthesis guides for whatever vendor's board you choose. Understand how the constructs you use affect synthesis. There's a wealth of information in the Xilinx and Altera online documentation. There's also a lot of really of good snippets of code which are themselves useful but also typically contrast less and more effective constructs for synthesis.
And finally, I will echo the caution that HDL is not a programming language, it is a design language. If you do not have a fundamental grasp of circuits, logic design, and computer architecture, I would recommend you pursue those topics first.
For a newbie, CtoVerilog.com is the mother of all bad ideas. Verilog is not isomorphic to C. Being able to represent a few trivial C loops as Verilog code will not help you learn what's going on under the hood, and it will not help you get the fundamental aspects of your design up and running.
Also, much of what's done in HDL is gluing other chips together. If you try to use CtoVerilog to make a high-speed USB chip talk to an ADC, the results will be amusing at best. If you find yourself wanting to use C in an HDL design, consider either falling back to a conventional microcontroller or using a software core to run it.
Dahlmann tightly grips the knife, which he may have no idea how to use, and steps out into the plain.