Top Banner
Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski, Samar Abdi, Andreas Gerstlauer, Gunar Schirner 6/15/2010 Chapter 5: Software Synthesis
53

Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Mar 17, 2018

Download

Documents

trinhque
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System DesignEmbedded System Design Modeling, Synthesis, Verification

Daniel D. Gajski, Samar Abdi, Andreas Gerstlauer, Gunar Schirner

6/15/2010

Chapter 5: Software Synthesis

Page 2: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 2Chapter 5: Software Synthesis

SW Synthesis within Overall Design Flow

• MoC• Capture application

• System Synthesis • Define system wide

decisions • System model

• Estimate / analyze system wide decisions

• Component synthesis• Generate component

implementation• Software Synthesis

Produce SW binary for exec on processor

HDL RTL

Binary Code

Hardware Synthesis

Software Synthesis

Interface Synthesis

System Synthesis

System Model

Model of Computation

Page 3: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 3Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 4: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 4Chapter 5: Software Synthesis

Motivation

• Increasing complexity of Multi-Processor System-on-Chip (MPSoCs)• Feature demands• Production capabilities + Implementation freedom

• Increasing software content• Flexible solution• Addresses complexity

• How to create SW for MPSoC?• Avoid break in ESL flow:

– Synthesize SW from abstract models

Source: simh.trailing-edge.com

?

SW

Page 5: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 5Chapter 5: Software Synthesis

PICHW IP1

Proc 1

Processor Bus 1

HALInt.RTOS

Drivers

SW Application

Mem

PIC

Proc N

HALInt.RTOS

Drivers

SW Application

Mem

... CE

...

...

Goals

• Generate SW binaries for MPSoC from abstract specification• Eliminate tedious, error prone SW coding• Rapid exploration• High-level application development• Support wide range of system sizes

– with RTOS / without RTOS (i.e. interrupt-driven)

Page 6: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 6Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 7: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 7Chapter 5: Software Synthesis

Embedded Software Challenges

• SW tightly coupled• Underlying HW (accelerator)• Part of a physical control loop

• Time constrained• Correctness depends on time frame

– Too late functional correct answer still wrong

• Concurrent• Different jobs at same time

• Resource constraint• Footprint and memory consumption • Computing power• Energy consumption

Embedded System

Controller Actuator

Sensor

Physical System

Page 8: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 8Chapter 5: Software Synthesis

Example Target Languages• Assembly

• Basically a symbolic representation of machine code– Fine grained control: Registers, Instructions

• C• General purpose programming language, including level features

– Bit operations, direct memory management• Low run-time overhead• Coding standards for portability

– E.g. MISRA (automotive)• C++

• Backward compatible to C• Facilitates object oriented programming

• Java• Portability!• Hides memory management, pointer arithmetic • Interpreted (JVM), ahead of time and Just in Time (JIT) compiled• Java accelerators (e.g. ARM Jazelle), Java processors• Real-time extension: Real-time Specification for Java (RTSJ)

Page 9: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 9Chapter 5: Software Synthesis

Real-Time Operating System (RTOS)

• Similar to general purpose operating system• SW layer above HAL• Provides services for

– Concurrent execution– Communication– Synchronization– Resource management

• Real-Time Operating System• Facilitates constructing real-time systems• Predictable response time• Hard real-time

– Catastrophic failure on deadline miss

• Soft real-time– Missing some deadlines tolerable

Page 10: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 10Chapter 5: Software Synthesis

Real-Time Operating System (RTOS)

• Characteristics of scheduling policies– Preemptive / Non-preemptive– Static / Dynamic– Off-line / On-line

• Example scheduling policies– Priority-based– Earliest Deadline First (EDF)– Rate Monotonic (RM)

Page 11: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 11Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 12: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

• Multi-core target platform• Processors

– PIC, Timer, MEM

• HW IP• Communication

Element– E.g. Transducer

• Bus hierarchy• Generate for each core

• Application• Drivers to communicate with

– Other cores– Accellerator IP– Communication Elements– External Memory

