True brevity of expression consists in everywhere saying only what is worth saying, and in avoiding tedious detail about things which everyone can supply for himself. This involves correct discrimination between what is necessary and what is superfluous.
—Arthur Schopenhauer (from “The art of literature” in The Essays of Arthur Schopenhauer [translated by T. Bailey Saunders], On Style, 1891)Designing an electronic system is a complicated process. We simplify the design process by decomposing it into multiple tasks. As we carry out these tasks, an abstract “idea” of a system gradually transforms into a design and finally into the desired product. During this transformation, creating a register transfer level (RTL) model is a milestone. However, before RTL model creation, several tasks need to be carried out. In this book, we refer to these tasks collectively as pre-RTL methodologies.
Pre-RTL methodologies involve determining various components and their interactions that achieve the desired functionality at a high level of abstraction. These components can be hardware or software. The hardware components can be processors, memories, peripherals, sensors, data converters, and signal processing blocks. The software can be firmware, device drivers, operating systems, and application programs. Since pre-RTL methodologies involve taking decisions at the system level, we also refer to the pre-RTL design activities collectively as system-level design.
At the system level, we have only a few necessary constraints of the system. Therefore, we have a greater freedom in choosing components, and many feasible solutions are possible. However, evaluating the impact of different choices is challenging because we have limited implementation details. Nevertheless, choices made during system-level design strongly impact the quality of the final product. Therefore, system-level design is critical, as well as challenging.
We have been doing IC-related system-level design for the last several decades. However, due to diverse application-specific issues, system-level design methodologies could not be standardized [1]. Till date, system-level design consists of widely varying tools and technologies [2–8]. For example, system-level design methodologies can differ between a signal processing chip (such as a video encoder and decoder) and a multicore processor. Therefore, in this chapter, we describe a few methodologies that are applicable in diverse scenarios. Subsequently, readers can apply the concepts explained in this chapter to different applications and platforms. To know more about system-level design, we suggest that readers refer to dedicated books on system-level design such as [1, 9–12].