![]() |
|||||||
1. Notiuni introductive
Circuitul de resicronizare este un circuit care poate optimiza intarzierea
unui circuit sincron prin deplasarea registrilor prin elemente de circuite
combinationale. Structura combinationala ramane neschimbata si comportamentul
observabil al circuitului este identic cu cel original.
2. Resincronizarea (Retiming)
Resincronizarea secventiala este o puternica tehnica de optimizare
a circuitelor sincrone care au proprietatea ca flip-flop-ul poate fi mutat
de la iesirea portilor la intrarea lor si viceversa, fara a schimba comportamentul
circuitului. Folosind aceste deplasari se poate maximize viteza circuitului
si minimza aria de dispunere. Aceasta tehnica a fost introdusa in anii
1980 de catre Leiserson si Saxe. Ei au descris cativa algoritmi de resincronizare
secventiala pentru a minimiza intarzierea prin relocarea registrilor
in circuitele sincrone fara modificari ale functionalitatii lor. 2.1 Notatii si definitii
Algoritmii de resincronizare necesita o reprezentare unica a circuitelor
sincrone. Acestea sunt reprezentate de obicei sub forma unui graf orientat
G(V,E). V este multimea tuturor elementelor combinationale ale circuitului
, iar E este multimea arcelor directe euv; euv semnifica
legatura dintre celula de circuit combinational u si celula de
circuit combinational v, via zerosau mai multe register. Fiecare
arc direct are asociat o greuatate wuv, greutate care indica
numarulde registri dintre u si v. In figura 2 este ilustrat acest concept
de reprezentare. Un
circuit de resincronizare poate fi exprimat sub forma unui numar intreg,
numar care eticheteaza fiecare celula a circuitului. O eticheta r(v)
este asociat cu fiecare celula v. Aceasta eticheta indica numarul
de registri care sunt mutati de la intrarea celulei laiesirea ei. Astfel
numarul de registri pentru fiecare fir este dat de formula:
Experimentele noastre cu resincronizarea au aratat ca solutiile de resincronizare
sunt adesea limitate de catre ciclurile critice din netlist. Aceasta situatie
este ilustrata in figura 3. Calea critica AB-C-D poate fi redusa mutand
registrul D si E inapoi. Totusi nu exista nici o posibilitate de a reduce
intarzierea in jurul ciclului B-C-F-G. Se poate deci ca acest ciclu sa
limiteze performanta resincronizarii. Scopul nostru este de a gasi o strategie
de dispunere.
Fie Φ perioada de ceas dupa resincronizare. Un netlist de
resincronizare poate fi transformat intr-un cycle rate netlist
prin crearea unui graf cu aceleasi arce ca si netlist-ul de resincronizare.
Pentru fiecare euv din grafulde resincronzare vom crea o arca
echivalenta in graful de rata a ciclului (cycle rate). Totusi greutatea
unei arce din acest graf este wuv= Φ-d(v)-d(uv,),
unde d(v) este intarzierea nodului v, iar d(uv) este intarzierea arcei
de la u la v. Un nod special este adaugat la graf numit host. Acesta
este utilizat pentru a modela conexiunile cu sistemul extern pentru circuitul
considerat. Altfel algoritmul de resincronizare poate reduce calea critica
marind intarzierile de tip clock-to-output sau micsorand intarzierile
de tip clock-to-input. Arcele cu greutate 0 sunt adaugate de la host la
fiecare intrare primara. Arcele cu greutatea Φ sunt adugate
de la fiecare vertex primar la host-ul vertex. Fiecare vertex v
foloseste maxim –d(v) unitati de intarziere combinationale. Deoarece
numarul de registri din jurul ciclului ramane neschimbat, atunci suma
greutatilor din jurul orcarui cilcu C este Φ+Σcwuv-Σcd(v)-
Σcd(uv). Aceasta cantitate poate fi privita ca intarzierea totala
permisa de catre registri, minus intarzierea combinationala folosita.
Ea este denumita delay-toregister ratio (DDR) pentru ciclu. Viteza
de operare a circuitului este limitata de cel mai mare DDR pentru orice
ciclu din circuit.
Odata ce dispunerea este completa, urmatorul pas este acela al mutarii
registrilor pentru a resincroniza efectiv circuitul. Pentru o perioada
de ceas data, diferite secvente de mutari de registri ar pueta sa atinga
perioada de ceas. In aceasta sectiune articolului nostru vom prezenta
tehnici de determinare a secventelor de mutare a registrilor, secvente
care sa modifice cat mai putin netlist-ul post-dispunere. Acest pasva
face ca algoritmul de dispunere si incrementare a blocurilor (incremental
clustering and placement) sa fie ma usor de aplicat.
Figura 8 ne prezinta o schema de minimizare a duplicarii logice din timpul
resincronizarii. Figura 8.a arata nodurile extra adaugate in graful de
resincronizare pentru a modela blocul logic. Mai intai este adaugat un
singur nod la fiecare fanout de la iesirea din LUT. In figura
aceste noduri sunt notate F1i
si F2i. Un nod sursa
SRCi si un nod de tip sink SNKi sunt adaugate
pentru fiecare LUT. Fire sunt adugate de la SRCi la fiecare
nod fanout, si de la fiecare fanout la SNKi. Mai este
adaugata o conexiune virtuala de la SRCi la SNKi.
Putem afirma acum ca minimizand numarul de registri de pe firele virtuale,
minimizam si cantitatea de duplicare logica. Sa luam figura 8.b in considerare.
In acest caz mutam doar un singur registru inainte de la fanout la LUTi.
Exista acum doar un singur registru pe conexiunea virtuala de la SRCi
la SNKi. Acest lucru este posibil doar datorita mutarii registrului
de la fanin-ul SRCi. In figura 8.c ambele registre sunt
muate catre fanout. Observati acum ca exista tot un singur registru pe
conexiunea virtuala. Totusi el poate fi eliminat prim mutarea registrilor
de la fanin-ii SNKi-ului catre iesirea sa. Astfel minimizand
numarul registrilor de pe conexiunea virtuala avem un cost correct fara
a fi nevoie de o duplicare logica.
Algoritmul ICP este folosit de fiecare data cand algoritmul de dispunere
minimala decide ca trebuie sa adauge registri suplimentari in netlist.
Acesti registri trebuie sa fie plasati undeva in FPGA. In mod ideal acesti
registri ar putea fi plasati pe zonele ramase neutilizate de pe chip.
Dar acesti registri de resincronizare sunt dispusi in locatii aleatoare
in netlist si algoritmul de dispunere incearca sa “impacheteze” logic
in mici zone pentru a minimiza intarzierea si lungimea firelor. De aceea
algoritmul ICP trebuie sa incerce sa creeze spatiu pentru registrii noi
inserati prin mutarea locatiilor fara intarziere sau a zonelor ce contin
fire critice.Elementele logice sunt organizate de obicei in grupuri sau
clustere. Figura 9 ne prezinta un model simplu de cluster FPGA.
Fiecare cluster contine NLUT elemete logice, NINPUT
linii de intrare, NClock intrari de ceas si NReset
intrari de tip set/reset asincrone. In literatura academica, de
obicei NLUT = 4, NINPUT =10 si NClock=NReset=1.
Aceste constrangeri semnifica faptul ca chiar daca exista destul spatiu
liber in FPGA,noi trebuie sa verificam daca avem destule linii de intrare,
ceas si reset disponibile. Ideea de baza din spatele algoritmului ICP
este de a-i plasa pe acesti registri in zonele lor preferate chiar daca
astfel sunt incalcate constrangerile de arhitectura. · Cluster Legality Cost – fiecare cluster este penalizat daca contine o configuratie ilegala. Costul este proportional cu ilegalitatea. · Timing Cost – costul de sincronizare eset folosit pentru a se asigura ca zone critice ale partii logice nu sunt mutate in locuri care ar mari in mod drastic intarzierea pe calea critica. · Wirelength Cost – estimarea lungimii firelor este folosita pentru a se asigura ca circuitul este usor directionabil dupa ce are loc mutarea elementelor logice. 5.1 Cluster Legality Cost Exista un cost al legalitatii clusterului asociat fiecarui cluster Ci, cost calculat astfel: ClusteCost(Ci)= KLi*overuse(Ci,NLUT)+ KIi*overuse(Ci,NINPUT)+ KRi*overuse(Ci,NReset)+ KCi*overuse(Ci,NClock) , unde overuse(Ci,NLUT) reprezinta numarulde extra LUT-uri continute de configuratia de cluster Ci, functia overuse este definite similar si pentru intrari, ceas si reset. Coeficientii KL, KI, KR si KC specifica importanta fiecarei overuse. 6.2 Timing Cost Una din componentele costului de sincronizare este bazata pe costul utilizat de VPR. Acest cost este dat de relatia urmatoare: TcostVPR=Σccrit(c)*delay(c) Aceasta functie incurajeaza conexiunile critice sa reduca intarzierea si in acelasi timp permitand conexiunilor non-critice sa optimizeze lungimea firelor. Algoritmul ICP nu este definit pentru a optimiza intarzierea pe calea critica, ci mai degraba pentru prezerva intarzierea prin mutarea sectiunilor non-critice cat mai putin. O functie de cost “agresiva” ar putea sa determine transformarea sectiunilor non-critice in sectiuni critice. De aceea este introdus un cost de damping pentru a preveni prea multe mutari: TcostDAMP=Σcmax(delay(c)-maxdelay(c),0) maxdelay(C)=delay(c)+α*slack(c) Valoarea lui maxdelay(c) este actualizata de fiecare data cand o analiza a sincronizarii este efectuata. Scopul functiei maxdelay este de a controla expansiunea intarzierii unei conexiuni date. 6.3 Wirelength Cost
Figura 10 ne prezinta o descriere de nivel inalt a modului cum este
monitorizata lungimea firului. Liniile
orizontale si verticale de taiere sunt plasate in fiecare canal orizontal
si vertical al FPGA. Intretaierea acestor linii este contorizata la fiecare
mutare. La fiecare iteratie a algoritmului ICP este ales un candidat dintre elementele logice LUTi pentru a fi mutat. Exista mai multe tipuri de mutari: · Mutare-la-Fanin – se incearca mutarea lui LUIi laun cluster care contine un fanin al LUTi. · Mutare-la-Fanout – se incearca mutarea lui LUIi laun cluster care contine un fanout al LUTi. · Mutare-la-Sibling – figura 11 ne prezinta relatiile dintre LUTi . Se alese un sibling si se incearca muatrea lui la un cluster care contine un sibling. · Mutare-la-Spatiu – se incearca mutarea in orice spatiu liber din FPGA. ·
Mutare-in-Directia-Vectorului-Critic – vectorul critic al
LUTi este aratat in figura 12. Directia vectorului critic este
aflata prin sumarea directiilor tuturor conexiunilor critice atasate la
LUTi . O incercare este efectuata de a se muat la un cluster
aleatoriu ales de-a lungul vectorului critic. Aceasta mutare ajuta la
corectarea oricarei greseli cand unele cai non-critice devin critice din
urma unor iteratii anterioare.
6.5 Algoritmul ICP Algoritmul ICP este: procICP begin while there is overuse remaining choose any LUTi from an overused cluster; select random move-type; evaluate change in cost ΔC; ifΔC < 0 then accept move; end if. every K iterations do run TA update crit(c) and maxdelay(c). call UpdateOveruseCoefs; end. if loopIterations > Threshold then return NO-FIT; end if. end loop. end ICP.
Functiile de cost si propunerile de mutare au fost discutate mai sus.
Algoritmul ICP allege acele LUT-uri care sunt componente de clustere ilegale
si incearca sa le mute pentru imbunatati functia de cost. Observati ca
TA (Timing Analysis) eset efectuata la fiecare K iteratii. Acest
apel de functie actualizeaza maxdelay si valorile critice ale conexiunii.
Valoarea lui K este actualizata in functie de cantitatea de overuse
ramasa. procUpdateOveruseCoefs begin foreach overused cluster Ci do KLi = KLi + overuse(Ci;NLUTs); KIi = KIi + overuse(Ci;NInput); KRi = KRi + overuse(Ci;NReset); KCi = KCi + overuse(Ci;NClock); end loop. end UpdateOveruseCoefs
7. Concluzii In acest articol am aratat care sunt castigurile de viteza care pot fi obtinute prin integrarea unor algoritmi deresincronizare si dispunere pentru FPGA in comparative cu resincronizarea lanivel de LUT. 8. Referinte 1. Altera. Altera 2000 Databook. http://www.altera.com/html/literature/lds.html. 2. V. Betz, J. Rose, and A. Marquardt. Architecture and CAD for Deep-Submicron FPGAs. Kluwer Academic Publishers, 1999. 3. C. E. Cheng. RISA: Accurate and Efficient Placement Routability Modeling. In ICCAD 1994, 1994. 4. B. Cherkassky and A. V. Goldberg. Negative cycle detection algorithms 5. J. Cong and Y. Ding. FlowMap: An optimal technology mapping algorithm for delay optimization in lookup-table based FPGA designs. IEEE Transactions on CAD,1994. 6. J. Cong and S.K. Lim. Physical Planning with Retiming. Proc. IEEE International Conference on Computer Aided Design, 2000. 7. C. Leiserson, F. Rose, and J. Saxe. Optimizing synchronous circuitry. Journal of VLSI and Computer Systems, 1983. 8. C. Leiserson and J. Saxe. Retiming synchronous circuitry. Algorithmica, 1991. 9. N. Maheshwari and S. S. Sapatnekar. Efficient retiming of large circuits. IEEE Transactions on VLSI Systems, 1998. 10. L. McMurchie and C. Ebeling. PathFinder: A negotiation-based performance- driven router for FPGAs, 1995. 11. P. Pan. Continuous Retiming: Algorithms and Applications. International Conference on Computer Design, 1997. 12. P. Pan, A.K. Karandikar, and C.L. Liu. Optimal Clock Period Clustering for Sequential Circuits with Retiming. Transactions on Computer-Aided Design, 1998. 13. Xilinx. Xilinx 2000 Databook.
http://www.xilinx.com/partinfo/databook.htm.
|
|||||||