6/15/2010 12Chapter 5: Software Synthesis

PICHW IP1

Proc 1

Processor Bus 1

HALInt.RTOS

Drivers

SW Application

Mem

PIC

Proc N

HALInt.RTOS

Drivers

SW Application

Mem

... CE

...

...

Software Synthesis Overview

Page 13: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 13Chapter 5: Software Synthesis

System Design Flow Overview

Input specification (review)• Capture Application in MoC, then SLDL

• Computation– Organize code in behaviors (processes)

• Communication– Point-to-point channels, feature-rich

» Synchronous / Asynchronous» Blocking / Non-Blocking» Synchronization only (e.g. semaphore, mutex, barrier)

• Architecture decisions:• Processor(s)• HW component(s)• Busses• Mapping• …

Cust. HW,100MHz

Cust. HW,100MHz

AMBA AHB

ARM7TDMI,100MHz

Pla

tform

B2 B3C1

C2

B1

B5

C3 B4

C4

Spec

ifica

tion

Page 14: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 14Chapter 5: Software Synthesis

System Design Flow Overview

• System synthesis output: system TLM• Functional timed abstract model• Reflects system-wide decisions

CoreHALOSCPU

TaskB2

C1

B1

TaskB3C2

RTOS MODEL

HWInt

TimerPIC

SourceStatusMask

ControlLoadValue

INTCINTBINTA

HW1B4

HW2

B5

INT

INT

TLM

SysInt

Driv

erD

river

MAC

INTA INTB INTC

UsrInt1 UsrInt2

MAC

Driver

MAC

Driver

Sem1Sem2

Page 15: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 15Chapter 5: Software Synthesis

Software Synthesis Overview

• Code Generation• Generate application code inside each task• Resolve behavioral hierarchy into flat C code

• Hardware-dependent Software (HdS) Generation• Multi-task Generation

– Tasks -> RTOS

• Communication Synthesis– Drivers

• Binary Image Generation– Cross Compile and Link

• Binary executable on• Actual Hardware Platform• Virtual Platform with

integrated ISS

Software Synthesis

Code Generation

HdS Generation

SW DB- RTOS- Wrapper- HAL

Cross Compiler and Linker

TLM

C Code Build, Config.

Target Binary

Virtual Platform Exec.Hardware Platform Exec.

CommunucationMulti-tasking

Binary Image

Page 16: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 16Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 17: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 17Chapter 5: Software Synthesis

Code Generation

• Rational:• TLM in SLDL (e.g. SystemC, SpecC)• SLDL system level optimized, not target

– Generic for any architecture » Hierarchical composition of concurrent modules» Connectivity between modules» Communication encapsulation» Hardware concepts

• Inefficient direct compilation to target– Large simulation kernel on target

• Need efficient (footprint, memory, speed) target implementation

• Translate system model to target language– SystemC -> ANSI-C

Page 18: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 18Chapter 5: Software Synthesis

Code Generation

• Generate sequential code executing in a task• Remove SLDL specific concepts • Resolve hierarchy and connectivity into flat C code

– Set of C structs: Behaviors / channels» Member variables + Port connectivity

– Global functions + context pointer (*pThis)

Rules for C code generation1. Module resolution

Behaviors and channels are converted into C struct2. Hierarchy translation

Child behaviors and channels are instantiated as C struct members inside the parent C struct3. Variable translation

Variables defined inside a behavior or channel are converted into data members of the corresponding C struct

4. Port resolutionPorts of behavior or channel are converted into data members of the corresponding C struct

5. Method globalizationFunctions inside a behavior or channel are converted into global functions

6. Global context creationA static struct instantiation for each PE is added to allocate/initialize the data used by SW

Page 19: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 19Chapter 5: Software Synthesis

Code Generation

• Example• Sequential executing b11, b12

– Instances of channel class B1

• Port bound to ch1, ch2– Instances of channel class CH1

TaskB2b11

b12

ch1

ch2

Page 20: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 20Chapter 5: Software Synthesis

Code Generation

