When I attempt to implement a design, an error message similar to the following appears:
"ERROR:Cpld - Design contains 15 unique asynchronous resets and presets, exceeds device limit 14."
CoolRunner-II devices have 16 product term reset/presets, plus 1 control term reset, plus 1 control term preset per function block. The difference between a product term versus a control term is that a control term can be shared amongst multiple macrocells (registers), whereas product terms may not. In addition there is 1 global set/reset per device.
A 128-macrocell CoolRunner-II device is comprised of 8 function blocks. This means that there can be at most ( 8 x 18 ) + 1 = 145 UNIQUE asynchronous reset/presets.
CoolRunner XPLA3 devices have six control term reset/presets per function block. There is also a universal reset and a universal preset signal.
A 64-macrocell XPLA3 device is comprised of 4 function blocks. This means that there can be at most ( 4 x 6 ) + 2 = 26 UNIQUE asynchronous reset or presets in the design. Some of these control terms are shared by other logic such as local product term clocks or output enables, which might further limit the number of available asynchronous reset or presets.
A common problem occurs when the design contains an asynchronous load operation for a bank of registers. This asynchronous load results in 1 asynchronous reset and 1 asynchronous preset for each register. This can quickly consume all the control terms in the CPLD. A simple fix is to change the asynchronous load to a synchronous load which does not require any asynchronous reset or presets.
The XC9500/XL/XV CPLD family does not have a restriction on the number of asynchronous reset or presets in the design.