11
votes
\$\begingroup\$

I'm two weeks away from completing my first college digital logic design course, and apparently there isn't going to be a final project--just a tedious final exam.

So as any curious student would do, I looked into what FPGAs actually are and what I was being spoon-fed in class. And I've decided to complete a simple FPGA project. I'm using a Basys2 Spartan-3E FPGA, and I'm familiar with digital logic and using ISE to push logic gates around, but I don't know VHDL/Verilog (I'm sure I could pick it up easily).

Does anyone have any project ideas for a beginner? I've done a lot of lab demonstrations, but nothing too fancy.

\$\endgroup\$
  • \$\begingroup\$ Wishlist: 1080p video display, ... what say I stop there :-) \$\endgroup\$ – Russell McMahon Aug 1 '11 at 8:27
  • 1
    \$\begingroup\$ Check fpga4fun.com site. \$\endgroup\$ – armf Aug 1 '11 at 9:16
  • 3
    \$\begingroup\$ Beware fpga4fun.com dev-boards. Their documentation is crap, and they refuse to release the dev-board schematics. \$\endgroup\$ – Connor Wolf Sep 8 '11 at 0:24
5
votes
\$\begingroup\$

I found Pong Chu's "FPGA Prototyping By Verilog Examples: Xilinx Spartan-3 Version" to be a very helpful book. It's meant for a different Spartan-3 board from the one you mentioned, but should still be helpful.

There is also a VHDL edition if you would rather go that route

\$\endgroup\$
4
votes
\$\begingroup\$

You have VGA on that by the look of it. Video always makes for interest in my experience :)

Here's a plan you might want to try (no framebuffer required):

  1. Get a pure colour VGA screen displaying
  2. display a horizontal fade from black to solid colour
  3. Now fade vertically from black to red and horizontally from black to green 3a. (make a more interesting algorithmically specified background you can render in real-time)
  4. create a simple sprite engine which will overlay a small arbitrary shape at an arbitrary location - you could use 1 BRAM for the sprite data
  5. show a few different sprites (1 BRAM each)
  6. create some update logic to make the sprites bounce around (and off each other) - add collision detection to the sprite logic.
  7. create a "paddle" sprite that you can control with the switches, use it to stop the sprites going off the screen
  8. Add some scoring mechanism

I think that should all fit in a 250E. (The VGA clock is slow in FPGA terms, so you can multiply up by 4-8x with the DCM which will allow one sprite engine to multiplex over more than one sprite instance)

\$\endgroup\$
3
votes
\$\begingroup\$

This free online course written by Hamster is amazing and is written with the Basys 2 and Nexys 2 in mind.

I personally used the Basys 2 and learned a bunch from going through this course. It goes through all aspects of the Basys board and a lot of concepts for getting most projects beyond the course done.

\$\endgroup\$
2
votes
\$\begingroup\$

As with everything else, start with a hello world project, in this case - blink an LED - and make its period variable just for fun.

To do that, you'll need to learn how to build a counter in Verilog/VHDL. That is a good start to learning the intricacies of HDL because you will learn how to:

  1. Infer hardware operations - using RTL code instead of gate level code. You will learn how to design a pre-loadable, reset-able up/down counter with RTL code.
  2. Learn how to do synchronous design - which is what most FPGAs are good for anyway and is the basic of almost all digital systems design.
  3. Learn how to interface with the outside world - using I/O of the FPGA. This will teach you how to configure and implement things on an FPGA.

Once that is done, go to opencores and start hacking away at bigger projects. You will find lots of other fun projects by some of our members here, including yours truly. :)

\$\endgroup\$
1
vote
\$\begingroup\$

Martin suggests you have VGA capability.

What about a decent "photo frame" that allows better control of photos than any typically available.

  • Most handle subdirectories poorly.

  • About none allow random display ordering - which is a very major advantage when you have large numbers of photos.

  • Ability to make up a slide show based on selected photos a bonus. (See Irfanview for examples).

  • Extra points - add MP3 playing capability. Interleave music with photos.

  • SD Flash data store.

  • USB?

  • 802.11? (too much to hope for.)

\$\endgroup\$
1
vote
\$\begingroup\$

I've been doing some work with the NEXYS2 board and the associated text from Digilent. It's pricey but it's been a good experience.

\$\endgroup\$
0
votes
\$\begingroup\$

Hamblen et al's book is full of interesting projects for the Altera Cyclone DE1 and DE2 boards; VHDL code is supplied. Implement some of them on your Spartan-3E board.

\$\endgroup\$
0
votes
\$\begingroup\$

One of the first things to do is just download (from vendor or an enthusiast site) and build a skeleton project that hooks the inputs to the outputs - this can be extremely frustrating to get working until you have some experience.

Then you can start putting logic in between - state machines for contrived examples as you had in class, or more complicated ones such as the video generators others are recommending. More complicated blocks such as simple DIY processors, etc...

\$\endgroup\$
0
votes
\$\begingroup\$

When I took my VHDL course, I made a microprocessor with ALU with a few instructions, memory communication and microinstruction sequencer. It takes longer time than you would think it will take, specially if you want to make it robust.

\$\endgroup\$
  • \$\begingroup\$ Ditto (it must be a lecturer favourite). It was a surprisingly good challenge and made me really think about how processors actually work. \$\endgroup\$ – Al Bennett Sep 8 '11 at 8:30

Not the answer you're looking for? Browse other questions tagged or ask your own question.