16

I am an EE student and can write [at least simple] programs in more languages than I have fingers. I have just started learning VHDL and I was wondering what a good project would be to really get to know the language and the relevant tools? I am having trouble coming up with one because it is a really different style of programming for me.

I have made simple things like adders, but I am looking for a more long term (ie a month or so) project.

In case it is relevent, I have Xilinx Webpack and a Digilent Spartan3 board.

Brian Carlton
  • 13,252
  • 5
  • 43
  • 64
jeremy
  • 5,055
  • 5
  • 33
  • 32

8 Answers8

11

Since you seem interested in programming you could build a simple microprocessor.

starblue
  • 6,462
  • 2
  • 21
  • 35
  • **HIGHLY** recommended. You end up learning about not only the FPGA and VHDL side of things, but also how processors work, what's needed in the way of development tools to support a processor, etc. – Chris Stratton May 20 '11 at 06:28
7

My "hello world" FPGA project was a LED array controller with PWM and serial stream input. The final result was nice (http://lbw.axe-man.org/led1.wmv) but I admit that I've done a part of it with the Altera Quartus Schematic Editor to see how VHDL parts were described.

Axeman
  • 3,498
  • 20
  • 27
5

You should check out opencores.org and find an interesting project there. You can also download the Sigasi HDT, which will help you up to speed on VHDL grammar.

Nate
  • 868
  • 1
  • 10
  • 13
user421
  • 51
  • 1
4

I enjoyed working with Hans at hardhack this year on the Rekonstrukt project to build a basic synthisizer in an FPGA. LED projects are also good but there is nothing like plugging up the FPGA to a stereo. It isn't building from the ground up, as an LED project would, because the project is based on a open core processor that supports forth. So at the beginning you are learning how to basically load the FPGA with the project, then you can play with the envelopes in FORTH. But where you start to learn more about the FPGA internals is when you want to add functionality, which then requires digging into the VHDL.

cyphunk
  • 602
  • 1
  • 6
  • 12
2

A project that I enjoyed doing was implementing the Milton Bradley Simon Game on a FPGA.

At my university, our EDA class uses the same board you mention. Some of the projects implemented included:

  • Image processing: median filter, histogram stretching, edge detection
  • Cryptography: AES, various hashing algorithms, etc.
  • Communication: Ethernet, USB, I2C, etc.
  • Games: Pong, space invaders, etc.

That may give you some ideas.

I'll second the opencores.org idea as well as implementing your own microprocessor. Since you have a Xilinx FPGA, you might also look at doing something with microblaze or picoblaze.

Edit: formatting.

David Brenner
  • 691
  • 5
  • 10
1

I wrote vhdl code for xilinx virtex core sometime ago. it was an alarm clock implementation. This is what i did:

  • Read a lot through vhdl manual - i'd have to revise on it now but i found it pretty straightforward and easy to use hdl :-)
  • Used xilinx suite (compiler, synthesizer) to get the bitstream
  • Uploaded the bitstreams using jtag

Rinsed, Repeated 1-3. I'd point out that bitstream generation is very much all integrated in Xilinx's IDE. You just have to have clear set of logic to implement in HDL; all the rest of the stuffs are done by the IDE.

1

Numerically Controlled Oscillator would be fun. I just did a design with my Arduino compatible board (see http://tinyurl.com/ydmz2su) but this would be perfect for an FPGA.

Here are a couple of design references.

Snell, John 1988 "Design of a Digital Oscillator That Will Generate up to 256 Low-Distortion Sine Waves in Real Time" Foundations of Computer Music. Cambridge, Mass.: MIT Press

Moore, F. Richard 1988 "Table Lookup Noise for Sinusoidal Digital Oscillators" Foundations of Computer Music. Cambridge, Mass.: MIT Press

Daniel Grillo
  • 7,659
  • 18
  • 51
  • 69
jluciani
  • 11,646
  • 1
  • 34
  • 54
0

What I'm doing is making a bit CPU. It's a nice rounded out way to cover all the basics.

You'll cover all the basics of a large project in VHDL and be exposed to all of the core topics in VHDL design (clocks, inputs, outputs, logic, buses, and sequential design most prominently) as well as many core electronic and computer design and architecture concepts like registers, data operations, memory, and computer arithmetic.

You can start with just addition and subtraction and then add more functionality as you learn, working your way up to a fully functional (albeit simple...or as I prefer to call it "retro") computer. At least, that's my plan.

Plus, having your own custom-designed computer on a chip is just plain cool :) Like a 16 bit Raspberry Pi :P

Other common FPGA projects:

-Music synthesizer

-DSP effect generator

-MIDI controller/interrupter

-Bitcoin miner

-Video game console emulators

-Custom Arduino shields

-Parallel processors (very useful for certain mathematical problems that conventional computers aren't great at)

-Robotics/control systems

-Data acquisition (fair few oscilloscope designs out there for FPGAs if you know how to work with op amps)

VHDL on its own isn't horribly complicated. The most important thing to remember is that you're designing a physical electronic digital circuit, not writing a program for a microcontroller. Your simulation is not a program that is going to run line by line, basically, so don't let the superficial similarity to C fool you, VHDL is a very different paradigm.

user9892
  • 21
  • 1
  • 3