1) Module resolution

struct B1 {struct CH1 *myCh; /* port iChannel*/int A;

};struct TaskB2 {struct B1 b11, b12; struct CH1 ch11, ch12;

}; void B1_main(struct B1 *This) { (This->A) = 1;CH1_chCall(This->myCh, (This->A)*2);

}void TaskB2_main(struct TaskB2 *This){ B1_main(&(This->b11));B1_main(&(This->b12));

}struct TaskB2 taskB2= {{&(taskB2.ch11),0/*A*/}/*b11*/,{&(taskB2.ch12),0/*A*/}/*b12*/,{} /*ch11*/, {} /*ch12*/

};void TaskB2() {TaskB2_main( &task1);

}

123456789

101112131415161718192021222324

SC_MODULE(B1){int A;sc_port<iChannel> myCh;SC_CTOR(B1){}void main(void) {

A = 1;myCh->chCall(A*2);

}};

SC_MODULE(TaskB2){CH1 ch11, ch12; //channel instB1 b11, b12; //module instSC_CTOR(TaskB2):

ch11("ch11"), ch12("ch12"),b11("b11"), b12("b12") {b11.myCh(ch11); // connect ch11b12.myCh(ch12); // connect ch12

}void main(void) {

b11.main();b12.main();

}};

123456789

101112131415161718192021222324

SystemC task specification ANSI-C task code

TaskB2b11

b12

ch1

ch2

Page 21: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 21Chapter 5: Software Synthesis

Code Generation

2) Hierarchy translation

struct B1 {struct CH1 *myCh; /* port iChannel*/int A;

};struct TaskB2 {struct B1 b11, b12; struct CH1 ch11, ch12;

}; void B1_main(struct B1 *This) { (This->A) = 1;CH1_chCall(This->myCh, (This->A)*2);

}void TaskB2_main(struct TaskB2 *This){ B1_main(&(This->b11));B1_main(&(This->b12));

}struct TaskB2 taskB2= {{&(taskB2.ch11),0/*A*/}/*b11*/,{&(taskB2.ch12),0/*A*/}/*b12*/,{} /*ch11*/, {} /*ch12*/

};void TaskB2() {TaskB2_main( &task1);

}

123456789

101112131415161718192021222324

SC_MODULE(B1){int A;sc_port<iChannel> myCh;SC_CTOR(B1){}void main(void) {

A = 1;myCh->chCall(A*2);

}};

SC_MODULE(TaskB2){CH1 ch11, ch12; //channel instB1 b11, b12; //module instSC_CTOR(TaskB2):

ch11("ch11"), ch12("ch12"),b11("b11"), b12("b12") {b11.myCh(ch11); // connect ch11b12.myCh(ch12); // connect ch12

}void main(void) {

b11.main();b12.main();

}};

123456789

101112131415161718192021222324

SystemC task specification ANSI-C task code

TaskB2b11

b12

ch1

ch2

Page 22: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 22Chapter 5: Software Synthesis

Code Generation

3) Variable translation

struct B1 {struct CH1 *myCh; /* port iChannel*/int A;

};struct TaskB2 {struct B1 b11, b12; struct CH1 ch11, ch12;

}; void B1_main(struct B1 *This) { (This->A) = 1;CH1_chCall(This->myCh, (This->A)*2);

}void TaskB2_main(struct TaskB2 *This){ B1_main(&(This->b11));B1_main(&(This->b12));

}struct TaskB2 taskB2= {{&(taskB2.ch11),0/*A*/}/*b11*/,{&(taskB2.ch12),0/*A*/}/*b12*/,{} /*ch11*/, {} /*ch12*/

};void TaskB2() {TaskB2_main( &task1);

}

123456789

101112131415161718192021222324

SC_MODULE(B1){int A;sc_port<iChannel> myCh;SC_CTOR(B1){}void main(void) {

A = 1;myCh->chCall(A*2);

}};

