My most recent habit has been trying to build a cooler/faster RGB scrolling board with a Spartan-6 FPGA using the Nexys-3 development board from Digilent. The board itself is pretty solid and works just fine with the basic VHDL and Verilog tools from Xilinx. This is good for creating the “hardware” inside the FPGA. The trick comes when you want to write some ordinary sequential software, say in C, to make it do something. You can put a tiny CPU into the FPGA like Picoblaze, but the program size will be very limited and you’ll have to write the whole thing in assembly, or you can use the Xilinx embedded development kit to create a more powerful CPU that is capable of running C apps and has a real debugger.
The trick is that there isn’t enough built in memory in the chip to run programs of any significant size. Then you need to use external memory. Now, this shouldn’t be a problem because the board has 16MB of “pseudo-static RAM” plus a couple of 16MB flash chips. You link the program such that the code lives in flash, and uses the RAM as memory space for data, and then you use a small bootloader in the FPGA to jump to the code in flash. Well, this is where it all turns sour. Digilent provides packaged files for the board that are supposed to allow you to use both the flash and the RAM, which share control,data, and address lines, but so far I am only able to access the RAM successfully. Reading from the flash (preprogrammed with some data using Digilent’s own tool) returns complete garbage within the EDK C environment. The prepackaged stuff is supposed to handle the multiplexing between the chips for you, which is not a very straightforward task in this environment.
Mail to Digilent tech support has so far resulted in radio silence, as has requests for help to other users in the Xilinx forums. At this point I’m wondering whether anyone has used a Nexys-3 for anything other than college classes to blink an LED. Sigh.