Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Procesoare risc / pipeline


Procesoare risc / pipeline


Procesoare RISC / PIPELINE

Procesoarele RISC utilizeaza o structura pipeline pe 'n' nivele (stadii) pentru a permite o viteza de executie de o instructiune pe ciclu CPU. Deci, in acelasi timp se executa, interpreteaza sau extrag n instructiuni.

Structura PIPELINE opereaza eficient deoarece resurse ale CPU sunt folosite independent..

Presupunem o arhitectura care lucreaza pe 5 nivele:

Cele 5 nivele sunt:

Figura 38



Fiecare instructiune se executa intr-o serie de 5 pasi

  • IF= instruction Fetch;
  • RD= read operands;
  • ALU= perform operation;
  • MEM= access memory;
  • WB= write back;

Fiecare pas necesita (cu exceptia unor cereri de acces la memorie) un ciclu CPU.

"Curgerea" pipeline in executia instructiunilor este

Figura 39

IF - acceseaza un registru TLB si se calculeaza adresa pentru memoria cache de

instructiuni instructiunea nu este inscrisa pana in faza 1 a pipeline-ului.

RD - operanzii sunt cititi din registrele CPU in timpul decodificarii instructiunii.

ALU - se realizeaza operatia aritmetico-logica.

MEM - daca este necesar un ciclu Load sau Store se acceseaza memoria cache de

date.

WB - rezultatul ALU sau data citita din memoria cache de date este scrisa in

registrul destinatie.

Instructiuni intarziate

Procesorul utilizeaza mai multe tehnici interne care sa-i permita executia instructiunilor. Doua tipuri de instructiuni pot perturba "curgerea" instructiunilor: instructiunile de incarcare (load) si cele de salt.

Instructiunile load necesita o intarziere de un ciclu inainte ca data care a fost scrisa sa fie disponibila pentru alta instructiune. Instructiunile de salt necesita si ele o intarziere de un ciclu pentru adresare si fetch de la noua adresa.

O tehnica pentru a introduce intarzierea necesara este de a opri executia instructiunilor in interiorul structurii pipeline ori de cate ori se identifica o instructiune din cele doua tipuri. Aceasta ar complica structura pipeline si logica de sincronizare. Pentru a evita acestea si a nu modifica "curgerea" instructiunilor, procesorul va executa instructiunea imediat urmatoare folosind instructiuni de intarziere.

Asambloarele de pe RISC-uri recunosc instructiunile de incarcare si de salt si daca este necesar introduc instructiuni de intarziere (cum ar fi NOP sau alte instructiuni care nu modifica date sau indicatori).

Instructiuni de tip "load"

Instructiuni de tip 'load'

Datorita suprapunerii ciclilor de executie o data incarcata intr-un registru de lucru nu poate fi operand ALU pentru urmatoarea instructiune; aceasta deoarece data este disponibila la sfarsitul ciclului.

Figura 40

Instructiuni de tip "jump" si "branch"

Instructiunile de salt necesita calculul adresei - care se executa in ciclu ALU - aceasta nefiind disponibila in ciclu de acces a memoriei cache de instructiuni a urmatoarei instructiuni.

Figura 41

In "delay slot" se pot executa instructiuni independente, adica instructiuni care nu depind de data preluata din memoria cache de date sau prima instructiune de la adresa unde se executa saltul daca aceasta poate fi translata (este o instructiune de tip

MOV Ri->Rj).

Structuri pipeline

O structura liniara "pipeline" este o cascada de nivele/stadii de procesare care sunt conectate liniar incat sa realizeze o functie (functii) fixe, predefinite, asupra unui sir de date.

Modelele sincron si asincron

Un processor pipeline liniar este realizat cu k nivele/stadiii de procesare. Intrarile (operanzii) sunt introdusi in pipeline in primul stadiu S1. Rezultatele procesarii sunt trecute din S­I in Si+1, i = 1, K-1. Rezultatul final este disponibil din pipeline in Sk.

Functie de controlul "curgerii" datelor prin structura pipeline exista doua clase de structuri pipeline liniare: asincrone si sincrone.

Modelul asincron curgerea/transferul informatiei intre doua nivele adiacente se realizeaza cu ajutorul unui protocol "handshake" de tip Ready-Acknowledge.

Figura 42

Modul sincron: pentru interfatarea nivelelor se folosesc bistabile de tip master-slave flip-flop. Pe frontul de comanda al clok-ului toate registrele transfera data simultan catre nivelul urmator.