SC_MODULE(TaskB2){CH1 ch11, ch12; //channel instB1 b11, b12; //module instSC_CTOR(TaskB2):

ch11("ch11"), ch12("ch12"),b11("b11"), b12("b12") {b11.myCh(ch11); // connect ch11b12.myCh(ch12); // connect ch12

}void main(void) {

b11.main();b12.main();

}};

123456789

101112131415161718192021222324

SystemC task specification ANSI-C task code

TaskB2b11

b12

ch1

ch2

Page 23: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 23Chapter 5: Software Synthesis

Code Generation

4) Port resolution

struct B1 {struct CH1 *myCh; /* port iChannel*/int A;

};struct TaskB2 {struct B1 b11, b12; struct CH1 ch11, ch12;

}; void B1_main(struct B1 *This) { (This->A) = 1;CH1_chCall(This->myCh, (This->A)*2);

}void TaskB2_main(struct TaskB2 *This){ B1_main(&(This->b11));B1_main(&(This->b12));

}struct TaskB2 taskB2= {{&(taskB2.ch11),0/*A*/}/*b11*/,{&(taskB2.ch12),0/*A*/}/*b12*/,{} /*ch11*/, {} /*ch12*/

};void TaskB2() {TaskB2_main( &task1);

}

123456789

101112131415161718192021222324

SC_MODULE(B1){int A;sc_port<iChannel> myCh;SC_CTOR(B1){}void main(void) {

A = 1;myCh->chCall(A*2);

}};

SC_MODULE(TaskB2){CH1 ch11, ch12; //channel instB1 b11, b12; //module instSC_CTOR(TaskB2):

ch11("ch11"), ch12("ch12"),b11("b11"), b12("b12") {b11.myCh(ch11); // connect ch11b12.myCh(ch12); // connect ch12

}void main(void) {

b11.main();b12.main();

}};

123456789

101112131415161718192021222324

SystemC task specification ANSI-C task code

TaskB2b11

b12

ch1

ch2

Page 24: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 24Chapter 5: Software Synthesis

Code Generation

5) Method globalization

struct B1 {struct CH1 *myCh; /* port iChannel*/int A;

};struct TaskB2 {struct B1 b11, b12; struct CH1 ch11, ch12;

}; void B1_main(struct B1 *This) { (This->A) = 1;CH1_chCall(This->myCh, (This->A)*2);

}void TaskB2_main(struct TaskB2 *This){ B1_main(&(This->b11));B1_main(&(This->b12));

}struct TaskB2 taskB2= {{&(taskB2.ch11),0/*A*/}/*b11*/,{&(taskB2.ch12),0/*A*/}/*b12*/,{} /*ch11*/, {} /*ch12*/

};void TaskB2() {TaskB2_main( &task1);

}

123456789

101112131415161718192021222324

SC_MODULE(B1){int A;sc_port<iChannel> myCh;SC_CTOR(B1){}void main(void) {

A = 1;myCh->chCall(A*2);

}};

SC_MODULE(TaskB2){CH1 ch11, ch12; //channel instB1 b11, b12; //module instSC_CTOR(TaskB2):

ch11("ch11"), ch12("ch12"),b11("b11"), b12("b12") {b11.myCh(ch11); // connect ch11b12.myCh(ch12); // connect ch12

}void main(void) {

b11.main();b12.main();

}};

123456789

101112131415161718192021222324

SystemC task specification ANSI-C task code

TaskB2b11

b12

ch1

ch2

Page 25: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 25Chapter 5: Software Synthesis

Code Generation

6) Global context creation

struct B1 {struct CH1 *myCh; /* port iChannel*/int A;

};struct TaskB2 {struct B1 b11, b12; struct CH1 ch11, ch12;

}; void B1_main(struct B1 *This) { (This->A) = 1;CH1_chCall(This->myCh, (This->A)*2);

}void TaskB2_main(struct TaskB2 *This){ B1_main(&(This->b11));B1_main(&(This->b12));

}struct TaskB2 taskB2= {{&(taskB2.ch11),0/*A*/}/*b11*/,{&(taskB2.ch12),0/*A*/}/*b12*/,{} /*ch11*/, {} /*ch12*/

};void TaskB2() {TaskB2_main( &task1);

}

