Hi,
I'm really noob in Amiga, and I watch all this excitement around FPGA with double dutch terms for me as I'm more into software than hardware. As a matter of fact, not at all in hardware.
Can someone tell a poor ignorant what it implies for us ?
Is it something really so marvelous for the future of our platform ?
Why ? Does it concern only the game field ?
I've not used FPGAs before, but I've done a lot of silicon layout to make FPGA chips. I'm this spring taking a VHDL course at university using FPGAs. I hope to learn how to do some of my ideas.
An FPGA is a generic logic chip, which can be programmed to become a specific logic chip. You can make it become nearly any logic circuit you want. ASIC chip designers use FPGAs to prototype and debug their cictuits before spendign huge amounts of monty on ASIC fabrication masks. (kindof like camera film negatives, it's a similar usage) People cho cannot afford an ASIC production can use FPGAs in their product instead, since they are cheaper for a small quantity need. (for very large quantity needs, ASICs are far cheaper than FPGAs)
Most FPGAs today are reconfigurable while running, which means you can change part of the circuit they are behaving as. This has a benefit in that some things won't always run at the same time as each other, and you can have only one of those things loaded into the chip as it is needed, and change to the other as needed.
There are limitations, as each FPGA has a certain capacity, a circuit requiring more than a chip has to offer won't fit and needs a larger chip. But today FPGAs can hold quite a lot of things. And you can use multiple FPGAs together to increase total capacity. The other limitation is performance. It takes a lot of overhead to make an FPGA as generic and programmable as it is. To act as a simple AND gate, it will run slower than an ASIC that can simply place a single AND gate and nothing else around it. The FPGA needs to control routing through passgates and multiplexors, which slow things down compared to a simple wire in an ASIC.
To "program" an FPGA (the technically correct term is "configure") you load a bitstream file, which tells which passgates to go on or off, which way for multiplexors to select, what logic each segment will behave as (this programs a small RAM to act like logic, logic inputs go to the address bits, the output of the RAM is the logic output), and selects which flipflops are or are not used in the path, etc. Then the FPGA "is" your desired logic circuit. Some people think this is "emulation", I disagree. It's "implementation". It's not running software. It's not pretending to be an AND gate, it is an and gate. Or an Amiga500. or an Atari. Or a Commodore64. Or a Zorro to PCI bridge. Or a graphics chip. Or an ethernet controller. Or an IDE controller. Or a SCSI controller. Or an AC97 audio controller. Or...
The two big languages for FPGA designers to use are VHDL (popular in europe and US military/aerospace indsutries) and Verilog (popular in commercial US industries). You don't "compile" it, you "synthesize" it into a logic gate netlist. The gates netlist is then placed and routed into the FPGA fabric to become your desired logic chip. The FPGA does not "run" the netlist, it "becomes" the netlist. The chip does not normally change the netlist it "is" while running, the circuit it implements is what runs. Any change to the FPGA netlist is called a "reconfiguration", and once that is done, it now "is" the new circuit.
As for games, I'm not sure how it would best improve things there. It could be an FPU if you otherwise lack one. I've toyed with the idea of making an Altivec unit on a PCI card for PowerPC chips that lack one. (Sam4** for example) I'm not sure how well that would perform compared to software emulation of Altivec on a non-Altivec CPU, as things need to exit the chip, cross PCI, get into the FPGA, run at whatever speed the FPGA can give me, and go back through PCI into the CPU again. All that overhead may ruin the idea. And I have a lot to learn about microprocessor design before I try.
As for other ways we can benefit from it, we can use it as an accelerator for various things. I had an idea way back in the day to make an FPGA on a Zorro card to be a multimedia hardware codec. A reconfigurable one, so it would be a hardware MP3 decoder or encoder, or an mpeg2 video decoder or encoder, or mpeg4, or ogg vorbis, etc. for Classic machines whose 68060 just wasn't fast enough to keep up. Never made it of course, but could have been. need an encryption chip? FPGA can. There's a lot of things it can be used for.
I do think that FPGA offers a lot. I would love to see a big and fast one on a motherboard. Some Sams have a small FPGA. It's not big enough for my taste. Not does it have connections to do a lot of things. I'd like to see it multiplexed with audio connectors on the back, so it can be an audio chip. (HD Audio/Azalia anyone?) I'd like to be able to multiplex whatever VGA card I have through it, so the monitor can take the VGA card or can take something video out of the FPGA. (AGA anyone?) I'd like a lot of pins for connecting stuff up. (SCSI anyone? or Ethernet? or what else can you imagine?) I'd have done for the X1000 Xorro slot an FPGA instead of an Xmos chip, but you can probably do a lot in Xmos that you can in FPGA. But in a big fast FPGA, you could do so much more than an Xmos. (IMHO of course, as I know far more about FPGAs and only a little about Xmos. Everything I imagine using Xmos for, I could do in FPGA. Some things I imagine using FPGA for I don't think I could do in Xmos)
But for a PC-alike thing like X1000, XE, Sam460, etc. I think we'll get more use out of PCI/PCI-Express slots. Most things I'd put into FPGA are already on store shelves as PCI or PCI-Express cards.
Things like Minimig or natami or CloneA or AOocs are made for FPGAs. With enough unused space in there, you can add more. Minimig with its own native SCSI bus. Minimig with its own native SVGA (as Yaqube is doing already for FPGA-Arcade board) Minimig with FPU. Minimig with native PCI slot. Whatever you want to add, if there is capacity and usable connections, you can. (If there are not usable connections or capacity, make a new board with those connections and larger FPGA)