Digitális Technika Dr. Oniga István Debreceni Egyetem, Informatikai Kar
5. Laboratóriumi gyakorlat Kombinációs logikai hálózatok 2. Komparátorok Paritásvizsgáló áramkörök Összeadok
Lab5_: Két bites komparátor Hozunk létre egy új projektet Adjunk hozzá egy új Verilog forrásfájlt. Lab5_.v forrásfájl specifikálása Funkcionális kód ellenőrzése szimulációval A Nexysx.ucf fájl hozzáadása és adaptálása Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán module compare_2 (output reg A_lt_B, A_gt_B, A_eq_B, input [:] A,B); always @ (A or B) begin end A_lt_B = ; A_gt_B = ; A_eq_B = ; if (A==B) A_eq_B = ; else if (A>B) A_gt_B = ; else A_lt_B = ;
Lab5_2: Paritásellenőrző áramkör Hozunk létre egy új projektet Adjunk hozzá egy új Verilog forrásfájlt Lab5_2.v forrásfájl specifikálása Funkcionális kód ellenőrzése szimulációval A Nexysx.ucf fájl hozzáadása és adaptálása Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán module oddparity_for (output reg parity, input [7:] data); integer k; always@(data) begin parity = ; for (k = ; k <= 7; k = k+) begin if (data[k] == ) parity = ~parity; end end
Lab5_2 Paritásellenőrző áramkör szimuláció eredménye
Lab5_2 feladat Paritásellenőrző áramkör implementáció
Lab5_3 feladat -bites összeadó Verilog strukturális modellje A i B i C i- S i C i S i C i A B C = i i i = A B i i + A C i i + B i C i Teljes összeadó két félösszeadóból: ½Σ ½Σ A i B i C i- A i A Σ S' i A Σ S i B i B Cout C' i B Cout C'' C i Σ C i- C i S i
Lab5_3a feladat -bites fél összeadó Verilog strukturális modellje Hozunk létre egy új projektet (Lab5_3) Adjunk hozzá egy új Verilog forrásfájlt (half_add.v) half_add.v forrásfájl specifikálása Funkcionális kód ellenőrzése szimulációval (half_add_test.v) a b sum carry module half_add (output sum, carry, input a, b); xor (sum, a, b); // exclusive OR and (carry, a,b); // AND
Lab5_3a feladat -bites fél összeadó szimuláció Hozunk létre egy új projektet (Lab5_3) Adjunk hozzá egy új Verilog Test Fixture forrásfájlt (half_add_test.v) Gerjesztő jelek specifikálása Funkcionális kód ellenőrzése szimulációval // Add stimulus here # a=; # a=; b=; # a=; b=;
Lab5_3b feladat -bites teljes összeadó Verilog strukturális modellje Adjunk hozzá a projekthez egy új Verilog forrásfájlt (full_add.v) A forrásfájl specifikálása z alábbi ábra szerint a_in A i b_in B i A a bb ½Σ M w sum S' Σ i C' w2 i carry Cout ½Σ M2 A a sumσ bb carry Cout sum_out S i w3 C'' carry_out C i carry_in C i- Névszerinti összekötés module full_add (output sum_out, carry_out, input a_in, b_in, carry_in ); wire w, w2, w3; half_add M (.a(a_in),.sum(w),.b(b_in),.carry(w2)); half_add M2 (.sum(sum_out),.b(w),.carry(w3),.a(carry_in)); or (carry_out, w2, w3); A Nexysx.ucf fájl hozzáadása és adaptálása Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán
Lab5_3b eredmények Működés tesztelése a kártyán Cin A B Sum Cout
Lab5_4: -bites teljes összeadó leírása // A verzió module add_full (input a, b, cin, output cout, s); xor3_m xor(.i(a),.i(b),.i2(cin),.o(s)); wire a, a, a2; and2_m and(.i(a),.i(b),.o(a)); and2_m and(.i(a),.i(cin),.o(a)); and2_m and2(.i(b),.i(cin),.o(a2)); or3_m or(.i(a),.i(a),.i2(a2),.o(cout)) // B verzió module add_full (input a, b, cin, output cout, s); assign s = a ^ b ^ cin; assign cout = (a & b) (a & cin) (b & cin); // C verzió module add_full (input a, b, cin, output cout, s); assign {cout, s} = a + b + cin; Hozunk létre egy új projektet (Lab5_4) Adjunk hozzá egy új Verilog forrásfájlt (add_full.v) A teljes összeadó leírása a funkcionális kódrészlettel (válaszon egyet a fentiek közül) A Nexysx.ucf fájl hozzáadása és adaptálása Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán
Lab5_4 eredmények Működés tesztelése a kártyán Cin A B Sum Cout
Lab5_5:Több bites összeadók A több bites számokat teljes összeadókból építhetjük meg Soros átvitelű 4 bites összeadó (Ripple carry adder): 7483 A 3 B 3 A 2 B 2 A B A B A B C in A B C in A B C in A B C in C out Σ C out Σ C out Σ C out Σ S 4 C 2 S 3 C S 2 C S S Hozunk létre egy új projektet (Lab5_5a) Adjunk hozzá egy új Verilog forrásfájlt (add4.v) A teljes összeadó leírása a funkcionális kódrészlettel (a következő oldalon)
Lab5_5a: 4 bites soros átvitelű összeadó Funkcionális kódrészlet // 5_5a 4 bites soros átvitelű összeadó module add4 (input [3:] a, b, output [4:] s); wire [3:] c; add_full add(.a(a[]),.b(b[]),.cin('b),.cout(c[]),.s(s[])); add_full add(.a(a[]),.b(b[]),.cin(c[]),.cout(c[]),.s(s[])); add_full add2(.a(a[2]),.b(b[2]),.cin(c[]),.cout(c[2]),.s(s[2])); add_full add3(.a(a[3]),.b(b[3]),.cin(c[2]),.cout(s[4]),.s(s[3])); Az előző feladatban létrehozott forrásfájl (add_full.v) hozzáadása projekthez (Ad Copy of Source) A Nexysx.ucf fájl hozzáadása és adaptálása Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán
Lab5_5b: 4 bites összeadó viselkedési leírás Hozunk létre egy új projektet (Lab5_5b) Adjunk hozzá egy új Verilog forrásfájlt (add4.v) A teljes összeadó leírása a funkcionális kódrészlettel // 5_5b module add4 (input [3:] a, b, output [4:] s); assign s = a + b; A Nexysx.ucf fájl hozzáadása és adaptálása Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán