 EEPROM versions may be in-system programmable (typically via JTAG).The difference between FPGAs and CPLDs is that FPGAs are internally based on look-up tables (LUTs) whereas CPLDs form the logic functions with sea-of-gates (e.g.sum of products).