Programmable logic devices (PLD) like PALs, PLAs, GALs and CPLDs allow complex digital logic designs to be implemented in a single device. Newer devices like FPGAs can implement thousands of logic gates, supporting more complex designs than simpler PLDs which are limited to hundreds of gates. FPGAs contain an array of configurable logic blocks and interconnects that can be programmed by the user to realize different logic functions. CPLDs have a complexity between basic PLDs and FPGAs, including non-volatile configuration memory and supporting more complicated feedback paths than PLDs.