Laboratorul 1: Diferență între versiuni

De la WikiLabs
(Pagină nouă: == ISA, ALU, RALU == === ALU === Unitatea aritmetico-logică, ALU, este responsabilă de execuţia instrucţiunilor. În primul rând, după cum ne şi sugerează numele, instruc...)
 
(ALU)
Linia 19: Linia 19:
 
end
 
end
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Descrieți funcțional (comportamental) un ALU de 8 biți ce execută operațiile din tabelul 1.
 +
 +
[[Fișier: asc_lab1_alu.png]]
 +
{| class="wikitable" style="text-align: center;
 +
|+ Tabelul 1
 +
!opcode !! operație !! detalii !! flaguri afectate
 +
|-
 +
| <code>ADD</code> || adunare  || || Z, N, V
 +
|-
 +
| <code>SUB</code> || scădere  || operandul 2 se scade din operandul 1 || Z, N, V
 +
|-
 +
| <code>AND</code> || ȘI logic || fiecare bit al rezultatului este ȘI logic între biții corespunzători ai operanzilor || Z, N,
 +
|-
 +
| <code>CMP</code> || comparație  ||  Z și N se modifică conform tabelului 2 || Z, N
 +
|}
  
 
=== RALU ===
 
=== RALU ===

Versiunea de la data 25 septembrie 2019 22:48

ISA, ALU, RALU

ALU

Unitatea aritmetico-logică, ALU, este responsabilă de execuţia instrucţiunilor. În primul rând, după cum ne şi sugerează numele, instrucţiunile aritmetice şi cele logice, dar şi celelalte categorii de instrucţiuni, în execuţia cărora intervin operaţii precum calculul unor adrese pentru instrucţiunile de acces la memorie sau pentru instrucţiunile de salt relativ. Concret, ALU primeşte operanzii unei instrucţiuni şi oferă rezultatul operaţiei specificate în codul instrucţiunii. De exemplu instrucţiunea de adunare determină în ALU adunarea celor doi operanzi de la intrare, suma acestora (rezultatul) apărând la ieşirea ALU. Un alt exemplu, instrucţiunea de salt relativ determină în ALU adunarea a două numere, valoarea contorului de program (PC) şi valoarea saltului relativ specificată în corpul instrucţiunii, rezultatul fiind noua valoare de contor de program, ce va fi încărcată în contorul de program.

Complexitatea ALU este determinată în primul rând de complexitatea operaţiilor aritmetice ale instrucţiunilor din setul de instrucţiuni, însă depinde, uneori semnificativ, şi de performanţele avute în vedere (viteză, paralelism, consum redus) ce pot modifica radical structura aleasă. La nivel funcţional, fără a fi preocupaţi de implementarea efectivă, ALU poate fi privit ca un bloc multifuncţional a cărui funcţie este selectată de codul operaţiei instrucţiunii:

always @(*) begin
    case(opcode)
    `ADD: rezultat = operand1 + operand2;
    `SUB: rezultat = operand1 - operand2;
    // urmeaza implementarea altor operatii
    endcase
end

Descrieți funcțional (comportamental) un ALU de 8 biți ce execută operațiile din tabelul 1.

Asc lab1 alu.png

Tabelul 1
opcode operație detalii flaguri afectate
ADD adunare Z, N, V
SUB scădere operandul 2 se scade din operandul 1 Z, N, V
AND ȘI logic fiecare bit al rezultatului este ȘI logic între biții corespunzători ai operanzilor Z, N,
CMP comparație Z și N se modifică conform tabelului 2 Z, N

RALU