Вы находитесь на странице: 1из 8

Digital Electronics and Design with VHDL, Volnei A.

Pedroni, ElsevierMorgan Kaufmann, 2008







Digital Electronics and Design with VHDL
Volnei A. Pedroni
ElsevierMorgan Kaufmann, 2008


Samples of VHDL Codes Presented in the Examples
Below are some of the VHDL codes from the examples in Part II of the book (Chapters 19-25).


VHDL code from Example 19.1 (Buffered multiplexer)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LI BRARY i eee;
USE i eee. st d_l ogi c_1164. al l ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY buf f er ed_mux I S
PORT ( a, b, c, d: I N STD_LOGI C_VECTOR( 7 DOWNTO 0) ;
sel : I N I NTEGER RANGE 0 TO 3;
ena: I N STD_LOGI C;
y: OUT STD_LOGI C_VECTOR( 7 DOWNTO 0) ) ;
END buf f er ed_mux;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE myar ch OF buf f er ed_mux I S
SI GNAL x: STD_LOGI C_VECTOR( 7 DOWNTO 0) ;
BEGI N
x <= a WHEN sel =0 ELSE - - Mux
b WHEN sel =1 ELSE
c WHEN sel =2 ELSE
d;
y <= x WHEN ena=' 1' ELSE - Tr i st at e buf f er
( OTHERS => ' Z' ) ;
END myar ch;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



VHDL code from Example 19.7 (Carry-ripple adder)

- - - - - - - - The component : - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY f ul l _adder I S
PORT ( a, b, ci n: I N BI T;
s, cout : OUT BI T) ;
END f ul l _adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE f ul l _adder OF f ul l _adder I S
BEGI N
s <= a XOR b XOR ci n;
cout <= ( a AND b) OR ( a AND ci n) OR ( b AND ci n) ;
END f ul l _adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- - - - - - - - Mai n code: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY car r y_r i ppl e_adder I S
GENERI C ( N : I NTEGER : = 8) ; - - number of bi t s

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

PORT ( a, b: I N BI T_VECTOR( N- 1 DOWNTO 0) ;
ci n: I N BI T;
s: OUT BI T_VECTOR( N- 1 DOWNTO 0) ;
cout : OUT BI T) ;
END car r y_r i ppl e_adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE st r uct ur al OF car r y_r i ppl e_adder I S
SI GNAL car r y: BI T_VECTOR( N DOWNTO 0) ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
COMPONENT f ul l _adder I S
PORT ( a, b, ci n: I N BI T; s, cout : OUT BI T) ;
END COMPONENT;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BEGI N
car r y( 0) <= ci n;
gen_adder : FOR i I N a' RANGE GENERATE
FA: f ul l _adder PORT MAP ( a( i ) , b( i ) , car r y( i ) , s( i ) , car r y( i +1) ) ;
END GENERATE;
cout <= car r y( N) ;
END st r uct ur al ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



VHDL code from Example 20.1 (Address decoder)

- - - - - - - - - Code f or N=3 and WHEN: - - - - - - - - - - - - - - - -
ENTI TY addr ess_decoder I S
PORT ( x: I N BI T_VECTOR( 2 DOWNTO 0) ;
y: OUT BI T_VECTOR( 7 DOWNTO 0) ) ;
END addr ess_decoder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE addr ess_decoder OF addr ess_decoder I S
BEGI N
y <=" 00000001" WHEN x=" 000" ELSE
" 00000010" WHEN x=" 001" ELSE
" 00000100" WHEN x=" 010" ELSE
" 00001000" WHEN x=" 011" ELSE
" 00010000" WHEN x=" 100" ELSE
" 00100000" WHEN x=" 101" ELSE
" 01000000" WHEN x=" 110" ELSE
" 10000000" ;
END addr ess_decoder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - Code f or ar bi t r ar y N: - - - - - - - - - - - - - - - - -
ENTI TY addr ess_decoder I S
GENERI C ( N: I NTEGER : = 3) ; - - can be any val ue
PORT ( x: I N I NTEGER RANGE 0 TO 2**N- 1;
y: OUT BI T_VECTOR( 2**N- 1 DOWNTO 0) ) ;
END addr ess_decoder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE addr ess_decoder OF addr ess_decoder I S
BEGI N
gen: FOR i I N x' RANGE GENERATE
y( i ) <= ' 1' WHEN i =x ELSE ' 0' ;
END GENERATE;
END addr ess_decoder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -




