Upload
kamana
View
55
Download
1
Embed Size (px)
DESCRIPTION
Aritmetičko logička jedinica ALU i Množač (8x6 Ripple-Carry). Autori: Milena Dukić 10204 Iva Ćirković 10180. Definicija ALU-a i tipovi operacija. - PowerPoint PPT Presentation
Citation preview
Aritmetičko logička jedinica ALU i Množač (8x6 Ripple-
Carry)
Autori: Milena Dukić 10204 Iva Ćirković 10180
ALU je kombinaciona logička mreža, i deo je centralne procesorske jedinice koja izvršava veći broj aritmetičkih i logičkih operacija nad ulaznim podacima celobrojnog tipa.
Tipovi operacija koje ALU, u konkretnom slučaju, izvršava su:
Logičke operacije AND OR XOR Komplement
Aritmetičke operacije
+ sabiranje
- oduzimanje
Definicija ALU-a i tipovi operacija
Ulazni podaci ALU-a
ALU prihvata sledeće tipove ulaznih signala:
Ulazne operande A i B: n-to bitni podaci nad kojim se izvršavaju aritmetičke i logičke operacije.
Ulazni prenos CarryIn: jednobitna informacija, koja predstavlja ulazni prenos.
Selektorski ulazi: k-to bitna informacija koja definiše tip operacije koju obavlja ALU.
ALU
A
B
Y
Sel
CarryIn
CarryOut
ALU
Izlazni podaci ALU-a
Na izlazu u ALU dobijamo sledeće signale:
Izlazni signal Y: n-to bitni signal koji predstavlja rezultat operacije obavljene nad ulaznim operandima.
Izlazni prenos CarryOut: jednobitni signal koji odgovara izlaznom prenosu aritmetičkih operacija.
ALU
A
B
Y
Sel
CarryIn
CarryOut
ALU
Zadatak
Modelovati Aritmetičko Logičku Jedinicu (ALU), koja će:
- kao ulazne podatke prihvatati:
dva 8-bitna operanda A i B,
jednobitni ulazni prenos CARRY_IN iz prethodne operacije
- kao izlaze generisati:
8-bitni rezultat obavljenje operacije Z,
jednobitni izlazni prenos aritmetičke operacije CARRY_OUT,
-za upravljanje radom ALU-a koristi se:
5-bitni selektorski signal SEL
Tablica ALU funkcija
Aritmetička JedinicaAritmetička JedinicaAritmetička JedinicaAritmetička JedinicaAritmetička JedinicaAritmetička JedinicaAritmetička JedinicaAritmetička Jedinica
Logička JedinicaLogička JedinicaLogička JedinicaLogička Jedinica
Pomeračka JedinicaPomeračka JedinicaPomeračka JedinicaPomeračka Jedinica
Prenosi AInkrementuje ASabira A i BSabira sa Carry-emA + komplement BOduzimanjeDekrementuje APrenosi A
ANDORXORKomplement A
Prenosi APomera ulevo APomera udesno APrenosi 0
0{0},{1}{0},{1}{0},{1}{0},{1}{0},{1}{0},{1}0
0000
0000
Y <= AY <= A + 1Y <= A + BY <= A + B + 1Y <= A + /BY <= A + /B + 1Y <= A - 1Y <= A
Y <= A and BY <= A or BY <= A xor BY <= /A
Y <= AY <= shl AY <= shr AY <= 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0
Implementacioni blok
FunkcijaCarry Out
OperacijaS4 S3 S2 S1 S0 Cin
Postupak projektovanja
Korišćen je behavioral arhitekturni model koji opisuje samo ponašanje komponente, zanemarujući njenu unutrašnju strukturu
Kombinaciona logika, kojom je modelovan konkretan ALU, trenutno reaguje na promene ulaznih signala.
Implementacija ALU-a u VHDL-u
Koji je pristup korišćen ?
ALU je modelovana fragmentacijom strukture na :logičku jedinicuaritmetičku jedinicu pomeračku jedinicu
Šta je prednost ovog pristupa ?
Razdvajanjem tipova operacija na aritmetičke, logičke i operacije pomeranja obezbedilo je lakše kreiranje VHDL kôda
Razdvajanjem ALU-a na pomerač, aritmetičku i logičku jedinicu poboljšale su se performanse sa aspekta brzine rada (kraće je vreme propagacije signala)
Implementacija ALU-a u VHDL-u Konkretno rešenje ALU-a ima sposobnost da obavlja sledećih 14 različitih
operacija : osam aritmetičkih
četiri logičke
dve pomeračke
Ulazni operandi : A i B kao osmobitni
CarryIn jednobitni
Izlazni operandi : Y osmobitni
CarryOut jednobitni
Selektorski ulazi : Sel kao petobitni
entity ALU isport ( Sel: in unsigned(4 downto 0); CarryIn: in std_logic; A,B: in unsigned(7 downto 0); Y: out unsigned(7 downto 0); CarryOut: out std_logic);
end ALU;
Struktura ALU-a
Logičkajedinica
Aritmetičkajedinica
Pomerač
Sel (4:0)Sel (1:0) Sel (2) Sel (4:3)
A (7:0)
B (7:0)
CarryIn
Y (7:0)mux
CarryOut
Implementacija logičke jedinice
Logička jedinica modelovana je korišćenjem jedne case naredbe
Na osnovu selektorskih ulaza, Sel(1:0), određuje se operacija koja će se izvršiti
LOGIC_UNIT: case Sel(1 downto 0) iswhen "00" => LogicUnit := AA and BB;when "01" => LogicUnit := AA or BB;
when "10" => LogicUnit := AA xor BB;when "11" => LogicUnit := not AA;when others => LogicUnit:=(others => 'X');
end case LOGIC_UNIT;
**napomena : signali AA, BB i LogicUnit su interni signali
Implementacija aritmetičke jedinice Aritmetička jedinica modelovana je korišćenjem case naredbe
Na osnovu internog signala Sel0_1_CarryIn određuje se aritmetička operacija koja će se izvršiti nad ulaznim operandima
Sel0_1_CarryIn := Sel(1 downto 0) & CarryIn;ARITH_UNIT: case Sel0_1_CarryIn is
when "000" => ArithUnit := AA;when "001" => ArithUnit := AA + 1;when "010" => ArithUnit := AA + BB;when "011" => ArithUnit := AA + BB + 1;when "100" => ArithUnit := AA + not BB;when "101" => ArithUnit := AA - BB;when "110" => ArithUnit := AA - 1;when "111" => ArithUnit := AA;when others => ArithUnit := (others => 'X');
end case ARITH_UNIT; **napomena : signali AA, BB i ArithUnit su interni signali
Multiplekser-MUX između jedinica
Mux bira izlaz iz aritmetičke ili logičke jedinice i usmerava ga ka pomeračkoj jedinici
Selekcija se vrši na osnovu stanja signala S2 (za S2=0 selektuje se izlaz aritmetičke jedinice, a S2=1 selektuje se izlaz logičke jedinice)
LA_MUX : if (Sel(2) = '1') thenALU_NoShift := LogicUnit;
elseALU_NoShift := ArithUnit;
end if LA_MUX;
**napomena signali ALU_NoShift, LogicUnit i ArithUnit su interni
Pomeračka (shift) jedinica
Izbor operacije u pomeračkoj jedinici vrši se na osnovu selektorskog signala Sel(4:3)
SHIFT : case Sel(4 downto 3) iswhen "00" => Pomoc := ALU_NoShift;when "01" => Pomoc := Shift_left(ALU_NoShift, 1);when "10" => Pomoc := Shift_right(ALU_NoShift, 1);when "11" => Pomoc := (others => '0');when others => Pomoc := (others => 'X');
end case SHIFT;
**napomena: signal Pomoc je interni signal
Logičkajedinica
Aritmetičkajedinica
Shifter
Sel (4:0) Sel (1:0) Sel (2)
Sel (4:3)A (7:0)
B (7:0)
CarryIn
Y (7:0)
mux
CarryOut
1. Na ulaz ALU-a dovodimo ulazne signale A i B
Scenario toka podataka i toka upravljanja
2. Na ulaz dovodimo i ulazni prenos CarryIn3. Selektorskim ulazima S0 i S1 biramo koja će se operacija izvršiti nad ulaznim podacima4. Signali S0,S1 i CarryIn predstavljaju kod operacije koja će se izvršiti u aritmet. jedinici5. Signali S0,S1 predstavljaju kod operacije koja će se izvršiti u logičkoj jedinici6. Selektorski ulaz S2 upravlja multiplekserom, i njime se bira signal koji će biti propušten do pomerača7. S2=0 označava aritmetičku jedinicu dok S2=1 označava logičku jedinicu8. Selektorskim signalima S3 i S4 upravlja se pomeračem9. Na izlazu pomerača se dobija izlazni signal Y i signal izlaznog prenosa CarryOut
Pokrenuti VHDL i učitati ALU projekat
Selektovati ime koda na levoj strani ekrana koji želimo da pokrenemo (u ovom slučaju to je alu.vhd)
Testiranje ALU-a
Pokrenuti waveform za testiranje
Desnim klikom na waveform – add signals dodati signale
Testiranje ALU-a
Desnim klikom na signal izabrati Stimulators i postaviti vrednost signala po bitovima
Proveriti dobijene rezultate sa tablicom funkcija ALU-a
Testiranje ALU-a
Definicija : Množač predstavlja kombinacionu logičku mrežu, koja prihvata na ulazu dva binarna n-to bitna podatka, množenik X i množilac Y, a na izlazu generiše 2n-bitni rezultat Z.
Rezultat predstavlja proizvod množenika i množioca (Z=X*Y).
Definicija Množača 8x6 Ripple-Carry
MnožačMnoženik X
Množilac Y
Rezultat Z
Množenik X, prvi operand predstavljen n-bitnim signalom na ulazu množača
Množilac Y, drugi operand predstavljen n-bitnim signalom na ulazu množača
Rezultat Z, predstavlja rezultat množenja u obliku 2n-bitnog signala na izlazu množača
Blok šema množača
MnožačMnoženik X
Množilac Y
Rezultat Z
Kao i kod decimalnog množača, prvo se formira parcijalni proizvod bita najmanje težine množilaca (Y0) sa svim bitovima množenika.
Postupak se ponavlja za svaki sledeći bit množioca.
U svakom koraku vrši se pomeranje parcijalnog proizvoda za jednu binarnu poziciju ulevo u odnosu na prethodni proizvod, kako bi proizvodi bili pozicionirani u skladu sa težinama bitova množioca.
Da bi dobili konačan rezultat, svi parcijalni proizvodi se sabiraju
Postupak množenja
Zadatak
Modelovati množač 8x6, koji će na ulazu imati kao operande 8-bitni množenik A i 6-bitni množilac B, na izlazu će se dobiti 14-bitni signal Z koji predstavlja rezultat množenja signala na ulazu.
U ovom primeru realizovan je množač koji obavlja množenje neoznačenih celih brojeva.
Ulazni podaci, množenik i množilac su osmobitni i šestobitni, respektivno, dok je izlazni podatak četrnaestobitni.
Množenje se obavlja prema algoritmu množenja počev od cifre najmanje težine množioca, formiranjem parcijalnih proizvoda počev od proizvoda najmanje težine i njihovim sabiranjem.
Postupak rešavanja
U konkretnom slučaju za modeliranje množača korišćena je arhitektura specificirana na behavioral nivou, koja opisuje ponašanje komponente, zanemarujući njenu unutrašnju strukturu.
Imajući u vidu da je množač kombinaciona logička mreža, za sintezu je korišćena kombinaciona logika (bez vremenskih parametara, sve operacije koje se obavljaju trenutno reaguju na promenu ulaznih signala)
entity multipliers isport (
X: in unsigned (7 downto 0);Y: in unsigned (5 downto 0);Z: out unsigned (13 downto 0)
);end entity multipliers;
Postupak modelovanja
Množača tipa 8x6 bita, implementiran je korišćenjem paralelnih sabirača sa serijskim prenosom (RCA-Ripple-Carry Adder)
Ripple Carry sabirač čine 8 dvobitnih sabirača serijski povezani u nizu.
Postupak modelovanja (nastavak)
MFMFMFMFMFMFMF MH
Ripple-Carry sabirač
MH modul predstavlja dvobitni sabirač, realizovan pomoću kola polusabirača i jednog AND kola.
Struktura MH modula
x _ b ity _ b itsu m _ in
su m _ o u t
c_ o u tc_ o u t
su m _ o u t
c_ in
x _ b ity _ b it
H a lfad d e r
H a lfad d e r
ili
sum_out <= ((x_bit and z_bit) xor sum_in);c_out := ((x_bit and z_bit) and sum_in);
MF modul predstavlja dvobitni sabirač, realizovan pomoću kola potpunog sabirača i jednog AND kola.
Struktura MF modula
sum_out <= ((x_bit and y_bit) xor sum_in) xor c_in;c_out := ((x_bit and y_bit) and sum_in) or (((x_bit and y_bit) xor sum_in) or c_in );
x _ b ity _ b itsu m _ in
su m _ o u t
c_ o u tc_ in
F u llad d e r
Blok šema množača 8x6
y0
x0x1x2x3x4x5x6x7
z0
MHMFMFMFMFMFMFMF
y2
z2
MHMFMFMFMFMFMFMF
y3
z3
MHMFMFMFMFMFMFMF
y4
z4
MHMFMFMFMFMFMFMF
y5
z5z6z7z8z9z10z11z12z13
MHMFMFMFMFMFMFMH
y1
z1
Prvi parcijalni proizvod se dobija množenjem Y0 bita sa signalom X(X7:X0)
Množenje se obavlja AND kolom
Bit najmanje težine, prvog parcijalnog proizvoda, direktno upisujemo u izlazni signal na mestu bita najmanjne težine Z0.
Rezultat množenjna upisujemo u pomoćnu promenljivu tipa vektor veličine 8 bita.
Princip rešavanjna problema u VHDL-u
(prvi stepen)
y0x0x1x2x3x4x5x6x7
z0
Za sabiranje parcijalnih proizvoda koristi se paralelni sabirač sa serijskim prenosom(Ripple Carry sabirač) koji je realizovan pomoću MH i MF modula
Na ulaz sabirača se dovode signali :
bit Y1
signal X(X7:X0)
pomoćnu promenljivu - signal proizvoda iz predhodnog stepena
Bit najmanje težine proizvoda, direktno upisujemo u izlazni signal na mestu bita težine Z1.
Rezultat množenjna upisujemo u pomoćnu promenljivu tipa vektor veličine 8 bita.
Princip rešavanjna problema u VHDL-u
(drugi stepen)
MHMFMFMFMFMFMFMH
y1
z1
Predhodni postupak ponavljamo do kraja, u naredna četri stepena.
j := 2;for h in 1 to 4 loop
Z(h+1) <= ((X(0) and Y(h+1)) xor izlaz(0));Carry := ((X(0) and Y(h+1)) and izlaz(0));for i in 1 to 7 loop
izlaz(i-1) := ((X(i) and Y(j)) xor izlaz(i)) xor Carry;Carry := ((X(i) and Y(j)) and izlaz(i)) or (((X(i) and Y(j)) xor izlaz(i)) and
Carry);end loop; izlaz(7) := Carry;j := j + 1;
end loop;
Princip rešavanjna problema u VHDL-u
(treći stepen i ostali nivoi do kraja)
Na kraju, sadržaj pomoćne promenljive upisujemo u izlazni signal.
Z(6) <= izlaz(0);Z(7) <= izlaz(1);Z(8) <= izlaz(2);Z(9) <= izlaz(3);Z(10) <= izlaz(4);Z(11) <= izlaz(5);Z(12) <= izlaz(6);Z(13) <= izlaz(7);
Time je postupak množenja završen
Princip rešavanjna problema u VHDL-u
(treći stepen i ostali nivoi do kraja)
Tok podataka i tok upravljanja
y0
x0x1x2x3x4x5x6x7
z0
MHMFMFMFMFMFMFMF
y2
z2
MHMFMFMFMFMFMFMF
y3
z3
MHMFMFMFMFMFMFMF
y4
z4
MHMFMFMFMFMFMFMF
y5
z5z6z7z8z9z10z11z12z13
MHMFMFMFMFMFMFMH
y1
z1
Pokrenuti VHDL i učitati MULTIPLIERS projekat
Selektovati ime koda na levoj strani ekrana koji želimo da pokrenemo (u ovom slučaju to je multipliers.vhd)
Testiranje ALU-a
Pokrenuti waveform za testiranje
Desnim klikom na waveform – add signals dodati signale
Testiranje ALU-a
Desnim klikom na signal izabrati Stimulators i postaviti vrednost signala po bitovima
Proveriti dobijene rezultate
Testiranje ALU-a
VHDL je jedan od najčešće korišćenih jezika za opis hardware-a (standard IEEE 1076)
Prednosti upotrebe VHDL-a :
jednostavna i efikasna implementacija
skraćeno vreme dizajniranja
lakša detekcija grešaka
jednostavno testiranje
visok nivo apstrakcije
maksimalno tačan i pouzdan dizajn uz najmanju cenu u najkraćem roku razvijanja
Zbog svojih prednosti VHDL se često koristi za dizajniranje komponenata, i razvoj složenih sistema
Zaključak