Documente Academic
Documente Profesional
Documente Cultură
LABORATOR nr. 5
VHDL. Modelul comportamental. Instruciuni secveniale Proiectarea unui microprocesor. Sumatorul i circuitul de scdere.
Scopul laboratorului
n cadrul acestei lucrri se urmresc dou obiective: 1. Prezentarea modelului comportamental VHDL i descrierea instruciunilor secveniale. 2. Proiectarea sumatoarelor i circuitelor de scdere ca pri componente ale Unitii Aritmetice i Logice UAL.
2. Consideraii teoretice
2.1 Modelul comportamental: Instruciunile secveniale
Aa cum s-a mai spus, VHDL furnizeaz mijloace pentru a reprezenta circuitele digitale la nivele diferite de reprezentare abstract, precum modelul comportamental ct i cel structural. n seciunea aceasta vom prezenta diferitele construcii pentru descrierea comportamentului componentelor i circuitelor n termenii instruciunilor secveniale. Baza pentru modelarea secvenial este constructorul process. Aa cum se va vedea, constructorul process ne permite s modelm sisteme digitale complexe, n general circuite secveniale.
2.1.1 Process
Declaraia procesului este un constructor principal n modelarea comportamental care ne permite s folosim strile secveniale pentru a descrie comportamentul unui sistem n timp. Sintaxa pentru starea procesului este : [eticheta_process :] process [ (lista_senzitiv) ] [is] [declaraiile_procesului] begin lista strilor secveniale precum: asignarea semnalelor asignarea variabilelor instruciunea case instruciunea exit instruciunea if instruciunea loop instruciunea next instruciunea null 1
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR instruciunea procedure instruciunea wait end process [eticheta_process] n continuare se prezint un bistabil de tip D activ pe front cu o intrare asincron de tergere: library ieee ; use ieee.std_logic_1164.all; entity DFF_CLEAR is Port (CLK, CLEAR, D : in std_logic; Q : out std_logic); end DFF_CLEAR; architecture BEHAV_DFF of DFF_CLEAR is begin DFF_PROCESS: process (CLK, CLEAR) begin if (CLEAR = 1) then Q <= 0; elsif (CLKevent and CLK = 1) then Q <= D; end if; end process; end BEHAV_DFF; Un proces este declarat n interiorul arhitecturii i este o declaraie concurent. Cu toate acestea, instruciunile din interiorul procesului sunt executate secvenial. Ca i alte instruciuni concurente, un proces citete i scrie semnalele i valorile porturilor (intrare i ieire) interfeei pentru a comunica cu restul arhitecturii. Expresia CLK event and CLK = `1 verific frontul cresctor al ceasului (eveniment de tip ceas i ceasul n starea HIGH). Lista senzitiv este un set de semnale la care procesul este sensibil. Orice schimbare a valorii unui semnal din lista senzitiv va cauza execuia imediat a procesului. Dac nu este specificat lista senzitiv, trebuie inclus o instruciune WAIT pentru a fi siguri c procesul se oprete. Variabilele i constantele care sunt folosite nuntrul procesului vor fi definite n partea unde sunt declaraiile procesului, nainte de cuvntul cheie begin. Cuvntul cheie begin semnalizeaz startul prii de calcul a procesului. Instruciunile sunt executate secvenial similar ca la un program software. Trebuie menionat c asignarea variabilelor n cadrul unui proces se execut imediat i este simbolizat cu operatorul := (spre deosebire de asignarea semnalelor simbolizat cu operatorul <= i a cror modificare apare cu o ntrziere). Exemplul anterior, al unui bistabil D, ilustreaz modul cum se descrie un circuit secvenial cu instruciunea proces. Dei proces se utilizeaz n principal pentru descrierea circuitelor secveniale, acesta poate descrie i circuitele combinaionale. Urmtorul exemplu ilustreaz un sumator complet compus din dou sumatoare incomplete. Acest
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR exemplu ilustreaz de asemenea modul n care un proces poate genera semnalele care vor declana alte procese atunci cnd apar evenimente n lista lor de senzitivitate. Se poarte scrie expresia boolean a sumatoarelor incomplet i complet dup cum urmeaz:
Figura 2-1. Un sumator complet compus din dou sumatoare incomplete modelat cu dou procese P1 i P2. library ieee; use ieee.std_logic_1164.all; entity FULL_ADDER is port (A, B, Cin : in std_logic; Sum, Cout : out std_logic); end FULL_ADDER; architecture BEHAV_FA of FULL_ADDER is signal int1, int2, int3: std_logic; begin -- Process P1 that defines the first half adder P1: process (A, B) begin int1<= A xor B; int2<= A and B; end process; -- Process P2 that defines the second half adder and the OR --
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR P2: process (int1, int2, Cin) begin Sum <= int1 xor Cin; int3 <= int1 and Cin; Cout <= int2 or int3; end process; end BEHAV_FA; Desigur se poate simplifica semnificativ modelul comportamental utiliznd un singur proces.
2.1.2 Instruciunea if
Instruciunea if execut o secven de instruciuni, secven care depinde de una sau mai multe condiii. Sintaxa este urmtoarea : if condiie then Instruciuni secveniale [ elsif condiie then Instruciuni secveniale ] [ else Instruciuni secveniale ] end if ; Fiecare condiie este o expresie boolean. Starea if este executat prin verificarea fiecrei condiii n ordinea n care sunt prezentate pn cnd este gsit una adevrat (true). Instruciunea if s-a regsit n exemplul anterior. Pot fi modelate i circuitele combinaionale cu instruciunea if ca n exemplul urmtor. Este prezentat un exemplu de multiplexor cu 4 intrri i 1 ieire, cu intrrile A, B, C i D i semnalele de selecie S0 i S1. Aceast instruciune trebuie s fie n interiorul constructorului de proces. entity MUX_4_1a is port (S1, S0, A, B, C, D : in std_logic; Z : out std_logic); end MUX_4_1a; architecture behav_MUX41a of MUX_4_1a is begin P1 : process (S1, S0, A, B, C, D) begin if ( ( not S1 and not S0 ) = 1 ) then Z <= A ; elsif ( ( not S1 and S0 ) = 1 ) then Z <= B ; elsif ( ( S1 and not S0 ) = 1 ) then Z <= C ; 4
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR else Z <= D; end if; end process P1; end behav_MUX41a; O cale diferit de a modela acelai multiplexor este prezentat n continuare . if S1=0 and S0=0 then Z <= A; elsif S1=0 and S0=1 then Z <= B; elsif S1=1 and S0=0 then Z <= C; elsif S1=1 and S0=1 then Z <= D; end if; Instruciunea if este adesea utilizat pentru a implementa diagrame de stare.
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Library ieee ; use ieee.std_logic_1164.all; entity GRD_201 is port (VALUE : in integer range 0 to 100; A, B, C, D : out bit) ; end GRD_201; architecture behav_grd of GRD_201 is begin process (VALUE) begin A <= 0 ; B <= 0 ; C <= 0 ; D <= 0 ; F <= 0 ; case VALUE is when 51 to 60 => D <= 1 ; when 61 to 70 | 71 to 75 => C <= 1 ; when 76 to 85 => B <= 1 ; when 86 to 100 => A <= 1 ; when others => F <= 1 ; end case; end process; end behav_grd; Exemplul urmtor utilizeaz case pentru a construi un multiplexor MUX 4 la 1
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR entity MUX_4_1 is port ( SEL: in std_logic_vector(2 downto 1); A, B, C, D: in std_logic; Z: out std_logic); end MUX_4_1; architecture behav_MUX41 of MUX_4_1 is begin PR_MUX: process (SEL, A, B, C, D) begin case SEL is when 00 => Z <= A; when 01 => Z <= B; when 10 => Z <= C; when 11 => Z <= D; when others => Z <= X; end case; end process PR_MUX; end behav_MUX41; Instruciunea when others acoper cazurile pentru care SEL=0X, 0Z, XZ, UX, etc. Trebuie notat c aceste circuite combinaionale pot fi exprimate i n alte moduri utiliznd instruciuni concurente cum ar fi construciile de tipul With Select. Instruciunile case pot include alte instruciuni case.
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR b. While loop, i c. for loop. 1. basic loop . Aceast bucl nu are o schem de iteraie. Se va executa continuu pn cnd va ntlni o instruciune exit sau next. [eticheta_buclei :] loop Instruciuni secveniale [ next [etichet] [ when condiie] ; [ exit [etichet] [ when condiie] ; end loop [eticheta_buclei]; Bucla de baz (ca i bucla while-loop) trebuie s aib cel puin o instruciune wait. Ca exemplu, s considerm un numrtor de 5 bii care numr de la 0 la 31. Atunci cnd ajunge la 31, numrtorul va reporni de la 0. S-a inclus o stare de wait astfel nct bucla se execut ori de cte ori ceasul se schimb de la 0 to 1. Library ieee ; use ieee.std_logic_1164.all; entity COUNT_31 is port (CLK: in std_logic; COUNT: out integerf) ; end COUNT_31; architecture behav_COUNT of COUNT31 is begin P_COUNT : process Variabile intern_value : integer :=0; begin COUNT <= intern_value; loop wait until CLK = 1; intern_value := (intern_value + 1) mod 32; COUNT <= intern_value; end loop; end process P_COUNT; end behav_COUNT; S-a definit variabila intern_value n interiorul procesului deoarece ieirile porturilor nu pot fi citite din afara procesului. 2. while loop . Evalueaz o condiie de iteraie boolean. Atunci cnd condiia este TRUE, bucla se repet, altfel bucla este prsit i execuia ei se va opri. [eticheta_buclei :] while condiie loop Instruciuni secveniale [ next [etichet] [ when condiie] ; [ exit [etichet] [ when condiie] ;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR end loop [eticheta_buclei]; Condiia de buclare este testat la fiecare iteraie. Dac este fals bucla se termin. 3. Bucla for loop utilizeaz un numr ntreg pentru a determina numrul de iteraii. [eticheta_buclei :] for identificator in gama(range) loop Instruciuni secveniale [ next [etichet] [ when condiie] ; [ exit [etichet] [ when condiie] ; end loop [eticheta_buclei]; Identificatorul (identifier (index)) este declarat automat de ctre bucla nsi, ca urmare nu trebuie declarat separat. Valoarea identificatorului poate fi citit doar n interiorul buclei i nu este vzut n afara acesteia. Nu se poate schimba sau asigna valoarea indexului. Aceasta este n contrast cu bucla while-loop a crei condiie poate implica variabile care sunt n interiorul buclei. Gama trebuie s fie cuprins ntre valori ntregi calculabile n care integer_expression trebuie evaluat ca un ntreg: integer_expression to integer_expression integer_expression downto integer_expression
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR wait until condiie ; wait for expresia timpului ; wait on semnal ; wait; Xilinx Foundation Express a implementat doar prima form a instruciunii wait. Sintaxa este urmtoarea: wait until signal = value; wait until signalevent and signal = value; wait until not signalstable and signal = value; Este dat urmtorul exemplu: wait until CLK = 1 ; wait until CLK = 0 ; wait until CLK eveniment and CLK = 1 ; wait until not CLK stabil and CLK = 1 ; Pentru primul exemplu procesul va atepta pn la apariia unui front cresctor, n timp ce pentru al doilea exemplu procesul va atepta pn cnd apare un front negativ. Ultimile dou exemple sunt echivalente cu primul (front pozitiv sau tranziie din 0 n 1). Trebuie notat c un proces care utilizeaz instruciuni wait nu poate avea o list senzitiv.
10
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Z <= A xor B; when others => null ; end case; end process P_WAIT; end arch_wait;
3. Sumatorul
3.1 Sumatorul complet
Pentru a construi un sumator pentru adunarea a dou numere binare pe n bii, X = xn-1... x0 i Y = yn-1 y0, vom ncepe cu adunarea a doi bii. Rezultatul acestei adunri este suma biilor, si, i un bit de transport, ci+1, pentru urmtoarea poziie de bit din numr. Cu alte cuvinte, si = xi + yi + ci i ci+1 = 1 dac exist un transport pentru urmtoarea pereche de bii de la stnga. De notat c operatorul + din aceast ecuaie este pentru adunare i nu pentru OR-ul logic. De exemplu, se consider urmtoarea adunare a dou numere binare pe 4 bii, X = 1001 i Y = 0011.
1 0 0 1 + 0 0 1 111 ------------------------1 1 0 0 Rezultatul adunrii este 1100. Adunarea este efectuat la fel i pentru numerele zecimale, cu excepia c apare un transport dac suma este 2 sau 3 n zecimal deoarece 2 este 10 iar 3 este 11. Cel mai semnificativ bit este bitul de transport. Uitndu-ne la bitul marcat cu linie ntrerupt n figur unde x1 = 0, y1 = 1 i c1 = 1, adunarea pentru acest bit este x1 + y1 + c1 = 0 +1 + 1 =10. Prin urmare, suma bitului este s1 = 0 iar bitul de transport este c2 = 1. Circuitul pentru adunarea a unui singur bit cu tot cu transport este cunoscut ca sumator complet (full adder - FA) iar tabela de adevr este prezentat n figura 3.1(a). Ecuaiile corespunztoare pentru si i ci+1 sunt prezentate n figura 3.1(b). De la aceste 2 ecuaii se obine circuitul pentru sumatorul complet care este prezentat n figura 3.1(c). Figura 3.1(d) prezint simbolul logic pentru sumatorul complet. Codul VHDL al fluxului de date pentru sumatorul complet este prezentat n figura 3.2.
11
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
xi 0 0 0 0 1 1 1 1
yi 0 0 1 1 0 0 1 1
ci 0 1 0 1 0 1 0 1 (a)
ci+1 0 0 0 1 0 1 1 1
si 0 1 1 0 1 0 0 1
si = xiyici + xiyici + xiyici + = (xiyi + xiyi)ci + (xiyi + xiyi)ci = (xi yi)ci + (xi yi)ci = xi yi ci ci+1 = xiyici + xiyici + xiyici + xiyici = xiyi (ci + ci) + (xiyi + xiyi)ci = (xi yi)ci + (xi yi)ci = xiyi + ci (xi yi) (b)
xi
yi
ci+1 ci
ci ci+1
yi
FA
si
ci
si (c) (d)
Figura 3.1 Sumator complet: (a) tabel de adevr; (b) ecuaiile pentru si i ci +1; 12
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR (d) simbol logic
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY fa IS PORT ( Ci, Xi, Yi: IN STD_LOGIC ; Ci1, Si: OUT STD_LOGIC) ; END fa; ARCHITECTURE Dataflow OF fa IS BEGIN Ci1 <= (Xi AND Yi) OR (Ci AND (Xi XOR Yi)); Si <= Xi XOR Yi XOR Ci; End Dataflow ;
Figura 3.2 Codul VHDL pentru fluxul de date din sumatorul complet pe un bit
FA3
si s3
ci
FA2
si s2
ci
FA1
si s1
ci
FA0
si s0
ci
c0 = 0
13
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Figura 3.3 Sumatorul ripple-carry
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY Adder4 IS PORT ( A, B : IN STD_LOGIC_VECTOR (3 DOWNTO 0); Cout : OUT STD_LOGIC; SUM : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END Adder4; ARCHITECTURE Structural OF Adder4 IS COMPONENT FA PORT ( ci, xi, yi : IN STD_LOGIC; co, si : OUT STD_LOGIC); END COMPONENT; SIGNAL Carryv : STD_LOGIC_VECTOR (4 DOWNTO 0) ; BEGIN Carryv (0) <= 0; Adder : FOR k IN 3 DOWNTO 0 GENERATE FullAdder : FA PORT MAP (Carryv (k), A (k), B (k), Carryv (k+1), Sum (k)); END GENERATE Adder; Cout <= Carryv (4); END Structural;
Figura 3.4 Codul VHDL pentru sumatorul ripple-carry pe 4 bii utiliznd starea FOR-GENERATE
14
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR ci+1 = xiyi + ci(xi + yi) (1)
La prima vedere, aceast ecuaie carry-out arat complet diferit fa de ecuaia carry-out dedus din figura 3.1(b). Totui, sunt echivalente: xiyi + ci(xi + yi) = xiyici + xiyici + xiyici + xiyici Dac lsm: gi = xiyi i p i = xi + yi atunci ecuaia (1) poate fi rescris astfel: ci+1 = gi + pici (2)
Utiliznd ecuaia (2) pentru c1+1, vom putea extinde n mod recursiv expresia pentru a determina ci doar ca o sum a celor doi operanzi de intrare, X i Y, i de bitul iniial de transport (carry-in), c0. Utiliznd aceast tehnic, vom obine urmtoarele ecuaii carry-out pentru un grup de 4 bii: c1 = g0 + p0co (3) c2 = g1 + p1c1 = g1 + p1(g0 + p0c0) = g1 + p1g0 + p1p0c0 c3 = g2 + p2c2 = g2 + p2(g1 +p1g0 + p1p0c0) = g2 + p2g1 + p2p1g0 + p2p1p0c0 c4 = g3 + p3c3 = g3 + p3(g2 + p2g1 + p2p1g0 + p2p1p0c0) = g3 + p3g2 + p3p2g1 + p3p2p1g0 + p3p2p1p0c0
(4)
(5)
(6)
Utiliznd ecuaiile (3) pn la (6), obinem circuitul pentru generarea semnalelor de transport anticipat (carry-lookahead) de la c1 pn la c4, aa cum s-a prezentat n figura3.5(a). De notat c fiecare ecuaie este implementat sub forma unei scheme logice combinaionale pe trei niveluri un nivel pentru generarea lui gi i pi, i dou nivele (pentru formatul de tip sum de produse) - pentru generarea expresiei ci. Acest circuit carry-lookahead poate fi redus dac se consider c0 ca fiind ntotdeauna 0. Sumatorul complet pentru sumatorul carry-lookahead poate fi fcut foarte simplu att timp ct nu este necesar s se genereze semnalul carry-out pentru urmtorul bit. De aceea, acest sumator complet are nevoie doar s genereze semnalul sumi. Figura 3.5(b) prezint o generalizare pentru felii de i bii al sumatorului cu transport anticipat.
15
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
Figura 3.5 (a) Circuit pentru generarea semnalelor carry-lookahead, de la c 1 pn la c4 ; (b) circuitul cu transport anticipat generalizat pentru felii de i bii cu un singur bit de transport.
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Valoarea numrului rezultat este 00010111 care este transformat n zecimal astfel 1x24+1x22+1x21+1x20 = 23. De aceea, valoarea numrului iniial este 23 negativ (-23). Exemplul 2: Un alt exemplu este un numr cu semn pe 4 bii 1000, aplicndu-i cei doi pai ai procesului vom obine: 1000 numrul iniial 0111 inversarea biilor 1000 adunarea cu 1 Numrul rezultat 1000 este exact ca i numrul iniial! Acest lucru nu trebuie s ne genereze o confuzie dac urmm exact instruciunile procesului de conversie. Trebuie s interpretm numrul rezultat ca un numr fr semn pentru a determina valoarea. Interpretarea numrului rezultat 1000 ca un numr fr semn ne d valoarea 8. De aceea, numrul iniial, care este 1000 va fi -8. Nr. Binar pe 4 bii 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Figura 3.6 Complement fa de 2 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1
17
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR = xi - yi bi = 1 i bi+1 = 1 dac este nevoie de mprumut pentru scdere, atfel b i+1 = 0. Tabela de adevr pentru scderea pe 1 bit este prezentat n figura 3.7(a), din care sunt rezultate ecuaiile (7) pentru di i (8) pentru bi+1. di = xiyibi + xiyibi + xiyibi + xiyibi = (xiyi + xiyi)bi + (xiyi + xiyi)bi = (xi yi)bi + (xi yi)bi = xi yi bi bi+1 = xiyibi + xiyibi + xiyibi + xiyibi = xibi (yi+ yi ) + xiyi(bi + bi) + yibi (xi + xi) = xibi + xiyi + yibi
(7)
(8)
De la aceste 2 ecuaii, obinem circuitul de scdere prezentat n figura 3.7(b). Figura 3.7.(c) prezint simbolul logic pentru circuitul de scdere.
Figura 3.7. Circuitul de scdere pe 1 bit: (a) tabela de adevr; (b) circuitul; (c) simbolul logic
18
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR operaia de adunare, de ex. S = 0, operandul B nu va fi inversat de ctre operaia XOR. n acest caz, vom avea c0 = S = 0. Este prezentat n figura 3.8(b) o combinaie ntre un sumator i un circuit de scdere pe 8 bii i simbolul logic n 3.8.(c). Codul VHDL comportamental al combinaiei dintre un sumator i circuitul de scdere este prezentat n figura 3.9 S 0 1 Funcia Adunare Scdere (a) Operaia F=A+B F = A + B + 1
Figura 3.8. Combinaia dintre un sumator i un circuit de scdere: (a) tabela de adevr; (b) circuitul; (c) simbolul logic LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY AddSub IS GENERIC(n: NATURAL :=8); -- default number of bits = 8 19
UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR PORT ( A: IN std_logic_vector(n-1 downto 0); B: IN std_logic_vector(n-1 downto 0); subtract: IN std_logic; carry: OUT std_logic; sum: OUT std_logic_vector(n-1 downto 0)); END AddSub; ARCHITECTURE Behavioral OF AddSub IS -- temporary result with one extra bit for carry SIGNAL result: std_logic_vector(n downto 0); BEGIN PROCESS(subtract, A, B) BEGIN IF (subtract = '0') THEN -- addition --add the two operands with one extra bit for carry result <= ('0' & A)+('0' & B); sum <= result(n-1 downto 0); -- extract the n-bit result carry <= result(n); -- extract the carry bit from result ELSE -- subtraction result <= ('0' & A)-('0' & B); sum <= result(n-1 downto 0); -- extract the n-bit result carry <= result(n); -- extract the borrow bit from result END IF; END Behavioral; Figura 3.9.
4. Desfurarea lucrrii
1. Se studiaz instruciunile secveniale i se va testa funcionarea programelor pentru circuitele logice combinaionale. 2. Se va studia sumatorul i circuitul de scdere i se vor testa programele din paragraful 3.
20