views:

347

answers:

4

To learn FPGA programming, I plan to code up a simple Neural Network in FPGA (since it's massively parallel; it's one of the few things where an FPGA implementation might have a chance of being faster than a CPU implementation).

Though I'm familiar with C programming (10+ years). I'm not so sure with FPGA development stuff. Can you provide a guided list of what I should do / learn / buy?

Thanks!

+1  A: 

It's old, because I haven't thought much about FPGAs in nearly 20 years, and it uses a concurrent programming language that is rather obscure, but Page & Luk, 1991, Compiling Occam into FPGAs covers some crucial topics in a nice way, enough, I think, for your purposes. Two links for trying stuff out:

  1. KRoC is an actively maintained, linux-based Occam compiler, which I know has an active user base.
  2. Roger Peel has a logic synthesis page that has some documentation of his linux-based workflow from Occam code synthesis through to FPGA I/O.

Occam->FPGA isn't where the action is, but it may be a much better place to start than, say, Verilog.

Charles Stewart
+2  A: 

Regardless of what Charles Stewart says, Verilog is a fine place to start. It reminds me of C, just as VHDL reminds me of ADA. No one uses Occam in industry and it isn't common in universities.

For a Verilog book, I recommend these especially Verilog HDL. Verilog does parallel work trivially, unlike C.

To buy, get a relatively cheap Cyclone III eval board from [Altera] or Altera's 3 (e.g. this Cyclone III one with NIOS for $449 or this for $199) or Xilinx.

Brian Carlton
+1, good recommendations. The case against Verilog is just that it is like C, and so making good use of the deep concurrency of an FPGA runs against its grain. But it's obviously the best understood technology, and provides the standard against which other technologies are measured.
Charles Stewart
$450 is your idea of cheap!? (I know for FPGA's that's cheap, but compared to the common idea of cheap)
Earlz
+3  A: 

I'll give you yet a third recommendation: Use VHDL. Yes, on the surface it looks like ADA. While Verilog bears a passing resemblance to C. However, with Verilog you only get the types that come with it out of the box. With VHDL you can define your own new types which lets you program at a higher level (still RTL, of course). I'm pretty sure the Xilinx and Altera free tools support both VHDL and Verilog. "A Designers Guide to VHDL" by Ashenden is a good VHDL book.

aneccodeal
Yes, the free Xilinx and Altera tools support both VHDL and Verilog. You just can't mix them in the same design.
Brian Carlton
+1  A: 

I want to point out a potential issue with implementing a Neural Network in FPGA. FPGAs have limited amount of routing resources. Unlike logic resources (flops, look-up tables, memories), routing resources are difficult to quantify. Maybe a simple Neural Network will work, but a "massively parallel" one with mesh interconnects might not.

I'd suggest starting with a simple core from OpenCores.org just to get familiar with FPGA flow, and then move on to prototyping a Neural Network. Downloading free Xilinx WebPack, which includes ISIM simulator, is a good start. Later on you can purchase a cheap dev. board with a small FPGA (e.g. Xilinx Spartan 3) to run your designs on.

OutputLogic