Nivelele din pipeline sunt structuri combinationale si sunt proiectate sa aiba aproximativ acelasi timp de propagare.

Este util pentru studiul functionarii unei structuri pipeline sa se construiasca o matrice de rezervare a nivelelor care sa evidentieze secventa acestora.

Aceasta tabela reprezinta o diagrama spatiu-timp. Pentru pipeline-uri liniare secventa de lucru este data de diagonala principala.

Model sincron

Figura 43

Pentru un pipeline liniar cu 4 nivele sunt necesare 4 perioade de clock si matricea

(tabela) de rezervare este

Figura 44

Task-uri succesive sau operatii sunt initializate una pe ciclu de clock intrand in pipeline. Cand structura pipeline este "plina" la iesire se obtin rezultate pe rand cu fiecare ciclu suplimentar.

Structuri pipeline neliniare

O structura pipelina dinamica poate fi configurata incat sa realizeze functii diferite la momente de timp diferite. O structura pipeline liniara este statica deoarece este utilizata pentru implementarea de functii prestabilite, fixe.

O structura dinamica permite reactii feedback si feedforward de aceea se mai numeste si structura pipeline neliniara.

Intr-o structura statica este usor a partitiona o functie intr-o secventa de subfunctii ordonate liniar. La structurile neliniare problema se complica deoarece pe langa legaturile liniare exista si bucle.

Fie urmatoarea structura pipeline neliniara cu 3 stadii la care in afara de legaturile liniare s1->s2 si s2->s3 exista si conexiune feedforward s1->s3 si legaturile feedback s3->s2 si s3->s1.

Figura 45

Iesirea/rezultatul nu este obtinuta obligatoriu din ultimul stadiu. De asemenea urmand diferite cai de "curgere" a informatiei se pot realiza diferite functii.

Tabele de rezervare pentru functiile X si Y pot fi:

Figura 46

La o structura liniara tabela de rezervare este triviala, in sensul ca transferul informatiei (datei) este liniar.

Datorita legaturile feedforward si feedback tabela de rezervare pentru o structura neliniara este netriviala. Data o structura neliniara se pot genera mai multe tabele de rezervare pentru evaluarea diferitelor functii. Fiecare functie este specificata printr-o tabela de rezrvare.

Spre deosebire de structurile liniare cele neliniare pot fi specificate prin mai multe tabele de rezervare.

Fiecare tabela evidentiaza "curgerea" datei prin pipeline pentru o functie. Se accepta ca diferite functii care urmeaza cai diferite sa fie specificate in aceeasi tabela de rezrvare.

Numarul de coloane din tabela de rezervare se numeste "timp de evaluare" al functiei respective. De exemplu timpul de evaluare pentru functia X este de 8 perioade de clock/cicli.

Fiecare functie se caracterizeaza si printr-o variabila de initiere care evidentiaza ciclul din care incepe evaluarea ei.

"Intarzierea" (latency) dintre doua initieri reprezinta numarul de cicli dintre ele si trebuie sa fie o valoare pozitiva.

Orice incercare a doua sau mai multe initieri de a folosi acelasi nivel in acelasi timp cauzeaza o "coliziune". O coliziune implica conflict de resurse intre initieri. Fie tabela de rezervare pentru functia X prezentata anterior.

Initial, la momentul 0, se aplica vectorul/task-ul X2, iar dupa inca o intarziere 2 task-ul X3. Deoarece evaluarea functiei necesita 8 cicli, in ciclul 8 se termina evaluarea lui X1.

Tabela de rezervare este:

Figura 47

,unde Xi = task-ul "i"

Se observa ca exista o coliziune in momentul 4 cand cele doua evaluari necesita acces la stadiul S2. Mai exista coliziuni in momentele 5,6,7 (cand evaluarile pentru X1, X2, X3 necesita stadiul S3 etc.).

Pentru o intarziere de 5 cicli se obtine tabela

Figura 48

Exista coliziune la S1 dar in momentul 6.

Problema este de a determina intarzierile intre informatiile de intrare incat sa nu apara coliziuni.

O secventa de intarzieri (latency sequence) reprezinta o secventa de intarzieri intre task-uri succesive care nu creaza coliziuni.

Un ciclu de intarzieri (latency cycle) este o secventa de introducere de task-uri cu anumita care repeta aceeasi secventa mereu.

De exemplu ciclul (1, 8) de intarzieri nu creeaza coliziuni.

