Professional Documents
Culture Documents
VHDL
ISBN 978-974-13-3479-6
VHDL
VHDL
6
1 VHDL
2
3
4
5
6
2552
Email: wutichai@rmuti.ac.th
1 VHDL ................................................................................................................................. 1
1.1 VHDL ...................................................................................................... 1
1.1.1 VHDL LIBRARY ........................................................... 1
1.1.2 VHDL ENTITY ............................................................... 2
1.1.3 VHDL ARCHITECTURE ............................................... 3
1.2 VHDL ............................................................................................... 4
1.3 ............................................................................................................................................. 6
2 ......................................................................................................................................... 7
2.1 .................................................................................................... 7
2.2 ........................................................................................................ 11
2.2.1 INTEGER ................................................................... 11
2.2.2 ENUMERATED 12
2.3 ................................................................................................................................................. 12
2.4 ............................................................................................................................................. 12
2.5 ........................................................................................................................................... 14
2.6 .......................................................................... 14
2.7 ................................................................................................................................... 16
2.8 VHDL ................................................................................................ 17
2.9 ............................................................................................................................................. 19
3 .................................................................................. 20
3.1 ............................................................................................................................. 20
3.1.1 .......................................................................................................... 20
3.1.2 ................................................................................................................. 21
3.1.3 ....................................................................................................... 22
3.1.4 ....................................................................................................... 23
3.1.5 .................................................................................................... 23
3.2 ............................................................................................................... 24
3.3 .................................................................................................... 25
3.4 GENERIC ......................................................................................................................26
3.5 VHDL ................................................................................................ 26
3.6 ............................................................................................................................................. 29
()
4 ................................................................................................................................. 30
4.1 WHEN .................................................................................................................................... 30
4.1.1 WHEN/ELSE ................................................................................................................... 30
4.1.2 WITH/SELECT/WHEN .................................................................................................. 33
4.2 GENERATE ............................................................................................................................. 39
4.2.1 FOR/GENERATE ............................................................................................................ 39
4.2.2 IF/GENERATE ................................................................................................................ 40
4.3 ............................................................................................................................................. 41
5 ................................................................................................................................. 42
5.1 PROCESS ................................................................................................................................. 42
5.2 VARIABLE SIGNAL........................................................................................... 43
5.3 IF PROCESS ................................................................................................... 44
5.4 WAIT PROCESS ............................................................................................ 47
5.4.1 WAIT ON ......................................................................................................................... 47
5.4.2 WAIT UNTIL .................................................................................................................. 47
5.4.3 WAIT FOR....................................................................................................................... 47
5.5 CASE PROCESS ............................................................................................ 49
5.6 ............................................................................................................................................. 55
6 ...................................................................................................................................... 56
6.1 VHDL ....................................................................................... 57
6.2 VHDL...................................................................................... 64
6.3 ............................................................................................................................................. 68
. VHDL ............................................. 70
. VHDL ................................................................................................................... 73
. Standard Package STD_LOGIC_1164 ....................................................................................... 74
. Quartus-II VHDL................................. 77
.............................................................................................................................................................. 85
VHDL
: 1
VHDL
VHDL
VHDL
VHDL 3
o LIBRARY
o ENTITY
o ARCHITECTURE
1.1 VHDL
1.1
LIBRARY Declaration
ENTITY
ARCHITECTURE
1.1 VHDL
VHDL LIBRARY
LIBRARY package package
(subprogram) package ENTITY
ARCHITECTURE package 1.2
1.1.1
LIBRARY
PACKAGE
FUNCTIONS
PROCEDURES
COMPONENTS
CONSTANTS
TYPES
1.2 LIBRARY
VHDL
VHDL
: 2
LIBRARY
o
LIBRARY
o
package LIBRARY
USE 1.3
1
2
LIBRARY library_name;
USE library_name.package_name.package_parts;
1.3 LIBRARY
USE package
TYPES CONSTANT SIGNAL FUNCTION PROCEDURE
USE (;) 1.3
VHDL
package
package
LIBRARY std
LIBRARY ieee
standard
std_logic_1164
package LIBRARY
1.4
1
2
LIBRARY std;
USE std.standard.all;
()
1.4 () package
() package
1
2
LIBRARY ieee;
USE ieee.std_logic_1164.all;
()
standard LIBRARY std
std_logic_1164 LIBRARY
ieee
package std
package
VHDL ENTITY
ENTITY 1.5
1.1.2
1
2
3
4
5
6
7
ENTITY entity_name IS
PORT (
port_name : signal_mode signal_type ;
port_name : signal_mode signal_type ;
...
);
END entity_name;
1.5
ENTITY
VHDL
VHDL
signal_mode
INOUT
BUFFER
1.6
: 3
4
IN OUT
signal_type BIT BOOLEAN
STD_LOGIC INTEGER 2
signal_type
OUT
INOUT
BUFFER
IN
1.6 ENTITY
1.7() VHDL ENTITY
2 a b
y ENTITY 1.7()
1
2
3
4
()
1.7
ENTITY nand_gate IS
PORT( a,b : IN BIT ;
x
: OUT BIT );
END nand_gate;
()
() 2
()
VHDL ARCHITECTURE
ARCHITECTURE
(signal_mode) ENTITY ARCHITECTURE
1.8
1.1.3
1
2
3
4
5
1.8 ARCHITURE
VHDL
VHDL
: 4
1.7()
ARCHITECTURE
1
2
3
4
1.9
1.9
1.9 3 a b
( <=) y
( 1.7() a b
y BIT )
1.2
1.1
VHDL
y = abc + ac
VHDL
1
2
3
4
5
6
7
8
9
10
11
12
3 a b c
y ENTITY
4 7 ARCHITECTURE
9 12 1 2 package
std_logic_1164 LIBRARY ieee
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------ENTITY ex1 IS
PORT ( a,b,c : IN BIT ;
y
: OUT BIT );
END ex1;
-------------------------------ARCHITECTURE behav OF ex1 IS
BEGIN
y <= (a and not(b) and c) or (a and not(c));
END behav;
VHDL
VHDL
entity_name .vhd
ex1.vhd
Quartus-II ModelSim
Quartus-II 1.10
a (MSB) c (LSB)
1.10 1.1
1.2 y = ab + ab z = (ab+bc)
VHDL
2 3 a b c
y z VHDL
1
2
3
4
5
6
7
8
9
10
11
12
13
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------ENTITY ex2a IS
PORT ( a,b,c : IN BIT ;
y,z
: OUT BIT );
END ex2a;
--------------------------------ARCHITECTURE behav OF ex2a IS
BEGIN
y <= (a and not(b)) or (not(a) and b);
z <= not ((a and b) or (b and c));
END behav;
y
1
2
3
4
5
6
7
8
9
10
11
12
13
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------ENTITY ex2b IS
PORT ( a,b,c : IN BIT ;
y,z
: OUT BIT );
END ex2b;
--------------------------------ARCHITECTURE behav OF ex2b IS
BEGIN
y <= a xor b;
z <= not ((a and b) or (b and c));
END behav;
VHDL
: 5
VHDL
: 6
1.11
1.11 1.2
1. VHDL
1.1)
Z = A + BC
Y = A1A2(A1 + A3)
1.2)
OUT = AB + BC + AC + ABC
1.3)
1.4).
S = (W + W )(W + W )
2. VHDL
1.3
2.1).
A
B
C
2.2).
A
0
A
1
A2
A
3
ON
3.
0 1
- 1 () 0
- 1
VHDL
4. Z = f(A, B,C) = m(0,2,6,7) VHDL
5. X = f(A, B,C, D) = m(1,5,8,10) VHDL
6. Y = f(A, B,C) = M(0,1,3,4) VHDL
-
VHDL
: 7
VHDL
2.1 package
LIBRARY Package
ieee
std_logic_1164
package VHDL
o STD_LOGIC
o STD_LOGIC_VECTOR
std_logic_arith
package
o SIGNED
o UNSIGNED
o
conv_integer(p)
conv_unsinged(p,b)
conv_signed(p,b)
conv_std_logic_vector(p,b)
SIGNED
UNSIGNED
std_logic_unsigned
package
o STD_LOGIC_VECTOR
std_logic_signed
UNSIGNED
package
o STD_LOGIC_VECTOR
VHDL
SIGNED
: 8
2.1 package ()
LIBRARY Package
ieee
numeric_std
package
package
std_logic_arith std_logic_unsigned
std_logic_signed
work
package
1. BOOLEAN
FALSE
TRUE
1
2
3
4
5
6
7
8
9
10
11
o
resetn 0
6 8
1
2
3
4
5
6
7
8
9
10
11
12
a b a b
7 9
a b
VHDL
2. BIT
: 9
1
2
3
4
5
6
7
8
9
10
11
12
o
3. BIT_VECTOR
b BIT 1
BIT
1
2
3
4
5
6
7
8
o
a BIT_VECTOR 4
b
BIT_VECTOR 8 5 a
01102 6 b 000011102
1 (0)
1 (0)
32
-2,147,483,647 +2,147,483,647
4. INTEGER
1
2
3
4
5
6
7
VHDL
: 10
a 200 b -100
a b -2,147,483,647
+2,147,483,647
5. NATURAL
0
--
--
--
--
--
2,147,483,647
c <= 1234;
c
NATURAL
6. REAL
1234
INTEGER
-1.0E38 +1.0E38
y <= 1.25E-5;
y
1.25E-5
7. STD_LOGIC
(X
STD_LOGIC_VECTOR 8
0 1 Z W L H -)
1
2
3
4
5
6
o
x STD_LOGIC
y 4 0101
STD_LOGIC_VECTOR
VHDL
8. STD_ULOGIC
(U
: 11
STD_ULOGIC_VECTOR 9
X 0 1 Z W L H -)
1
2
3
4
5
6
o
x STD_ULOGIC
y 4 STD_ULOGIC
0101
9. TIME
1
2
3
4
5
6
o
c a 10 sel_0
0 b 10
sel_0 1
10.CHARACTER
integer
+2147483647
2.2.1
1
2
3
4
5
6
VHDL
-2147483647
my_integer 0 255
q ( subtype) my_integer
enumerated
2.2.2
1
2
3
4
5
6
o
state
idle forward backward start stop
(Subtypes)
Subtype
2.3
1
2
3
4
5
6
7
o
my_color color
red green blue white my_color
red green blue
(Array)
()
() 2.1 ()
scalar () ()
()
scalar
2.4
VHDL
: 12
()
()
()
: 13
()
2.1
2.1 (scalar)
BIT
STD_LOGIC
STD_ULOGIC
BOOLEAN
(vector)
BIT_VECTOR
STD_LOGIC_VECTOR
STD_ULOGIC
SIGNED
UNSIGNED
INTEGER
TYPE
SIGNAL VARIABLE ( 5.2)
1
2
3
4
5
6
row
matrix
x
SIGNAL
1
2
3
4
VHDL
mat
2.1
:=
1
2
3
4
5
o
row1 row2
0001
(Record)
2.5
1
2
3
4
5
6
7
o
birthday day
INTEGER month month_name
()
(signed) (unsigned)
1
0
2.6
"0101" 5(10)
"1101" -3(10) (
) 13(10)
VHDL
: 14
package std_logic_arith
LIBRARY ieee
1
2
3
4
5
6
7
8
9
10
11
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
...
ARCHITECTURE behav OF ex_sig1 IS
SIGNAL a: SIGNED (7 DOWNTO 0);
SIGNAL b: SIGNED (7 DOWNTO 0);
SIGNAL x: SIGNED (7 DOWNTO 0);
...
BEGIN
v <= a + b;
--
12
13
w <= a AND b;
END behav;
--
a b
1
2
3
4
5
6
7
8
9
10
LIBRARY ieee;
USE ieee.std_logic_1164.all;
...
ARCHITECTURE behav OF ex_sig2 IS
SIGNAL a: STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL b: STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL x: STD_LOGIC_VECTOR (7 DOWNTO 0);
...
BEGIN
v <= a + b;
--
11
12
w <= a AND b;
END behav;
--
a b
package
1
2
3
4
5
6
7
8
9
10
11
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
...
ARCHITECTURE behav OF ex_sig3 IS
SIGNAL a: STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL b: STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL x: STD_LOGIC_VECTOR (7 DOWNTO 0);
...
BEGIN
v <= a + b;
--
12
13
w <= a AND b;
END behav;
--
VHDL
: 15
a b
package
(data conversion)
VHDL
2.7
conv_integer(p)
conv_unsigned(p,b)
conv_signed(p,b)
conv_std_logic_vector(p,b)
2.2
conv_integer(p)
conv_unsigned(p,b)
conv_signed(p,b)
conv_std_logic_vector(p,b)
p
SIGNED UNSIGNED STD_ULOGIC
INTEGER
p
INTEGER SIGNED SIGNED
STD_ULOGIC UNSIGNED
b
p
INTEGER UNSIGNED STD_ULOGIC
SIGNED b
p
INTEGER UNSIGNED SIGNED
STD_LOGIC_VECTOR b
1
2
3
4
5
6
7
8
9
10
11
12
13
LIBRARY ieee;
USE ieee.std_logic_1164.all;
...
ARCHITECTURE behav OF ex_conv IS
TYPE long IS INTEGER RANGE -100 TO 100;
TYPE short IS INTEGER RANGE -10 TO 10;
SIGNAL x : short;
SIGNAL y : long;
BEGIN
...
y <= 2*x + 5;
--
...
END behav;
VHDL
: 16
x y 2*x
x y
1
2
3
4
5
6
7
8
9
10
11
12
13
12
13
2.8
: 17
+
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
...
ARCHITECTURE behav OF ex_conv2 IS
SIGNAL a: UNSIGNED (7 DOWNTO 0);
SIGNAL b: UNSIGNED (7 DOWNTO 0);
SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
...
y <= CONV_STD_LOGIC_VECTOR ((a+b), 8);
...
END behav;
...
END behav;
a b UNSIGNED 8
y
CONV_STD_LOGIC_VECTOR
VHDL
2.1 4 SIGNED
4 2 a b 4
x 4
SIGNED
1
2
3
4
5
6
7
8
9
10
11
12
13
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
-----------------------------------------ENTITY adder1 IS
PORT ( a, b : IN SIGNED (3 DOWNTO 0);
x : OUT SIGNED (3 DOWNTO 0));
END adder1;
-----------------------------------------ARCHITECTURE behav OF adder1 IS
BEGIN
x <= a + b;
END behav;
2.2
VHDL
2.2 2.1
2.2 4 SIGNED
INTEGER CONV_INTEGER
4 2 a b 4
SIGNED sum 4
INTEGER
1
2
3
4
5
6
7
8
9
10
11
12
13
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
-----------------------------------------ENTITY adder2 IS
PORT ( a, b : IN SIGNED (3 DOWNTO 0);
sum : OUT INTEGER RANGE -16 TO 15);
END adder2;
-----------------------------------------ARCHITECTURE behav OF adder2 IS
BEGIN
sum <= CONV_INTEGER(a + b);
END behav;
2.2
2.2 2.2
VHDL
: 18
: 19
2.9
2.
a
b
x
y
w
z
:
:
:
:
:
:
BIT;
STD_LOGIC;:
array1;
array2;
array3;
STD_LOGIC_VECTOR (7 DOWNTO 0);
( 1 2
1x1)
a <= x(2);
b <= x(2);
b <= y(3,5);
b <= w(5)(3);
y(1)(0) <= z(7);
x(0) <= y(0,0);
x <= "1110000";
a <= "0000000";
y(1) <= x;
w(0) <= y;
w(1) <= (7=>'1', OTHERS=>'0');
y(1) <= (0=>'0', OTHERS=>'1');
w(2)(7 DOWNTO 0) <= x;
w(0)(7 DOWNTO 6) <= z(5 DOWNTO 4);
x(3) <= x(5 DOWNTO 5);
b <= x(5 DOWNTO 5);
y <= ((OTHERS=>'0'), (OTHERS=>'0'),
(OTHERS=>'0'), "10000001");
z(6) <= x(5);
z(6 DOWNTO 4) <= x(5 DOWNTO 3);
z(6 DOWNTO 4) <= y(5 DOWNTO 3);
y(6 DOWNTO 4) <= z(3 TO 5);
y(0, 7 DOWNTO 0) <= z;
w(2,2) <= '1';
VHDL
VHDL
(Operators)
VHDL 5
3.1
(assignment)
3.1.1
SIGNAL
VARIABLE
CONSTANT
<=
:=
=>
SIGNAL
VARIABLE
CONSTANT GENERIC
VHDL
: 20
1
2
3
4
5
6
7
8
9
10
11
x <= '1';
1 x SIGNAL
x 1
y := "0000";
"0000" y
STD_LOGIC_VECTOR
w <= "10000000";
"10000000" w
STD_LOGIC_VECTOR
0
( 1 7)
(Logic)
3.1.2
BIT
STD_LOGIC
STD_ULOGIC
BIT_VECTOR
STD_LOGIC_VECTOR
STD_ULOGIC_VECTOR
AND
OR
NOT
NAND
NOR
XOR
XNOR
Z <= (A AND B)
Z <= (A OR B)
Z <= NOT(A)
Z <= (A NAND B)
Z <= (A NOR B)
Z <= (A XOR B)
Z <= (A XNOR B)
VHDL
: 21
AND OR NAND NOR XOR VHDL
NOT
1
2
3
4
5
6
7
8
--
(va+vb)
(Arithmetic)
3.1.3
INTEGER
SIGNED
UNSIGNED
STD_LOGIC_VECTOR
STD_LOGIC_VECTOR
package
std_logic_singed std_logic_unsinged LIBRARY ieee
STD_LOGIC_VECTOR
( 2.6)
+
*
/
**
MOD
REM
ABS
Z <= A+B
Z <= A-B
Z <= A*B
Z <= A/B
Z <= 4**2
Z <= A MOD B
Z <= A REM B
Z <= ABS(A)
1
2
3
4
5
6
VHDL
: 22
(Comparison)
3.1.4
=
/=
<
>
<=
>=
IF (a = b) THEN
IF (a /= b) THEN
IF (a < b) THEN
IF (a > b) THEN
IF (a <= b) THEN
IF (a >= b) THEN
1
2
3
4
5
6
7
8
9
10
11
(Concatenation)
&
3.1.5
&
Z <= A & B
1
2
3
4
5
6
7
8
9
--
VHDL
: 23
3.1
(operator)
XNOR
+ (mod,
=
>
&
* / **
rem, abs)
/=
<
<=
>=
(,,,)
: 24
(data
BIT
BIT_VECTOR
STD_LOGIC_VECTOR
STD_ULOGIC_VECTOR
INTEGER
SIGNED
type)
STD_LOGIC,
STD_ULOGIC
UNSIGNED
SIGNED UNSIGNED
(Data Attributes)
3.2
dLOW
dHigh
dLEFT
dRIGHT
dLENGTH
dRANGE
dREVERSE_RANGE
dLOW
dHIGH
dLEFT
dRIGHT
dLENGTH
dRANGE
dREVERSE_RANGE
dRANGE
1
2
3
4
d'LOW 0
d'HIGH 7
d'LEFT 7
d'RIGHT 0
d'LENGTH 8
VHDL
d'RANGE 7 DOWNTO 0
d'REVERSE_RANGE 0 TO
LOOP
1
2
3
4
5
6
7
8
9
o
4 LOOP
5 7 LOOP
(Signal Attributes)
3.3
sEVENT
sSTABLE
sACTIVE
sQUIET<time>
sLAST_EVENT
sLAST_ACTIVE
sLAST_VALUE
sEVENT
sSTABLE
sACTIVE
sQUIET<time>
SLAST_EVENT
SLAST_ACTIVE
sLAST_VALUE
s
s
s
s 1
s 1
s
IF WAIT
VHDL
: 25
1
2
3
4
5
6
7
3 clk
4 clk
5 clk
o
Generic
ARCHITECTURE GENERIC
3.4
ENTITY ...
GENERIC (parameter_name : parameter_type := parameter_value;
PORT ...
END ... ;
3.5
VHDL
3.1 Decoder 3 8
Decoder sel 3 x 8
ena 1 decoder
3.1
Decoder
3 8
VHDL
: 26
12 BEGIN
13
PROCESS (ena, sel)
14
VARIABLE temp1 : STD_LOGIC_VECTOR (x'HIGH DOWNTO 0);
15
VARIABLE temp2 : INTEGER RANGE 0 TO x'HIGH;
16
BEGIN
17
temp1 := (OTHERS => '1');
18
temp2 := 0;
19
IF (ena='1') THEN
20
FOR i IN sel'RANGE LOOP -- sel range is 2 downto 0
21
IF (sel(i)='1') THEN -- Bin-to-Integer conv.
22
temp2:=2*temp2+1;
23
ELSE
24
temp2 := 2*temp2;
25
END IF;
26
END LOOP;
27
temp1(temp2):='0';
28
END IF;
29
x <= temp1;
30
END PROCESS;
31 END generic_decoder;
32 --------------------------------------------o
+ 22
* 22 24
:= 17 18 22 24 27
<= 29
=> 17
xHIGH 14 15
3.2 3.1
VHDL 3.2 sel =
000 ( 0 ) x = 11111110 ( 254 )
sel = 010 ( 2 ) x = 11111011 (
251 )
VHDL
: 27
3.2 parityy
parity
n-1 n
GENERIC
n n
3.3 parity
1 ----------------------------------------------2 ENTITY parity_ge
en IS
3
GENE
ERIC (n : INTEGER := 7);
4
PORT
T ( input: IN BIT_V
VECTOR (n-1 DOWNTO 0);
5
output: OUT BIT_
_VECTOR (n
n DOWNTO 0
0));
6 END par
rity_gen;
7 ----------------------------------------------8 ARCHITE
ECTURE Beh
havior OF parity_ge
en IS
9 BEGIN
10
PROC
CESS (inpu
ut)
11
VARIABLE temp
p1: BIT;
12
VARIABLE temp
p2: BIT_VE
ECTOR (out
tput'RANGE
E);
13
BEGIN
14
temp1 := '0';
15
FOR i IN
I input'R
RANGE LOOP
P
16
t
temp1
:= temp1
t
XOR input(i);
17
t
temp2(i)
:= input(i
i);
18
END LOO
OP;
19
temp2(o
output'HIG
GH) := tem
mp1;
20
output <= temp2;
21
END PROCESS;
22 END Beh
havior;
3.4 3.2
VHDL
3.4
input = 0000000 ( 0 )) outpu
ut = 0000
00000 (
0 ))
input = 0000001 ( 1 )
output = 10000001 ( 81 )
VHDL
: 28
3.6
: 29
1 3
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
a
b
c
d
e
f
:
:
:
:
:
:
BIT := '1';
BIT_VECTOR (3
BIT_VECTOR (3
BIT_VECTOR (7
INTEGER RANGE
INTEGER RANGE
DOWNTO 0) := "1100";
DOWNTO 0) := "0010";
DOWNTO 0);
0 TO 255;
-128 TO 127;
1.
x1 <= a & c;
x2 <= c & b;
x3 <= b XOR c;
x1 ________
x2 ________
x3 ________
x4 ________
2.
c'LOW
d'HIGH
c'LEFT
d'RIGHT
c'RANGE
d'LENGTH
c'REVERSE_RANGE
________
______
______
______
______
______
______
______
3.
b(0) AND a
a + d(7)
NOT b XNOR c
c + d
e - f
IF (b<c) ...
IF (b>=a) ...
IF (f/=e) ...
IF (e>d) ...
e*3
5**5
f/4
e/3
d <= c
d(6 DOWNTO 3) := b
e <= d
f := 100
4. 3.1
GENERIC m n
VHDL
= 2m
: 30
WHEN/ELSE
WHEN
4.1.1
assignment (<=)
1
2
3
4
5
6
7
VHDL
: 31
WITH/ELSE condition
ELSE
4.1 Multiplexer
a
b
s1
s0
0
0
1
1
0
1
0
1
a
b
c
d
c
d
s1 s0
()
4.1 () Multiplexer
()
()
4.1 Multiplexer 4 1
4 a b c d (select) 2
s1 s0 1 y ENITY
5 8
y = a.s1.s0+ b.s1.s0 + c.s1.s0+ d.s1.s0
multiplexer y
10 16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--------------------------------------LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------------ENTITY mux41 IS
PORT (a,b,c,d,s0,s1 : IN STD_LOGIC;
y : OUT STD_LOGIC);
END mux41;
--------------------------------------ARCHITECTURE behave OF mux41 IS
BEGIN
y <= (a AND NOT s1 AND NOT s0) OR
(b AND NOT s1 AND s0) OR
(c AND s1 AND NOT s0) OR
(d AND s1 AND s0);
END behave;
---------------------------------------
VHDL
: 32
4.2 4.1
4.2 Multiplexer 2 WHEN/ELSE
Multiplexer
() 4.3()
a
b
y
c
d
s[1..0]
00
01
10
11
a
b
c
d
4.1
S[1..0]
()
4.3 () Multiplexer
()
()
4.3 5 a b c d (select)
2 s[1..0] 1 y ENITY
5 9 WHEN
y
11
1 ------------ with WHEN/ELSE --------------2 LIBRARY ieee;
3 USE ieee.std_logic_1164.all;
4 ------------------------------------------5 ENTITY mux41 IS
6
PORT ( a, b, c, d: IN STD_LOGIC;
7
sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0);
8
y: OUT STD_LOGIC);
9 END mux41;
10 ------------------------------------------11 ARCHITECTURE behave1 OF mux41 IS
12 BEGIN
13
y <= a WHEN sel="00" ELSE
14
b WHEN sel="01" ELSE
15
c WHEN sel="10" ELSE
16
d;
17 END behave1;
18 -------------------------------------------
VHDL
: 33
WITH/SELECT/WHEN
WHEN WITH/SELECT
4.1.2
identifier value
assignment
1
2
3
4
5
6
7
8
WHEN "...
WHEN value"
WHEN value
value
value1 value2
value1 value2
WITH/SELECT
value
WHEN value
VHDL
4.3
Multiplexer
WITH/SELECT/WHEN
7 sel STD_LOGIC_VECTOR 2
INTEGER WHEN/ELSE VHDL
1 ---------------------------------------------2 LIBRARY ieee;
3 USE ieee.std_logic_1164.all;
4 ---------------------------------------------5 ENTITY mux41 IS
6
PORT ( a, b, c, d: IN STD_LOGIC;
7
sel: IN INTEGER RANGE 0 TO 3;
8
y: OUT STD_LOGIC);
9 END mux41;
10 ---- Solution 1: with WHEN/ELSE --------------11 ARCHITECTURE behave1 OF mux41 IS
12 BEGIN
13
y <= a WHEN sel=0 ELSE
14
b WHEN sel=1 ELSE
15
c WHEN sel=2 ELSE
16
d;
17 END behave1;
WHEN/ELSE WITH/SELECT/WHEN
1 ---------------------------------------------2 LIBRARY ieee;
3 USE ieee.std_logic_1164.all;
4 ---------------------------------------------5 ENTITY mux41 IS
6
PORT ( a, b, c, d: IN STD_LOGIC;
7
sel: IN INTEGER RANGE 0 TO 3;
8
y: OUT STD_LOGIC);
9 END mux41;
10 ---- Solution 2: with WITH/SELECT/WHEN ---------------
VHDL
: 34
: 35
11 ARCHITE
ECTURE beh
have2 OF mux41
m
IS
12 BEGIN
13
y <=
= a WHEN 0,
14
b WHEN 1,
15
c WHEN 2,
16
d WHEN 3; -- her
re, 3 or OTHERS
O
are
e equivale
ent,
17 END beh
have2; -- for all options
o
ar
re tested anyway
4..4 Tri--state
Buf
ffer
4.4
Tri-state
T
Buffer
ena 1
(high
(
impe
edance)
VHDL
Z
VHDL
1 LIBRARY ieee;
2 USE ieee
e.std_logi
ic_1164.al
ll;
3 ---------------------------------------------4 ENTITY tri_state
t
IS
5
PORT
T ( ena: IN
I STD_LOG
GIC;
6
input: IN STD_LO
OGIC_VECTO
OR (7 DOWN
NTO 0);
7
output: OUT STD_
_LOGIC_VEC
CTOR (7 DO
OWNTO 0));
8 END tri_
_state;
9 ---------------------------------------------10 ARCHITE
ECTURE beh
have OF tr
ri_state IS
I
11 BEGIN
12
outp
put <= inp
put WHEN (ena='0') ELSE
13
(OT
THERS => 'Z');
14 END beh
have;
15 ----------------------------------------------
4..5 4.4
4
VHDL
: 36
4.5 Encoder
x[7..0]
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
()
y[2..0]
000
001
010
011
100
101
110
111
()
4.6 () Encoder ()
Encoder 2n m
4.6 Encoder 8
3 Encoder
VHDL
o
WHEN/ELSE
VHDL
WITH/SELECT/WHEN
4.5 (ALU)
4.8 () ALU
4.8() 8
5 .8()
package std_logic_unsigned LIBRARY
ieee
VHDL
: 37
()
4.8 ()
1 ---------------------------------------------2 LIBRARY ieee;
3 USE ieee.std_logic_1164.all;
4 USE ieee.std_logic_unsigned.all;
5 ---------------------------------------------6 ENTITY ALU IS
7
PORT (a, b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
8
sel: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
9
cin: IN STD_LOGIC;
10
y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
11 END ALU;
12 ---------------------------------------------13 ARCHITECTURE dataflow OF ALU IS
14 SIGNAL arith, logic: STD_LOGIC_VECTOR (7 DOWNTO 0);
15 BEGIN
16 ----- Arithmetic unit: -----17
WITH sel(2 DOWNTO 0) SELECT
18
arith <= a
WHEN "000",
19
a+1 WHEN "001",
20
a-1 WHEN "010",
21
b
WHEN "011",
22
b+1 WHEN "100",
23
b-1 WHEN "101",
24
a+b WHEN "110",
25
a+b+cin WHEN OTHERS;
26 ----- Logic unit: ----------27
WITH sel(2 DOWNTO 0) SELECT
28
logic <= NOT a WHEN "000",
29
NOT b WHEN "001",
30
a AND b WHEN "010",
31
a OR b WHEN "011",
32
a NAND b WHEN "100",
33
a NOR b WHEN "101",
34
a XOR b WHEN "110",
35
NOT (a XOR b) WHEN OTHERS;
VHDL
: 38
36 -------- Mux: --------------37
WITH
H sel(3) SELECT
S
38
y <= ar
rith WHEN '0',
39
lo
ogic WHEN OTHERS;
40 END dat
taflow;
41 ----------------------------------------------
4.9
5.5
GENERRATE
2
4.2
FOR
R/GENERATE
E
IF/GENERATE
FOR/GENNERATE
FOR
4.2.1
iddentifier
(raange)
identifieer
label
FOR//GENERATE (
FORR/GENERATEE
o
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ARCHIT
TECTURE be
ehav OF ex
x_U IS
SIGNAL
L x: BIT_V
VECTOR (7 DOWNTO 0)
);
SIGNAL
L y: BIT_V
VECTOR (15
5 DOWNTO 0);
0
SIGNAL
L z: BIT_V
VECTOR (7 DOWNTO 0)
);
...
G1: FOR
F
i IN x'RANGE
x
GE
ENERATE
z
z(i)
<= x(i) AND y(i+8);
E
END
GENERA
ATE;
...
OK: FOR i IN 0 TO 7 GE
ENERATE
output(i)<='1' WHE
EN (z(i) AND
A
y(i+1))='1' ELS
SE '0';
END GENER
RATE;
...
END behave;
VHDL
: 39
IF/GENEERATE
IF
FOR/GENER
RATE
4.2.2
1111
row(0
0)
row(1
1)
row(2
2)
row(3
3)
row(4
4)
=
=
=
=
=
0000
01111
0001
11110
0011
11100
0111
11000
1111
10000
VHDL
4
8
5
( 0 4)
4.10
4.5
1 LIBRARY ieee;
2 USE ieee
e.std_logi
ic_1164.al
ll;
3 ENTITY shifter IS
S
4
PORT
T ( inp: IN
I STD_LOG
GIC_VECTOR
R (3 DOWNT
TO 0);
5
sel: IN
I INTEGER
R RANGE 0 TO 4;
6
outp: OUT STD_L
LOGIC_VECT
TOR (7 DOW
WNTO 0));
7 END shif
fter;
8 -----------------------------------------------9 ARCHITEC
CTURE shif
fter OF sh
hifter IS
10 SUBTYPE
E vector IS
I STD_LOG
GIC_VECTOR
R (7 DOWNT
TO 0);
11 TYPE ma
atrix IS ARRAY
A
(4 DOWNTO
D
0) OF vector
r;
12 SIGNAL row: matr
rix;
13 BEGIN
13
row(0) <= "00
000" & inp
p;
14
G1: FOR i IN 1 TO 4 GE
ENERATE
15
row(i) <= row(i-1)(6 DOWN
NTO 0) & '0';
16
END GENERATE;
17
outp
p <= row(s
sel);
18 END shi
ifter;
VHDL
: 40
4.3
Multiplexer 8 1 2
2. Priority Encoder
1.
A[7..0]
W[3..0]
0000000
00000001
0000001X
000001XX
00001XXX
0001XXXX
001XXXXX
01XXXXXX
1XXXXXXX
XXX0
0001
0011
0101
0111
1001
1011
1101
1111
X=dont care
3. Binary decoder
A[2..0]
Y[7..0]
000
001
010
011
100
101
110
111
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
4.
5.
VHDL
: 41
: 42
(sequential
code)
(sequential circuit) (
)
(present state)
5.1
()
()
5.1() ()
VHDL
o
o
o
PROCESS
FUNCTION
PROCEDURE
5.1
VHDL
: 43
WAIT CASE
LOOP
VARIABLE SIGNAL
SIGNAL
()
<=
5.2
VARIABLE
PROCESS
sequential code
:=
VHDL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
IF PROCESS
IF ( WHEN)
5.3
IF 2 ELSIF
1
2
3
4
5
6
7
8
9
10
11
IF 2 ELSIF
1
2
3
4
5
6
7
8
9
10
11
12
VHDL
: 44
5..1
)
PROCESS IF
PROCCESS clkk rst
5.11
5.2 5.1
VHDL
: 45
5.2 0 9 1
1 0 9
4 (910 = 10012)
( 5 8)
PROCESS temp
VARIABLE 20
temp PROCESS
digit
5.3 1
1 --------------------------------------------2 LIBRARY ieee;
3 USE ieee.std_logic_1164.all;
4 --------------------------------------------5 ENTITY counter IS
6
PORT (clk : IN STD_LOGIC;
7
digit : OUT INTEGER RANGE 0 TO 9);
8 END counter;
9 --------------------------------------------10 ARCHITECTURE counter OF counter IS
11 BEGIN
12
count: PROCESS(clk)
13
VARIABLE temp : INTEGER RANGE 0 TO 10;
14
BEGIN
15
IF (clk'EVENT AND clk='1') THEN
16
temp := temp + 1;
17
IF (temp=10) THEN temp := 0;
18
END IF;
19
END IF;
20
digit <= temp;
21
END PROCESS count;
22 END counter;
23 ---------------------------------------------
VHDL
: 46
WAIT PROCESS
WAIT PROCESS
PROCESS
PROCESS
PROCESS
WAIT
5.4
WAIT
5.4.1
WAIT ON
WAIT ON signal1,[signal2,...];
1
2
3
4
5
6
7
8
9
10
5.4.2
-------------------------------------------PROCESS (clk,rst,sel)
BEGIN
WAIT ON clk, rst;
IF (rst='1') THEN
output <= "00000000";
ELSIF (clk'EVENT AND clk='1') THEN
output <= input;
END IF;
END PROCESS;
11 ---------------------------------------------
WAIT UNTIL
5.4.3
WAIT FOR
WAIT FOR time;
VHDL
: 47
1
2
3
4
5
6
7
8
9
10
11
12
13
: 48
-------------------------------------------------PROCESS
-- no sensitivity list
BEGIN
WAIT UNTIL (clk'EVENT AND clk='1');
IF (rst='1') THEN
WAIT FOR 10 ns;
output <= "00000000";
ELSIF (clk'EVENT AND clk='1') THEN
WAIT FOR 10 ns;
output <= input;
END IF;
END PROCESS;
--------------------------------------------------
5.4 2
5.1 WAIT ON
5.5 0 9 1 2
5.2 WAIT
1
2
3
4
5
6
7
8
9
--------------------------------------------LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------------------ENTITY counter IS
PORT (clk : IN STD_LOGIC;
digit : OUT INTEGER RANGE 0 TO 9);
END counter;
---------------------------------------------
VHDL
UTIL
10
11
12
13
14
15
16
17
18
19
20
21
22
WAIT ON WAIT
o
: 49
FOR
ON UTIL
ON FOR
UTIL FOR
CASE PROCESS
CASE WHEN
WITH/SELECT/WHEN ( 4.3) CASE
5.5
CASE identifier IS
WHEN value => assignment1, assignment2;
WHEN value => assignment1, assignment2;
...
END CASE;
CASE identifier
value (assignment)
CASE
PROCESS
1 --- sequential code -------2 ----CASE/WHEN--------------3 CASE control IS
4
WHEN "00" => x<=a; y<=b;
5
WHEN "01" => x<=b; y<=c;
6
WHEN OTHERS => x<="0000";
7
y<="ZZZZ";
8 END CASE;
------------------------------
VHDL
: 50
CASE/WHEN WITH/SELECT/WHEN
5.1
5.1 CASE/WHEN WITH/SELECT/WHEN
WITH/SELECT/WHEN
-
-
-
-
PROCESS
FUNCTION PROCEDURE
CASE/WHEN
PROCESS
FUNCTION PROCEDURE
0 9
BCD to seven segment display 5.4
(Decoder)
(common)
(common anode) (common cathode)
1
(segment)a g 5.4
VHDL 4 7 (
dot) ENTITY
0
1 a f 111 1110
16
26
5.4
VHDL
1 -------------------------------------------------2 LIBRARY
Y ieee;
3 USE iee
ee.std_log
gic_1164.a
all;
4 -------------------------------------------------5 ENTITY bcd_ssd IS
I
6
PORT
T (bcd_dat
ta : IN ST
TD_LOGIC_V
VECTOR(3 D
DOWNTO 0);
7
digit1 : OUT STD
D_LOGIC_VE
ECTOR (6 D
DOWNTO 0));
8 END bcd
d_ssd;
9 -------------------------------------------------10 ARCHITE
ECTURE beh
have OF bc
cd_sssd IS
S
11 BEGIN
12
PROC
CESS(bcd_d
data)
13
BEGIN
14 ---- BC
CD to seve
en segment
t display conversio
on: -------15
CASE bc
cd_data IS
S
16
W
WHEN
"0000
0" => digi
it1 <= "11
111110"; --7E
17
W
WHEN
"0001
1" => digi
it1 <= "01
110000"; --30
18
W
WHEN
"0010
0" => digi
it1 <= "11
101101"; --6D
19
W
WHEN
"0011
1" => digi
it1 <= "11
111001"; --79
20
W
WHEN
"0100
0" => digi
it1 <= "01
110011"; --33
21
W
WHEN
"0101
1" => digi
it1 <= "10
011011"; --5B
22
W
WHEN
"0110
0" => digi
it1 <= "10
011111"; --5F
23
W
WHEN
"0111
1" => digi
it1 <= "11
110000"; --70
24
W
WHEN
"1000
0" => digi
it1 <= "11
111111"; --7F
25
W
WHEN
"1001
1" => digi
it1 <= "11
111011"; --7B
26
W
WHEN
OTHER
RS => NULL
L;
27
END CAS
SE;
28
END PROCESS;
29 END beh
have;
30 --------------------------------------------------
5.5 5.6
5..7 0 7
0 7 3
1 ------ Solution
S
1 With a VARIABLE -------1:
2 ENTITY counter
c
IS
S
3
PORT
T ( clk, rst:
r
IN BI
IT;
4
count: OUT INTEG
GER RANGE 0 TO 7);
5 END coun
nter;
6 -------------------------------------------7 ARCHITEC
CTURE coun
nter OF co
ounter IS
8 BEGIN
9 PROCESS (clk, rst
t)
10
VARIABLE temp
p: INTEGER
R RANGE 0 TO 7;
11
BEGIN
12
IF (rst
t='1') THE
EN
13
t
temp:=0;
14
ELSIF (clk'EVENT
T AND clk=
='1') THEN
N
15
t
temp
:= te
emp+1;
VHDL
: 51
16
END IF;
17
count <=
< temp;
18
END PROCESS;
19 END cou
unter;
20 --------------------------------------------
1 ------ Solution
S
2 With SI
2:
IGNALS onl
ly ------2 ENTITY counter
c
IS
S
3
PORT
T ( clk, rst:
r
IN BI
IT;
4
count: BUFFER INTEGER
I
RA
ANGE 0 TO 7);
5 END coun
nter;
6 -------------------------------------------7 ARCHITEC
CTURE coun
nter OF co
ounter IS
8 BEGIN
9
PROC
CESS (clk, rst)
10
BEGIN
11
IF (rst
t='1') THE
EN
12
c
count
<= 0;
0
13
ELSIF (clk'EVENT
T AND clk=
='1') THEN
N
14
c
count
<= count
c
+ 1;
15
END IF;
16
END PROCESS;
17 END cou
unter;
18 --------------------------------------------
5.6 5.7
5..8
(PIISO)
(load)
( )
0
1 --------------------------------------------------2 LIBRARY
Y ieee;
3 USE iee
e.std_logi
ic_1164.al
ll;
4 --------------------------------------------------5 ENTITY piso IS
6 PORT(cl
lk,resetn,ld_shf : in std_lo
ogic; -c
clock,rese
etn,load/s
shift
7
da
ata_in
: in std_l
logic_vect
tor(4 down
nto 1); --Data
input
8
da
ata_out : out std_
_logic
--Data
o
output
9
);
10 END piso;
11 ----------------------------------------------------
VHDL
: 52
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
ARCHITE
ECTURE beh
havioral of
o piso IS
S
CONSTAN
NT reset_a
active : std_logic
s
:= '0';
BEGIN
PROC
CESS(
c
clk,
reset
tn)
VARIABLE temp
p_a,temp_b
b : std_lo
ogic_vecto
or(4 downt
to 1);
BEGIN
-------clear out
tput regis
ster----------------------IF(rese
etn = rese
et_active) THEN
t
temp_a
:= (OTHERS =>
= '0');
------ On rising
g edge of clock, lo
oad/shift in data
ELSIF (clk'EVENT
T and clk = '1') TH
HEN
-------load data
a ---------------------------------I
IF(ld_shf
= '1') TH
HEN
temp
p_a := dat
ta_in;
----------shift data------------------------------E
ELSE
temp
p_b := tem
mp_a;
temp
p_a (4) :=
= temp_b (
(3);
temp
p_a (3) :=
= temp_b (
(2);
temp
p_a (2) :=
= temp_b (
(1);
temp
p_a (1) :=
= '0';
E
END
IF;
END IF;
data_ou
ut <= temp
p_a(4);
END PROCESS;
END beh
havioral;
-----------------------------------------------------
5.7 5.8
VHDL
: 53
: 54
(Osillator)
n = 1,000,000/100,000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
= 10
LIBRARY ieee;
USE ieee.std_logic_1164.All;
USE ieee.std_logic_unsigned.All;
ENTITY freq_div IS
PORT(clk,resetn : IN STD_LOGIC;
clk_out : OUT STD_LOGIC;
q : OUT INTEGER RANGE 0 TO (10-1)
END freq_div;
);
5.8 5.9
VHDL
5.6
: 55
sj = aj XOR bj XOR cj
cj+1 = (aj AND bj)OR(aj AND cj)OR(bj AND cj)
GENERIC FOR/LOOP
5.5 00 99 2
3. 5.6
0 F 1
4. 5.9 50hz
2.
1hz
5.
12 50
)
hz
VHDL
: 56
(state)
-
( 6.1)
1.
2 (
) (pr_state) 2
(nx_state)
2.
3
1
nx_state
pr_state
6.1
VHDL
1.
(Mealy
state machine)
2.
(Moore state machine)
6.1 VHDL
VHDL
1 :
2 :
1:
(4) (5)
PROCESS CASE/WHEN
1
2
3
4
5
6
7
8
9
PROCESS pr_state
PROCESS
4 pr_state
2:
PROCESS
PROCESS ()
PROCESS
(state0)
1
VHDL
: 57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1 2
VHDL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------ENTITY <entity_name> IS
PORT ( input: IN <data_type>;
reset, clock: IN STD_LOGIC;
output: OUT <data_type>);
END <entity_name>;
----------------------------------------------------ARCHITECTURE <arch_name> OF <entity_name> IS
TYPE state IS (state0, state1, state2, state3, ...);
SIGNAL pr_state,nx_state : state;
BEGIN
---------- part 2 section: -----------------------PROCESS(input,pr_state)
BEGIN
CASE pr_state IS
WHEN state0 =>
IF (input = ...) THEN
nx_state <= state1;
END IF;
WHEN state1 =>
IF (input = ...) THEN
nx_state <= state2;
END IF;
...
END CASE;
END IF;
VHDL
: 58
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
END PROCESS;
-------------- Update state --------------------PROCESS(reset,clock)
BEGIN
IF (reset='1') THEN
pr_state <= state0;
ELSIF (clock'EVENT AND clock='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
---------- part 1 section: -----------------------PROCESS (pr_state)
BEGIN
CASE pr_state IS
WHEN state0 => output <= <value>;
WHEN state1 => output <= <value>;
...
END CASE;
END PROCESS;
END <arch_name>;
6.1 6.2
S0 S1 S2 S3
x 1
0000 1011 1100 1010
S0 S1 S2 S3
S0
6.2 6.1
6.3 6.1
VHDL
: 59
6.4 6.1
VHDL
11 15 44
46 54
6.3 6.4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------ENTITY exam_fsm_moore1 IS
PORT ( x: IN STD_LOGIC;
reset, clock: IN STD_LOGIC;
z: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );
END exam_fsm_moore1;
----------------------------------------------------ARCHITECTURE fsm OF exam_fsm_moore1 IS
TYPE state IS (S0, S1, S2, S3);
SIGNAL pr_state,nx_state : state;
BEGIN
---------- part 2 section: -----------------------PROCESS (reset, clock)
BEGIN
IF (reset='1') THEN
pr_state <= S0;
ELSIF (clock'EVENT AND clock='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
--------------------------------------------------PROCESS (x,pr_state)
BEGIN
CASE pr_state IS
WHEN S0 =>
VHDL
: 60
28
IF (x = '1') THEN
29
nx_state <= S1;
30
END IF;
31
WHEN S1 =>
32
IF (x = '1') THEN
33
nx_state <= S2;
34
END IF;
35
WHEN S2 =>
36
IF (x = '1') THEN
37
nx_state <= S3;
38
END IF;
39
WHEN S3 =>
40
IF (x = '1') THEN
41
nx_state <= S0;
42
END IF;
43
END CASE;
44
END PROCESS;
45 ---------- part 1 section: -----------------------46
PROCESS (pr_state)
47
BEGIN
48
CASE pr_state IS
49
WHEN S0 => z <= "0000";
50
WHEN S1 => z <= "1011";
51
WHEN S2 => z <= "1100";
52
WHEN S3 => z <= "1010";
53
END CASE;
54
END PROCESS;
55 END fsm;
56 ----------------------------------------------
6.2 13140
5 S0 S1 S2 S3 S4
1 3 1 4 0 6.5
x 1 reset
1 S0
S4 S0
6.5 13140
VHDL
: 61
VHDL
11 15 48
50 59
6.6
6.7
6.6 6.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------ENTITY exam_fsm_moore_13140 IS
PORT ( x: IN STD_LOGIC;
reset, clock: IN STD_LOGIC;
z: OUT INTEGER RANGE 0 TO 9 );
END exam_fsm_moore_13140;
----------------------------------------------------ARCHITECTURE fsm OF exam_fsm_moore_13140 IS
TYPE state IS (S0, S1, S2, S3, S4);
SIGNAL pr_state,nx_state : state;
BEGIN
---------- part 2 section: -----------------------PROCESS (reset, clock)
BEGIN
IF (reset='1') THEN
pr_state <= S0;
ELSIF (clock'EVENT AND clock='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
--------------------------------------------------PROCESS (x,pr_state)
BEGIN
CASE pr_state IS
WHEN S0 =>
IF (x = '1') THEN
nx_state <= S1;
END IF;
WHEN S1 =>
IF (x = '1') THEN
nx_state <= S2;
END IF;
WHEN S2 =>
IF (x = '1') THEN
nx_state <= S3;
END IF;
WHEN S3 =>
IF (x = '1') THEN
nx_state <= S4;
END IF;
WHEN S4 =>
VHDL
: 62
: 63
44
IF (x = '1') THEN
45
nx_state <= S0;
46
END IF;
47
END CASE;
48
END PROCESS;
49 ---------- part 1 section: -----------------------50
PROCESS (pr_state)
51
BEGIN
52
CASE pr_state IS
53
WHEN S0 => z <= 1;
54
WHEN S1 => z <= 3;
55
WHEN S2 => z <= 1;
56
WHEN S3 => z <= 4;
57
WHEN S4 => z <= 0;
58
END CASE;
59
END PROCESS;
60 END fsm;
pr_state
nx_state.S0_160
clk
PRE
D
ENA
CLR
nx_state.S1_147
PRE
D
nx_state.S0_160
S0
nx_state.S1_147
S1
nx_state.S2_134
S2
nx_state.S3_121
S3
nx_state.S4_108
S4
z~0
reset
ENA
CLR
nx_state.S2_134
PRE
D
ENA
CLR
nx_state.S3_121
PRE
D
ENA
CLR
nx_state.S4_108
PRE
D
ENA
CLR
reset
clock
6.7 6.2
VHDL
1' h0 --
z[3..0]
6.2 VHDL
VHDL
1
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
---------------------------------------------------4
ENTITY <entity_name> IS
5
PORT ( input: IN <data_type>;
6
reset, clock: IN STD_LOGIC;
7
output: OUT <data_type>);
8
END <entity_name>;
9
---------------------------------------------------10
ARCHITECTURE <arch_name> OF <entity_name> IS
11
TYPE state IS (state0, state1, state2, state3, ...);
12
SIGNAL pr_state,nx_state : state;
13
BEGIN
14
---------- part 2 section: -----------------------15
PROCESS(input,pr_state)
16
BEGIN
17
CASE pr_state IS
18
WHEN state0 =>
19
IF (input = ...) THEN
20
nx_state <= state1;
21
END IF;
22
WHEN state1 =>
23
IF (input = ...) THEN
24
nx_state <= state2;
25
END IF;
26
...
27
END CASE;
28
END IF;
29
END PROCESS;
30
-------------- Update state -------------------31
PROCESS(reset,clock)
32
BEGIN
33
IF (reset='1') THEN
34
pr_state <= state0;
35
ELSIF (clock'EVENT AND clock='1') THEN
36
pr_state <= nx_state;
37
END IF;
38
END PROCESS;
39 ---------- part 1 section: ---------------------40
PROCESS (input,pr_state)
41
BEGIN
42
CASE pr_state IS
43
WHEN state0 =>
44
IF (input = ...) THEN
45
output <= <value>;
46
ELSE
47
output <= <value>;
48
END IF;
49
WHEN state1 =>
50
IF (input = ...) THEN
51
output <= <value>;
52
ELSE
VHDL
: 64
53
output <= <value>;
54
END IF;
55
...
56
END CASE;
57
END PROCESS;
58 END <arch_name>;
6.3 6.8
S0 S1 S2 S3
11 2
6.8 6.3
1 LIBRARY ieee;
2 USE ieee.std_logic_1164.all;
3 ----------------------------------------------------4 ENTITY exam_fsm_mealy_1 IS
5 PORT ( x: IN STD_LOGIC;
6
reset, clock: IN STD_LOGIC;
7
z: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
8 END exam_fsm_mealy_1;
9 ----------------------------------------------------10 ARCHITECTURE fsm OF exam_fsm_mealy_1 IS
11 TYPE state IS (S0, S1, S2, S3);
12 SIGNAL pr_state,nx_state : state;
13 BEGIN
14 ---------- part 2 section: -----------------------15
PROCESS (reset, clock)
16
BEGIN
17
IF (reset='1') THEN
18
pr_state <= S0;
19
ELSIF (clock'EVENT AND clock='1') THEN
20
pr_state <= nx_state;
21
END IF;
22
END PROCESS;
23 --------------------------------------------------24
PROCESS (x,pr_state)
25
BEGIN
26
CASE pr_state IS
VHDL
: 65
27
WHEN S0 =>
28
IF (x = '1') THEN
29
nx_state <= S1;
30
END IF;
31
WHEN S1 =>
32
IF (x = '1') THEN
33
nx_state <= S2;
34
END IF;
35
WHEN S2 =>
36
IF (x = '1') THEN
37
nx_state <= S3;
38
END IF;
39
WHEN S3 =>
40
IF (x = '1') THEN
41
nx_state <= S0;
42
END IF;
43
WHEN S4 =>
44
IF (x = '1') THEN
45
nx_state <= S0;
46
END IF;
47
END CASE;
48
END PROCESS;
49 ---------- part 1 section: ---------------------50
PROCESS (x,pr_state)
51
BEGIN
52
CASE pr_state IS
53
WHEN S0 =>
54
IF (x='1') THEN
55
Z <= "1011";
56
ELSE
57
Z <= "1111";
58
END IF;
59
WHEN S1 =>
60
IF (x='1') THEN
61
Z <= "1100";
62
ELSE
63
Z <= "1111";
64
END IF;
65
WHEN S2 =>
66
IF (x='1') THEN
67
Z <= "1010";
68
ELSE
69
Z <= "1111";
70
END IF;
71
WHEN S3 =>
72
IF (x='1') THEN
73
Z <= "0000";
74
ELSE
75
Z <= "1111";
76
END IF;
77
END CASE;
78
END PROCESS;
79 END fsm;
6.9
6.10
6.1
VHDL
: 66
: 67
6.9 6.3
pr_state
Selector5
nx_state.S0_130
D
z~1
clk
PRE
Q
ENA
CLR
nx_state.S1_118
nx_state.S0_130
S0
nx_state.S1_118
S1
nx_state.S2_106
S2
nx_state.S3_94
S3
SEL[1..0]
OUT
1' h1 --
Selector6
DATA[1..0]
reset
PRE
D
ENA
CLR
SEL[1..0]
SELECTOR
OUT
1' h1 --
DATA[1..0]
nx_state.S2_106
PRE
D
SELECTOR
ENA
CLR
Selector4
nx_state.S3_94
SEL[1..0]
PRE
D
ENA
CLR
OUT
1' h1 --
DATA[1..0]
SELECTOR
reset
clock
0
1
z~0
6.10 6.3
VHDL
z[3..0]
: 68
6.3
1.
6.1
VHDL
6.1
2.
6.2 BCD
counter
6.2
3.
6.3
VHDL
6.3
VHDL
VHDL
4.
6.4
VHDL
6.4
VHDL
: 69
: 70
VHDL
VHDL
VHDL VHSIC Hardware Description Language (VHIC : Very High speed Integrated Circuit)
(High Level Language)
- VHDL .. 1981
.. 1985 VHDL
IEEE .. 1987
VHDL IEEE 1076-1987 ..1993
IEEE 1076-1993
VHDL
IEEE
VHDL
VHDL
VHDL
CPLD FPGA .1
.1
VHDL
: 71
.
VHDL
VHDL
(Object Name)
() A-Z , a-z , 0-9,
_ (underscore)
(_)
(case insensitive)
entity_name
VHDL 87 VHDL
VHDL 87 93 2002
. XNOR
VHDL 87 VHDL 93
VHDL
: 72
: 73
VHDL
From VHDL 87:
ABS
ACCESS
AFTER
ALIAS
ALL
AND
ARCHITECTURE
ARRAY
ASSERT
ATTRIBUTE
BEGIN
BLOCK
BODY
BUFFER
BUS
CASE
COMPONENT
CONFIGURATION
CONSTANT
DISCONNECT
DOWNTO
ELSE
ELSIF
END
ENTITY
EXIT
FILE
FOR
FUNCTION
GENERATE
GENERIC
GUARDED
IF
IN
INOUT
IS
LABEL
LIBRARY
LINKAGE
LOOP
MAP
MOD
NAND
NEW
NEXT
NOR
NOT
NULL
OF
ON
OPEN
OR
OTHERS
OUT
PACKAGE
PORT
PROCEDURE
PROCESS
RANGE
RECORD
REGISTER
REM
REPORT
RETURN
SELECT
SEVERITY
SIGNAL
SUBTYPE
THEN
TO
TRANSPORT
TYPE
UNITS
UNTIL
USE
VARIABLE
VHDL
WAIT
WHEN
WHILE
WITH
XOR
: 74
package STD_LOGIC_1164 is
------------------------------------------------------------------------------------ logic State System (unresolved)
----------------------------------------------------------------------------------type STD_ LOGIC is (
U,
-- Uninitialized
X,
-- Forcing Unknown
0,
-- Forcing
0
1,
-- Forcing
1
Z
-- High Impedance
W,
-- Weak Unknown
L,
-- Weak 0
H,
-- Weak 1
-
-- dont care
);
------------------------------------------------------------------------------------ Unconstrained array of std_ulogic for use with the
-- resolution function
----------------------------------------------------------------------------------type STD_ULOGIC_VECTOR is array ( NATURAL range <> ) of STD-ULOGIC;
------------------------------------------------------------------------------------ resolution function
------------------------------------------------------------------------------------ function RESOLVED ( S : STD_ULOGIC_VECTOR ) return STD_ULOGIC;
------------------------------------------------------------------------------------ *** industry standard logic type ***
----------------------------------------------------------------------------------subtype STD-LOGIC is RESOLVED STD_ULOGIC;
------------------------------------------------------------------------------------ Unconstrained array of std_logic for use in declaring
-- signal arrays
----------------------------------------------------------------------------------type STD_LOGIC_VECTOR is array ( NATURAL range <> )of STD_LOGIC;
------------------------------------------------------------------------------------ common subtypes
----------------------------------------------------------------------------------subtype X01 is RESOLVED STD_ULOGIC range X to 1;
-- (X, 0, 1)
subtype X01Z is RESOLVED STD_ULOGIC range X to Z; -- (X, 0, 1, Z;)
subtype UX01 is RESOLVED STD_ULOGIC range U to 1; -- (U, X, 0, 1)
subtype UX01Z is RESOLVED STD_ULOGIC range U to Z; -- (U, X, 0, 1, Z)
------------------------------------------------------------------------------------ overloaded logical operators
VHDL
: 75
VHDL
.
function FALLING_EDGE (signal S : STD_ULOGIC) return BOOLEAN;
------------------------------------------------------------------------------------ object contains an unknown
----------------------------------------------------------------------------------function IS_X ( S : STD_ULOGIC_VECTOR ) return BOOLEAN;
function IS_X ( S : STD_LOGIC_VECTOR ) return BOOLEAN;
function IS_X ( S : STD_ULOGIC ) return BOOLEAN;
end STD_LOGIC_1164;
VHDL
: 76
: 77
Quartus II
VHDL
Quartus II Altera
(CPLD) (FPGA)
2
o Schemetic Block diagam
Library
o Text
(VHDL) (Verilog)
VHDL
1.
Quartus II
VHDL
: 78
2.
Quartus II File / New Project Wizard
Wizard
2
1
(1) Next
(3)
(5) Next
4
6
(6)
(7)
VHDL
: 79
(8) Next
(9) Finish
1
3
(1) New
(3) OK
VHDL1.vhd
VHDL
VHDL
4.
F = ab c + b c + ad
VHDL
library ieee;
use ieee.std_logic_1164.all;
entity lab1 is
port ( a,b,c,d : in
std_logic;
f
: out std_logic);
end lab1;
architecture behavior of lab1 is
begin
f <= (a and b and not c) or (b and not c)
or (not a and d);
end behavior;
VHDL
: 80
.
5. Processing / Complier Tool Start
error warning
error
6.
simulate
File / New Other Files
Vector Waveform File
7.
Node Edit / Insert / Insert Node or Bus
Node Fider Node Finder Filter :
Pins : all List
VHDL
: 81
() Node
Simulate () >>
Simulate
8.
Edit / End Time
1.0 us
9.
Edit / Grid size 100 ns
Node b a
Edit /
Value / Clock Period 100 200 ( Period
2n Grid size )
VHDL
: 82
1
Group
Group
Group ( )
Edit / Grouping / Group
Group name Radix
10.
11.
VHDL
: 83
.
Simulation Report Waveform
Processing / Simulation Debug / Overwrite Vector Inputs with Simulation Outputs
VHDL
: 84
: 85
. , VHDL,
Armstrong J. R. and F. G. Gray, VHDL Design Representation and
Synthesis, Englewood Clis, NJ: Prentice Hall, 2nd Edition, 2000.
3. Bhasker J., VHDL Primer, Englewood Clis, NJ: Prentice Hall,3rd
Edition, 1999.
4. Chang K. C., Digital Systems Design with VHDL and SynthesisAn
Integrated Approach, Los Alamitos,CA: IEEE Computer Society
Press, 1999.
5. Hamblen J. and M. Furman, Rapid Prototyping of Digital Systems,
Boston: Kluwer Academic Publisher,2nd Edition, 2001.
6. Naylor D. and S. Jones, VHDL: A Logic Synthesis Approach,
London: Chapman & Hall, 1997.
7. Navabi Z., VHDL Analysis and Modeling of Digital Systems, New
York: McGraw-Hill, 1993.
8. Pellerin D. and D. Taylor, VHDL Made Easy, Englewood Cliffs, NJ:
Prentice Hall, 1997.
9. Perry D. L., VHDL, New York: McGraw-Hill, 2nd Edition, 1994.
10. Yalamanchili S., Introductory VHDL from Simulation to Synthesis,
Englewood Clis, NJ: Prentice Hall,2001.
11. Yalamanchili S., VHDL Starters Guide, Englewood Cliffs, NJ:
Prentice Hall, 1998.
12. Volnei A. Pedroni.,Circuit Design with VHDL,Massachusetts,MIT
Press,2004.
1.
2.
VHDL