Cypress Semiconductor VHDL Training

advertisement
VHDL Training
Introduction
 VHDL is used to:
 document circuits
 simulate circuits
 synthesize design descriptions
 Synthesis is the realization of design descriptions into
circuits. In other words, it is the process by which logic
circuits are created from design descriptions
 This training course covers VHDL for PLD and CPLD
synthesis
 The course will at times draw upon the concepts of
VHDL as a simulation language
Cypress Semiconductor1995©
1
VHDL Training
VHDL Design Descriptions
 VHDL design descriptions consist of an ENTITY
and ARCHITECTURE pair
 The ENTITY describes the design I/O
 The ARCHITECTURE describes the content of
the design
Cypress Semiconductor1995©
2
VHDL Training
The Entity
 A “BLACK BOX”
 The ENTITY describes the periphery of the
black box (the design I/O)
BLACK_BOX
rst
q[7:0]
d[7:0]
co
clk
Cypress Semiconductor1995©
3
VHDL Training
PORTS
 The Entity (“BLACK BOX”) has PORTS
 PORTS are points of communication
• PORTS are often associated with the device pins
or I/O’s of a component
 PORTS are a special class of SIGNAL
 PORTS have an associated SIGNAL name,
MODE, and TYPE
Cypress Semiconductor1995©
4
VHDL Training
PORT modes
A port’s MODE is the direction data is transferred:
 IN
Data that goes into the entity but not out
 OUT
Data that goes out of the entity but not in
(and is not used internally)
 INOUT
Data that is bi-directional (goes into and
out of the entity)
 BUFFER Data that goes out of the entity and is
also fed-back internally within the entity
Cypress Semiconductor1995©
5
VHDL Training
TYPES
 VHDL is a strongly typed language (you cannot assign a signal
of one type to the signal of another type)
 BIT
 a signal of type bit that can only take values of '0' or '1'
 BIT_VECTOR
 a grouping of bits (each bit can take value of '0' or '1')
e.g.,
SIGNAL a: BIT_VECTOR (0 TO 3);
-- e.g... ascending range
SIGNAL b: BIT_VECTOR (3 DOWNTO 0); -- e.g... descending range
a <= "0111";
b <= "0101";
This means that: a(0) = '0'
b(0) = '1'
a(1) = '1'
b(1) = '0'
a(2) = '1'
b(2) = '1'
a(3) = '1'
b(3) = '0'
Cypress Semiconductor1995©
6
VHDL Training
TYPES (contd.)
 Warp recognizes two other signal types:
 x01z
• a signal bit that can take values ‘x’, ‘0’, ‘1’, or
‘z’
• this type is useful for three-state outputs and
bi-directional signals
 x01z_VECTOR
• a grouping of x01z’s
• assignment is similar to BIT_VECTOR
Cypress Semiconductor1995©
7
VHDL Training
TYPES (contd.)
 INTEGER
• useful as index holders for loops, constants,
or generics
 BOOLEAN
• can take values ‘TRUE’ or ‘FALSE’
 ENUMERATED
• has user-defined set of possible values
example:
TYPE states IS (start, slow, fast, stop);
TYPE qit IS (‘0’, ‘1’, ‘z’, ‘x’);
Cypress Semiconductor1995©
8
VHDL Training
The Entity declaration
 VHDL description of the black box:
ENTITY black_box IS PORT (
clk, rst:
IN BIT;
d:
IN BIT_VECTOR(7 DOWNTO 0);
q:
OUT BIT_VECTOR (7 DOWNTO 0);
co:
OUT BIT);
END black_box;
MODE
BLACK_BOX
rst
q[7:0]
d[7:0]
clk
Cypress Semiconductor1995©
co
9
TYPE
VHDL Training
The Entity: An Example
 Write an entity declaration for the following:
