Τμήμα Μησανικών Πληποφοπικήρ, Τ.Ε.Ι. Ηπείπος Ακαδημαϊκό Έτορ 2016-2017, 6 ο Εξάμηνο Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 4 Διδάςκων Τςιακμάκθσ Κυριάκοσ, Phd MSc in Electronic Physics (Radioelectrology) Computer and Electronic Circuits Technology MSc in Science - Agricultural Engineering
Entity Ένα VHDL design μπορεί να ζχει ζνα block θ περιςςότερα. Aντι για block κα λζμε entity. Στθν VHDL ζνα entity περιγράφει το interface ενόσ block και ζνα δεφτερο τμιμα τθσ VHDL, που ςχετίηεται με το entity περιγράφει πωσ λειτουργεί το ςυγκεκριμζνο block. entity Lab4And is end Lab4And;
Architecture Αφοφ οριςτεί το entity ςτθ ςυνζχεια πρζπει να κακοριςτεί και θ λειτουργία του. Αυτό γίνεται ςτο κομμάτι Architecture του VHDL κϊδικά. Στο κομμάτι αυτό περιγράφετε τι κάνει το κφκλωμά, με διάφορουσ τρόπουσ. 1) Ο πρϊτοσ είναι αυτό που ονομάηεται Βehavioral Design, όπου απλά περιγράφεται θ ςχζςθ μεταξφ τθσ ειςόδου και τθσ εξόδου. (if-then-for) 2) Ο άλλοσ τρόποσ ονομάηεται Structural Design και είναι μια περιγραφι του ψθφιακοφ κυκλϊματοσ ςαν ζνα ςφνολο από άλλα entities ι πφλεσ τα οποία ςυνδζονται όλα μαηί για να δϊςουν τθν επικυμθτι λειτουργία. (entites) 3) Dataflow Design: εκχωριςεισ με λογικζσ εκφράςεισ. 4) Μπορεί να ςυνδυαςτοφν και οι τρείσ από αυτοφσ τρόπουσ ςτθ ςχεδίαςθ
Διαφορά RTL και Behavioral Code Μποροφμε να διαχωρίςουμε τον τρόπο γραφισ κϊδικα και ςε δφο άλλεσ μεγάλεσ κατθγορίεσ: Behavioral code is higher-level and usually can't be synthesized. Constructs like loops, delays, and "initial" statements are behavioral. RTL (Register transfer level) code is lower-level and is intended to be synthesized. It defines a circuit as a combination of interconnected registers and the operations performed on signals between those registers.
Περιγραφι απλοφ κϊδικα με λογικζσ πφλεσ Θα περιγράψουμε τον κϊδικα βιμα βιμα αφοφ πρϊτα παρουςιάςουμε τουσ πίνακεσ αλθκείασ αυτϊν.
Λογικζσ Πφλεσ
Λογικζσ Πφλεσ
-------------------------------------------------- library ieee; use ieee.std_logic_1164.all; -------------------------------------------------- entity Lab4And is end Lab4And; -------------------------------------------------- architecture behav1 of Lab4And is process(x, y) -- compare to truth table if ((x='1') and (y='1')) then F <= '1'; else F <= '0'; end if; end process; end behav1; architecture behav2 of Lab4And is F <= x and y; Κϊδικασ για πφλθ AND - OR -------------------------------------------------- library ieee; use ieee.std_logic_1164.all; -------------------------------------------------- end behav2; -------------------------------------------------- entity Lab4Or is end Lab4Or; --------------------------------------- architecture OR_arch of Lab4Or is process(x, y) -- compare to truth table if ((x='0') and (y='0')) then F <= '0'; else F <= '1'; end if; end process; end OR_arch; architecture OR_beh of Lab4Or is F <= x or y; end OR_beh; ---------------------------------------
Πφλθ AND Η λειτουργία του κυκλϊματοσ γίνεται ςτο κομμάτι του κϊδικα που αρχίςει με τθ λζξθ architecture μζςα ςτο /end κομμάτι. Η χριςθ του ςυμβόλου <= δεν πρόκειται για ςφμβολο μικρότερο ίςο, όπωσ το ξζρουμε από τισ άλλεσ γλϊςςεσ προγραμματιςμοφ, αλλά είναι ζνα ςφμβολο που δείχνει ότι τα δεδομζνα μεταφζρονται (data flow) από το ςιμα που βρίςκεται δεξιά από το ςφμβολο ςτο ςιμα που βρίςκεται αριςτερά του. To and είναι ζνα built-in component που ονομάηεται operator, γιατί λειτουργεί (operates) πάνω ςε κάποια δεδομζνα και παράγει νζα δεδομζνα. Δθλαδι κα μποροφςαμε να ποφμε ότι το ςιμα y παράγεται από τα δεδομζνα a,b τα οποία ζχουν πρϊτα επεξεργαςτεί από τον and operator. Ο τρόποσ αυτόσ οριςμοφ και περιγραφισ των entities ονομάηεται DataFlow Design
Κϊδικασ για πφλθ NOT- XOR library ieee; use ieee.std_logic_1164.all; ----------------------------------------- entity Lab4Not is end Lab4Not; ------------------------------------------ architecture behv1 of Lab4Not is process(x, y) -- compare to truth table if (x='0' and y='0') then F <= '1'; else F <= '0'; end if; end process; end behv1; architecture behv2 of Lab4Not is F <= x nor y; end behv2; library ieee; use ieee.std_logic_1164.all; -------------------------------------- entity Lab4Xor is end Lab4Xor; -------------------------------------- architecture behv1 of Lab4Xor is process(x, y) -- compare to truth table if (x/=y) then F <= '1'; else F <= '0'; end if; end process; end behv1; architecture behv2 of Lab4Xor is F <= x xor y; end behv2; --------------------------------------
Κϊδικασ για πφλθ NAND - NOR library ieee; use ieee.std_logic_1164.all; ------------------------------------------ entity Lab4Nand is end Lab4Nand; ------------------------------------------ architecture behv1 of Lab4Nand is process(x, y) -- compare to truth table if (x='1' and y='1') then F <= '0'; else F <= '1'; end if; end process; end behv1; ----------------------------------------- architecture behv2 of Lab4Nand is end behv2; F <= x nand y; library ieee; use ieee.std_logic_1164.all; ----------------------------------------- entity Lab4Nor is end Lab4Nor; ------------------------------------------ architecture behv1 of Lab4Nor is process(x, y) -- compare to truth table if (x='0' and y='0') then F <= '1'; else F <= '0'; end if; end process; end behv1; architecture behv2 of Lab4Nor is F <= x nor y; end behv2; -----------------------------------------
Άςκθςθ Αυτοαξιολόγθςθσ Να υλοποιθκεί κϊδικασ που να ορίηει τθν λειτουργία 1) Του απομονωτι buffer 2) Τθσ πφλθσ XNOR