As discussed in the previous section, system-level design of embedded electronics requires two dis-tinct phases.
In the first phase, functional and nonfunctional constraints are the key aspects.
In the second phase, the available architectural platforms are taken into account,
and detailed implementa-tion can proceed after a mapping phase that defines the architectural component on which every functional model is implemented.
This second phase requires a careful analysis of the trade-offs between algorithmic complexity, functional flexibility, and implementation costs.
In this section we describe some of the tools that are used for requirements capture, focusing especially on those that permit executable specification.
Such tools generally belong to two broad classes.