230 likes | 254 Views
Introduction to VLSI Programming Lecture 6 : Resource sharing. (course 2 IN3 0) Prof. dr. ir. Kees van Berkel. Time table 2005. Lecture 6. Outline: Recapitulation of Lecture 5 Sharing of sequentially-used resources: commands auxiliary variables expressions and operators
E N D
Introduction toVLSI Programming Lecture 6: Resource sharing (course 2IN30) Prof. dr. ir.Kees van Berkel
Time table 2005 Kees van Berkel
Lecture 6 Outline: • Recapitulation of Lecture 5 • Sharing of sequentially-used resources: • commands • auxiliary variables • expressions and operators • Lab work: assignment GCD Kees van Berkel
Tangram • Purpose: programming language for asynchronous VLSI circuits. • Creator: Tangram team @ Philips Research Labs (proto-Tangram 1986; release 2 in 1998). • Inspiration: Hoare’s CSP, Dijkstra’s GCL. • Lectures: no formal introduction; manual hand-out (learn by example, learn by doing). • Main tools: compiler, analyzer, simulator, viewer. Kees van Berkel
VLSI programming of asynchronous circuits behavior, area, time, energy, test coverage Tangram program feedback compiler simulator Handshake circuit expander Asynchronous circuit (netlist of gates) Kees van Berkel
VLSI programming for … • Low costs: • introduce resource sharing. • Low delay (high throughput): • introduce parallelism. • Low energy (low power): • reduce activity; … Kees van Berkel
VLSI programming for low costs • Keep it simple!! • Introduce resource sharing: commands, auxiliary variables, expressions, operators. • Enable resource sharing, by: • reducing parallelism • making similar commands equal Kees van Berkel
0 1 0 1 | S S S Command sharing S ; … ; S P : proc(). S P() ; … ; P() Kees van Berkel
0 0 1 1 a xw | | | a xw Command sharing: example a?x ; … ; a?x ax : proc(). a?x ax() ; … ; ax() Kees van Berkel
a b Two-place wagging buffer byte = type [0..255]&wag2: main proc(a?chan byte & b!chan byte).begin x,y: var byte & ax : proc(). a?x|ax() ; forever do (a?y || b!x) ; (ax()|| b!y)odend Kees van Berkel
Procedure definition vs declaration Procedure definition: P = proc (). S • provides a textual shorthand (expansion) • each call generates copy of resource, i.e. no sharing Procedure declaration: P : proc (). S • defines a sharable resource • each call generates access to this resource Kees van Berkel
Command sharing • Applies only to sequentially used commands. • Saves resources, almost always(i.e. when command is more costly than a mixer). • Impact on delay and energy often favorable. • Introduced by means of procedure declaration. • Makes Tangram program less well readable. Therefore, apply after program is correct & sound. • Should really be applied by compiler. Kees van Berkel
Sharing of auxiliary variables • x:=E is an auto assignment when E depends on x. This is compiled as aux:=E; x:= aux , where aux is a “fresh” auxiliary variable. • With multiple auto assignments to x, as in: x:=E; ... ; x:=F auxiliary variables can be shared, as in: aux:=E; aux2x(); ... ; aux:=F; aux2x() with aux2x(): proc(). x:=aux Kees van Berkel
e0 E e1 E E Expression sharing x:=E ; … ; a!E f : func(). E x:=f() ; … ; a!f() e0 | e1 Kees van Berkel
Expression sharing • Applies only to sequentially used expressions. • Often saves resources, (i.e. when expression is more costly than the demultiplexer). • Introduced by means of function declarations. • Makes Tangram program less well readable. Therefore apply after program is correct & sound. • Should really be applied by compiler. Kees van Berkel
Operator sharing • Consider x0 := y0+z0 ; … ; x1 := y1+z1 . • Operator+can be shared by introducing add : func(a,b? var T): T. a+b and applying it as in x0 := add(y0, z0) ; … ; x1 := add(y1,z1) . Kees van Berkel
Operator sharing: the costs • Operator sharing may introduce multiplexers to (all) inputs of the operator and a demultiplexer to its output. • This form of sharing only reduces costs when: • operator is expensive, • some input(s) and/or output are common. Kees van Berkel
Operator sharing: example • Consider x := y+z0 ; … ; x := y+z1 . • Operator + can be shared by introducingadd2y : proc(b? var T). x:=y+b and applying it as inadd2y(z0) ; … ; add2y(z1) . Kees van Berkel
Making similar equal: example Consider: x := y+z ; … ; x := y-z . Use : y-z = y + bitwise_complement(z) +1 condinv: func (f:bool & x:int8): int8. {f x | f bwc(x)} begin y=val x cast bool8 | <<f#y.0,f#y.1,f#y.2,f#y.3,f#y.4,f#y.5,f#y.6,f#y.7>> cast int8 end addsub: func (f:bool & x:int8 & y:int8): int9. {f x+y | f x-y } (<<f,x>> cast int9 + <<f,condinv(f, y)>> cast int9) cast <<bool,int9>>.1 Kees van Berkel
GCD ab c Greatest Common Divisor gcd: main proc (ab?chan <<byte,byte>> & c!chan byte).begin x,y: var byte| forever doab?<<x,y>> ; do x<y then y:= y-xorx>y then x:= x-yod ; c!xodend Kees van Berkel
Assigment 3: make GCD smaller • Both assignments (y:= y-x and x:= x-y) are auto assignments and hence require an auxiliary variable. • Program requires 4 arithmetic resources (twice <and –) . • Reduce costs of GCD by saving on auxiliary variables and arithmetic resources. (Beware the costs of multiplexing!) • Use of ffvariables not allowed for this exercise. Kees van Berkel
Lab-work and report • You are allowed to team up with a colleague. • Report: more thanlisting of functional Tangram programs: • analyze the specifications and requirements; • present design options, alternatives, trade-offs; • motivate your design choices; • explain functional correctness of your Tangram programs; • analyze & explain {area, time, energy} of your programs. Kees van Berkel
Next week: lecture 7 Outline: • Introduction to the DLX processor. • Introduction to Tangram version of a sub-set DLX (executing a software GCD). • Lab work: extend instruction set of Tangram DLX andreduce its costs. Kees van Berkel