A programming method efficiently programs programmable logic devices of
the type having specialized functional blocks. Those blocks may include
multipliers and other arithmetic function elements, or may be various
types of memory blocks. In order to efficiently program devices having
such specialized functional blocks, without using a larger device than
necessary, and without failing to fit a user design to a device, if the
programming method finds that that there are more functions to be
performed in specialized functional blocks than there are specialized
functional blocks available, the programming method attempts to map some
of the specialized functions to generic programmable logic elements (or
other resources), assuming there are sufficient programmable logic
elements (or other resources) that otherwise would remain unused in the
user design.