CMP EMBEDDED.COM

Login | Register     Welcome Guest  
HOME DESIGN PRODUCTS COLUMNS E-LEARNING CONFERENCES CODE FORUMS/BLOGS NEWSLETTERS CONTACT FEATURES RSS RSS

SoC++: A Unified Design Method from Concept to Implementation



TechOnline

Emerging process technology will enable the integration of dozens of processors onto a single chip. Such high chip densities support the integration of complete information and communication system-on-chip (SoC) designs. These SoCs include the complete information-processing path starting from the analog domain and the physical transport of bits, over network layer processing, and down to user-level multimedia presentation.

Unfortunately, the ease with which technology can integrate system specifications conflicts with the design process that brings these specifications into an implementation. This conflict is caused by each design discipline, such as DSP algorithm design, network performance simulation, hardware synthesis, and embedded software design, having its own tool and/or favorite design environment. The result of this lack of common tools and design environments is a system-level design flow consisting of a patchwork of scripts, translators, and tools.

There are major obstacles existing today for doing successful SoC design. There is no single system-level environment designers can use throughout the design flow. While algorithms might be designed at a high level in C, you still have to synthesize gates from an HDL description. Each manual-format translation, no matter how small, is a potential error source.

Up until now, system specification and initial design were traditionally based on natural-language documents and informal block diagrams, possibly supplemented by point tools, such as Matlab, for a more detailed exploration of specific design aspects. An executable model for the complete system is typically only constructed at the register-transfer (RT) level. However, this approach is not feasible for a 100-million-transistor chip that you need to design in a few months. There is a need for executable system models at a much higher level of abstraction.

There is also a lack of reuse mechanisms. Intensive reuse of silicon-intellectual-property (IP) blocks is the key to designing complex systems in a short time. Reuse is not just an issue of standards, but essentially requires new methodologies. IP block architectural and timing constraints have to be taken into account at the design's start. More specifically, these constraints must be modeled at the system level.

In many cases, designers have insufficient control over the design process. They have to accept the design produced by a synthesis tool. It is a problem that the synthesis tool is sold as a closed box, without designer visibility into how the tool does its job. In addition, there is a lack of a systematic verification strategy. For most designs, there are as many testbenches as there are tools used in the design flow.

At design-flow phases where the design representation undergoes drastic changes, such as during a transition from Matlab to Verilog, the development of corresponding or equivalent testbenches is extremely hard—if even possible.


Why Executable Modeling is Needed at Different Abstraction Levels
The need for a common language framework in which every aspect of an SoC design can be captured is only one part of a successful design. Several factors, inherent to the growing complexity of advanced information and communication systems, complicate the specification and design.

Typically, SoCs are increasingly heterogeneous, requiring different modeling paradigms at the conceptual and implementation levels. At the conceptual level, different models, such as dataflow and synchronous, are appropriate for different parts of the system. At the implementation level, the system—consisting of general-purpose processors, application-specific processors, on-chip busses, memories, reconfigurable hardware, and dedicated hardware—has very substantial software content. Consequently, you need a mix of formalisms to efficiently model such heterogeneous systems at different abstraction levels.

The exponential increase of data and media communications systems requires the integration of high-speed networking onto silicon. This integration introduces a new breed of problems in the design flow. Dynamic memory management and dynamic processes are needed to implement such functionality. This requirement makes timing (or scheduling) and resource issues harder to analyze, but at the same time makes these issues more important.

The vast majority of new designs are variations or combinations of existing designs. When a complete system is integrated on a chip, replacing some components can no longer create new versions. Instead, you need to modify a more abstract model of the system. Documentation of design decisions and trade-offs for the original design are necessary to guide such modifications.

Finally, advanced complex systems are often created under changing requirements, even with the presence of unstable standards. It is usually difficult or even impossible to completely specify the required system functionality before starting the design effort. IMEC developed its design environment, SoC++, starting from the belief that system design should be based on an executable model in which the designer can concurrently refine functionality, structure, and timing from concept to implementation. The executable model should support different modeling styles and be easily extensible.