Figura 49

nu exista coliziuni:

Sau intarzierea 3:

Factorul de acoperire al intarzierilor se defineste ca fiind raportul dintre suma intarzierilor si numarul lor din ciclu.

Pentru (1, 8) => )/=4.5, pentru (3)3/1=3.

Stabilirea coliziunilor (Collision Scheduling)

Este necesar sa se obtina un factor de acoperire cat mai mic, fara sa apara coliziuni. Se pot utiliza mai multe metode

  1. Vectori de coliziune

Pentru o tabela de rezervare pot exista mai multe intarzieri nepermise. Fie o tabela cu n coloane (sunt necesare n cicli pentru evaluare) fie m cea mai mare intarziere nepermisa => m < = n-1. Fie o intarziere permisa p cat mai mica posibil; atunci 1<=p<=m-1.p=1 corespunde ideal si ar conduce la rezultate asemanatoare structurilor liniare.

Setul combinat al intarzierilor premise si nepermise poate fi usor corelat cu vectorul de coliziune care este un vector binary de m elemente: C (Cm,,C2,C1).

Ci=

Intotdeauna Cm 1 (corespunde celei mai mari intarzieri nepermise).

Pentru tabela de rezervare anterioara, a functiei X, C

  1. Diagrame de stari

Cu vectorul de coliziune stabilit se poate construi o diagrama de timp specificand tranzitiile de stari permise la initieri succesive. Vectorul de coliziune corespunde starii initiale a structurii pipeline, la momentul 1 si este numit vector de coliziuni initial. Fie p o intarziere permisa 1<=p<=m-1.

Registrul care contine vectorul de intarzieri este deplasat la dreapta fiecare bit deplasat corespunde unei cresteri cu 1 a intarzierii. La stanga registrului se introduce 0.

Schema este

Cicli Greedy

Pe baza diagramei de stari se pot determina cicli de intarziere optionali.

Exista o infinitate de cicli care pot fi gasiti cum ar fi

Dintre acestia ne intereseaza numai cicli simpli. Un ciclu simplu este un ciclu de intarzieri in care fiecare stare apare numai o data. Pentru diagrama b) numai cicli (3), (6), (8), (1,,8), (3,8) si (6,8) sunt cicli simpli. Ciclul (1,,8,6,8) nu este simplu deoarece trece prin starea (1011010) de 2 ori, iar ciclul (3,6,3,8,6) repeta starea (1011010) de 3 sau mai multe ori. Unii cicli sunt cicli "rapizi" (greedy).

Un ciclu "rapid" este acel ciclu cu intarzieri minime fata de starile initiale.

Pnetru diagrama b) exista ciclii (1,8) si (3): (1,8) are un factor de acoperire de 4.5 iar (3) de 3. Se alege (3).

Initial se fac toate combinatiile din cicli cu o singura intarziere obtinandu-se cicli cu mai multe intarzieri si apoi se urmareste sa nu apara o stare finala de mai multe ori pentru ciclul respectiv.

Ex >(1011011), (1011010).

Optimizarea functionarii/vitezei structurii pipeline

Ideea este de a insera stadii de intarziere in care nu se efectueaza calculele (nu afecteaza parametrii task-urilor), asemanator ca la structurile liniare, in structura pipeline originala. Aceasta modifica tabelele de rezervare rezultand un nou vector de coliziuni si o diagrama de stari imbunatatita. Scopul este de a obtine un ciclu de intarzieri optimal care este cel mai scurt.

Vecinatatile factorului de acoperire a intarzierilor minimal (FAIM).

FAM este limitat inferior de numarul maxim de marcari in oricare coloana a tabelului de rezervari.

FAM este limitat superior de numarul bitilor de "1" din vectorul de coliziuni initial majorat cu 1.

Pentru a optimiza functia X anterioara avem 3<=FAM<=5 iar pentru functia Y3<=FAM<=3=> factorul optim =3.

Pentru a optimiza FAM este necesar sa se coboare limita inferioara, modificand tabele de rezervare. Calea este reducerea numarului de marcari de pe fiecare coloana, dar modificarea tabelei de rezervare trebuie sa pastreze functia initiala. O posibilitate este de a folosi stadii in care nu se efectueaza calcule/operatii si anume stadii de intarziere.

Prin inserarea intarzierilor se modifica tabela de rezervare gasindu-se un nou vector de coliziune.

Fie structura pipeline

cu tabela de rezervari si diagrama:

