Modul 3 — LOGICĂ DIGITALĂ

Lecția 3.5 — Construcția logică a unui procesor

ALU, registre, pipeline

Începe Lecția

Introducere

Cum ajunge un procesor de la porți logice individuale la execuția unor instrucțiuni complexe precum adunarea a două numere sau scrierea unui pixel în framebuffer? Răspunsul stă în arhitectura internă: o combinație de unități aritmetico-logice (ALU), registre, unități de control și un pipeline care permite execuția înlănțuită a instrucțiunilor. Fiecare procesor din istoria consolelor — de la MOS 6502 din Atari la AMD Zen 2 din PS5 — urmează aceleași principii fundamentale.

Această lecție acoperă construcția logică a unui procesor: ALU (unitatea care execută operații aritmetice și logice), registrele (memoria ultra-rapidă din interiorul CPU-ului) și pipeline-ul (tehnica de suprapunere a etapelor de execuție pentru a maximiza throughput-ul).

Scopul nu este memorarea numărului de etape dintr-un pipeline, ci înțelegerea de ce procesorul Zen 2 din PS5 poate procesa multiple instrucțiuni simultan, cum ALU-ul transformă porți logice în operații utile și de ce performanța depinde de lățimea pipeline-ului și predicția ramificărilor, nu doar de frecvență.

Teorie Structurată

3.5.1 — Definiție și structură

  • ALU (Arithmetic Logic Unit) = circuit digital combinațional care efectuează operații aritmetice și pe biți asupra numerelor binare întregi
  • Diferit de FPU (Floating-Point Unit), care operează pe numere cu virgulă mobilă
  • Bloc fundamental al CPU, FPU și GPU
  • Intrări: operanzi (date de procesat) + opcode (cod operație)
  • Ieșire: rezultatul operației
  • Status inputs/outputs: informații despre operații anterioare sau curente, între ALU și status registers
  • Concept propus de John von Neumann în 1945, în raportul despre EDVAC

3.5.2 — Semnale

  • Bus-uri de date: A (operand 1), B (operand 2), Y (rezultat) – paralele
  • Lățimile busurilor A, B, Y: identice, corespund word size-ului circuitului extern (CPU)
  • Opcode: bus paralel cu cod de selecție a operației (valoare enumerată)
  • Lățimea opcode determină nr. maxim de operații (4 biți → 16 operații)
  • Status outputs:
  • Carry-out: carry din adunare, borrow din scădere, overflow din shift
  • Zero: toți biții Y sunt 0
  • Negative: rezultatul aritmetic este negativ
  • Overflow: rezultatul depășește rangul numeric al Y
  • Parity: nr. par/impar de biți 1 în Y
  • Status input: tipic un singur "carry-in" (carry stocat de la operația anterioară)

