Software For Embedded Systems Outline: - Models vs. Languages - State Machine Model
Software For Embedded Systems Outline: - Models vs. Languages - State Machine Model
Outline
Introduction
Describing embedded systems processing behavior
Can be extremely difficult
Complexity increasing with increasing IC capacity
Past: washing machines, small games, etc. Hundreds of lines of code Today: TV set-top boxes, Cell phone, etc. Hundreds of thousands of lines of code
All that just for crossing the street (and theres much more)!
CSE466-02au
Slide 3
CSE466-02au
Slide 4
Models
State machine
Sequent. program
Dataflow
Languages
English
Spanish
Japanese
C++
Java
Slide 5
Dataflow model
For data dominated systems, transforms input data streams into output streams
Object-oriented model
For breaking complex software into simpler, well-defined pieces
CSE466-02au
CSE466-02au
Move the elevator either up or down to reach the requested floor. Once at the requested floor, open the door for at least 10 seconds, and keep it open until the requested floor changes. Ensure the door is never open while moving. Dont change directions unless there are no higher requests when moving up or no lower requests when moving down
Unit Control
...
X = 1; Y = X + 1;
X=1
Y=X+1
...
dnN
CSE466-02au
Slide 7
CSE466-02au
Slide 8
System interface Partial English description Move the elevator either up or down to reach the requested floor. Once at the requested floor, open the door for at least 10 seconds, and keep it open until the requested floor changes. Ensure the door is never open while moving. Dont change directions unless there are no higher requests when moving up or no lower requests when moving down
Unit Control up down open floor req Request Resolver
...
You might have come up with something having even more if statements.
...
dnN
Try it...
CSE466-02au
CSE466-02au
Slide 9
Slide 10
Formal definition
An FSM is a 6-tuple F<S, I, O, F, H, s0>
S is a set of all states {s0, s1, , sl} I is a set of inputs {i0, i1, , im} O is a set of outputs {o0, o1, , on} F is a next-state function (S x I S) H is an output function (S O) s0 is an initial state
u,d,o, t = 1,0,0,0
Moore-type
Associates outputs with states (as given above, H maps S O)
Mealy-type
Associates outputs with transitions (H maps S x I O)
u,d,o,t = 0,1,0,0
GoingDn
t is timer_start
CSE466-02au
req > floor !(timer < 10) u,d,o,t = 0,0,1,0 Idle req == floor req < floor u,d,o,t = 0,1,0,0 GoingDn req < floor
u,d,o, t = 1,0,0,0
I,O,V may represent complex data types (i.e., integers, floating point, etc.) F,H may include arithmetic operations H is an action function, not just an output function
Describes variable updates as well as outputs
u,d,o,t = 0,1,0,0
Complete system state now consists of current state, si, and values of all variables
Slide 13 CSE466-02au
CSE466-02au
Slide 14
CSE466-02au
Slide 15
CSE466-02au
Slide 16
Two approaches to capturing state machine model with sequential programming language
Front-end tool approach
Additional tool installed to support state machine language
Graphical and/or textual state machine languages May support graphical simulation Automatically generate code in sequential programming language that is input to main development tool
Drawback: must support additional tool (licensing costs, upgrades, training, etc.)
CSE466-02au
Slide 17
CSE466-02au
Slide 18
General template
#define S0 0 #define S1 1 ... #define SN N void StateMachine() { int state = S0; // or whatever is the initial state. while (1) { switch (state) { S0: // Insert S0s actions here & Insert transitions Ti leaving S0: if( T0s condition is true ) {state = T0s next state; /*actions*/ } if( T1s condition is true ) {state = T1s next state; /*actions*/ } ... if( Tms condition is true ) {state = Tms next state; /*actions*/ } break; S1: // Insert S1s actions here // Insert transitions Ti leaving S1 break; ... SN: // Insert SNs actions here // Insert transitions Ti leaving SN break; } } }
With hierarchy
A A1
z y w
z B x
z
y
A2
Statecharts
Graphical language to capture HCFSM timeout: transition with time limit as condition history: remember last substate OR-decomposed state A was in before transitioning to another state B
Return to saved substate of A when returning from B instead of initial state
CSE466-02au
Slide 19
CSE466-02au
Slide 20
FireMode
When fire is true, move elevator to 1st floor and open door w/o hierarchy: Getting messy! w/ hierarchy: Simple!
With hierarchy
UnitControl
Without hierarchy
req>floor u,d,o = 1,0,0 ElevatorController UnitControl NormalMode ... !fire FireMode !fire fire RequestResolver u,d,o = 0,0,1 req==floor u,d,o = 0,1,0 GoingUp req>floor Idle req<floor GoingDn req<floor
NormalMode
Transition-immediately (TI): taken regardless of source program-state Transition-on-completion (TOC): taken only if condition is true AND source program-state is complete
fire
FireMode u,d,o = 0,1,0 FireGoingDn floor==1 u,d,o = 0,0,1 floor>1 FireDrOpen fire
SpecCharts: extension of VHDL to capture PSM model SpecC: extension of C to capture PSM model
CSE466-02au
NormalMode and FireMode described as sequential programs Black square originating within FireMode indicates !fire is a TOC transition
Transition from FireMode to NormalMode only after FireMode completed
Slide 21
Slide 22
ConcurrentProcessExample() { x = ReadX() y = ReadY() Call concurrently: PrintHelloWorld(x) and PrintHowAreYou(y) } PrintHelloWorld(x) { while( 1 ) { print "Hello world." delay(x); } } PrintHowAreYou(x) { while( 1 ) { print "How are you?" delay(y); } }
Describes functionality of system in terms of two or more concurrently executing subtasks Many systems easier to describe with concurrent process model because inherently multitasking E.g., simple example:
Read two numbers X and Y Display Hello world. every X seconds Display How are you? every Y seconds
To create state machine, we thought in terms of states and transitions among states
When system must react to changing inputs, state machine might be best model HCFSM described FireMode easily, clearly
More effort would be required with sequential program or state machine model
Enter X: 1 Enter Y: 2 Hello world. Hello world. How are you? Hello world. How are you? Hello world. ...
PrintHelloWorld
ReadX
= = = = = =
1 2 2 3 4 4
s) s) s) s) s) s)
CSE466-02au
Slide 23
CSE466-02au
Slide 24
Dataflow model
Derivative of concurrent process model Nodes represent transformations
May execute concurrently May or may not have token at any given time
Z = (A + B) * (C - D)
Synchronous dataflow
With digital signal-processors (DSPs), data flows at fixed rate Multiple tokens consumed and produced per firing Synchronous dataflow model takes advantage of this
Each edge labeled with number of tokens consumed/produced each firing Can statically schedule nodes, so can easily use sequential program model
Dont need real-time operating system and its overhead
A +
B C t1 t2 *
Edges represent flow of tokens (data) from one node to another When all of nodes input edges have at least one token, node may fire When node fires, it consumes input tokens processes transformation and generates output token Nodes may fire simultaneously Several commercial tools support graphical languages for capture of dataflow model
Can automatically translate to concurrent process model for implementation Each node becomes a process
B mB
C mC
D mD convolve
t1
t2 tt2
ct2
How would you map this model to a sequential programming language? Try it... Algorithms developed for scheduling nodes into singleappearance schedules
Only one statement needed to call each nodes associated procedure
Allows procedure inlining without code explosion, thus reducing overhead even more
transform tZ Z
Synchronous dataflow
CSE466-02au
Slide 25
CSE466-02au
Slide 26
Concurrent processes
Consider two examples having separate tasks running independently but sharing data Difficult to write system using sequential program model Concurrent process model easier
Separate sequential programs (processes) for each task Programs communicate with each other
CSE466-02au Slide 27 CSE466-02au
Heartbeat Monitoring System
B[1..4]
Task 1: Read pulse If pulse < Lo then Activate Siren If pulse > Hi then Activate Siren Sleep 1 second Repeat Task 2: If B1/B2 pressed then Lo = Lo +/ 1 If B3/B4 pressed then Hi = Hi +/ 1 Sleep 500 ms Repeat
Heart-beat pulse
Set-top Box
Task 1: Read Signal Separate Audio/Video Send Audio to Task 2 Send Video to Task 3 Repeat Task 2: Wait on Task 1 Decode/output Audio Repeat Task 3: Wait on Task 1 Decode/output Video Repeat
Video Audio
Input Signal
Slide 28
Process
A sequential program, typically an infinite loop
Executes concurrently with other processes We are about to enter the world of concurrent programming
Join
A process suspends until a particular child process finishes execution
CSE466-02au
Slide 30
Shared Memory
Processes read and write shared variables
No time overhead, easy to implement But, hard to use mistakes are common
Example: Producer/consumer with a mistake
Share buffer[N], count
count = # of valid data items in buffer If buffer is full, must wait If buffer is empty, must wait
01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: data_type buffer[N]; int count = 0; void processA() { int i; while( 1 ) { produce(&data); while( count == N );/*loop*/ buffer[i] = data; i = (i + 1) % N; count = count + 1; } } void processB() { int i; while( 1 ) { while( count == 0 );/*loop*/ data = buffer[i]; i = (i + 1) % N; count = count - 1; consume(&data); } } void main() { create_process(processA); create_process(processB); }
Message Passing
Message passing
Data explicitly sent from one process to another
Sending process performs special operation, send Receiving process must perform special operation, receive, to receive the data Both operations must explicitly specify which process it is sending to or receiving from Receive is blocking, send may or may not be blocking
void processA() { while( 1 ) { produce(&data) send(B, &data); /* region 1 */ receive(B, &data); consume(&data); } } void processB() { while( 1 ) { receive(A, &data); transform(&data) send(A, &data); /* region 2 */ } }
processA produces data items and stores in buffer processB consumes data items from buffer Error when both processes try to update count concurrently (lines 10 and 19) and the following execution sequence occurs. Say count is 3.
A loads count (count = 3) from memory into register R1 (R1 = 3) A increments R1 (R1 = 4) B loads count (count = 3) from memory into register R2 (R2 = 3) B decrements R2 (R2 = 2) A stores R1 back to count in memory (count = 4) B stores R2 back to count in memory (count = 2)
CSE466-02au
Slide 31
CSE466-02au
Slide 32
When a process enters the critical section, all other processes must be locked out until it leaves the critical section
Mutex
A shared object used for locking and unlocking segment of shared data Disallows read/write access to memory it guards Multiple processes can perform lock operation simultaneously, but only one process will acquire lock All other processes trying to obtain lock will be put in blocked state until unlock operation performed by acquiring process when it exits critical section These processes will then be placed in runnable state and will compete for lock again
B loads count (count = 3) from memory into register R2 (R2 = 3) B decrements R2 (R2 = 2) B stores R2 back to count in memory (count = 2) B executes unlock operation
A is placed in runnable state again
A loads count (count = 2) from memory into register R1 (R1 = 2) A increments R1 (R1 = 3) A stores R1 back to count in memory (count = 3)
CSE466-02au
Slide 33
CSE466-02au
Slide 34
Process Communication
Try modeling req value of our elevator controller
Using shared memory Using shared memory and mutexes Using message passing
System interface
up down open floor req Request Resolver
Example code has 2 different critical sections of code that can be accessed simultaneously
2 locks needed (mutex1, mutex2) Following execution sequence produces deadlock
A executes lock operation on mutex1 (and acquires it) B executes lock operation on mutex2( and acquires it) A/B both execute in critical sections 1 and 2, respectively A executes lock operation on mutex2
A blocked until B unlocks mutex2 B blocked until A unlocks mutex1
1 */ 2 */ 1 */
...
2 */ 1 */ 2 */
...
dnN
One deadlock elimination protocol requires locking of numbered mutexes in increasing order and two-phase locking (2PL)
Acquire locks in 1st phase only, release locks in 2nd phase
CSE466-02au
Slide 35
CSE466-02au
Slide 36
Condition variables
Condition variable is an object that has 2 operations, signal and wait When process performs a wait on a condition variable, the process is blocked until another process performs a signal on the same condition variable How is this done?
Process A acquires lock on a mutex Process A performs wait, passing this mutex
Causes mutex to be unlocked
Process B can now acquire lock on same mutex Process B enters critical section
Computes some value and/or make condition true
Slide 38
Monitors
Collection of data and methods or subroutines that operate on data similar to an object-oriented paradigm Monitor guarantees only 1 process can execute inside monitor at a time (a) Process X executes while Process Y has to wait (b) Process X performs wait on a condition Process Y allowed to enter and execute (c) Process Y signals condition Process X waiting on Process Y blocked Process X allowed to continue executing (d) Process X finishes executing in monitor or waits on a condition again Process Y made runnable again
Process X (a) Monitor Process Y Process X (b) Monitor Waiting DATA CODE Process Y Monitor DATA CODE Waiting Monitor DATA CODE
processA:
DATA CODE
Process X (c)
Process Y
Process X (d)
Process Y
CSE466-02au
Slide 39
CSE466-02au
Slide 40
Implementation
Mapping of systems functionality onto hardware processors:
captured using computational model(s) written in some language(s)
State machine Sequent. program Dataflow Concurrent processes
The choice of computational model(s) is based on whether it allows the designer to describe the system.
Implementation choice independent from language(s) choice Implementation choice based on power, size, performance, timing and cost requirements Final implementation tested for feasibility
Also serves as blueprint/prototype for mass manufacturing of final product
Pascal
C/C++
Java
VHDL
The choice of language(s) is based on whether it captures the computational model(s) used by the designer. The choice of implementation is based on whether it meets power, size, performance and cost requirements.
Implementation A
Implementation B
Implementation C
CSE466-02au
Slide 41
CSE466-02au
Slide 42
Processor A
Can use single and/or general-purpose processors (a) Multiple processors, each executing one process
Communication Bus
Processor A
Can convert processes to sequential program with process scheduling right in code
CSE466-02au
Slide 43
CSE466-02au
Threads
Lightweight process Subprocess within process Only program counter, stack, and registers Shares address space, system resources with other threads
Allows quicker communication between threads
CSE466-02au
Slide 45
CSE466-02au
Slide 46
Scheduling: priority
Process with highest priority always selected first by scheduler
Typically determined statically during creation and dynamically during execution
Scheduler
Special process that decides when and for how long each process is executed Implemented as preemptive or nonpreemptive scheduler Preemptive
Determines how long a process executes before preempting to allow another process to execute
Time quantum: predetermined amount of execution time preemptive scheduler allows each process (may be 10 to 100s of milliseconds long)
FIFO
Runnable processes added to end of FIFO as created or become runnable Front process removed from FIFO when time quantum of current process is up or process is blocked
Priority queue
Runnable processes again added as created or become runnable Process with highest priority chosen when new process needed If multiple processes with same highest priority value then selects from them using first-come first-served Called priority scheduling when nonpreemptive Called round-robin when preemptive
Nonpreemptive
Only determines which process is next after current process finishes execution
CSE466-02au
Slide 47
CSE466-02au
Slide 48
Priority assignment
Period of process
Repeating time interval the process must complete one execution within
E.g., period = 100 ms Process must execute once every 100 ms E.g., refresh rate of display is 27 times/sec Period = 37 ms
Real-time systems
Systems composed of 2 or more cooperating, concurrent processes with stringent execution time constraints
Rate monotonic
Process A B C D E F Period 25 ms 50 ms 12 ms 100 ms 40 ms 75 ms Priority 5 3 6 1 4 2
Execution deadline
Amount of time process must be completed by after it has started
E.g., execution time = 5 ms, deadline = 20 ms, period = 100 ms Process must complete execution within 20 ms after it has begun regardless of its period Process begins at start of period, runs for 4 ms then is preempted Process suspended for 14 ms, then runs for the remaining 1 ms Completed within 4 + 14 + 1 = 19 ms which meets deadline of 20 ms Without deadline process could be suspended for much longer
E.g., set-top boxes have separate processes that read or decode video and/or sound concurrently and must decode 20 frames/sec for output to appear continuous Other examples with stringent time constraints are:
digital cell phones navigation and process control systems assembly line monitoring systems multimedia and networking systems etc.
Deadline monotonic
Process G H I J K L Deadline 17 ms 50 ms 32 ms 10 ms 140 ms 32 ms Priority 5 2 3 6 1 4
Communication and synchronization between processes for these systems is critical Therefore, concurrent process model best suited for describing these systems
CSE466-02au Slide 50
CSE466-02au
Slide 49
Summary
Computation models are distinct from languages Sequential program model is popular
Most common languages like C support it directly
QNX
Preemptive process scheduling using FIFO, round-robin, adaptive, or priority-driven scheduling 32 priority levels per process Microkernel < 10 Kbytes and complies with POSIX real-time standard
CSE466-02au