SoC++ is based on object-oriented system design using the standard ANSI C/C++ language. SoC++ provides a powerful and flexible modeling environment supporting different abstraction levels. The modeling primitives to efficiently construct executable system-level descriptions are provided by C++ extended with class libraries. A time-aware multi-thread library, TIPSY, supports concurrency and time in an executable model of an SoC.


SoC++ Design Flow
System design starts with a system-requirement specification phase followed by an architecture-definition phase. The system is divided in subsystems. For every subsystem, an analysis is made (Figure 1). These phases are typically covered by OMT/UML-based methodologies. The next step is designing every subsystem. Here hardware and software design follows very different design flows. However, for both designs C++ based environments exist, resulting in executable specifications.

Figure 1: System-level design flow

The starting point in IMEC's SoC++ is a unified model to represent both hardware and software, allowing a fast exploration of hardware/software partitioning alternatives (Figure 2). This unified modeling has the advantage that switching a process from hardware to software implementation does not require a code rewrite. The model is executable and can be refined to either hardware or software. It is the most abstract—yet executable—level of description and is called uncommitted parallel processes. Uncommitted means that the model has maximum parallelism (all threads run virtually in parallel on different processors), zero execution time, and unlimited communication resources (a dedicated channel for every communication).

Figure 2: SoC++ design flow

The goal of the implementation-refinement process is to arrive at a fully committed model. Within this model, all processes are annotated with realistic execution times, processes are allocated to processors with priorities defined, and all inter-process communication channels are allocated to a communication resource. The process implements intra-processor communications towards an RTOS-based implementation, whereas inter-processor communications require hardware-software interfaces.

From the fully committed communicating-process model, you need to generate application-software code for every software processor. For hardware targets, SoC++ automatically generates synthesizable VHDL or Verilog code. Throughout this design process, you can simulate the complete system—including models of the hardware at different abstraction levels—to verify functionality, timing, and performance (Figure 3). To support this easy construction of executable system specifications, C++ has been extended with different class libraries, such as OCAPI, SoCOS, and Tipsy.

Figure 3: Levels of abstraction in SoC++


Hardware Design of Complex Digital Systems
As discussed previously, many bottlenecks exist in the hardware design of complex digital systems. To solve these problems, IMEC developed the OCAPI library. Applications of OCAPI include hardware design of DSP functions and protocol processors.

Capturing behavior at a high level is essential for doing algorithmic design and exploration. OCAPI initially captures behavior as a dataflow description, much in the same way as an environment like Synopsys' COSSAP or Cadence's SPW captures behavior. One difference is that the system description in OCAPI is a C++ program, where other design environments are block-diagram-based.

OCAPI offers the possibility to do detailed design hardware design, similar to traditional HDL environments. To provide this capability, OCAPI includes a set of objects that allow describing hardware at the RT level. In addition, these objects can be co-simulated with a high-level dataflow description. Furthermore, you can automatically translate a C++ description made in terms of OCAPI objects to VHDL. This avoids making manual translations between equivalent design representations. In addition, the translation includes the generation of VHDL testbenches and test vectors, which you can use to repeat HDL simulations along with the C++ simulation.

OCAPI supports incremental refinement, allowing a smooth transition from pure behavioral descriptions down to architecture descriptions. You can co-simulate dataflow and architecture descriptions. In addition, you can also freely mix floating-point and fixed-point datatypes.


Effective IP Reuse
In traditional hardware-design environments, reuse is focused at the structural level, which creates some problems. A component is made reusable by matching it to a standard interface. This interface defines input/output signals, these signals' timing interface, and other characteristics. With this interface, the component's internals are hidden as designer IP, while the component can still be reused. However, reuse is a matter of reusing functionality, not structure. A component can often be almost reused, but requires additional encapsulation to match the desired behavior for the new system. For instance, a digital filter can have the ideal characteristics and performance for a modem system, but will contain a serial coefficient programming input instead of the required parallel one for the modem.