Port D is a 12-bit bus, input only
Port OE and CLK are each input bits
Port AD is a 12-bit, bi-directional bus
Port A is a 12-bit bus, output only
Port INT is a three-state output
Port AS is an output only
my_design
ad[11:0]
d[11:0]
Cypress Semiconductor1995©
oe
a[11:0]
clk
int
as
10
VHDL Training
The Entity: Example solution
ENTITY my_design IS
d:
IN
oe, clk: IN
ad:
INOUT
a:
OUT
int:
OUT
as:
OUT
END my_design;
PORT (
BIT_VECTOR (11 DOWNTO 0);
BIT;
x01z_VECTOR(11 DOWNTO 0);
BIT_VECTOR (11 DOWNTO 0);
x01z;
BIT);
my_design
ad[11:0]
d[11:0]
Cypress Semiconductor1995©
oe
a[11:0]
clk
int
as
11
VHDL Training
Exercise #1: Entity Declaration
 Write an entity declaration for the following:
Port A is a 4-bit bus, input only
Port EN, LD and CLK are input only
Port W is an output only
Port X is a 12-bit bi-directional bus
Port Y is an output that is also used internally
Port Z is a three-state output
your_design
Cypress Semiconductor1995©
en
w
ld
x[11:0]
clk
y
a[3:0]
z
12
VHDL Training
Exercise #1: Solution
ENTITY your_design IS PORT (
clk, ld, en: IN
BIT;
a:
IN
BIT_VECTOR (3 DOWNTO 0);
w:
OUT
BIT;
x:
INOUT
x01z_VECTOR(11 DOWNTO 0);
y:
BUFFER BIT;
z:
OUT
x01z);
END your_design;
your_design
Cypress Semiconductor1995©
en
w
ld
x[11:0]
clk
y
a[3:0]
z
13
VHDL Training
The Architecture
 Architectures describe what is in the black box (i.e., the
structure or behavior of entities)
 Descriptions can be either a combination of
 Structural descriptions
• Instantiations (placements of logic gates - much
like in a schematic - and their connections) of
building blocks referred to as components
 Behavioral descriptions
• Abstract (or “high-level”) descriptions, e.g.,
IF a = b THEN state <= state5;
• Boolean equations, e.g.,
x <= (a OR b) AND c;
Cypress Semiconductor1995©
14
VHDL Training
Entity/Architecture pairs
 Since an architecture describes the behavior of an
entity, they are paired together to form a design, e.g.,
LOGIC
ENTITY logic IS PORT (
a,b,c: IN BIT;
f:
OUT BIT);
END logic;
a
b
g1
USE WORK.gatespkg.ALL;
ARCHITECTURE archlogic OF logic IS
SIGNAL d: BIT;
BEGIN
Behavioral
d <= a AND b;
g1: nor2 PORT MAP (c, d, f);
END archlogic;
Cypress Semiconductor1995©
d
15
c
Structural
f
VHDL Training
Example Library Element (nor2)
 Packages found in WARP\lib\common
 nor2 in WARP\lib\common\gates.vhd
-- gates.vhd Schematic support for synthesis.
PACKAGE gatespkg IS
...
COMPONENT NOR2
PORT (
a,b
:IN BIT;
qn
:OUT BIT
);
END COMPONENT;
...
Cypress Semiconductor1995©
16
VHDL Training
Example Library Element (cont.)
...
ENTITY NOR2 IS
PORT (
a,b :IN BIT;
qn :OUT BIT
);
END NOR2;
ARCHITECTURE archNOR2 OF NOR2 IS
BEGIN
qn <= (a NOR b);
END archNOR2;
...
Cypress Semiconductor1995©
17
VHDL Training
Why use behavioral VHDL?
 increased productivity, e.g., a 4-bit comparator
