Table of Contents

Laboratorul 7 - Calculatorul Didactic: Unitatea Aritmetică-Logică

În cadrul acestui laborator se continuă implementarea în Verilog a procesorului didactic prezentat la curs și în laboratorul 6.

Unitatea aritmetică-logică

Unitatea aritmetică-logică este responsabilă de efectuarea operațiilor aritmetice și logice în timpul execuției instrucțiunilor. Operațiile primesc unul sau doi operanzi, iar UAL-ul în afară de producerea rezultatului setează și o serie de indicatori de condiții (eng. flags) rezultați în urma operațiilor. Operațiile disponibile în UAL derivă din instrucțiunile prezente în setul de instrucțiuni al procesorului didactic, însă nu au neapărat o corespondență 1-la-1 cu acestea. Unele operații sunt folosite în mai multe instrucțiuni, iar unele instrucțiuni folosesc mai multe operații. UAL-ul trebuie însă proiectat în așa fel astfel încât să cuprindă toate operațiile necesare în execuția instrucțiunilor disponibile în procesorul didactic.

 Unitatea aritmetică-logică

Unitatea aritmetică-logică

Operanzii pe 16 biți sunt op1 și op2, iar cei 4 biți S selectează operația ce va fi efectuată. Rezultatul este pus pe magistrală prin activarea semnalului Enable. Acesta este dezactivat de instrucțiunile care nu au nevoie de fapt de rezultatul operației, ci doar de indicatori (ex: cmp, test). Operațiile de adunare și scădere folosesc și un bit de carry/borrow reprezentat prin semnalul Carry. Acesta este activat selectiv de instrucțiunile ADD/ADC (add with carry) și SUB/SBB (substract with borrow), precum și alte instrucțiuni, pentru a obține rezultatul dictat de semantica instrucțiunii.

Descrierea generală a registrului care conține indicatorii de condiţii (''IND'')

Registrul de indicatori constituie o grupare a unor bistabili cu funcţii individuale, pozitionaţi la execuţia instrucţiunilor, în funcţie de rezultatul din unitatea aritmetică logică. Registrul IND permite alegerea unei secvenţe de execuţie următoare unei instrucțiuni aritmetice/logice, în funcţie de rezultatul operației.

Descrierea detaliată a indicatorilor de condiții

Observații referitoare la indicatorii de condiții:

Descriere operații

Sintaxa Verilog pentru operatorii artimetici și logici este prezentată în laboratorul 2.

Operațiile de shiftare

Operațiile de shiftare se împart în: shiftare logică, shiftare aritmetică, shiftare circulară fără carry, shiftare circulară cu carry. În acest laborator vom trata primele două tipuri de operații.

Shiftare logică

O shiftare logică nu ține cont de semnul operandului. În cazul shiftării logice se ține cont doar de ordinea biților, iar pozițiile care rămân libere sunt umplute cu zerouri.

În imaginile de mai jos se poate observa modul de execuție a shiftărilor logice.

 Shiftare logică la stânga

Shiftare logică la stânga

 Shiftare logică la dreapta

Shiftare logică la dreapta

Iar în figurile de mai jos găsiți un exemplu practic de efectuare a shiftărilor logice spre stânga (SHL) și spre dreapta (SHR).

 Exemplu de shiftare logică la stânga

Exemplu de shiftare logică la stânga

 Exemplu de shiftare logică la dreapta

Exemplu de shiftare logică la dreapta

În Verilog, operatorii de shiftare logică sunt ''<<'' și ''>>''.

Shiftare aritmetică

Spre deosebire de shiftarea logică spre dreapta (SHR), shiftarea aritmetică spre dreapta (SAR) nu umple spațiile rămase libere cu zerouri. În cazul SAR, spațiile rămase libere se umplu cu valoarea bitului cel mai semnificativ, care se replică de câte ori este nevoie (vezi imaginea de mai jos).

 Exemplu de shiftare aritmetică la dreapta

Exemplu de shiftare aritmetică la dreapta

 Exemplu de shiftare aritmetică la dreapta

Exemplu de shiftare aritmetică la dreapta

În Verilog, operatorii de shiftare aritmetică sunt ''<<<'' și ''>>>''.

:!: Aceștia au efectul scontat doar dacă variabila a fost declarată signed (ex: reg signed [15:0] a;).

Shiftarea logică spre stânga (SHL) și shiftarea aritmetică spre stânga (SAL) se efectuează în același mod. Se păstrează, însă, ambele mnemonici (SHL / SAL) pentru a se putea păstra contextul folosirii acestora, logic sau aritmetic.

Rezultatul shiftării cu n biți la stânga este echivalent cu înmulțirea cu 2n. Shiftarea la dreapta cu n biți este echivalentă cu împărțirea la 2n

Modulul UAL

Descărcați scheletul de cod și completați conținutul modulului alu.v, folosind intrările și ieșirile prezentate mai jos.

module alu(
	input oe,
	input [3:0] opcode,
	input [width-1 : 0] in1,
	input [width-1 : 0] in2,
	input carry,
	output [width-1 : 0] out,
	output [flags_width-1 : 0] flags
	);

Codurile de identificare ale operațiilor (cei 4 biți S) sunt definite în modulul alu.v din scheletul de laborator și in codul de mai jos.

`define ADC 		0
`define SBB1		1
`define SBB2		2
`define NOT		3
`define AND		4
`define OR		5
`define XOR		6
`define SHL		7
`define SHR		8
`define SAR		9

Exerciții

Exercițiile din acest laborator constau în implementarea operațiilor și indicatorilor de condiții în modulul alu.v și apoi folosirea acestuia pentru a executa faza de trecere la instrucțiunea următoare.

  1. (2p) Implementați operația ADC (eng. ADd with Carry) în cadrul unității aritmetice-logice. :!: Nu uitați indicatorii de condiții!.
    • Implementarea operației fără indicatorii de condiții oferă un punctaj de 50%.
    • Hint: descrierea indicatorilor se găsește în tabelul de la pag. 9 din curs sau în textul laboratorului.
  2. (2p) Implementați în unitatea de comandă faza de trecere la instrucțiunea următoare, prin incrementarea Contorului Program. Folosiți-vă de operația implementată la exercițiul anterior.
    • Hint: pentru realizarea de către UC a unui transfer de date între resursele calculatorului revedeți soluția laboratorului anterior.
  3. (6×1.5p) Implementați următoarele operații în cadrul unității aritmetice-logice. :!: Nu uitați indicatorii de condiții!.
    1. SBB1 (eng. SuBstract with Borrow; calculează in1 - in2 - carry)
    2. NOT
    3. OR
    4. XOR (eng. eXclusive OR)
    5. SHL (eng. Shift Left)
    6. SAR (eng. Shift Arithmetic Right)
    • Implementarea operației fără indicatorii de condiții oferă un punctaj de 50%.
    • Demonstrarea funcționării corecte pentru acordarea punctajului se face prin crearea unui fișier de test pentru modulul alu asemănător tutorialului.
    • Hint: descrierea indicatorilor pentru fiecare operație se găsește în tabelul de la pag. 9 și descrierile de la pag. 10 și 11 din curs sau în textul laboratorului.

Resurse