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