Sorry about the title, everyone put down the flamethrowers, lol.
I have a few questions about Xilinx and Altera (actually Spartan-3E versus Cyclone III) which relate to a particular project, so here are the specifics. Currently the prototype system is on a Spartan-3E 500 to validate the design, and it works. This was for development, though, as for the final version a larger FPGA is needed ; the 500E is starting to feel a bit tight.
This FPGA system has :
- Microblaze with caches (small caches) - 16 bit SDRAM with mch_opb_sdram controller (without OPB actually) - CPU connected to RAM through the MCH/XCL - Ethernet LAN9117 MAC+PHY, with DMA to SDRAM via MCH/XCL - IO peripheral, with DMA to SDRAM via MCH/XCL - And lots of IOs (well not so many on PQ208 but final version will have a larger FPGA).
Here is what it does :
- Receives data from PC over ethernet in UDP packets - Buffer in SDRAM - Output data in user's format of choice on the pins - Read data from pins - Buffer - Send back to PC in UDP packets
A simple protocol (not finished) will handle UDP retransmissions etc a-la-TCP but with very low latency.
Primary purpose is to transfer multichannel audio (up to about 8-9 megabytes/s) but also digital scope (sample, buffer, send to PC) and other data acquisition applications. It will also need to do some DSP work on the audio (resampling, dithering, and some complicated filtering, etc) and possibly DSP on the acquired signals in a DAQ scenario.
Now. Three problems.
Everything is good with Xilinx except the DSP part, I guess the logic would fit in a Spartan-E3 1200 with lots of room to spare except I might be short on multipliers. Now that would be a problem to realize that once the final board is made !
So I thought about Spartan-3A DSP but it has a packaging problem : 0.8mm BGA ! No way. 1mm is fine but not 0.8mm.
Second problem, this SDRAM is really crummy and so is mch_opb_sdram. Granted, I get 90 MB/s from a 16 bit SDRAM running at 50 MHz which is good. But it runs at 50 MHz !!! I should have put some DDR. So the second requirement is an easy interface to a 16 bit DDR chip with a FREE core that supports some good fast DMA like the mch_opb does. I really like this way of accessing memory, the CPU doesn't even have to touch it, my data IO core self-serves from memory, I like that. Ethernet is slow (20 MB/s) but as I said I want to use it also for some data acquisition which means writing lots of data very fast to the SDRAM, since the sample rate of the converters will depend on the memory bandwidth !
Third problem, most of my IO is 3.3V but I would like to use LVDS for some signals. There are only 4 IO banks...
Cyclone III (like EP3C40) on the other hand is cheap, has looots of DSP power, the FPGA itself is faster than the Spartan 3, and it has 8 banks which means I can dedicate 1/8 of the pins to LVDS and still have enough for my 3.3V IO. In other words it looks nice but I don't know anything about Altera. I loaded up the free tools and played with them a bit without much success...
NIOS vs Microblaze ? I don't care, CPU utilization is far from 100% anyway, so as long as it runs and has JTAG debug I'm happy. I would like to avoid having to purchase cores, also. EDK which I got on CD with a dev kit comes with a nice assortment of memory controllers... I'm having problems decrypting the Altera licensing stuff, like what is free, and what is not...
Also this board will be used as part of an open source project. We'll make a board fab run and sell them so people can hack them. I would really prefer if those guys could use free (as in beer) software and EDK is a problem there. But, so is the small collection of free Altera cores...
So, from my project description above, what could I do ?...