addu instruction

22
STRUCTURA SI ORGANIZAREA CALCULATOARELOR PROIECT

Upload: corleone93

Post on 20-Nov-2015

223 views

Category:

Documents


0 download

DESCRIPTION

ADDU Iinstruction for MIPS

TRANSCRIPT

STRUCTURA SI ORGANIZAREA CALCULATOARELORPROIECT

TEMA PROIECTULUI:

ADDU

(Add Unsigned Word)

Add Unsigned Word(ADDU):31 26 25 21 20 16 15 11 10 6 5 0SPECIAL

000000rsrtrd0

00000ADDU

100001

6 5 5 5 5 6 Format: ADDU rd, rs, rt

Sintaxa: addu$d, $s, $t

Descriere: rd rs + rt Valoarea cuvantului pe 32 de biti din registrul "rt" este adunata cu valoarea cuvantului pe 32 de biti din registrul "rs" si rezultatul aritmetic pe 32 de biti este plasat in registrul "rd". Nici o exceptie de integer overflow nu apare sub nici o circumstanta.

Codare: 0000 00ssssstttttddddd000 0010 0001

Restrictii: Pe procesoarele pe 64 de biti, in cazul in care nici registrul "rt", nici registrul "rs" nu contin valori de inscriere extinse pe 32 de biti, atunci rezultatul operatiei este nedefinit.Operatie:

if (NotWordValue(GPR[rs]) or NotWordValue(GPR[rt])) then UndefinedResult() endif temp GPR[rs] + GPR[rt]

GPR[rd] sign_extend(temp31..0)

Exceptii: Nici una

Nota: Termenul "unsigned" aflat in numele instructiunii este un termen impropriu; aceasta operatie este modulo-aritmetica pe 32 de biti care nu capteaza overflow-ul. Este potrivita pentru aritmeticile fara semn, ca de exemplu aritmetica adresata, sau mediile aritmetice integer care ignora overflow-ul, cum este limbajul aritmetic C. Add vs Addu: La nivel de bit, adunarea procedeaza in acelasi fel daca operanzii sunt cu semn sau fara semn.Astfel, nu pare sa existe vreun motiv pentru instructiunile add si addu.In loc sa indice vreo diferenta in modul de baza al functionarii instructiunilor, diferenta dintre add si addu are de a face cu "overflow-ul".Instructiunea add ar trebui folosita atunci cand dorim sa stim despre overflow. Daca nu dorim acest lucru, ar trebui sa folosim addu.In general, atunci cand avem de a face cu numere cu semn, folosim add si atunci cand este vorba despre numerele fara semn, folosim addu.

Schema generala proiect:

1.ProgCnt(ProgramCounter-ul) Pentru a decodifica si executa corect instructiunile, procesorul trebuie sa stie tot timpul care este adresa de la care trebuie adusa o instructiune in etapa de fetch. Aceasta sarcina este indeplinita de registrulPC(program counter). Rolul acestui registru este de a retine adresa de la care trebuie adusa urmatoarea instructine din memorie. Mai este numit si Instruction Pointer deoarece functioneaza exact ca un pointer: retine o adresa si ajuta procesorul sa obtina datele stocate la acea adresa.

VHDL Code:

entity ProgCnt is

port (

Clk : in std_logic;

New_PC : in std_logic_vector (31 downto 0);

PC : out std_logic_vector (31 downto 0) := x"0000_0000"

);

end ProgCnt;

architecture Behavioral of ProgCnt is

begin

PC