Χρήση βιβλιοθηκών και δήλωση πακέτων

Περιγραφή Κυκλωμάτων
με χρήση της 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