123456789

101112131415161718192021222324

SC_MODULE(B1){int A;sc_port<iChannel> myCh;SC_CTOR(B1){}void main(void) {

A = 1;myCh->chCall(A*2);

}};

SC_MODULE(TaskB2){CH1 ch11, ch12; //channel instB1 b11, b12; //module instSC_CTOR(TaskB2):

ch11("ch11"), ch12("ch12"),b11("b11"), b12("b12") {b11.myCh(ch11); // connect ch11b12.myCh(ch12); // connect ch12

}void main(void) {

b11.main();b12.main();

}};

123456789

101112131415161718192021222324

SystemC task specification ANSI-C task code

TaskB2b11

b12

ch1

ch2

Page 26: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 26Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 27: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 27Chapter 5: Software Synthesis

Multi-Task Synthesis

• Variants• RTOS-based

– General solution– Off-the-shelf RTOS– Flexible, well tested

HALInterruptsRTOS Abstraction Layer (emul.)

DriversSW Application

• Interrupt-based– Few reactive tasks – Resource constraints

inhibit RTOS– Unavailability of RTOS– E.g. DSP with encoder /

decoder application

HALInterruptsRTOS

RTOS Abstraction LayerDrivers

SW Application

Page 28: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 28Chapter 5: Software Synthesis

RTOS-based Multi-Tasking

• Based on off the shelf RTOS • e.g. μC/OS-II, eCos, vxWorks

• Uses RTOS Abstraction Layer (RAL)• Canonical interface

– Limits interdependency RTOS / Synthesis

• Multi-task synthesis• Generate task management code• Adjust internal communication

• RTOS-based multi-tasking example• Parent B2B3• Two parallel child tasks:

– TaskB2– TaskB3

OSCPU

B2B3

TaskB2 TaskB3

RTOS

HALInterruptsRTOS

RTOS Abstraction LayerDrivers

SW Application

Page 29: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 29Chapter 5: Software Synthesis

Multi-Task Synthesis

• RTOS-based multi-tasking example

SC_MODULE(B2B3) {public:

sc_port<iRTOS> rtos; TaskB2 taskB2;TaskB3 taskB3;SC_CTOR(B2B3):

taskB2("taskB2", 5, 4096), taskB3("taskB3", 2, 4096) { taskB2.rtos(rtos);taskB3.rtos(rtos);

}void main(void) {

taskB2.release();taskB3.release();taskB2.join();taskB3.join();

}};

123456789

101112131415161718

struct B2B3{ struct TaskB2 task_b2;struct TaskB3 task_b3;};

void *TaskB2_main(void *arg){ struct TaskB2 *this=(struct TaskB2*)arg;/* ...*/

}void *TaskB3_main(void *arg){ struct TaskB3 *this=(struct TaskB3*)arg;/* ... */

}void *B2B3_main(void *arg){

struct B2B3 *this= (struct B2B3*)arg; os_task_handle task_b2, task_b3;task_b2 = taskCreate(TaskB2_main,

&this->taskB2, 5, 4096);task_b3 = taskCreate(TaskB3_main,

&this->taskB3, 2, 4096);

taskJoin(task_b2);taskJoin(task_b3);

}

123456789

10111213141516171819202122

SystemC

ANSI-C

B2B3

TaskB2 TaskB3

Page 30: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 30Chapter 5: Software Synthesis

Interrupt-based multi-tasking

• Alternative multi-tasking• Few tasks• Resource constraints

– Memory, footprint, performance

• Unavailability of RTOS port

• Overview • Use interrupts for

threads of execution• Emulate minimal RTOS

services– E.g. suspend, synchronize

HALInterrupts

RTOS Abstraction Layer(emulation)

DriversSW Application

Custom HW

DSP 5660k

Encoder

Decoder

INTDINTCINTB Codebook

search Cust. HW Cust. HWCust. HWCust. HW

Enc. Input

Enc. Output