VHDL code from Example 20.2 (BCD-to-SSD converter)

- - - - - - - Package: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

PACKAGE my_f unct i ons I S
FUNCTI ON bcd_t o_ssd ( SI GNAL i nput : I NTEGER) RETURN BI T_VECTOR;
END my_f unct i ons;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PACKAGE BODY my_f unct i ons I S
FUNCTI ON bcd_t o_ssd ( SI GNAL i nput : I NTEGER) RETURN BI T_VECTOR I S
VARI ABLE out put : BI T_VECTOR( 6 DOWNTO 0) ;
BEGI N
CASE i nput I S
WHEN 0 => out put : =" 1111110" ; - - deci mal 126
WHEN 1 => out put : =" 0110000" ; - - deci mal 48
WHEN 2 => out put : =" 1101101" ; - - deci mal 109
WHEN 3 => out put : =" 1111001" ; - - deci mal 121
WHEN 4 => out put : =" 0110011" ; - - deci mal 51
WHEN 5 => out put : =" 1011011" ; - - deci mal 91
WHEN 6 => out put : =" 1011111" ; - - deci mal 95
WHEN 7 => out put : =" 1110000" ; - - deci mal 112
WHEN 8 => out put : =" 1111111" ; - - deci mal 127
WHEN 9 => out put : =" 1111011" ; - - deci mal 123
WHEN OTHERS => out put : =" 1001111" ;
- - l et t er " E" ( Er r or ) - > deci mal 79
END CASE;
RETURN out put ;
END bcd_t o_ssd;
END my_f unct i ons;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- - - - - - Mai n code: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
USE wor k. my_f unct i ons. al l ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY bcd_t o_ssd_conver t er I S
PORT ( x: I N I NTEGER RANGE 0 TO 9;
y: OUT BI T_VECTOR( 6 DOWNTO 0) ) ;
END bcd_t o_ssd_conver t er ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE decoder OF bcd_t o_ssd_conver t er I S
BEGI N
y <= bcd_t o_ssd( x) ;
END decoder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



VHDL code from Example 21.2 (Carry-lookahead adder)

- - - - - - - 4- bi t car r y- l ookahead adder : - - - - - - - - - - - - - -
LI BRARY i eee;
USE i eee. st d_l ogi c_1164. al l ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY car r y_l ookahead_adder I S
PORT ( a, b: I N STD_LOGI C_VECTOR( 3 DOWNTO 0) ;
ci n: I N STD_LOGI C;
sum: OUT STD_LOGI C_VECTOR( 3 DOWNTO 0) ;
cout : OUT STD_LOGI C) ;
END car r y_l ookahead_adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE st r uct ur e OF car r y_l ookahead_adder I S
SI GNAL G, P, c: STD_LOGI C_VECTOR( 3 DOWNTO 0) ;
BEGI N
- - - - - - - Comput at i on of G and P:
G <= a AND b;
P <= a XOR b;
- - - - - - - Comput at i on of car r y:
c( 0) <= ci n;
c( 1) <= G( 0) OR

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

