Software and Runtime Environment

In this chapter we focus on the problem of synthesis of the software component of system design. We consider the software portion to be of limited size and mapped to real memory so that the issues related to virtual memory management are not relevant to this problem. The objective of software implementation is to generate a sequence of processor or machine instructions from the set of flow graph models. Due to significant differences in processor abstractions at the levels of graph model and machine instructions, this task is performed in two separate steps: (1) generation of a program in a high-level programming language, C; followed by (2) compilation of the program into machine instructions by a software compiler and an assembler for the processor. We assume that the processor is a predesigned general-purpose component with available compiler and assembler. Therefore, the important issue in software synthesis is the generation of the source-level program. Most of this chapter is devoted to this step of software synthesis. Towards the end of this chapter we discuss important issues related to software compilation and linking