Communicating Hardware Processes

advertisement
Compiling Communicating
Processes into Delay-Insensitive
VLSI Circuits
Alain J. Martin
Department of Computer Science
California Institute of Technology
Communicating Hardware
Processes
Inspired by:
• Hoare's communicating sequential processes
(CSP).
• Dijkstra's guarded commands.
Based on:
• Concurrent processes communicating by
messagepassing.
Communicating Hardware
Processes
Data Types
• Only basic type is the boolean.
• Other types are collections of booleans
represented using PASCAL record notation.
• Example: alu = record
op : alu.15..alu.12
x : alu.11..alu.8
y : alu.7..alu.4
z : alu.3..alu.0
end
• 8-bit integer x : x.0, x.1, ..., x.7.
Communicating Hardware
Processes
Assignment:
• For a boolean b:
• The command b:=true
assigns the value true to b
(also denoted b+ or b ).
• The command b:=false
assigns the value false to b
(also denoted b- or b ).
• Given two integers x and y of the same length n:
y := x ==> y.0, y.1, ..., y.(n-1) := x.0, x.1, ..., x.(n-1).
Communicating Hardware
Processes
Arrays:
• Arrays are used when the identity of the element
in a set of variables that is to be used for some
action is determined during the computation.
• Example:
reg[i.z] := aluf (reg[i.x], reg[i.y], i.op)
Note: instruction i is of of type alu
Communicating Hardware
Processes
Composition Operators
• There are three composition operators:
• The sequential operator: ;.
• The concurrent, or parallel, operator: ||.
• The coincident, or bullet, operator: ..
Communicating Hardware
Processes
Sequential Operator
• S 1;S 2 means first execute S 1 then execute S 2 .
• The ``;'' operator is associative:
(S 1 ; S 2 ); S 3 = S 1 ; (S 2 ; S 3 )
• The ``;'' operator is NOT commutative:
S 1 ; S 2 <> S 2 ; S 1
Communicating Hardware
Processes
Parallel Operator
• S 1 || S 2 means S 1 and S 2 are executed in
parallel.
• The || operator is associative and commutative:
(S 1 || S 2 ) || S 3 = S 1 || (S 2 || S 3 )
S 1 || S 2 = S 2 || S 1
Communicating Hardware
Processes
Bullet Operator
• S1.S2 means S1 and S2 complete simultaneously.
• The . operator is associative and commutative:
(S 1 . S 2 ) . S 3 = S 1 . (S 2 . S 3 )
S1.S2=S2. S1
Communicating Hardware
Processes
Other Properties
• If S 1 and S 2 are noninterfering,
S 1 || S 2 is equivalent to the execution of either
. S2.
• The operator precedence is: (1) . (2) ; (3) ||:
S 0 . S 1 ; S 2 || S 3 ===> ((S 0 . S 1 ); S 2 ) || S 3
S 1 ; S 2 or S 2 ; S 1 or S 1
Communicating Hardware
Processes
Control Structures
• Selection
• Repetition
• Deterministic and nondeterministic versions
Communicating Hardware
Processes
Deterministic selection:
[G1 ==> S1 [] ... [] Gn ==> Sn ]
• G1, ..., Gn are boolean expressions called guards.
• S1 , ..., Sn are parts of a program, or commands.
• Gi ==> Si :a guarded command
if Gi evaluates to true then Si is executed.
• At any time, at most one guard is true.
• If no guard is true, the execution is suspended.
• Exact one guarded command will be executed
Communicating Hardware
Processes
Nondeterministic selection:
[G1 ==> S1 | ... | Gn ==> Sn ]
• Identical to deterministic selection except that
multiple guards can be true at the same time.
• If multiple guards are true, one is selected
arbitrarily.
• Exact one guarded command will be executed
Communicating Hardware
Processes
Deterministic repetition:
*[G1 ==> S1 [] ... [] Gn ==> Sn ]
• G1, ..., Gn are boolean expressions.
• S1 , ..., Sn are parts of a program.
• Gi ==> Si :a guarded command
if Gi evaluates to true then Si is executed.
• After Si completes, control returns to the start.
• At any time, at most one guard is true.
• If no guard is true, the repetition terminates.
• Zero, one or more guarded commands can be executed
Communicating Hardware
Processes
Nondeterministic repetition:
*[G1 ==> S1 | ... | Gn ==> Sn ]
• Identical to deterministic repetition except that
multiple guards can be true at the same time.
• If multiple guards are true, one is selected
arbitrarily.
Communicating Hardware
Processes
• Wait command:
[G]= [G ==> skip]
• Infinite repetition:
*[S] = *[true ==> S]
• Reactive Process Structure
*[[G1 ==> S1 [] ... [] Gn ==> Sn ]]
Wait until some Gi holds; execute Si ;
repeat forever.
Communicating Hardware
Processes
Replication Construct
• Used to represent a list of syntactic objects.
<op i : n..m : S(i)> =
S(n), if n = m
S(n) op (<op i : n+1..m : S(i)>), if n < m
• op is any constructor (;,.,||) or separator ([],|,``,'',`` ''),
• i is an integer variable, called the running index,
• the range, defined by n..m, where n and m are
integer constants, is not empty, i.e., n <= m,
• S(i) is any program part in which i appears free.
Communicating Hardware
Processes
Replication Construct
• Example:
[<[] i : 0..3 : G(i) ==> S(i)>] =
[
]
G(0) ==> S(0)
[] G(1) ==> S(1)
[] G(2) ==> S(2)
[] G(3) ==> S(3)
Communicating Hardware
Processes
Procedures
• Procedure parameters are either input or output.
• Example:
procedure p(x : input; y : output); S
• The procedure call p(a, b) is equivalent to:
x := a; S; b := y
Communicating Hardware
Processes
Functions
• Function parameters are always inputs.
• Example:
function y(x); S
where S is the same program part as in
procedure p.
Communicating Hardware
Processes
Concurrent Processes
• Main building block of a computation is a process.
• Body of a concurrent computation is of the form:
p1 || p2 || . . . || pn
where p1 through pn are processes.
• Several instances of the same process type can
be called by assigning different names.
• Unlike procedures, each instance of a process
can be called only once.
Communicating Hardware
Processes
Communication Commands,Ports, & Channels
• Processes communicate by using communication
commands on ports.
• Ports are declared in the heading of a process:
p = process(R, L)
• A port of a process is paired with a port of another
process to form a channel.
p1 =process(X) . . . end
p2 =process(Y) . . . end
p1 || p2
chan(p1.X, p2.Y)
Communicating Hardware
Processes
• Example:
p1 =process(X) . . . end
p2 =process(Y) . . . end
p1 || p2
chan(p1.X, p2.Y)
• Equivalent to:
p1 =process(C) . . . end
p2 =process(C) . . . end
p1 || p2
chan(C)
p1
p1
X
Y
C
p2
p2
Communicating Hardware
Processes
Semantics of Synchronization
• Number of completed receive actions cR cannot
exceed the number of completed send actions cS:
cR <= cS
• Without buffering, if two processes p1 and p2 share
a channel with port X in p1 and port Y in p2 , then
cX = cY
Communicating Hardware
Processes
Probe
• If p1 reaches the n th X-action before p2 reaches
the n th Y-action, the completion of X is suspended
until p2 reaches Y.
• The X-action is said to be pending.
• The predicate ``X is pending'' is denoted qX.
•The probe X in process p1 is the same value as qY.
Communicating Hardware
Processes
Communication
• Matching communication actions ``pass messages''
• X? is an input command on the input port X.
• Y! is an output command on the output port Y.
• X?u and Y!v implement the assignment v := u.
Communicating Hardware
Processes
Stream Merge:
X
Y
Merge
Z
MERGE = process(X?int(8), Y?int(8), Z!int(8))
u : int(8)
*[ [ X ==>X?u; Z!u
| Y ==>Y?u; Z!u
] ]end
Communicating Hardware
Processes
One-place Buffer:
L
Buf
BUF1=process(L?int(8), R!int(8))
x : int(8)
*[L?x; R!x]
end
R
Communicating Hardware
Processes
N-place Buffer
Buf(n).L
p(0).L
P(0).R
P(1).R
P(0) P(1).L P(1) p(2).L
P(n-1).R
P(n-1)Buf(n).R
BUF(n) =process(L?int(8), R!int(8))
p(i : 0..n-1) : BUF1
<|| i : 0..n-1 : p(i)>
chan<i : 0..n-2 : (p(i).R,p(i+1).L))>
p(0).L = BUF(n).L
p(n-1).R = BUF(n).R
end
Communicating Hardware
Processes
Lazy Stack
in
Stack element:
head
put get
in out
Empty=[ in ==> in?x;Full
[] out ==> get?x;out!x;Empty Tail
]
Full =[ out ==> out!x;Empty
[] in ==> put!x;in?x;Full
]
out
Download