Hardware, Firmware, Software

Some descriptions to help clarify the floating boundaries between electronic/logic components.

Explanations are a bit recursive - having an chicken-and-egg problem. First a short list:

Hardware Actual physical hardware. Difficult to change after producion - basically soldering iron.
Gateware A part of the hardware design for FPGAs/CPLDs, in the form of software; can (with more or less effort) be replaced after production.
- Gateware image The actual form of the gateware that can be configured on hardware.
Firmware A part of the hardware design for DSPs or embedded CPUs, in the form of software; can (with more or less effort) be replaced after production.
- Firmware image The actual form of the firmware that hardware can execute. ('Machine code').
Software Instructions / algorithms to be processed by hardware (ASICs).
- Executable file The form of software processors can deal with - execute. ('Machine code').
- Source code The human-readable from of the software (or firmware).
- Portable Software that can be compiled or synthezised for different architectures.
ASIC Application specific integrated circuit - a chip!
- Processor An advanced kind of ASIC - processes instructions.
- - CPU (General purpose) processor.
- - DSP Digital signal processor - special purpose (usually communication links or images). Runs firmware.
- FPGA Field-programmable gate array, an advanced ASIC. Replaces discrete components in hardware designs. Configured with gateware
- CPLD Complex programmable logic device
Development toolsPrograms used for software engineering:
- Compiler Translates (software) source code into machine code for a specific kind (architecture) of CPU or DSP.
- Linker Combines object files of machine code into an executable program.
- Synthesizer Translates (firmware) source code into logic elements available in a specific kind (architecture) of FPGA or CPLD.
- Map / place & routeAssigns specific logic elements and signal routing to actual elements in a particular kind (size, speed-grade) of FPGA.