Introduction to VLSI Programming Lecture 5: Tangram & Tools (course 2IN30) Prof. dr. ir.Kees van Berkel
Time table 2005 date class | lab subject Aug. 30 2 | 0 hours intro; VLSI Sep. 6 3 | 0 hours handshake circuits Sep. 13 handshake circuits assignment Sep. 20 Tangram Sep. 27 no lecture Oct. 4 Oct. 11 1 | 2 hours demo, fifos, registers | deadline assignment Oct. 18 design cases; Oct. 25 DLX introduction Nov. 1 low-cost DLX Nov. 8 high-speed DLX Nov. 29 deadline final report 7/29/2019 Kees van Berkel
Lecture 5 Outline: Recapitulation Lecture 4 Tangram overview Compilation: Tangram Handshake Circuits Tools Demonstration Lab work: assignment “fifos and registers” 7/29/2019 Kees van Berkel
Handshake signaling and data request ar active side passive side acknowledge ak data ad push channel versus pull channel request ar active side passive side acknowledge ak data ad 7/29/2019 Kees van Berkel
Tangram assignment x:= f(y,z) yw zw y f z xw0 | x xr xw1 y f z y f z | x | x Handshake circuit 7/29/2019 Kees van Berkel
Two-place wagging buffer byte = type [0..255] & wag2: main proc (a?chan byte & b!chan byte). begin x,y: var byte | a?x ; forever do (a?y || b!x) ; (a?x || b!y) od end 7/29/2019 Kees van Berkel
Four 88 shift registers compared 7/29/2019 Kees van Berkel
Tangram/Haste 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. 7/29/2019 Kees van Berkel
2-place buffer BUF1 a b c byte = type [0..255] & BUF1 = proc (a?chan byte & b!chan byte). begin x: var byte | forever do a?x ; b!x od end & BUF2: main proc (a?chan byte & c!chan byte). begin b: chan byte | BUF1(a,b) || BUF1(b,c) end 7/29/2019 Kees van Berkel
Median filter median: main proc (a? chan W & b! chan W). begin x,y,z: var W & xy, yz, zw: var bool | forever do ((z:=y; y:=x) || yz:=xy) ; a?x ; (xy:= x<=y || zx:= z<=x) ; if zx=xy then b!x or xy=yz then b!y or yz=zx then b!z fi od end Median a b 7/29/2019 Kees van Berkel
Greatest Common Divisor gcd: main proc (ab?chan <<byte,byte>> & c!chan byte). begin x,y: var byte | forever do ab?<<x,y>> ; do x<y then y:= y-x or x>y then x:= x-y od ; c!x od end GCD ab c 7/29/2019 Kees van Berkel
Nacking Arbiter nack: main proc (a?chan bool & b!chan bool). begin na,nb: var bool | <<na,nb>> := <<true,true>> ; forever do sel probe(a) then a!nb || na:= na#nb or probe(b) then b!na || nb:= nb#na les od end Nacking arbiter a b 7/29/2019 Kees van Berkel
C : Tangram handshake circuit a b C(T) = ; a c S R C(R;S)= 7/29/2019 Kees van Berkel
C : Tangram handshake circuit ; a c S R C(R;S)= a c S R ; C(R;S)= | b 7/29/2019 Kees van Berkel
C : Tangram handshake circuit || o | rx i C (R||S) = 7/29/2019 Kees van Berkel
Tangram Compilation Theorem Tangram program T Handshake circuit VLSI circuit C E Handshake process H || · H · T = || · C ·T 7/29/2019 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) 7/29/2019 Kees van Berkel
Tangram tool box Let Rlin4.tg be a Tangram program: htcomp -B Rlin4 compiles Rlin4.tg into Rlin4.hcl, a handshake circuit htmap Rlin4 produces Rlin4*.v files, a CMOS standard-cell circuit htsim Rlin4 a b executes Rlin4.hcl with files a, b for input/output htview Rlin4 provides interactive viewing of simulation results 7/29/2019 Kees van Berkel
Tangram program “Conway” b Q c R d B1 = type [0..1] & B2 = type <<B1,B1>> & B3 = type <<B1,B1,B1>> & P = … & Q = … & R = … & conway: main proc (a?chan B2 & d!chan B3). begin b,c: chan B1 | P(a,b) || Q(b,c) || R(c,d) end 7/29/2019 Kees van Berkel
Tangram program “Conway” & P = proc(a?chan B2 & b!chan B1). begin x: var B2 | forever do a?x; b!x.0; b!x.1 od end & Q= proc(b?chan B1 & c!chan B1). begin y: var B1 | forever do b?y; c!y od end & R= proc(c?chan B1 & d!chan B3). begin x,y,z: var B1 | forever do c?x; c?y; c?z; d!<<x,y,z>> od end 7/29/2019 Kees van Berkel
Lab work: assignments 1 and 2 Assignment 1: shift registers Assignment 2: fifos See separate handout. 7/29/2019 Kees van Berkel
Lab-work and report You are allowed to team up with a colleague (Not mandatory.) Report: more than listing 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. 7/29/2019 Kees van Berkel
Course grading Your course grading is based on: the quality of your Tangram programs; [30%] your final report on the design and evaluation of these programs (guidelines will follow); [30%] a concluding discussion with you on the programs, the report and the lecture notes; [20%] your results on an intermediate assignment. [20%] 7/29/2019 Kees van Berkel
Next time: lecture 6 (2005, Oct 17) Outline: Tangram: arithmetic & resource sharing Lab work: assignments on arithmetic & resource sharing 7/29/2019 Kees van Berkel