Programmable Logic Devices and Gate Arrays