Figura 53

Vectorul de coliziuni este C=(1011) cu intarzierile nepermise 1,2 si 4.

Intarzierera permisa este 3, iar ciclul (3).

Limita inferioara este 2 (pe fiecare linie exista cate 2 marcari) deci FAM=3 nu este optimala.

Introducand doua stadii de intarziere se decaleaza operatiile din 4 si 5.

Figura 55

Reprezentarea structurii devine

iar diagrama de timp este

Figura 57

In acest caz ciclul este (1,3) iar FAM

Operatia X din ciclul 4 a fost intarziata cu un ciclu, iar operatia din ciclul 5 cu 2 cicli.

Un parametru initial este rata de initiere sau numarul de initieri de task-uri.

Daca n task-uri sunt initializate in cicli atunci de initializare (sau pipeline throughput) este N/n.

Pentru exemplificarea functionarii unei structuri pipeline se revine la o structura liniara la un calculator RISC.

Stadiile pipeline sunt

Se presupune ca se doreste executarea operatiilor x=y+z si A=B+C.

Stadiile (E) reprezinta operatii 'aritmtico-logice' suplimentare, in special operatii

de 'transparenta' necesare asigurarii timpilor de propagare si acces.

"Curgerea" pipeline este:

Se observa ca in aceasta situatie timpul de executie este de 17 cicli. Pentru a reduce timpul de executie se pot reordona instructiunile obtinandu-se urmatoarea "curgere" a acesteia prin pipeline:

La un ciclu E" nu sunt necesare intarzierile.

Arhitecturi pipeline pentru sistemele de calcul

O structura pipeline poate avea mai multe nivele/stadii. Se considera o structura cu 10 stadii, fiecare stadiu necesitand un ciclu. In cazul ales, toate operatiile au loc numai intr-unul din cele 10 stadii. Acestea sunt executate in circuitele de sumare, incrementare si unitatea aritmetica. Operatiile si reancarcarea registrelor de lucru are loc in stadiile 9 si 10. Celelalte stadii sunt folosite pentru fetch, decodificare, selectie operanzi si intarzieri pentru acoperirea timpilor de acces. Se considera ca acumulatorul are 18 biti, PC-ul 12, adresele de operand 12 iar codul instructiunii cu numaratorul de treceri ( trip ) 9 biti. Pe durata celor 10 stadii procesorul executa un Read sau un Write la memoria locala. La nevoie anumite stadii pot fi parcurse de mai multe ori. Numaratorul de treceri ( tripcounter ) indica care trecere prin stadii se executa la un moment dat si astfel controleaza modul in care fiecare instructiune este executata. Toata activitatea in stadiile 9 si 10 este aratata structural in fig. 60.

Figura 60

Registrele generale, acumulatorul, registrul de adrese si registrul de instructiuni au fost desenate in ambele stadii, 9 si 10, urmarindu-se usor transferul informatiilor.

In aceasta arhitectura, primul stadiu este un fetch. Starea procesorului/rezultatul operatiilor este stocata in stadiul 10.

In acelasi timp este trimisa spre memorie adresa urmatoarei instructiuni; aceasta instructiune este incarcata cu acelasi clock care stocheaza starea procesorului in stadiul 9 si este disponibila la trecerea din stadiul 9 in stadiul 10 (la sfarsitul urmatoarei treceri prin pipeline). Fiecare instructiune contine doua campuri - Op.code si adresa de operand care incarca registrul de adrese si registrul de instructiuni. Numaratorul de treceri este initializat la fetch, pregatindu-se urmatoarele treceri (pentru scriere/citire cu adresare directa sau indirecta). La operatiile cu adresare directa a memoriei, scrierea sau citirea se face la a doua trecere. Operatiile aritmetico-logice se executa in stadiile 9 si 10, in acelasi timp avand loc si incrementarea sau incarcarea din registrul de adrese al PC-ului.

Resursele interne ale unei masini pot fi utilizate in acelasi timp de mai multe

instructiuni, existand pericolul de coliziune atunci cand o noua operatie este admisa in timp ce una sau mai multe operatii sunt in executie. Ca si in cazul anterior, se utilizeaza o tabela de rezervare, care ofera informatiile de timing necesare.

Pentru exemplificare se considera operatiile de inmultire si adunare in virgula

mobila, ale caror organigrame sunt date in fig. 61 (a), (b). Tabelele de rezervare sunt prezentate in fig. 62 (a), (b).

