Many blocks have input and output signals connected to pins or other blocks on the chip. As needed, associated firmware will control or read the levels of those I/O signals either directly or indirectly. Some of those I/O signals are optional and whether or not they’re used in a given instantiation of a block depends on the application of that instantiation. Ideally, the same IP and firmware could be used for every instantiation with little or no modification.
When a block is instantiated in a chip, wires must connect required I/O signals at the block boundary to pins or other blocks on the chip. But an optional output signal not used in a given instantiation can be simply left unconnected, rather than changing the internal design of the block to disable that signal. This technique allows firmware that changes that output signal—either directly or indirectly—to be used without modification for that instantiation because changes to that unconnected signal will not affect the overall operation of the chip.
Unfortunately, deactivating optional input signals is not so simple. An unused input signal must be tied to a high or low level—as appropriate for that signal—so that it does not float and cause erratic behavior of the block. Unused input signals typically should be tied to the inactive or deasserted level. Thus, firmware that reads that input signal directly or indirectly (or monitors its associated interrupt) will never see that unused signal change (or an interrupt generated) and will never execute code to respond to that signal. Since this specific instantiation of the block does not need the functionality of that input signal, it is okay for that portion of firmware to not execute.
By deactivating unused signals at the block boundary, the same IP will work in various instantiations. This technique reduces the risk of defects introduced by modifying the internals of the IP. Synthesis tools, if set up to do so, will remove those extra unused gates. Preserving the internal design of the IP also allows the same firmware code to work for each instantiation.
Until the next disconnected signal…