( P( 0) AND ci n) ;
c( 2) <= G( 1) OR
( P( 1) AND G( 0) ) OR
( P( 1) AND P( 0) AND ci n) ;
c( 3) <= G( 2) OR
( P( 2) AND G( 1) ) OR
( P( 2) AND P( 1) AND G( 0) ) OR
( P( 2) AND P( 1) AND P( 0) AND ci n) ;
cout <= G( 3) OR
( P( 3) AND G( 2) ) OR
( P( 3) AND P( 2) AND G( 1) ) OR
( P( 3) AND P( 2) AND P( 1) AND G( 0) ) OR
( P( 3) AND P( 2) AND P( 1) AND P( 0) AND ci n) ;
- - - - - - - Comput at i on of sum:
sum<= P XOR c;
END st r uct ur e;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- - - - - - - Mai n code: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LI BRARY i eee;
USE i eee. st d_l ogi c_1164. al l ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY bi g_adder I S
PORT ( a, b: I N STD_LOGI C_VECTOR( 31 DOWNTO 0) ;
ci n: I N STD_LOGI C;
sum: OUT STD_LOGI C_VECTOR( 31 DOWNTO 0) ;
cout : OUT STD_LOGI C) ;
END bi g_adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE bi g_adder OF bi g_adder I S
SI GNAL car r y: STD_LOGI C_VECTOR( 8 DOWNTO 0) ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
COMPONENT car r y_l ookahead_adder I S
PORT ( a, b: I N STD_LOGI C_VECTOR( 3 DOWNTO 0) ;
ci n: I N STD_LOGI C;
sum: OUT STD_LOGI C_VECTOR( 3 DOWNTO 0) ;
cout : OUT STD_LOGI C) ;
END COMPONENT;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BEGI N
car r y( 0) <= ci n;
gen_adder : FOR i I N 1 TO 8 GENERATE
adder : car r y_l ookahead_adder PORT MAP (
a( 4*i - 1 DOWNTO 4*i - 4) ,
b( 4*i - 1 DOWNTO 4*i - 4) ,
car r y( i - 1) ,
sum( 4*i - 1 DOWNTO 4*i - 4) ,
car r y( i ) ) ;
END GENERATE;
cout <= car r y( 8) ;
END bi g_adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -






VHDL code from Example 22.4 (Fibonacci series generator)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY f i bonacci I S
GENERI C ( N: I NTEGER : = 16) ; - - number of bi t s
PORT ( cl k, r st : I N BI T;
f i bo_ser i es: OUT I NTEGER RANGE 0 TO 2**N- 1) ;

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