a)

b)

Figura 61

Pentru figura 61 (a) - inmultirea a doua numere in virgula mobila -algoritmul este:

1) adunare exponenti ;

2) inmultirea mantiselor, obtinandu-se o mantisa de lungime dubla ;

3) normalizarea mantisei produsului si ajustarea exponentului ;

4) rotunjirea mantisei produsului la lungime simpla si daca apare overflow

reajustarea exponentului

Pentru figura 62 (b) - adunarea a doua numere in virgula mobila -algoritmul este:

1) scaderea exponentilor pentru a determina numarul mai mare ( la nevoie numerele se inverseaza intre ele urmand apoi complementara) ;

2) deplasarea Mant.2 spre dreapta corespunzator cu diferenta exponentilor ;

3) adunarea mantiselor si initializarea exponentului ca fiind exp1 ;

4) renormalizarea mantisei sumei si ajustarea exponentului sumei ;

5) rotunjirea mantisei sumei la simplu cuvant si daca apare overflow reajustarea exponentului.

Se considera toate operatiile interne necesare executarii inmultirii si adunarii deoarece resursele sunt comune.

a)

b)

Figura 62

Conform tabelelor de rezervare, pot sa apara coliziuni. Vectorii de coliziune corespunzatori celor doua tabele sunt:

Prin suprapunerea celor doua tabele de mai sus daca o adunare si o inmultire colizioneaza cand sunt lansate simultan in executie, prin deplasarea uneia dintre tabele ciclu cu ciclu se pot determina intarzierile necesare pentru a nu exista coliziuni in cazul adunarii dupa inmultire, respectiv inmultirii dupa adunare.

In cazul unei structuri pipeline pentru o singura functie, controlerul de pipeline se reduce la un simplu registru cu deplasare spre dreapta, realizandu-se la fiecare ciclu un OR intre continutul acestuia si vectorul de coliziune.

Bitul cel mai semnificativ din vectorul de coliziune corespunde inarzierii de 1 ciclu, iar cel mai putin semnificativ intarzierii maxime.

In structura pipeline a unui calculator se executa in general mai multe operatii/functii, interesand posibilitatile de coliziune in situatiile respective. Pentru exemplificare se considera urmatoarele situatii: inmultire dupa inmultire, adunare dupa adunare, adunare dupa inmultire si inmultire dupa adunare. In primele doua situatii se folosesc pentru determinarea intarzierilor care determina coliziune vectorii pentru inmultire, respectiv adunare. In fig. (63) sunt prezenti cei patru vectori initiali de coliziune si modul de deplasare/incarcare a registrului de deplasare.

Figura 63

Presupunem ca s-a primit o cerere de adunare . Se testeaza bitii care ies din registrul de deplasare si un bit este "0" ; cererea este acceptata si se incepe o anumita operatie. In acest caz registrul de deplasare pentru "inmultire" este incarcat printr-un SAU cu vectorul de coliziune pentru "inmultire dupa adunare", iar registrul de deplasare pentru "adunare" este incarcat printr-un SAU cu vectorul de coliziune pentru "adunare dupa adunare". Pentru toate posibilitatile de utilizare a structurii pipeline trebuie sa existe cate un registru de deplasare.

Deci o noua operatie poate fi startata la primul impuls de clock pentru care se garanteaza ca nu vor exista coliziuni cu operatia de executie. Pentru analiza coliziunilor se construieste o diagrama numita "diagrama stare redusa" care evidentiaza toate starile registrului de deplasare dupa ce o noua operatie a fost initiata. Numerele de pe sageti (arce) indica numarul de cicluri de clock dupa care registrul de deplasare ajunge din starea initiala in cea finala. Dat vectorul intial 1001011 se observa ca numai un impuls de clock trebuie sa urmeaze dupa initializarea unei operatii si o noua operatie poate fi initializata pe al doilea impuls de clock. Imediat dupa initializarea primei operatii, registrul de deplasare va contine 1001011, (vectorul initial). Imediat dupa initializarea altei operatii, doua clock-uri mai tarziu, noul continut al registrului va fi 0101100 v 11001011

Figura 64

In fig. 64 este redata diagrama de stare redusa pentru vectorul de coliziune de mai sus care evidentiaza toate starile posibile dupa ce a fost initiata. Algoritmul de construire a diagramei :

1. Se creaza un set de stari pornind de la o stare initiala care este marcata cu vectorul initial de coliziune.

