1. WHen working with programmable logic (ie. FPGAs). It is used to define the way the hardware inside the programmable logic is to be wired up. It is not like software code where you type in instructions that are to be executed by a processor. Rather, it is like more like typing in a netlist or some other specifications that define how logic gates are to be physically wired up.
It is analgous to typing down writing out how a million logic gates are supposed to be connected, and then sitting down with a million logic gate ICs and wiring them up. It is much more hardware-oriented (technically, entirely) rather than your typical software code.
It is used to test digital circuit designs like ASICs and processors before the hugely expensive manufacture process since you can configure the hardware right in front of you, and is used for very high performance applications that require massive parallel operations which a processor cannot do.
2. You will need special software just like how you need a compiler for any programming language. Technically, it is a VHDL synthesizer, and not a compiler since you are not compiling code but synthesizing hardware.