Next, structural reuse seals the behavior of a component in a closed box behind the reuse interface. You can only manipulate this reused behavior indirectly through this interface. For instance, introducing a wait state in the operation of a memory controller might require cumbersome interface manipulations. Current hardware-development environments are good for capturing, simulation, and synthesizing hardware components. These environments, however, do a poor job in manipulating the same descriptions. For example, VHDL defines a component as an entity with a well-defined port set. It is not possible to strip the entity's ports dependent on some external design condition.

SoC++ solves these reuse limitations by using the object-oriented features of C++. In an object-oriented environment, reuse is a natural way of doing design. For hardware design, you can have datapath elements as register objects. You can also have more abstract control elements, such as finite-state-machine objects. You can create new objects either by relying on genuine C++ mechanisms such as inheritance, object composition, or templates, or by manipulating an existing object hierarchy. In this way, the reuse interface moves from a structural level to a behavioral level—to the set of objects you use to describe hardware.


SoCOS: Middleware for SoC Design
The SoCOS library supports modeling, simulation, and analysis of SoC designs during the system-level design phases. The library also supports an efficient refinement path for embedded software. SoCOS provides the glue to combine different computational models at mixed abstraction levels in an executable specification—the library serves as middleware enabling a seamless SoC design.

Embedded software makes SoC designs essentially dynamic, which is why an efficient SoC modeling environment must include dynamic behavior. Such behavior is analogous to the services an operating system offers in the software world, hence the term System-on-Chip Operating System (SoCOS).

In addition, the designer needs to model the real-time aspects of the system in an early phase of the design. SoCOS supports executable modeling of both functional and timing behavior of dynamic real-time multi-threaded systems. A system model in SoCOS consists of communicating processes. Each process is executed in a separate thread in the OS. You can create processes statically or dynamically. Processes have communication ports connected to communication channels. You can also statically or dynamically create these communication channels.

SoCOS supports a combination of several computational models in a single executable specification. A designer can distinguish asynchronous, reactive, and synchronous models. Asynchronous models communicate with the rest of the system without any relationship to a system-wide clock. Reactive models contain processes that are triggered by an event on a communication channel. These models are very similar to interrupt routines in software and are dynamic by nature. Synchronous models communicate with the rest of the system on clock edges. SoCOS allows simulating OCAPI hardware models together with SoCOS software models. In addition, SoCOS supports performance verification and refinement of both concurrency and communication aspects of a design.

After refining the scheduling and communication of the embedded software, you generate RTOS-based embedded software code (Figure 4). In this step, every SoCOS system call, present in the communicating process model, is replaced by a corresponding piece of code based on an RTOS library. In this translation, you guarantee the behavior to be consistent, while the implementation overhead of SoCOS is replaced by an efficient RTOS implementation. Finally, the embedded software code is co-simulated in the system model using an OCAPI library. OCAPI provides the functionality of a typical RTOS to the application code. This functionality is implemented on top of the underlying SoCOS simulation environment. This approach can be used to co-simulate either existing software code or generated code with the rest of the system model. The simulation is useful both as a final verification of embedded-software functionality and as a reference before transferring the software to the target processor.

Figure 4: Software refinement path


Supporting Concurrency and Time
Modeling of functionality, structure, and timing of a heterogeneous system at different levels of abstraction requires a mix of features that cannot be found in any existing language. In addition, plain C++ system models are often inflexible due to the centralized representation of concurrency and time—typically a loop in the main program. To solve this, IMEC extended C++ with the class library TIPSY (TImed Parallel SYstem modeling). TIPSY supports a decentralized notion of concurrency and time in an executable model of an SoC.

