Faza de extragere, decodare, executie

Cele mai multe procesoare din noua generatie functioneaza bazindu-se pe principiul extragere(fetch) decodare,executie.Acesta arhitectura de functionare este numita dealtfel Arhitectura Von Nuemen . Executia unei instructiuni de catre procesor este impartita in trei faze distincte, Extragere (fetch), Decodificare, si Executie.

In prima faza procesorul genereaza semnalele necesare extragerii urmatoarei instructiuni din memoria sistem . Instructiunile sunt transferate din memorie intr-o locatie interna din procesor (registrul de instructiuni) .

Cyclul de Fetch: Citirea unei instructiuni
Fig 4_5: Ciclul de Fetch , citirea unei instructiuni

In imaginea de sus, procesorul este pregatit sa inceapa ciclul de fetch. Continutul curent al numaratorului de instruction este adresa 0100. Aceasta valoare este plasata pe magistrala de adrese,si la semnalul READ este activata pe magistrala de adrese. Memoria receptioneaza aceasta adresa si cauta continutul locatiei cu adresa 0100,in memorie care in acest caz este instructiunea MOV AX, 0.

Memoria plaseaza instructiunea pe magistrala de date iar procesorul ransfera instructiunea in Registrul de instructiuni.

Figura de jos prezinta ciclul de fetch ceva mai detliat ,respectiv se prezinta modul de formare a adresei.Adresa se inscrie in Program Counter prin intermediul Selectorului care selecteaza una din cele trei intrari:

  1. Adresa urmatoarei instructiuni care este vechea adresa incrementata( Next Instruction )
  2. Adresa urmatoarei instructiuni la care se adauga un salt relativ
  3. O noua adresa de salt





In procesoarele MIPS sau RISC ,sumatorul pentru incrementare are o intrare fixa (4 daca adresarea se face pe byte , 1 daca adresarea se face pe word ). Avantajul este folosirea unui sumator specializat mai rapid .

La procesoarele CISC , lungimea instructiunii nu este fixa astfel la un PC trebuie incrementata adresa cu valori diferite .Aceasta inseamna ca instructiunea din registrul de instructiuni trebuie intii decodificata si numai dupa aceea se poate sti adresa urmatoarei instructiuni.Daca instructiunea este mai lunga trebuie repetat ciclul de fetch pentru fiecare parte a instructiunii.

In procesoarele cum ar fi 80486, instructiunile pot sa depaseasca lungimee unui cuvint. Se poate intilni si cazul cand un cuvint contine doua instructiuni si in acest caz unitatea de fetch trebuie sa realinieze cuvintul citit separindu-l in doi octeti fiecare reprezentind cite o instructiune .

In actualele implementari ale arhitecturilor Intel unitatea de fetch aduce mai multe instructiuni consecutive intr-un buffer dupa care urmareste unitatea de control daca foloseste instructiunile aduse daca nu reumple bufferul cu un nou set de instructiuni de la alta adresa (neconcordanta intre continutul bufferului si nevoile UC se petrece la aparitia instructiunilor de salt).Acest procedeu sporeste viteza procesorului dar necesita hard suplimentar pentru golirea bufferului in caz de instructiuni de salt.

Incarcare si memorare

Unitatea pentru incarcare/memorare este similara cu unitatea de extragere a instructiunilor (fetch), fiind o interfata intre memorie si registrul pentru instructiuni. Aceasta unitate,trebuie sa gestioneze scrierea si citirea datelor.



Adresa de date poate veni dintr-o instructiune sau poate fi rezultatul unor operatii intre operanzi din instructiune si valori aflate in registrii Cind adresa trebuie calculata aceasta se face cu o unitate specializata numita ALU pentru adrese sau poate fi folosi ALU clasic folosit pentru operatii aritmetice obisnuite.

In arhitectura procesoarelor MIPS sunt prevazute doua memorii diferite penru date si pentru instructiuni din cauza utilizarii unui cache impartit in acelasi mod.Aceasta arhitectura este folosita si de procesoarele RISC.

Instructiunile sunt decodificate de catre procesor.In timpul acestui ciclu procesorul,daca instructiunea o cere,va aduce operanzi ceruti de instructiune. De exemplu instructiunea MOV AX, 0 inscrie valoarea 0 in registrul AX. Procesorul are deja instructiunea MOV AX dar mai are nevoie de inca un cuvint care reprezinta un operand respectiv valoarea 0 pentru a executa instructiunea. In aceasta situatie procesorul va mai executa un ciclu de fetch pentru a aduce valoarea operandului din urmatoarea locatie de memorie(in cazul din figura de mai jos la adresa 0101).

Ciclul de decodificare : Decodificarea instructiunilor

Fig 4_6: Ciclul de decodificare, decodificarea instructiunilor

In imaginea de sus procesorul transfera instructiunea din registrul de instructiuni in Unitatea de decodificare Aceasta compara instructiunea cu instructiunile dintr-un tabel intern si cind gaseste o potrivire citeste din tabel numarul de pasi care sunt necesari pentru a executa complet instructiunea.

In ultima faza , procesorul executa instructiunea.In exemplul de mai sus trebuia inscris registrul AX cu valoarea 0

Execute cycle: Executing the instruction
Fig 4_7: Ciclul executie , executarea instructiunii

In imaginea de sus, procesorul executa seria de microinstructiuni pe care le implica instructiunea MOVAX,0. In ultima parte se seteaza valoarea Numaratorului de instructiuni pentru a adresa urmatoarea instructiune pentru a fi executata si anume se inscrie valoarea 0102.