2. Se ia o stare din setul de stari. Pentru fiecare "0" al acestei stari se gaseste starea registrului care va fi obtinuta daca o noua operatie a fost lansata, corespunzand unui "0"extras din registru. Continutul urmatoarei stari este obtinut prin deplasarea registrelor spre stanga cu atatea pozitii pana cand se obtine um zero la iesirea registrului (deci cand ar fi posibila lansarea unei operatii) facandu-se apoi un SAU cu vectorul initial de coliziune si rezultatul fiind incarcat in registru.

3. Daca stare gasita este noua , se adauga la diagrama si se plaseza intr-o lista de stari ce va fi examinata.

4. Se trage un arc de la vechea stare la noua stare (dintr-o stare nu se trece in alta - nu se traseaza arc - decat atunci cand se obtine un"0" la iesirea registrului ).

5. Din starea respectiva se traseaza un arc la starea initiala marcat cu N , unde N este cu o unitate mai mare decat numarul de biti al vectorului de coliziune (dupa N cicli sigur registrul este zerorizat si genereaza "0" la iesire).

6. Cand s-au epuizat starile se termina constructia diagramei.

Pe baza diagramei (respectiv a starilor) se poate gasi rata maxima care poate fi suportata de structura pipeline prin examinarea ciclilor care au lungimi diferite.

Fiecare ciclu corespunde unei posibilitati de repetabililtate a initierii operatiilor. Ciclul de lungime cinci care duce in starea 1101011 permite o initializare la fiecare cinci cicluri, cu o rata de completare de 0.2 operatii pe ciclu.

Cicli de lungime 8 care duc in starile 1011011 si 1101011 admit initieri la 8 cicli, cu o rata de completare de 0.25 operatii pe ciclu. Un ciclu compus este format din cicli 2,3,5,3 care permite patru initializari la 13 cicli cu o rata de completare 0.31; acest caz permite ceeea mai buna exploatare a structurii pipeline.

Folosirea intarzierilor petru cresterea performantelor

Daca o structura pipeline nu poate sustine initieri de operatii la rata maxima posibila, pentru a atinge performante maxime se pot introduce intarzieri in exploatarea unor resurse, care sa elimine punctele de coliziune .

Figura 65

In fig. 65 se prezinta o tabela de rezervare si vectorul de coliziune cu diagrama corespunzatoare. Rata maxima este 1/3 (linia A are 3 intrari ). Dar rata obtinuta este 1/5 <1/3. Se doreste imbunatatirea ratei modificand tabela de rezervare. Exista multe posibilitati; una ar fi o initiere dupa doi cicli si o alta cu o intarziere de patru cicli dupa a doua. Dar aceasta ar crea coliziune la resursa A. Pentru a elimina conflictul este necesar sa se introduca intarzieri.

Figura 66

i - interzisa; D - intarziere; F - noua initiere

Figura 67

Un prim pas este refacerea tabelei de rezervare pastrandu-se prima coloana si modificandu-se prima linie; din 2 in 2 cicli se marcheaza celulele ca fiind celule interzise (notate cu i ) ceea ce inseamna ca initierea unei noi operatii dupa 2,4,6,8 cicli conduce la coliziuni (conform tabelei initiale). Dar tabela initiala are un X in coloana 3; este necesar sa se introduca o intarzire D incat acest X sa fie deplasat in coloana 5. Aceasta posibilitate sugereza o intarziere cu 3 cicli a initierilor. Pentru aceasta se inainteaza de la stanga spre dreapta, coloana cu coloana, plasand X-ii din tabela din fig. 66. Se incepe cu X-ul din coloana 1 linia A, plasandu-se I-uri in coloanele 4,7,10 . . . deoarece aceste celule sunt interzise , pentru a elimina coliziuni in cazul intarzierii de 3 cicli (fig. 67 a). Se incearca sa se plaseze X-ii in coloane ( fig. 67 a-c). In fig. 67 d se introduce o intarziere D, deoarece X era in coloana 4 si trebuie intarziat. Operatia poate incepe in coloana 5. Noua tabela produce in linia A o intariere fata de tabela originala. Tote celelalte stadii care depind de acest rezultat vor fi intarziate cu cel putin un clock. X-ul din linia C, coloana 5 din fig. 67 e) va fi fortat in coloana 6 iar urmatorul X in linia B va trece in coloana 7. Se obtine o noua tabela de rezervare, prezentata in fig. 67 f). Rata obtinuta este 3.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate