The term system, when used in the digital design domain, connotes many different entities. A system can consist of a processor, memory, and input/output, all on a single integrated circuit (IC), or can consist of a network of processors, geographically distributed, all performing a specific application. System-level design covers a wide range of design activities and design situations. General-purpose system-level design involves the design of programmable digital systems including the basic modules containing storage, processors, input/output, and system controllers. This chapter describes each of the system design tasks. Since the majority of system design activities are application-specific, it focuses on system-level design of application-specific systems. Related activities, hardware-software codesign, verification, and simulation are also covered in the chapter. Partitioning determines the functions, tasks, or operations in each partition of a system. Each partition can represent a substrate, package, MCM, or larger component.