3.5.3 — Operații

  • Operații aritmetice:
  • Add: A+B → Y + carry-out
  • Add with carry: A+B+carry-in → Y + carry-out
  • Subtract: A-B → Y + carry-out (borrow) – utilizat și pentru comparare
  • Subtract with borrow
  • Two's complement: negația A apare la Y
  • Increment: A+1 → Y
  • Decrement: A-1 → Y
  • Operații logice pe biți:
  • AND: AND bit-cu-bit (utilizat și pentru TEST biți)
  • OR: OR bit-cu-bit
  • XOR: XOR bit-cu-bit
  • NOT/Ones' complement: inversarea tuturor biților
  • Operații de shift:
  • Arithmetic shift: păstrează bitul de semn (two's complement)
  • Logical shift: introduce 0 (pentru unsigned integers)
  • Rotate: buffer circular
  • Rotate through carry: carry + operand ca buffer circular
  • Pass through: transmite A nemodificat la Y (verificare paritate/zero/negativ)

3.5.4 — Funcționare și aplicații

  • ALU = circuit combinațional: ieșirile se schimbă asincron la schimbarea intrărilor
  • Propagation delay: timpul necesar semnalelor să parcurgă circuitul ALU
  • Circuitul extern asigură stabilitatea intrărilor și lasă timp suficient pentru propagare
  • Logica secvențială externă controlează ALU, sincronizată cu clock signal
  • CPU: rutează operanzii din processor registers la intrările ALU + aplică opcode
  • Simultan activează registrul destinație pentru a stoca rezultatul
  • La următorul clock, registrul destinație stochează rezultatul ALU
  • Status register (condition code register): stochează semnalele de status pentru operații viitoare și branching condițional
  • Carry-out stocat → conectat la carry-in → propagare eficientă carry în operații multi-precision
  • GPU-uri: conțin sute/mii de ALU-uri care operează concurent (ex. rendering paralel pe pixeli)

3.5.5 — Istorie

  • 1945: John von Neumann propune conceptul ALU pentru EDVAC
  • 1951: Whirlwind I – primul computer cu multiple ALU-uri paralele pe un singur bit (16 "math units" → 16-bit word)
  • 1967: Fairchild 3800 – primul ALU ca circuit integrat (8-bit, doar add/subtract, fără logică)
  • Am2901, 74181: ALU-uri complete pe 4 biți, "bit slice" capable
  • Zilog Z80: adunări pe 8 biți cu ALU de 4 biți (multiple cicluri per instrucțiune)
  • Modern: ALU-uri largi cu barrel shifters și binary multipliers, operații complexe într-un singur ciclu

3.5.6 — Concept și motivație

  • Instruction pipelining = tehnică de implementare a paralelismului la nivel de instrucțiuni într-un singur procesor
  • Împarte instrucțiunile în pași secvențiali (etape de pipeline) executate de unități diferite ale procesorului
  • Pipeline registers: stochează informații între etape (date instrucțiuni + calcule)
  • Permite CPU să completeze o instrucțiune la fiecare ciclu de ceas
  • Etapele pare pe un front al ceasului, etapele impare pe celălalt → throughput crescut
  • Mai multe etape → fiecare etapă face mai puțin → poate rula la frecvență mai mare
  • Cea mai economică organizare (cost = porți logice per instrucțiune per secundă)
  • Dezavantaje: mai complex, mai costisitor, mai multe porți logice și registre

3.5.7 — Etape clasice

  • IBM Stretch (1956-61): termenele Fetch, Decode, Execute (devenite standard)
  • Classic RISC pipeline (5 etape):

1. Instruction Fetch (IF): citirea instrucțiunii din memorie

2. Instruction Decode + Register Fetch (ID): decodare + citire registre

3. Execute (EX): execuția operației (ALU)

4. Memory Access (MEM): acces la memorie (load/store)

5. Register Write Back (WB): scrierea rezultatului în registru

  • Pipeline-ul generic cu 4 etape: Fetch → Decode → Execute → Write-back
  • Ciclul 4: toate 4 etapele active simultan (4 instrucțiuni diferite în procesare)
  • 4 instrucțiuni completate în 7 cicluri (vs. 16 cicluri fără pipeline)
  • Variații: 2 etape (Atmel AVR, PIC), 7-10-20 (Intel Pentium 4), 31 (NetBurst Prescott/Cedar Mill)
  • Superpipeline: pipeline mai "adânc" (mai multe etape) → circuite mai simple per etapă → frecvență mai mare
  • Fully pipelined: poate fetch instrucțiune la fiecare ciclu

3.5.8 — Hazards (riscuri de pipeline)

  • Hazard: situație în care presupunerea de execuție secvențială este încălcată
  • Exemplu: instrucțiunea 2 citește registrul R5 înainte ca instrucțiunea 1 să-l fi scris
  • Data hazard: dependență de date între instrucțiuni care se suprapun în pipeline
  • Soluții:

1. Pipeline stall (bubble): oprirea programării de instrucțiuni noi → cicluri goale

  • Bubble: slot gol unde nu se face muncă utilă
  • 4 instrucțiuni: 8 cicluri cu bubble vs. 7 fără

2. Operand forwarding: rutarea directă a valorii calculate spre instrucțiuni viitoare (fără a aștepta write-back complet)

3. Out-of-order execution: procesorul găsește instrucțiuni independente care pot fi executate imediat

3.5.9 — Branch hazards

  • Branch: salt din secvența normală de instrucțiuni → pipeline continuă fetch secvențial
  • Conditional branch: procesorul nu știe dacă va sări sau nu (calculul nu s-a terminat)
  • Branch prediction: predicție a direcției branch → minimizează penalizarea de performanță
  • Predicție greșită → pipeline flush (anularea lucrului din path-ul greșit)
  • Eager execution: începe execuția pe ambele path-uri, renunță la cel greșit
  • Programatorii evită branching pentru a minimiza pierderea de viteză

3.5.10 — Considerații de design

  • Viteză: pipelining menține toate porțiunile procesorului ocupate → throughput crescut la clock rate dat
  • Avantajul de viteză scade cu cât mai multe hazards apar
  • Processor non-pipelined: o singură instrucțiune la un moment dat
  • Economie: etape modulare mai simple permit operații complexe mai economic
  • Predictibilitate: procesor non-pipelined → timing mai ușor de prezis
  • Stall: când programul schimbă secvența de instrucțiuni, pipeline-ul trebuie golit și reîncărcat
  • Control unit: orchestrează fluxul, pornire-continuare-oprire, asigură că etapele nu interferează

Legătura Fizică — Informatică

Definiție și structură

  • ALU (Arithmetic Logic Unit) = circuit digital combinațional care efectuează operații aritmetice și pe biți asupra numerelor binare întregi
  • Bloc fundamental al CPU, FPU și GPU

Semnale

  • Lățimile busurilor A, B, Y: identice, corespund word size-ului circuitului extern (CPU)

Operații

  • Operații logice pe biți:
  • AND: AND bit-cu-bit (utilizat și pentru TEST biți)
  • OR: OR bit-cu-bit
  • XOR: XOR bit-cu-bit

Funcționare și aplicații

  • Logica secvențială externă controlează ALU, sincronizată cu clock signal
  • CPU: rutează operanzii din processor registers la intrările ALU + aplică opcode
  • GPU-uri: conțin sute/mii de ALU-uri care operează concurent (ex. rendering paralel pe pixeli)

Istorie

  • 1951: Whirlwind I – primul computer cu multiple ALU-uri paralele pe un singur bit (16 "math units" → 16-bit word)
  • 1967: Fairchild 3800 – primul ALU ca circuit integrat (8-bit, doar add/subtract, fără logică)
  • Am2901, 74181: ALU-uri complete pe 4 biți, "bit slice" capable
  • Modern: ALU-uri largi cu barrel shifters și binary multipliers, operații complexe într-un singur ciclu

Concept și motivație

  • Instruction pipelining = tehnică de implementare a paralelismului la nivel de instrucțiuni într-un singur procesor
  • Împarte instrucțiunile în pași secvențiali (etape de pipeline) executate de unități diferite ale procesorului
  • Permite CPU să completeze o instrucțiune la fiecare ciclu de ceas
  • Cea mai economică organizare (cost = porți logice per instrucțiune per secundă)
  • Dezavantaje: mai complex, mai costisitor, mai multe porți logice și registre

Branch hazards

  • Conditional branch: procesorul nu știe dacă va sări sau nu (calculul nu s-a terminat)

Considerații de design

  • Viteză: pipelining menține toate porțiunile procesorului ocupate → throughput crescut la clock rate dat
  • Predictibilitate: procesor non-pipelined → timing mai ușor de prezis

Aplicare Directă în Console

În contextul consolelor de jocuri, construcția logică a unui procesor joacă un rol esențial în funcționarea hardware-ului.

Exemplu Real de Hardware

Etape clasice

  • Variații: 2 etape (Atmel AVR, PIC), 7-10-20 (Intel Pentium 4), 31 (NetBurst Prescott/Cedar Mill)

Probleme Frecvente Asociate

⚠️ Etape clasice

Classic RISC pipeline (5 etape):

⚠️ Hazards (riscuri de pipeline)

Hazard: situație în care presupunerea de execuție secvențială este încălcată

Exemplu: instrucțiunea 2 citește registrul R5 înainte ca instrucțiunea 1 să-l fi scris

Data hazard: dependență de date între instrucțiuni care se suprapun în pipeline

Soluții:

1. Pipeline stall (bubble): oprirea programării de instrucțiuni noi → cicluri goale

Bubble: slot gol unde nu se face muncă utilă

4 instrucțiuni: 8 cicluri cu bubble vs. 7 fără

2. Operand forwarding: rutarea directă a valorii calculate spre instrucțiuni viitoare (fără a aștepta write-back complet)

3. Out-of-order execution: procesorul găsește instrucțiuni independente care pot fi executate imediat

Recapitulare

  • Definiție și structură: ALU (Arithmetic Logic Unit) = circuit digital combinațional care efectuează operații aritmetice și pe biți asupra numerelor binare întregi
  • Semnale: Bus-uri de date: A (operand 1), B (operand 2), Y (rezultat) – paralele
  • Operații: Operații aritmetice:
  • Funcționare și aplicații: ALU = circuit combinațional: ieșirile se schimbă asincron la schimbarea intrărilor
  • Istorie: 1945: John von Neumann propune conceptul ALU pentru EDVAC
  • Concept și motivație: Instruction pipelining = tehnică de implementare a paralelismului la nivel de instrucțiuni într-un singur procesor
  • Etape clasice: IBM Stretch (1956-61): termenele Fetch, Decode, Execute (devenite standard)
  • Hazards (riscuri de pipeline): Hazard: situație în care presupunerea de execuție secvențială este încălcată
  • Branch hazards: Branch: salt din secvența normală de instrucțiuni → pipeline continuă fetch secvențial
  • Considerații de design: Viteză: pipelining menține toate porțiunile procesorului ocupate → throughput crescut la clock rate dat

Quiz — 5 Întrebări

Întrebarea 1

Care afirmație este corectă despre: Intrări?

  • a) rezultatul operației
  • b) A (operand 1), B (operand 2), Y (rezultat) – paralele
  • c) operanzi (date de procesat) + opcode (cod operație)
  • d) informații despre operații anterioare sau curente, între ALU și status registers
