fpga is hardware which is programmable to an extent according to our needs... asic is a frozen design and is application specific....
soc is a software placed on hardware....
If we are going to make a chip then we can do it in FPGA or in ASIC,
In FPGA we use FPGA components to realize chip functionality.
In ASIC we sent it to fab. It is time consuming and complex work while FPGA is not time consuming and simpler than ASIC but it takes huge area and higher clock speed can not be achieved.
SOC is also a ASIC design where we intergrate a complete system on that chip.