Dec. Input

Dec. Output

DSP Port AINTA

Page 31: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 31Chapter 5: Software Synthesis

Interrupt-based multi-tasking

• Procedure overview• Convert tasks to state machine• Execute state machine in interrupt handler• Execute lowest priority task as main()

• Assume only interrupt synchronization• Code composed of

• Computation Cn• Synchronization Sn, • Data transfer Tn• Interrupt sych. In

• Convert task code to state machine• New state for each synchronization

– E.g. ST2, ST3

• New state for each conditional– E.g. Loop: ST0, ST1

• Execute state machine in interrupt

C0ST0

C1ST1

S1T1C2

ST2

ST3

S2T2

C0

C1

S1 ( I1)

C2

S2 ( I2)

T1

T2

Page 32: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 32Chapter 5: Software Synthesis

/* interrupt handler */void intHandler_I1() {

release(S1); /* set S1 ready */executeTask0(); /* task state machine */

}/* task state machine */void executeTask0() {

do { switch(Task0.State) {/* ... */

case ST1: C1(...);Task0.State = ST2;

case ST2: if(attempt(S1)) T1_receive(...);

else break;C2(...);Task0.State = ST3;

case ST3: /* ... */} } while (Task0.State == ST1);

}

Multi-Task Synthesis

• Interrupt-based multi-tasking example• Example execution

– Assume computation C1 [line 10] just finished– New state ST2– Attempt S1

» Unavailable» ISR terminates

– Receive I1– Release S1– executeTask0()– Continue ST2– Attempt S1

» Available

– Continue

12345678910111213141516171819

C0S 0

C1ST1

S1T1C2

ST2

ST3

S2

Page 33: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 33Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 34: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 34Chapter 5: Software Synthesis

Internal Communication

• Communication within processor• Replace with target specific implementation

– e.g. RTOS semaphore, event, msg. queue

CoreHALOSCPU

TaskB2

C1

B1

TaskB3C2

RTOS MODEL

HWInt INT

SysInt

Driv

erD

river

MAC

INTA INTB INTC

UsrInt1 UsrInt2Sem1Sem2

Page 35: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 35Chapter 5: Software Synthesis

Internal Communcation

• Implementation example• Single handshake

– One way synchronous without data

• Xilkernel (Xilinx proprietary RTOS) implementation– Semaphore-based

/** SHS OS-specific struct */typedef struct {sem_t req; /** os semaphore */

} tCh_shs;void Shs__init(tCh_shs *pThis){int retVal = sem_init(&pThis->req, 0, 0);/* ... error handling */

}void Shs_send(tCh_shs *pThis){int retVal = sem_post(&pThis->req);/* ... error handling */

}void Shs_receive(tCh_shs *pThis){int retVal = sem_wait(&pThis->req);/* ... error handling */

}

12345678910111213141516

Page 36: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 36Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 37: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 37Chapter 5: Software Synthesis

External Communication

• Communication outside of processor• E.g. with HW Accelerator

• ISO / OSI layered to support heterogeneous architectures• Data formatting• Packetization• Synchronization• MAC CoreHALOS

CPU

TaskB2

C1

B1

TaskB3C2

RTOS MODEL

HWInt

TimerPIC

SourceStatusMask

ControlLoadValue

INTCINTBINTA

HW1B4

HW2

B5

INT

INT

TLM

SysIntD

river

Driv

er

MA

C

INTA INTB INTC

UsrInt1 UsrInt2

MAC

Driver

MAC

Driver

Sem1Sem2

Page 38: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 38Chapter 5: Software Synthesis

External Communication

• Data formatting (marshalling)• Problem: different memory representation for same data

– Endianess (byte order)– Packing rules– Bit widths for data types

• Convert typed data into flat untyped byte stream– Interpretable by everybody

tReqlongshortunsigned short

startTime

byte

coeff1base

startTime coeff1 base

Page 39: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 39Chapter 5: Software Synthesis

External Communication

• Data formatting example:• Marshalling code uses

– hton<datatype>– ntoh<datatype>

