ΕΝΟΤΗΤΑ 9Η Η ΓΛΩΣΣΑ VHDL: ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ Τμήμα Πληροφορικής και Επικοινωνιών, «Ενίσχυση Σπουδών Πληροφορικής», ΕΠΕΑΕΚ ΙΙ Ιωάννη Καλόμοιρου, Προηγμένα Ψηφιακά Συστήματα ΕΝΟΤΗΤΑ 9Η Η ΓΛΩΣΣΑ VHDL: ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ Εργαλεία σύνθεσης και προσομοίωσης VHDL Πολυπλέκτες και αποκωδικοποιητές σε VHDL Συγκριτές σε VHDL Αριθμητικά κυκλώματα σε VHDL
Εργαλεία Σχεδίασης ψηφιακών κυκλωμάτων. Το Λογισμικό Quartus II επιθυμητό σχέδιο Εισαγωγή σχεδίασης Πίνακας αληθείας Σχηματικό διάγραμμα Κώδικας HDL Σύνθεση προσομοίωση ΛΑΘΟΣ ΣΩΣΤΟ Φυσική σχεδίαση-δρομολόγηση Ροή εργασιών στο λογισμικό σύνθεσης και προσομοίωσης Quartus II
Εισαγωγή σχηματικού διαγράμματος στο Quartus II
Compilation (Μετάφραση) στο Quartus II
Η ΓΛΩΣΣΑ VHDL Σχεδιαστική ροή σε VHDL ή σε άλλη γλώσσα περιγραφής υλικού
Δομή προγράμματος σε VHDL
Πολυπλέκτης 2:1 σε VHDL LIBRARY ieee; USE ieee.std_logic_1164.all; --simple example 2-to-1 multiplexer ENTITY mux2to1 IS PORT(x, y, s :IN STD_LOGIC; m :OUT STD_LOGIC); END mux2to1; ARCHITECTURE Behavior OF mux2to1 IS BEGIN m<=(NOT(s) AND x) OR (s AND y); END Behavior;
Πολυπλέκτης 2:1 (συνέχεια) Η δομή εντολών with (signal) select…when…others library ieee; use ieee.std_logic_1164.all; Εntity mux2_1 is port (x,y,s : in std_logic; f : out std_logic); end mux2_1; Αrchitecture behavior of mux2_1 is begin with s select f<= x when '0', y when others; end behavior;
Λογισμικό Σύνθεσης-Προσομοίωσης Quartus II Προσομοίωση του πολυπλέκτη 2:1
Πολυπλέκτης 2 καναλιών 8-bits H δομή δεδομένων std_logic_Vector library ieee; use ieee.std_logic_1164.all; entity part2 is port (x,y : in std_logic_vector (7 downto 0); s : in std_logic; f : out std_logic_vector (7 downto 0)); end part2; architecture behavior of part2 is begin with s select f<= x when '0', y when others; end behavior;
Αποκωδικοποιητές σε VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DECODER_2TO4 IS PORT(X :IN STD_LOGIC_VECTOR (1 DOWNTO 0); Y :OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END DECODER_2TO4; ARCHITECTURE BEHAVIOR OF DECODER_2TO4 IS BEGIN WITH X SELECT Y<= "0001" WHEN "00", "0010" WHEN "01", "0100" WHEN "10", "1000" WHEN OTHERS; END BEHAVIOR;
Binary to 7 segment LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY bin_7segment IS PORT(m:IN STD_LOGIC_VECTOR(3 DOWNTO 0); ex:OUT STD_LOGIC_VECTOR(0 TO 6)); END bin_7segment; ARCHITECTURE behavior OF bin_7segment IS BEGIN WITH m SELECT ex<="0000001" WHEN "0000", "1001111" WHEN "0001", "0010010" WHEN "0010", "0000110" WHEN "0011", "1001100" WHEN "0100", "0100100" WHEN "0101", "0100000" WHEN "0110", "0001111" WHEN "0111", "0000000" WHEN "1000", "0000100" WHEN "1001", "0000001" WHEN "1010", "1001111" WHEN "1011", "0010010" WHEN "1100", "0000110" WHEN "1101", "1001100" WHEN "1110", "0100100" WHEN "1111"; END behavior;
Συγκριτής με το 9 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY compare1 IS PORT(v :IN STD_LOGIC_VECTOR(3 DOWNTO 0); Agt9 :OUT STD_LOGIC); END compare1; ARCHITECTURE Behavior OF compare1 IS BEGIN Agt9<='1' WHEN v>"1001" ELSE '0'; END Behavior;
Συγκριτές στη VHDL Library ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY compare IS PORT(A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); AeqB, AgtB, AltB: OUT STD_LOGIC); END compare; ARCHITECTURE Behavior OF compare IS BEGIN AeqB<='1' WHEN A=B ELSE '0'; AgtB<='1' WHEN A>B ELSE '0'; AltB<='1' WHEN A<B ELSE '0'; END Behavior;
Λειτουργική προσομοίωση του συγκριτή
ΑΘΡΟΙΣΤΕΣ LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY fulladder1 IS PORT(Cin,x,y :IN STD_LOGIC; s, Cout :OUT STD_LOGIC); END fulladder1; ARCHITECTURE structural OF fulladder1 IS BEGIN s<=x XOR y XOR Cin; Cout<=(x AND y) OR (Cin AND x) OR (Cin AND y); END Structural;
Προσομοίωση του πλήρη αθροιστή
Αθροιστής 4-bits - Συνιστώσες κυκλώματος LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY adder4 IS PORT(Cin :IN STD_LOGIC; x3,x2,x1,x0 :IN STD_LOGIC; y3,y2,y1,y0 :IN STD_LOGIC; s3,s2,s1,s0 :OUT STD_LOGIC; Cout :OUT STD_LOGIC); END adder4; ARCHITECTURE Structure OF adder4 IS SIGNAL c1,c2,c3:STD_LOGIC; COMPONENT fulladder1 PORT(Cin,x,y: IN STD_LOGIC; s, Cout :OUT STD_LOGIC); END COMPONENT; BEGIN Stage0: fulladder1 PORT MAP(Cin,x0,y0,s0,c1); stage1: fulladder1 PORT MAP (c1,x1,y1,s1,c2); stage2: fulladder1 PORT MAP (c2,x2,y2,s2,c3); stage3: fulladder1 PORT MAP (c3,x3,y3,s3,Cout); END Structure;
Προσομοίωση του αθροιστή 4-bits
Aθροιστής 16-bits - Χρήση αριθμητικού πακέτου LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all; ENTITY adder16 IS PORT(X,Y :IN STD_LOGIC_VECTOR(15 DOWNTO 0); S :OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END adder16; ARCHITECTURE arithm OF adder16 IS BEGIN S<=X+Y; END arithm;
Προσομοίωση αθροιστή 16-bits