A Generic PCI Based FPGA Coprocessor?
graveyhead asks: "Inspired by a recent Slashdot article, I came across this fantastic package from the fine students in the Configurable Computing Laboratory at BYU: JHDL, which is a set of open source FPGA CAD tools. I am writing a proposal for a prototype system and I have a requirement for a 32 or 64 bit PCI card compatible with JHDL. I do not require any IP cores (which Xilinx seems to want to sell me hundreds of 'em), since our project uses its own custom cores. Also, I will not be building additional hardware around the FPGA processor, so the package needs to be fully self-contained. I simply need the ability to use JHDL to program the FPGA device over PCI under Linux, execute my circuit with parameterized values, and return the result. I found these boards, but I'm not sure which is appropriate or compatible, or if there are better alternatives that I am not finding in a similar price range (up to USD2000). Preferably, I want a chip with lots (1-10M+) of programmable gates."
which Xilinx seems to want to sell me hundreds of 'em
'Hi, I'm going into a for profit business. Could you Slashdoters please give me some free advice?'
1-10 mil gates is a very large number.
Take a look at my MIPS on an FPGA. That used less than 100k vertex gates including MMU and other things youprobably dont need.
Also why PCI? Why not talk to it via serial/usb/network? And why not make your own? We made these for just over £100 ($150) each (plus virtex). having the board outside the PC allows you to have more freedom and external connections to do things like this. Also it allows you to write a simpler download software routine to program the thing (serial vs PCI).
Mouse powered Chips, Open source Processors and Lego
it's probably a very bad suggestion, but current video cards do come to mind....
they're basically a very fast and very programmable math coprocessor that runs 3D-to-2D software. maybe it's possible to disable the RAMDAC and just use the video chip?
grey wolf
LET FORTRAN DIE!
The experience of looking for this card got me to thinking:
Does anyone else remember back in the day, OrangeMicro used to sell a card, now discontinued :( for Macintoshes that put a fully working PC on a PCI card on your Mac. In fact, I think I still have that laying around here somewhere! You could switch between Windows95 and MacOS, both running in native hardware by hitting Command-Enter. It was very neat, like VirtualPC except in an actual Pentium instead of a virtual one.
Anyhow the inspiring part of the old OrangePC in this case is the multi-functional cable attached to the back. It was a truly monsterous wonder. One side was a huge hundreds-of-pins cable which plugged into the PCI card, and the other side split off into VGA video (which could pass-through the Mac signal, or interrupt it and output the PC signal), audio IO, 2 serial ports, a parallel port and a game port! It was truly an engineering masterpiece :)
So, why doesn't someone build a generic PCI device with such an awesome cable attached? It would give a whole new meaning to opencores.org. Software could be written that could drop in an arbitrary core and turn your card into any device that you desired that minute. Remember what Homer says: "Aww, I want it now!". With such a device, you could have it, or build it yourself right from your desktop if you were so inclined ;) For example, if the bass is rattling on my friends new album and we want to try cutting off frequencies below 10hz:
You could even do what OrangePC did and drop a whole processor/OS combination (or develop one) on the board and seamlessly switch between it and the host OS. If the card had multiple FPGAs, it could even drive multiple custom devices simultaneously.
Bye bye PCI hardware vendors (except ones to make the general purpose boards). Next, let's build an AGP8x version (with a stable on-board backup VGA core, just in case ;) and set our sights on NVidia and ATI! Now, any volunteers to build an open-source OpenGL accelerated VGA core? All it is is a couple of multipliers, right? ;)
The problem may be that no PCI/AGP vendor in their right minds would ever build such a thing, because it would replace all their products. Still, it's fun to dream about such a useful piece of hardware.
std::disclaimer<std::legalese> sig=new std::disclaimer; sig->dump(); delete sig;
The biggest problem with the idea of generic FPGA accelerators is sharing the resource in a multitasking environment.
Suppose you had a nice 10 million gate FPGA on your PCI bus. Now, if you program it to do one thing and one thing only, then there's no problem. So if that FPGA set up to be a hardware DiVX encoder and that's it, all is well.
But let's suppose that you fire up your video editor, and it wants the FPGA to be a DiVX encoder. Then you fire up SSH, and SSH wants the FPGA to be an encryption engine.
It is currently VERY hard to dynamically reprogram sections of an FPGA (some do support partial reprogramming while running, but not all). It is also very hard for the hardware compiler to merge tasks - you would have to re-generate the layout of the FPGA each time you added a function.
What we need is the equivilent of a malloc() call to allow a single large FPGA to be used by multiple applications at the same time (until you run out of gates).
Once that exists, then you will see vendors making generic FPGA accelerators.
Until then, FPGA boards will be the province of a very few people, and prices won't come down very much, I fear.
www.eFax.com are spammers
haven't seen it in over a year, but they had a 6M virtexII FPGA on a 64/66 PCI card. had a pci mezzanine slot on there too so you could plug in interface goop to turn it into a smart NIC et al.
they also had an older board with 3 1M FPGAs. IIRC 500k gates were taken up by the PCI core.
ymmv. oh, and ISI is part of the univ california out in virginia
*tosses you a link* The FPGA-FAQ Development Boards List
Contains a BIG listing (updated at the end of last month) showing boards and prices when available. Also lets you know if it's a PCI board or whatever.
I really doubt you will need a million or more gates. What are you trying to do, physically model a barrel of quarters? Is your code going to be as complex as a late-model Pentium?
To start out with, a 600kgate SpartanIIE-ish chip will have lots of room and won't break the bank. A mega-gate Virtex, on the other hand, will eat into your budget requirements for the chip alone.
But check out that link and you'll probably find something.
...
I wonder if the libc code can be transferred to the coprocessors memory during boot, at least larger functions, then just passing data to it with running programs.
Another idea is to send the driver code of all installed hardware to the coprocessor, and just communicating with it in a standard way. The coprocessor takes the driver overhead. I dont think trying this with the AGP for instance is a good idea, but should work well with winmodems or CDROMS, which freeze the entire system sometimes.
Yet another, the Java JIT compiler compiles the code in one processor then executes it in another. These could be reality if theres no PCI bus between the processors, better still if the processors are mounted on the same die, like the Power64, only each with their own IO.
"Give orange me give eat orange me eat orange give me eat orange give me you." -Nim Chimpsky
I have also been looking at using FPGAs as accelerators. You should try www.nallatech.com They make some good boards for loading multiple FPGAs to a PC.
These guys have an assortment of PCI cards with FPGAs and Linux drivers. I've worked with their boards for several years with success. Just don't forget cables when ordering.
FPGA boards are very expensive because they're not mainstream and are typically a real PITA to integrate into software projects. I worked on FPGAs for about a year - the industry is coming a long way, new tools and compilers are becoming available almost monthly - but it's not a cheap place to play in. Even the low-end of the scale you're talking about $1000-1500USD for a board with a mid-sized Virtex on it.
..don't panic
I'm positive that NV could run the cores in the high MHz range, not KHz. Modern FPGAs can run at up to 200-300 MHz IIRC.
But in large volumes (like the ones NVidia operates with), FPGAs are MUCH more expensive than ASICs. For low volumes, the NRE (nonrecurring expense) of an ASIC makes its per-unit price higher, but over a certain number, the ASIC gets cheaper. NV could probably release an FPGA-based video accelerator nearly as fast as the current units, but it would cost $2000 instead of $200.
retrorocket.o not found, launch anyway?
I remember that Star Bridge Systems (www.starbridgesystems.com) is developing what they call "hypercomputers", basically large collections of FPGAs attached to a Windows host. They claim they can build the world's most powerful supercomputer (in terms of MIPS, which we all know really stands for Meaningless Integer Performance Statistic). In any case, they also have a software suite called Viva for developing and compiling software to the chips. I also seem to remember that chips are dynamically readjusted, but I'm not sure. Anway it might be worth a read.
"Place me in the company of those who seek Truth, but deliver me from those who believe to have found it."