typedef struct stReq {long startTime;short coeff1;unsigned short base;

} tReq;

12345

void myCh_send(/* ...*/ *This, struct tReq *pD){

unsigned char *pB = This->buf;htonlong(pB, pD->startTime);pB += 4;htonshort(pB, pD->coeff1);pB += 2;htonushort(pB, pD->base);pB += 2; DLink0_trans_send(/*...*/This->buf, 8);

}

1234567891011

User type definition Marshalling code

Page 40: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 40Chapter 5: Software Synthesis

External Communication

• Packetization

• Break user defined length stream into packets• Limit storage requirements during transport (CEs)

Packet 1 Packet 2

Byte stream

PIC

Proc 1

Processor Bus 1

HALInt.RTOS

Drivers

SW Application

Mem

CE

HW IP1

IP Bus 1

Page 41: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 41Chapter 5: Software Synthesis

External Communication

• Packetization example code• Transmits input pMsg, of length len in packets of up to

CONFIG_PACKET_SIZE

DLink0_trans_send(void *pMsg, unsigned int len){unsigned char *pPos = pMsg;while(len) {

unsigned long pktLen;/* length is minimum of max size and len */pktLen = min(len, CONFIG_PACKET_SIZE);

DLink0_net_send(pPos, pktLen); /* transfer */

len -= pktLen; /* decr. transferred len */pPos += pktLen; /* advance pointer */

}}

12345678910111213

Page 42: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 42Chapter 5: Software Synthesis

External Communication

• Synchronization• Ensure slave is ready before master initiates transaction

– Ready to receive data / Data ready

– Master / slave bus: Separate event– Node-based bus: Synchronization packet

• Processor synchronization options:– Interrupt

» Separate interrupt line connected to interrupt controller» Low latency » Interrupt overhead» Shared interrupts

– Polling» Master periodically checks slave using data connection» Polling period

– Hybrid solutions possible

curPwrid maxPwr fecCounter snr bitRate

ready?

time

Page 43: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 43Chapter 5: Software Synthesis

HW2HW1 PIC Processor CoreINT TaskB3 TaskB2regB5regB4

IntC 1234

Which Int.?

Int. Source?

Data Transfertime

t0t1

t2t5

t4 t5

Preemption by Int.Int

Sem1.send()

Co eOS

C U

TaskB2

C1 TaskB3C2

RTOS MODEL

HWInt INT

SysInt

Driv

erD

river

MAC

INTA INTB INTC

UsrInt1 UsrInt2Sem1Sem2

• Synchronization by interrupt1)Low level interrupt handler

– Preempts current task 2)System interrupt handler

– Checks PIC3)User-specific interrupt handler

– Handles shared interrupts4)Semaphore

– Releases task

External Communication

Page 44: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 44Chapter 5: Software Synthesis

External Synchronization

• Polling example1) Expect message, check ready?

– Suspend for polling period2) Check ready?

– Suspend for polling period3) Check ready?

– Finish synchronization4) Data transfer

HALOSCPU

TaskB2

C1

B1

TaskB3C2

RTOS MODEL

SysInt

Driv

erD

river

MA

C

INTA INTB INTC

UsrInt1 Sem1

HW2 PIC Processor CoreINT TaskB3 TaskB2

Data Transfertime

t0t1

t2t3

regB5Ready ?

Ready ?

Ready ?

4

1

2

3

Page 45: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 45Chapter 5: Software Synthesis

External Communication

• Media Access Control (MAC)• Provides access to bus medium

– Low level driver

• Break packet into bus transactions

• Simple drivers use processor memory interface– Memory mapped bus interface

• More complex communicate / synchronize with protocol controller

– I2C, CAN, FlexRay

Packet

StoreWord StoreWord StoreWord StoreWordBus

Primitives

Page 46: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 46Chapter 5: Software Synthesis

External Communication

• Media Access Control (MAC)• Example for memory mapped bus access

