Περιγραφή Κυκλωμάτων με χρήση της VHDL Χρήση βιβλιοθηκών και δήλωση πακέτων Οργάνωση Παρουσίασης Βιβλιοθήκες (Libraries) Πακέτα (Packages) Υποπρογράμματα (Subprograms) Συμπληρωματική βιβλιογραφία / αναφορές ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 2 Βιβλιοθήκες Περιέχουν Χρήση προσχεδιασμένες υπομονάδες και πακέτα των στοιχείων τους είτε: Κατά το σχεδιασμό μεγάλων και πολύπλοκων κυκλωμάτων Από πολλούς σχεδιαστές Κάθε βιβλιοθήκη πρέπει να δηλώνεται στο VHDL κώδικα ώστε να μπορεί να χρησιμοποιηθεί Η δήλωση γίνεται πριν από τη δήλωση των οντοτήτων ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 3 Βιβλιοθήκες LIBRARY <library_name> -- Δήλωση βιβλιοθήκης USE <library_name>.<package_name>.ALL; -- Δήλωση χρήσης πακέτου ENTITY …. ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 4 Βιβλιοθήκες Κάθε μεταγλωττισμένη υπομονάδα αποθηκεύεται εξ’ ορισμού στη βιβλιοθήκη work. Η work: Δημιουργείται αυτόματα από το CAD tool Είναι πάντοτε ορατή ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 5 Βιβλιοθήκες Η VHDL περιέχει μια βιβλιοθήκη (std) και ένα πακέτο (standard) με όλους τους προκαθορισμένους τύπους δεδομένων και συναρτήσεων Ο παρακάτω κώδικας εμπεριέχεται αυτόματα σε κάθε VHDL περιγραφή LIBRARY work; LIBRARY std; USE std.standard.ALL; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 6 Βιβλιοθήκες Οι τύποι δεδομένων std_logic, std_ulogic, std_logic_vector και std_ulogic_vector έχουν ορίστεί στο πακέτο std_logic_1164 που περιέχεται στη βιβλιοθήκη ieee Η χρήση του παραπάνω πακέτου απαντάται σχεδόν σε όλες τις VHDL περιγραφές LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY … ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 7 Πακέτα Περιέχουν υπο-προγράμματα, σταθερές και τύπους δεδομένων Κάθε πακέτο αποτελείται από δύο μέρη: Δηλώσεις Σώμα ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 8 Πακέτα PACKAGE <package_name> IS [subprograms declarations] [constant declarations] [components declarations] [type declarations] END [<package_name>]; PACKAGE BODY <package_name> IS [subprograms bodies] [internal subprograms declarations] [internal subprograms bodies] [constant declarations] [type declarations] END [<package_name>]; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 9 Πακέτα - Παραδείγματα PACKAGE mypack IS FUNCTION min (a, b :IN std_logic_vector) RETURN std_logic_vector; CONSTANT maxint : integer := 16#FFFF#; TYPE arithmetic_mode is (signed, unsigned); END mypack; PACKAGE BODY mypack IS FUNCTION min (a, b :in std_logic_vector) RETURN std_logic_vector IS BEGIN IF a<b THEN RETURN a; ELSE RETURN b; END IF; END min; END mypack; -- Function’s declaration -- Exported constants -- Exported types -- Function’s body ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 10 Υποπρογράμματα - Subprograms Υπάρχουν δύο είδη υπο-προγραμμάτων: Συναρτήσεις (Functions) Διαδικασίες (Procedures) Τα υπο-προγράμματα εμφανίζονται σε: Πακέτο Αρχιτεκτονική Διεργασίες ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 11 Υποπρογράμματα - Subprograms Οι συναρτήσεις επιστρέφουν μία τιμή ενώ οι διαδικασίες μπορούν να επιστρέψουν περισσότερες από μία τιμές Ο κώδικας εντός του υπο-προγράμματος είναι πάντοτε ακολουθιακός (sequential VHDL) !!! ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 12 Procedures Επιστρέφουν περισσότερες από μία τιμές Δέχονται ως παραμέτρους σταθερές, μεταβλητές και σήματα Υποστηρίζουν in, out, inout modes Εάν δεν καθοριστεί ο τύπος του αντικειμένου τότε αυτός εξ΄ ορισμού θεωρείται ως σταθερά ή μεταβλητή ανάλογα με το mode λειτουργίας ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 13 Procedures PROCEDURE ex ( signal clk, data: IN std_logic; signal q: OUT std_logic) IS BEGIN LOOP WAIT UNTIL clk=‘1’; q<=data; END LOOP; END ex; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 14 Procedures - Παράδειγμα ARCHITECTURE bad OF ex IS PROCEDURE test (a,b: IN integer; avg, max : OUT integer); – variables assumed by default BEGIN -- procedure body … END; BEGIN -- architecture body test (d1, d2, q1,q2) -- ERROR concurrent part - q1, q2 aren’t variables PROCESS (d3,d4) VARIABLE a,b :integer BEGIN test (d3,d4, a,b) -- CORRECT q3<=a; g4<=b; ARCHITECTURE good OF ex IS PROCEDURE test (a,b: IN integer; SIGNAL avg, max : OUT integer); – signal is defined BEGIN -- procedure body … END; BEGIN -- architecture body test (d1, d2, q1,q2) -- CORRECT PROCESS (d3,d4) VARIABLE a,b :integer BEGIN test (d3,d4, a,b) -- CORRECT … END process; … END good; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 15 Functions Δέχονται ως παραμέτρους μόνο σήματα και σταθερές τύπου in – Επιστρέφουν μόνο μια τιμή PACKAGE mypack IS FUNCTION max( a,b : IN std_logic_vector) RETURN std_logic_vector; END mypack; PACKAGE BODY mypack IS FUNCTION max( a,b : IN std_logic_vector) RETURN std_logic_vector; BEGIN IF a>d THEN RETURN a; ELSE RETURN b; END IF; END mypack; USE work.mypack.ALL; … ENTITY ex IS … END; ARCHITECTURE rtl OF ex IS BEGIN … q<=max (d1, d2); P1: PROCESS (data, g) BEGIN Data_out<=max (data, g) … END PROCESS ; END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 16 Function overloading LIBRARY ieee; USE ieee.std_logic_1164.ALL; PACKAGE my_pack IS FUNCTION max( a,b : in std_logic_vector) RETURN std_logic_vector; FUNCTION max( a,b : in integer) RETURN integer; END; PACKAGE BODY my_pack IS FUNCTION max( a,b : in std_logic_vector) RETURN std_logic_vector; BEGIN … END; FUNCTION max( a,b : in std_logic_vector) RETURN std_logic_vector; BEGIN … END; END; LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.my_pack.ALL; ENTITY ex IS PORT (a, b : IN std_logic_vector (3 DOWNTO 0); c, d : IN integer; q1 : OUT std_logic_vector (3 DOWNTO 0); q2 : OUT integer); END; ARCHITECTURE rtl OF ex IS BEGIN q1<= max (a, b); q2<=max (c,d); END; Η συνάρτηση ορίζεται πολλαπλές φορές ανάλογα με τον τύπο δεδομένων του αντικειμένου στο οποίο ανατίθεται η τιμή της ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 17 Shift Operators (μόνο για VHDL93’) sll -- shifts left srl -- shifts right rol -- roll over left ror -- roll over right sla -- shift left and keep right value sra – shift right and keep left value LIBRARY ieee; USE ieee.std_logic_arith.ALL; … ARCHITECTURE rtl OF ex IS BEGIN a<=“01101”; q1<=a SLL 1; -- q1<= “11010” q2<=a SRL 1; -- q2<= “00001” q3<=a ROL 1; -- q3<= “10101” q4<=a ROR 1; -- q4<= “10110” q5<=a SLA 1; -- q5<= “10111” q6<=a SRA 1; -- q6<= “00110” END; ΠΡΟΣΟΧΗ Δεν υποστηρίζονται από όλα τα εργαλεία σύνθεσης, ενώ μπορεί να συντάσσονται αλλιώς (ή να υποστηρίζονται άλλοι τύποι) ανάλογα με την εταιρεία δημιουργίας του εργαλείου ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 18 Tri-State Buffer LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY STATE3 IS PORT ( EN: DIN: IΝ std_logic; IΝ std_logic_vector (1 DOWΝTO 0); DOUT: OUT std_logic_vector (1 DOWΝTO 0)); END STATE3; ARCHITECTURE rtl OF STATE3 IS BEGIN seq0:PROCESS (DIN, EN) BEGIN IF (EN='1') THEN DOUT(0) <= DIN(0) XOR DIN(1); ELSE DOUT(0) <='Z'; END IF; END PROCESS; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 19 Tri-State Buffer seq1: PROCESS (EN,DIN) BEGIN CASE EN IS WHEN '1' => DOUT(1)<=DIN(1) NOR DIN(0); WHEN others => DOUT(1)<='Z'; END CASE; END PROCESS; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 20 Selector (1/3) ENTITY SEL IS PORT ( A: IN std_logic_vector (7 DOWNTO 0); SEL: IN std_logic_vector (2 DOWNTO 0); Y: END SEL; OUT std_logic); ARCHITECTURE rtl1 OF SEL IS BEGIN p0: PROCESS (A, sel) BEGIN IF (sel="000") THEN Y<=A(0); ELSIF (sel="001") THEN Y<=A(1); … ELSE Y<=A(7); END IF; END PROCESS; END rtl1; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 21 Selector (2/3) ARCHITECTURE rtl2 OF SEL IS BEGIN p1: PROCESS (A,sel) BEGIN CASE sel IS WHEN "000" => Y<=A(0); WHEN "001" => Y<=A(1); ARCHITECTURE rtl3 OF SEL IS BEGIN WITH sel SELECT Y<=A(0) WHEN "000", A(1) WHEN "001", A(2) WHEN "010", . . . WHEN others => Y<=A(7); END CASE; END PROCESS; END rtl2; A(7) WHEN others; END rtl3; ARCHITECTURE rtl4 OF SEL IS BEGIN Y<=A(conv_integer(SEL)); END rtl4;. ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 22 Selector (3/3) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 23 Encoder ENTITY ENCODER is PORT ( sel : IN std_logic_vector(1 DOWNTO 0); Y : OUT std_logic_vector (3 DOWNTO 0)); END ENCODER; ARCHITECTURE rtl OF ENCODER IS BEGIN PROCESS (sel) BEGIN Y<= (Y'range =>'1'); IF (sel = "00") THEN Y(0)<='0'; ELSIF (sel="01") THEN Y(1)<='0'; ELSIF (sel="10") THEN Y(2)<='0'; ELSE Y(3)<='0'; END IF; END PROCESS; END rtl; Φυσικά μπορούν να χρησιμοποιηθούν και οι δομές: case, with, when ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 24 Equality Checker ENTITY eq_chk1 IS GENERIC ( N: IN integer :=8); PORT ( a, b : IN std_logic_vector (N-1 DOWNTO 0); equal : OUT std_logic); END eq_chk1; ARCHITECTURE beh OF eq_chk1 IS BEGIN PROCESS (a,b) VARIABLE equal_so_far : std_logic; BEGIN equal_so_far :='1'; FOR i IN a'range LOOP IF (a(i)/=b(i)) THEN equal_so_far:='0'; EXIT; END IF; END LOOP; equal <= equal_so_far; END PROCESS; END beh; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 25 Shift Register ENTITY shift_reg IS PORT ( si, clk, rst_n : IN std_logic; so : OUT std_logic); END shift_reg; ARCHITECTURE rtl OF shift_reg IS SIGNAL temp : std_logic_vector (7 DOWNTO 0); BEGIN PROCESS (rst_n, clk) BEGIN IF (rst_n ='0') THEN temp <= (temp'range => '0'); ELSIF (clk'event AND clk='1') THEN temp <=si & temp( temp'length-1 DOWNTO 1); END IF; END PROCESS; so <= temp(0); END RTL; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 26 Βιβλιογραφία / άλλες πηγές P. Ashenden, “The Designer’s Guide to VHDL”, Morgan Kaufman Publishers, 1996 S. Sjoholm and L. Lennart, “VHDL for Designers”, Prentice Hall, 1997 B. Cohen, “VHDL Coding Styles and Methodologies”, Kluwer Academic Publishers, 1999 Z. Navabi, “VHDL-Analysis and Modeling of Digital Systems”, Mc Graw-Hill, 1993 “VHDL cookbooks of the synthesis tools” ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 27 Βιβλιογραφία / άλλες πηγές On-line μαθήματα σε ASIC/VHDL design: http://www.dacafe.com/ASICs.htm http://www.ecs.umass.edu/ece/vspgroup/burleso n/courses/558/ http://mikro.e-technik.uni-ulm.de/vhdl/anlengl.vhd/html/vhdl-all-e.html http://www.eas.asu.edu/~yong598d/VHDL_links. html ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 28 Βιβλιογραφία / άλλες πηγές Tutorials/Papers: http://www.vhdl.org/fmf/wwwpages/FMF_ECL_m odels_paper.html http://www.bluepc.com/download.html#downloa dtop http://www.symphonyeda.com/products.htm http://www.angelfire.com/electronic/in/vlsi/vhdl.ht ml#vhdl ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 29 Βιβλιογραφία / άλλες πηγές Freeware VHDL/Synthesis tools: http://www-asim.lip6.fr/recherche/alliance/ http://www.bluepc.com/download.html#downloa dtop http://www.symphonyeda.com/products.htm http://www.ececs.uc.edu/~paw/savant/ http://www.aldec.com/Downloads/ ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 30 Βιβλιογραφία / άλλες πηγές Άλλες πηγές: http://www.ieee.org http://www.acm.org http://www.vhdl.org http://tech-www.informatik.uni-hamburg.de/vhdl/ http://www.eeglossary.com/vhdl.htm http://www.ent.ohiou.edu/~starzyk/network/Class /ee514/intro.html ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 31
© Copyright 2025 Paperzz