I am well aware about programming processors and microcontrollers in C. But can C code (not SystemC) be used for logic design for FPGAs? Are there any specific software tools for this purpose?
Yes, it is possible to do high level logic (HLL) design using C or C-like languages. Here is a list of the more popular software tools:
- C-to-Hardware (Altera)
- C-to-Hardware Compilation Technology (Altium)
- C-to-Silicon Compiler (Cadence)
- C-to-Verilog (Nadav Rotem, free and open sourced)
- Cascade (CriticalBlue)
- Catapult-C (Calypto)
- Comrade (Hagen Gädke)
- CyberWorkBench (NEC)
- Daedalus (Leiden University and University of Amsterdam, free and open-source)
- DIME-C (Nallatech)
- DK Design Suite (Mentor Graphics)
- eXCite (Y Explorations)
- FpgaC (John Bass, free and open-source)
- GAUT (Philippe Coussy, free and open-source)
- Impulse CoDeveloper (Impulse Accelerated Technologies)
- Mitrion SDK PE (Mitrionics)
- NISC (University of California, free)
- ROCCC (University of California, free and open-source)
- SPARK (University of California)
- SpecC (University of California)
- Synphony (Synopsys)
Keeping track of them is made difficult by the fact that these companies regularly swallow each other whole, change names or discontinue products entirely.
It looks like for all tools, the C code needs to go through an intermediary HDL stage. So the design will be translated into Verilog or VHDL, and these tools facilitate the transition before it is finally put into hardware. But remember, Verilog and VHDL themselves are intermediary stages. Even the netlist is intermediary. The final stage will be a proprietary binary file which reconfigures the FPGA. Designing in C will have its own challenges and trade-offs. But the answer to the question is a resounding yes, logic design in C can be done.
A nice introduction to C-to-FPGA was written way back in 2005. Wikipedia has a nice list of HDLs and tools. Currently, there are also tools for languages similar to C, C++, Java, Python and Ruby. Please comment if I missed a tool and I will add it to the answer.
No, FPGA's cannot be programmed in C. Over the years there has been various attempts at a C-Like language, but these have either not caught on failed outright. Even for the ones that "succeeded" I would not call them real C. You could not, for example, take a pre-existing code intended to be compiled for a processor and recompile it for an FPGA and expect it to work.
Use VHDL or Verilog, you'll be much happier.
If your goal is to run a system ON the FPGA running C, you might try installing a CPU core. However, this negates the purpose of the FPGA.
Using C for programming FPGAs would be a rather poor design choice, since C is designed for iterative programs, not logic arrays. Verilog and VHDL are designed such that you create a structure, not a list of instructions.