Arată răspunsul

c) — operanzi (date de procesat) + opcode (cod operație)

Întrebarea 2

Care afirmație este corectă despre: Bus-uri de date?

  • a) A (operand 1), B (operand 2), Y (rezultat) – paralele
  • b) operanzi (date de procesat) + opcode (cod operație)
  • c) rezultatul operației
  • d) informații despre operații anterioare sau curente, între ALU și status registers
Arată răspunsul

a) — A (operand 1), B (operand 2), Y (rezultat) – paralele

Întrebarea 3

Care afirmație este corectă despre: Add?

  • a) A+B → Y + carry-out
  • b) informații despre operații anterioare sau curente, între ALU și status registers
  • c) rezultatul operației
  • d) operanzi (date de procesat) + opcode (cod operație)
Arată răspunsul

a) — A+B → Y + carry-out

Întrebarea 4

Care afirmație este corectă despre: ALU = circuit combinațional?

  • a) ieșirile se schimbă asincron la schimbarea intrărilor
  • b) informații despre operații anterioare sau curente, între ALU și status registers
  • c) operanzi (date de procesat) + opcode (cod operație)
  • d) rezultatul operației
Arată răspunsul

a) — ieșirile se schimbă asincron la schimbarea intrărilor

Întrebarea 5

Care afirmație este corectă despre: 1945?

  • a) John von Neumann propune conceptul ALU pentru EDVAC
  • b) rezultatul operației
  • c) operanzi (date de procesat) + opcode (cod operație)
  • d) informații despre operații anterioare sau curente, între ALU și status registers
Arată răspunsul

a) — John von Neumann propune conceptul ALU pentru EDVAC

Exercițiu Aplicat de Gândire

🧠 Exercițiu: Construcția logică a unui procesor

Scenariu: Analizezi un sistem hardware care utilizează conceptul de ALU. Pe baza cunoștințelor din această lecție, răspunde la următoarele întrebări:

  • 1. Defineste pe scurt: ALU.
  • 2. Ce rol are registre în contextul hardware-ului?
  • 3. Explică relația dintre ALU și pipeline.
Arată rezolvarea

1. ALU (Arithmetic Logic Unit) = circuit digital combinațional care efectuează operații aritmetice și pe biți asupra numerelor binare întregi

2. Bus-uri de date: A (operand 1), B (operand 2), Y (rezultat) – paralele

3. Add: A+B → Y + carry-out

Video Recomandat

0:00 / 0:00

Cum funcționează un procesor (CPU) — explicat pas cu pas, de la tranzistoare la instrucțiuni.