Tesi Robotica Analisi, progettazione e implementazione... | Page 132
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 132 — #132
i
132
i
6. SECONDA RELEASE
modo da evitare di dover scrivere una rule ad-hoc. I registri booleani tengono
traccia dello stato della computazione segnalandone la fine (ready a True) o la
pienezza dei Raster (full a True).
A questo punto le rule in Alg:6.8 entrano in gioco realizzando così tutte le
connessioni necessarie fra i vari sotto moduli. Quindi nella rule r_1 si ha la
connessione dei due Raster con scoring, in questo caso non è stato possibile
Algoritmo 6.8 Rule del modulo Processor
1
2
3
4
5
rule r_1;
let l <− rasterL.get();
let r <− rasterR.get();
scoring .put(l , r) ;
endrule
6
7
8
9
10
11
12
13
14
15
16
(∗ conflict_free ="reset,reqS,reqT,r_2" ∗)
rule reqS;
let x = scoring.reqDir() ;
preelement <= x.address/16;
if (preelement != x.address/16) begin
cache.portA.request.put(makeRequest(True, preelement, element));
element <= (unpack({’0,pack(x.datain)}))<<(x.address%16)∗2;
wordcounter<=wordcounter+1;
end else element <= element | (unpack({’0,pack(x.datain)}))<<(x.address%16)∗2;
endrule
17
18
19
20
21
22
rule r_2;
cache.portA.request.put(makeRequest(True, preelement, element));
let x <− scoring.finish() ;
tracking . start () ;
endrule
23
24
25
26
27
28
rule reqT;
let x = tracking.reqDir() ;
preelement <= x.address%16;
cache.portA.request.put(makeRequest(False, (x.address/16),0));
endrule
29
30
31
32
33
34
rule getta ;
let x <− cache.portA.response.get();
x=x>>(preelement∗2);
tracking .respDir(unpack(x[1:0])) ;
endrule
35
36
37
38
39
40
41
42
rule reset (ready && full);
full <=False;
ready<=False;
wordcounter<=0;
element<=0;
preelement<=0;
endrule
i
i
i
i