END f i bonacci ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE f i bonacci OF f i bonacci I S
SI GNAL a, b, c: I NTEGER RANGE 0 TO 2**N- 1;
BEGI N
PROCESS ( cl k, r st )
BEGI N
I F ( r st =' 1' ) THEN
b <= 1;
c <= 0;
ELSI F ( cl k' EVENT AND cl k=' 1' ) THEN
c <= b;
b <= a;
END I F;
a <= b + c;
END PROCESS;
f i bo_ser i es <= c;
END f i bonacci ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



VHDL code from Example 22.5 (Frequency meter)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY f r eq_met er I S
GENERI C ( f cl k: I NTEGER : = 5; - - cl ock f r eq.
f xmax: I NTEGER : = 15) ; - - max f x
PORT ( cl k, x: I N BI T;
t est : OUT BI T;
f x: OUT I NTEGER RANGE 0 TO f xmax) ;
END f r eq_met er ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE behavi or al OF f r eq_met er I S
SI GNAL t wi ndow: BI T;
SI GNAL t emp: I NTEGER RANGE 0 TO f xmax;
BEGI N
- - - - - Ti me wi ndow: - - - - - - - - - - - - - - - - - - - - - - - -
PROCESS ( cl k)
VARI ABLE count : I NTEGER RANGE 0 TO f cl k;
BEGI N
I F ( cl k' EVENT AND cl k=' 1' ) THEN
count : = count + 1;
I F ( count =f cl k) THEN
t wi ndow <= ' 1' ;
ELSI F ( count =f cl k+1) THEN
t wi ndow <= ' 0' ;
count : = 0;
END I F;
END I F;
END PROCESS;
- - - - - - Count er f or x: - - - - - - - - - - - - - - - - - - - - -
PROCESS ( x, t wi ndow)
VARI ABLE count : I NTEGER RANGE 0 TO 20;
BEGI N
I F ( t wi ndow=' 1' ) THEN
count : = 0;
ELSI F ( x' EVENT AND x=' 1' ) THEN
count : = count + 1;
END I F;
t emp <= count ;
END PROCESS;
- - - - - - - - Regi st er : - - - - - - - - - - - - - - - - - - - - - - - - -
PROCESS ( t wi ndow)
BEGI N
I F ( t wi ndow' EVENT AND t wi ndow=' 1' ) THEN

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

f x <= t emp;
END I F;
END PROCESS;
t est <= t wi ndow;
END behavi or al ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



VHDL code from Example 23.3 (Car alarm, version 1)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LI BRARY i eee;
USE i eee. st d_l ogi c_1164. al l ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ENTI TY car _al ar mI S
PORT ( cl k, r st , r emot e, sensor s: I N STD_LOGI C;
si r en: OUT STD_LOGI C) ;
END car _al ar m;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE f smOF car _al ar mI S
TYPE al ar m_st at e I S ( di sar med, ar med, i nt r usi on) ;
ATTRI BUTE enum_encodi ng: STRI NG;
ATTRI BUTE enum_encodi ng OF al ar m_st at e: TYPE I S "sequent i al ";
SI GNAL pr _st at e, nx_st at e: al ar m_st at e;
SI GNAL f l ag: STD_LOGI C;
BEGI N
- - - - - Fl ag: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PROCESS ( r emot e, r st )
BEGI N
I F ( r st =' 1' ) THEN
f l ag <= ' 0' ;
ELSI F ( r emot e' EVENT AND r emot e=' 0' ) THEN
f l ag <= NOT f l ag;
END I F;
END PROCESS;
- - - - - Lower sect i on: - - - - - - - - - - - - - - - - - - - -
PROCESS ( cl k, r st )
BEGI N
I F ( r st =' 1' ) THEN
pr _st at e <= di sar med;
ELSI F ( cl k' EVENT AND cl k=' 1' ) THEN
pr _st at e <= nx_st at e;
END I F;
END PROCESS;
- - - - - Upper sect i on: - - - - - - - - - - - - - - - - - - -
PROCESS ( pr _st at e, f l ag, r emot e, sensor s)
BEGI N
CASE pr _st at e I S
WHEN di sar med =>
si r en <= ' 0' ;
I F ( r emot e=' 1' AND f l ag=' 0' ) THEN
nx_st at e <= ar med;
ELSE
nx_st at e <= di sar med;
END I F;
WHEN ar med =>
si r en <= ' 0' ;
I F ( sensor s=' 1' ) THEN
nx_st at e <= i nt r usi on;
ELSI F ( r emot e=' 1' AND f l ag=' 1' ) THEN
nx_st at e <= di sar med;
ELSE
nx_st at e <= ar med;
END I F;
WHEN i nt r usi on =>

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

si r en <= ' 1' ;
I F ( r emot e=' 1' AND f l ag=' 1' ) THEN
nx_st at e <= di sar med;
ELSE
nx_st at e <= i nt r usi on;
END I F;
END CASE;
END PROCESS;
END f sm;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



VHDL code from Example 24.3 (Type I testbench for an adder)

- - - - - desi gn f i l e ( adder . vhd) : - - - - - - - - - - - - - - -
ENTI TY adder I S
PORT ( a, b: I N I NTEGER RANGE 0 TO 255;
sum: OUT I NTEGER RANGE 0 TO 511) ;
END adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ARCHI TECTURE adder OF adder I S
BEGI N
sum<= a + b;
END adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - t est f i l e ( t est _adder . vhd) : - - - - - - - - - - - -
ARCHI TECTURE t est _adder OF t est _adder I S
- - - - - component decl ar at i on: - - - - - - - - - - - - -
COMPONENT adder I S
PORT ( a, b: I N I NTEGER RANGE 0 TO 255;
sum: OUT I NTEGER RANGE 0 TO 511) ;
END COMPONENT;
- - - - - si gnal decl ar at i ons: - - - - - - - - - - - - - - -
SI GNAL a: I NTEGER RANGE 0 TO 255;
SI GNAL b: I NTEGER RANGE 0 TO 255;
SI GNAL sum: I NTEGER RANGE 0 TO 511;
BEGI N
- - - - - component i nst ant i at i on: - - - - - - - - - - -
dut : adder PORT MAP ( a=>a, b=>b, sum=>sum) ;
- - - - - si gnal a: - - - - - - - - - - - - - - - - - - - - - - - - - -
PROCESS
BEGI N
a <= 0;
WAI T FOR 50 ns;
a <= 150;
WAI T FOR 50 ns;
a <= 200;
WAI T FOR 50 ns;
a <= 250;
WAI T FOR 50 ns;
END PROCESS;
- - - - - si gnal b: - - - - - - - - - - - - - - - - - - - - - - - - - -
PROCESS
BEGI N
b <= 0;
WAI T FOR 75 ns;
b <= 120;
WAI T FOR 75 ns;
b <= 240;
WAI T FOR 50 ns;
END PROCESS;
END t est _adder ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Digital Electronics and Design with VHDL, Volnei A. Pedroni, ElsevierMorgan Kaufmann, 2008

Вам также может понравиться