A limitation in traditional languages and environments for system modeling is that they usually stress the specification of functionality at a high level of abstraction without taking into account architecture and timing. However, industrial experience shows that architecture and timing are equally important at the beginning of the design process. TIPSY encourages modeling of architecture and timing in an initial abstract model and then supports concurrent refinement of functionality, architecture, and timing. This approach to system design is similar to solving a jigsaw puzzle: key pieces such as border pieces and pieces with easily recognizable features are placed first with the remaining holes filled later.

TIPSY models concurrency by using non-preemptive multithreading. Threads or tasks can dynamically spawn and kill other tasks, and can block (suspend) until resumed by another task or a timeout. For efficiency reasons, each task has a local copy of the current time and tasks synchronize their local times only when they communicate. Inter-task communication is based on shared data, for the practical reason that it is the basic communication mechanism available in a multi-threading environment. Shared data allows an efficient implementation of other communication primitives. Before accessing shared data, a task must synchronize its local copy of the current time with that of the other tasks. This ensures that shared data accesses are executed in correct time order.

TIPSY is the foundation for a rich set of C++ libraries supporting different modeling paradigms that can be easily combined using TIPSY's common notion of concurrency and time (Figure 5). Moreover, TIPSY supports the modeling of RTOS schedulers and preemption in a very efficient way. This becomes increasingly important, since an increasingly large part of a SoC design consists of software running on an embedded processor under the control of an RTOS.

Executable specifications based on TIPSY give the designer early feedback about the functional and timing correctness of the design. These specifications also allow the designer to check the consistency of the system before and after design refinements.

Figure 5: TIPSY is the foundation for multiple modeling paradigms


SoC++ Design of an ADSL Modem
Throughout its development, the applicability of the SoC++ environment has been used on several demonstrator designs that have been brought to working implementations. This is an essential factor in the success of SoC++.

The demonstrator designs have been related to IMEC's Intelligent Home project. The designs include a cable modem, an image-compression unit, a wireless LAN modem, and an Internet appliance. Several embedded-software design projects are finished, including the design of an industrial strength firmware simulation of an ADSL (Asymmetric Digital Subscriber Line) modem.

The ADSL modem (Figure 6) contains a number of DSP functions, implemented in hardware, and a number of initialization and synchronization functions, implemented in software, on an embedded ARM processor. The hardware functions are modeled in approximately 15,000 lines of C++ code. The software functions are modeled using a reactive computational model in approximately 20,000 lines of C++ code. The model allows verification of the correct operation of the initialization and run-time behavior of the ADSL system. The modem initialization sequence takes 10 seconds in real time. The model execution of these 10 seconds takes less than 30 minutes of CPU time. Because of its efficiency, you can use the model to explore different embedded-software implementations.

Figure 6: Architecture of an executable model of ADSL modem


The Future
Future work in SoC++ concentrates on two areas. First, SoC++ needs to improve system-level specification paradigms. While SoC design already has a rich set of specification paradigms, the coupling among these paradigms is not worked out very well, and is restricted to co-simulation. IMEC focuses on co-design with different paradigms and approaches this problem as object-oriented design.

The second area of desired innovation relates to refinement strategies for mixed hardware/software systems. Recently there has been increasing diversification of SoC architectures. New classes of processors and processing systems are announced every few weeks. These systems go beyond the classic view of layered, hierarchical software and hardware systems. The systems contain reconfigurable elements in their basic set of operators, which allow tuning of communication and computing architectures at runtime. The future SoC++ environment will introduce support for runtime reconfiguration both at the hardware and software design levels.


About the Author
Katrien Marent has an engineering degree in microelectronics. She joined IMEC in 1992 as an analog designer, specializing in the design of low-noise readout electronics for high-energy physics. She is currently a scientific editor at IMEC and responsible for authoring and editing the research organization's numerous technical documents and publications.

1

Rate this article: Low High
Current rating
  • .
Embedded.com Career Center
Looking for a new job?
SEARCH JOBS

Browse all jobs

SPONSOR
RECENT JOB POSTINGS



WEBINAR
WEBINAR
WEBINAR
WEBINAR




 :