– Left: Cast integer addr to pointer, take value of– Right: Cast void *pD, to int pointer, get value– Assign value to “value of” results in bus transaction– Repeat for word, short, byte

void masterWrite(unsigned int addr, void *pData, unsigned int len) {unsigned char *pD = (unsigned char*)pData;while (len >= 4 ) {

*((unsigned int*)addr) = *((unsigned int*)pD);len -= 4; pD += 4;

}if (len >= 2 ) {/* remaning short */

*((unsigned short*)addr) = *((unsigned short*)pD);len -= 2; pD += 2;

}if (len >= 1) {/* the last byte */*((unsigned char*)addr) = *((unsigned char*)pD);len -= 1; pD += 1;

}}

123456789101112131415

Note: code assumes 32bit processor.

Page 47: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 47Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 48: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 48Chapter 5: Software Synthesis

Startup Code

• Initialize system and release tasks– Global data structure– Board Support Package (BSP)– Operating System– Create synchronization channels– Register interrupts– Create and

release user tasks void main(void) {PE_Struct_Init(&PE0);BSP_init();OSInit();

c_os_handshake_init(&PE0->sem1);c_os_handshake_init(&PE0->sem2);BSP_UserIrqRegister(INT1, Int1Handler, /*..*/);BSP_UserIrqRegister(INT2, Int2Handler, /*..*/);

taskCreate(task_b2b3, NULL, B2B3_main, &this->task_b2b3);

OSStart();}

123456789101112131415

Page 49: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 49Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 50: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 50Chapter 5: Software Synthesis

Binary Image Generation

• Generate binary for each processor• Generate build and configuration files

– Select software database components – Configure RTOS

• Cross compileand link

• Significant effortin DB design

– Minimize components

– Analyze dependencies

– Goal: flexible composition

Cross Compileand Link

Software Synthesis

TLM

Gene-ratedCode

Libs

Target Binary

SW DB- RTOS- Wrapper- HAL

Appl.Driver

Int.

Build and Configuration

RALRTOS

RTOS PortStartup

HAL

Pro

cess

or

RTO

S

Com

pile

r

Boa

rd

Code Gen. FW Synth.

Page 51: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 51Chapter 5: Software Synthesis

Outline

• Introduction • Preliminaries• Software Synthesis Overview

• Code Generation• Hardware-dependent Software

• Multi-Task Synthesis• Internal Communication• External Communication• Startup Code Generation• Binary Image Generation

• Execution• Summary

Page 52: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 52Chapter 5: Software Synthesis

Execution

• Validate binary image• Target processor on prototype• ISS-based virtual platform

CoreISS SLDL Wrapper

TimerPIC

SourceStatusMask

ControlLoadValue

INTCINTBINTA

HW1B4

Net

Prot

Link

HW2B5

Net

Prot

Link

INTINT

Prot

.

ISS Library Process

HALInterrupts

RTOS

RTOS Abstraction Layer

Drivers

SW Application

CoreHALOSCPU

TaskB2

C1

B1

TaskB3C2

RTOS MODEL

HWInt

TimerPIC

SourceStatusMask

ControlLoadValue

INTCINTBINTA

HW1B4

HW2

B5

INT

INT

TLM

SysInt

Driv

erD

river

MA

C

INTA INTB INTC

UsrInt1 UsrInt2

MAC

Driver

MAC

Driver

Sem1Sem2

Page 53: Embedded System Design - CECScecs.uci.edu/esd/slides/Ch5-SwSyn-2010-06-15.pdf · Embedded System Design Embedded System Design Modeling, Synthesis, Verification Daniel D. Gajski,

Embedded System Design© 2009: Gajski, Abdi, Gerstlauer, Schirner

6/15/2010 53Chapter 5: Software Synthesis

Summary

• Embedded software generation from system model• Including

– Communication synthesis (external / internal)– Multi-task synthesis– Binary image creation

• Integrated into ESL flow• Seamless solution

• Complete: from abstract model to implementation!• Completes ESL flow for software• Eliminates tedious and error prone manual HdS development• Significant productivity gain• Enables rapid design space exploration