a VHDL behavioral description:
aeqb <= '1' WHEN a = b ELSE ‘0’ ;
a VHDL structural description:
x1:
x2:
x3:
x4:
eq:
aeqb);
xnor2 PORT MAP (a(0),
xnor2 PORT MAP (a(1),
xnor2 PORT MAP (a(2),
xnor2 PORT MAP (a(3),
or4 PORT MAP (xnr(0),
b(0), xnr(0));
b(1), xnr(1));
b(2), xnr(2));
b(3), xnr(3));
xnr(1), xnr(2), xnr(3),
 increased portability, i.e., designs are not dependent
on a library of vendor or device-specific components
 more readable design flow
Cypress Semiconductor1995©
18
VHDL Training
Standard VHDL operators
 Logical - defined for type BIT
 AND, NAND
 OR, NOR
 XOR, XNOR
 NOT
 Relational - defined for types BIT, BIT_VECTOR, INTEGER
 = (equal to)
 =/ (not equal to)
 < (less than)
 =< (less than or equal to)
 > (greater than)
 => (greater than or equal to)
Cypress Semiconductor1995©
19
VHDL Training
Standard VHDL operators (contd.)
 Unary Arithmetic - defined for type INTEGER
 - (arithmetic negate)
 Arithmetic - defined for type INTEGER
 + (addition)
 - (subtraction)
 Concatenation - defined for types STRING,
BIT, BIT_VECTOR
 &
Cypress Semiconductor1995©
20
VHDL Training
Overloaded VHDL operators
 Operators are defined to operate on data objects of
specific types
 For example, the ‘+’ operator is defined to
operate on integers
signal a,b,c : integer range 0 to 10; c <= a + b;
 Operators can be “overloaded” to operate on data
objects of other types
 e.g., the ‘+’ operator may be overloaded to
operate on bit_vectors and integers
signal b,c : bit_vector(3 downto 0) ; c <= b + 2;
 Warp provides a library to overload many operators
Cypress Semiconductor1995©
21
VHDL Training
VHDL semantics
 There are two types of statements (The following is more
easily understood in terms of simulation)
 Sequential
• Statements within a process are sequential
statements and evaluate sequentially in
terms of simulation
 Concurrent
• Statements outside of a process evaluate
concurrently
• Processes are evaluated concurrently (i.e.,
more than one process can be “active” at any
given time, and all active processes are
evaluated concurrently)
Cypress Semiconductor1995©
22
VHDL Training
Concurrent statements
 Concurrent statements include:
 boolean equations
 conditional assignments (i.e., when...else...)
 instantiations
 Examples of concurrent statements:
-- Two dashes indicates a comment in VHDL
-- Examples of boolean equations
x <= (a AND( NOT sel1)) OR (b AND sel1);
g <= NOT (y AND sel2);
-- Examples of conditional assignments
y <= d WHEN (sel1 = '1') ELSE c;
h <= '0' WHEN (x = '1' AND sel2 = '0') ELSE ‘1’;
-- Examples of instantiation
inst: nand2 PORT MAP (h, g, f);
Cypress Semiconductor1995©
23
VHDL Training
Sequential statements: The Process
 A process is a VHDL construct used for grouping
sequential statements
 Statements within a process are evaluated
sequentially in terms of simulation
 Processes can be either active or inactive (awake or
asleep)
 A Process typically has a SENSITIVITY LIST
 When a signal in the sensitivity list changes
value, the process becomes active
 e.g., a process with a clock signal in its
sensitivity list becomes active on changes of the
clock signal
Cypress Semiconductor1995©
24
VHDL Training
The Process (contd.)
 All signal assignments occur at the END PROCESS
statement in terms of simulation time
 The Process then becomes inactive
Cypress Semiconductor1995©
25
VHDL Training
Sequential statements: An Example
 Example of sequential statements within a Process:
mux: PROCESS (a, b, s)
BEGIN
IF s = '0' THEN
x <= a;
ELSE
x <= b;
END IF;
END PROCESS mux;
s
a(3 DOWNTO 0)
x(3 DOWNTO 0)
b(3 DOWNTO 0)
 Note: logic within a process can be registered or combinatorial
 Note: the order of the signals in the sensitivity list is unimportant
Cypress Semiconductor1995©
26
VHDL Training
The Process Sensitivity List
 A Process is invoked when one or more of the
signals within the sensitivity list change, e.g.,
ARCHITECTURE archlist OF list IS
BEGIN
nand: PROCESS (a,b)
BEGIN
c <= NOT (a AND b);
END PROCESS nand;
END archlist;
 Note: the process ‘nand’ is sensitive to signals ‘a’ and ‘b’
i.e., whenever signal ‘a’ or ‘b’ changes value, the statements
inside of the process will be evaluated
Cypress Semiconductor1995©
27
VHDL Training
Signal Assignment in Processes
s
a(3 DOWNTO 0)
x(3 DOWNTO 0)
b(3 DOWNTO 0)
en
ENTITY mux2ltch IS PORT (
a, b: IN BIT_VECTOR(3 DOWNTO 0);
s, en: IN BIT;
x: BUFFER BIT_VECTOR(3 DOWNTO 0));
END mux2ltch;
Cypress Semiconductor1995©
28
VHDL Training
Signal Assignment in Processes:
Incorrect solution
 Solution using a process with sequential statements:
ARCHITECTURE archmux2ltch OF mux2ltch IS
SIGNAL c: BIT_VECTOR (3 DOWNTO 0);
BEGIN
mux: PROCESS (s, en)
BEGIN
IF s = '0' THEN c <= a;
ELSE c <= b;
END IF;
x <= (x AND (NOT en)) OR (c AND en);
END PROCESS mux;
END archmux2ltch;
 Note: when en = '1' ,x is assigned the previous value of c
Cypress Semiconductor1995©
29
s
a
c
x
b
en
Desired Circuit
VHDL Training
END PROCESS: A correct solution
 Solution using a process with sequential statements
and a concurrent signal assignment:
ARCHITECTURE archmux2ltch OF mux2ltch IS
SIGNAL c: BIT_VECTOR (3 DOWNTO 0);
BEGIN
mux: PROCESS (s)
BEGIN
IF s = '0' THEN c <= a;
ELSE c <= b;
END IF;
END PROCESS mux;
x <= (x AND (NOT en)) OR (c AND en);
END archmux2ltch;
 Note: when en = '1' , x is assigned the updated value of c
Cypress Semiconductor1995©
30
VHDL Training
Exercise #2: Architecture
Declaration of a Comparator
 The entity declaration is as follows:
ENTITY compare IS PORT (
a, b: IN BIT_VECTOR (0 TO 3);
aeqb: OUT BIT);
END compare;
a(0 TO 3)
b(0 TO 3)
 Write an architecture that causes aeqb to be asserted
when a is equal to b
 Multiple solutions exist
Cypress Semiconductor1995©
31
aeqb
VHDL Training
Three possible solutions
 Concurrent statement solution using a conditional
assignment:
ARCHITECTURE archcompare OF compare IS
BEGIN
aeqb <= '1' WHEN a = b ELSE‘ 0‘;
END archcompare;
 Concurrent statement solution using boolean
equations:
ARCHITECTURE archcompare OF compare IS
BEGIN
aeqb <= NOT(
(a(0) XOR b(0)) OR
(a(1) XOR b(1)) OR
(a(2) XOR b(2)) OR
(a(3) XOR b(3)));
END archcompare;
Cypress Semiconductor1995©
32
VHDL Training
Three possible solutions (contd.)
 Solution using a process with sequential statements:
ARCHITECTURE archcompare OF compare IS
BEGIN
comp: PROCESS (a, b)
BEGIN
IF a = b THEN
aeqb <= '1';
a(0 TO 3)
ELSE
aeqb <= '0';
b(0 TO 3)
END IF;
END PROCESS comp;
END archcompare;
Cypress Semiconductor1995©
33
aeqb
Download