Sapientia EMTE
Digitális elektronika gyakorlat
FELADATOK 1. Tervezzetek egy félösszeadó VHDL modult 2. Tervezzetek egy teljes összeadó VHDL modult 3. Schematic Editor segítségével tervezzetek egy 4 bit-es öszeadó áramkört. A két bemeneti számot a logikai kapcsolók (DIPSW) segítségével adjuk meg és jelezzük ki az FPGA lap kiterjesztési kártyáján levő két 7 szegmenses kijelzőn (LED1, LED2), felhasználva az előző laborgyakorlaton megírt 7 szegmenses dekódolót . Az eredményt binárisan írjuk ki a kiterjesztési lapon levő BARLED-en. Az .ucf állományhoz szükséges portok számai az XSA Board User Manual leírában találhatók. 4. Valósítsuk meg a 4 bit-es összeadó áramkört VHDL nyelvben, strukturális leírásmódot használva (felhasználva a megírt modulokat).
1
Sapientia EMTE
Digitális elektronika gyakorlat
1. A félösszeadó VHDL modul
1. Ábra: A félösszeadó áramkör A fenti áramkör alapján megírhatjuk a félösszeadó VHDL modult. Első lépésben deklaráljuk a bemeneteket (A, B) és a kimeneteket (S, C). A és B a két összeadandó bit. S az összeg (Sum) és C a túlcsordulás (Carry). Az architektura részben pedig elvégezzük a logikai kapuknak megfelelő logikai műveleteket: S<=A xor B; C<=A and B; Az alábbiakban megtalálható a teljes VHDL példaprogram forráskódja. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Felosszeado is Port ( A : in std_logic; B : in std_logic; S : out std_logic; C : out std_logic); end Felosszeado; architecture Behavioral of Felosszeado is begin process(A,B) begin S<=A xor B; C<=A and B; end process; end Behavioral; 2
Sapientia EMTE
Digitális elektronika gyakorlat
2. A teljes összeadó VHDL modul
2.Ábra: A teljes összeadó áramkör A fenti áramkör alapján megírhatjuk a teljes összeadó VHDL modult. Az első lépésben deklaráljuk a bemeneteket (A, B, Cin) és a kimeneteket (S, C). A és B a két összeadandó bit. Cin a bemeneti túlcsordulás, amely a kisebb helyértékű összeadótól származik. S az összeg (Sum) és C a túlcsordulás (Carry). Az architektura részben pedig elvégezzük a logikai kapuknak megfelelő logikai műveleteket: S<=A xor B xor Cin; C<=(A and B) or ( Cin and (A xor B) ); Az alábbiakban megtalálható a teljes VHDL példaprogram forráskódja. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Egesz_oszeado is Port ( A : in std_logic; B : in std_logic; Cin : in std_logic; S : out std_logic; C : out std_logic); end Egesz_oszeado; architecture Behavioral of Egesz_oszeado is begin process(A,B,Cin) begin S<=A xor B xor Cin; C<=(A and B) or ( Cin and (A xor B) ); end process; end Behavioral; 3
Sapientia EMTE
Digitális elektronika gyakorlat
3. 4 bit-es összeadó áramkőr Az alábbi ábrán látható a négy bit-es összeadó áramkör rajza. Szükség van egy félösszeadó modulra a legkisebb helyértékű bit-ek összeadására, és három teljesösszeadó áramkörre. A bemeneti összeadandó számokat a két hex_display modul átalakít és kijelez a hétszegmenses kijelzőkön. A kimenet az .ucf állományban megadott portokra kerül és így a BARLED-en jelennik meg az összeadás eredménye bináris formában.
3.Ábra. Négy bit-es összeadó áramkőr
4
Sapientia EMTE
Digitális elektronika gyakorlat
4. 4 bit-es összeadó strukturális leírásmódja A strukturális leírásmód esetén ins a bemenetek és a kimenetek deklarálásával kezdjük a feladat megoldását. Deklaráljuk tehát az x1, x2, x3, x4 portokat, amelyek az első összeadandó számot tartalmazzák bináris lakban. Az y1, y2, y3, y4 portok a második összeadandó számot adják meg. Az eredményt a kimeneti z1, z2, z3, z4, és z5 potokon kapjuk meg. A led1 és led2 tömbökben a hétszegmenses dekodoló kimeneteit tároljuk, a bemeneti számok kijelzése céljából. Az architektura részben a component kulcsszót hasnálva deklaráljuk a már megírt félösszeadó és teljesösszeadó modulok be és kimeneti portjait. Figyeljünk, hogy azonos változóneveket és tipusokat hsználjunk mint az eredeti modulokban. component Felosszeado Port ( A : in std_logic; B : in std_logic; S : out std_logic; C : out std_logic); end component Felosszeado; A legutolsó lépésként a port map parancssalsorban meghívjuk a modulokat a megfelelő bemeneti és kimeneti portokat paraméterként átadva. Az összadást a legkisebb helyértékű bit-el kezdjük és a nagybb helyértékű bit-ek fele haladunk. Az utolsó két útasítással a hétszegmenses dekodoló modult is meghívjuk. u1: Felosszeado port map(x1,y1,z1,temp); u2: Egesz_oszeado port map(x2,y2,temp,z2,temp1); u3: Egesz_oszeado port map(x3,y3,temp1,z3,temp2); u4: Egesz_oszeado port map(x4,y4,temp2,z4,z5); u5: hex_display port map(x1,x2,x3,x4,led1); u6: hex_display port map(y1,y2,y3,y4,led2); Az alábbiakban megtalálható a teljes VHDL példaprogram forráskódja. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity negy_bittes_osszeado_strukt_leirasmod is Port ( x1 : in std_logic; x2 : in std_logic; x3 : in std_logic; 5
Sapientia EMTE
Digitális elektronika gyakorlat
x4 : in std_logic; y1 : in std_logic; y2 : in std_logic; y3 : in std_logic; y4 : in std_logic; z1 : out std_logic; z2 : out std_logic; z3 : out std_logic; z4 : out std_logic; z5 : out std_logic; led1: out std_logic_vector(7 downto 0); led2: out std_logic_vector(7 downto 0)); end negy_bittes_osszeado_strukt_leirasmod; architecture Behavioral of negy_bittes_osszeado_strukt_leirasmod is component Felosszeado Port ( A : in std_logic; B : in std_logic; S : out std_logic; C : out std_logic); end component Felosszeado; component Egesz_oszeado is Port ( A : in std_logic; B : in std_logic; Cin : in std_logic; S : out std_logic; C : out std_logic); end component Egesz_oszeado; component hex_display is Port( A : in std_logic; B : in std_logic; C : in std_logic; D : in std_logic; segm : out std_logic_vector(7 downto 0) ); end component hex_display; signal temp: std_logic; signal temp1: std_logic; signal temp2: std_logic; begin u1: Felosszeado port map(x1,y1,z1,temp); 6
Sapientia EMTE
Digitális elektronika gyakorlat
u2: Egesz_oszeado port map(x2,y2,temp,z2,temp1); u3: Egesz_oszeado port map(x3,y3,temp1,z3,temp2); u4: Egesz_oszeado port map(x4,y4,temp2,z4,z5); u5: hex_display port map(x1,x2,x3,x4,led1); u6: hex_display port map(y1,y2,y3,y4,led2); end Behavioral;
7