You are on page 1of 16

Giíi thiÖu ng«n ng÷ VHDL

3.1. C¸c cÊu tróc c¬ b¶n cña ng«n ng÷ VHDL.

C¸c thµnh phÇn chÝnh x©y dùng trong ng«n ng÷ VHDL ®îc chia ra thµnh n¨m nhãm c¬ b¶n nh
sau:

- Entity

- Architecture

- Package

- Configuration.

- Library.

Entity: Trong mét hÖ thèng sè, th«ng thêng ®îc thiÕt kÕ theo mét sù xÕp chång c¸c modul, mµ mçi
Modul nµy t¬ng øng víi mét thùc thÓ thiÕt kÕ ( §îc gäi lµ Entity ) trong VHDL. Mçi mét Entity bao
gåm hai phÇn :

- Khai b¸o thùc thÓ ( Entity).

- Th©n kiÕn tróc ( Architecture Bodies )

Mét khai b¸o Entity ®îc dïng ®Ó m« t¶ giao tiÕp bªn ngoµi cña mét phÇn tö (component), nã bao gåm
c¸c khai b¸o c¸c cæng ®Çu vµo, c¸c cæng ®Çu ra cña phÇn tö ®ã. PhÇn th©n cña kiÕn tróc ®îc dïng
®Ó m« t¶ sù thùc hiÖn bªn trong cña thùc thÓ ®ã.

Packages: C¸c ®ãng gãi chØ ra th«ng tin dïng chung, mµ c¸c th«ng tin nµy ®îc sö dông bëi mét vµi
Entity nµo ®ã.

Configuration: §Þnh cÊu h×nh, nã cho phÐp g¾n kÕt c¸c thÓ hiÖn cña phÇn tö cÇn dïng nµo ®ã cña
mét thiÕt kÕ nµo ®ã cã d¹ng mét cÊu tróc vµ ®a c¸c thÓ hiÖn nµy vµo trong cÆp Entity vµ
Architecture.

Nã cho phÐp ngêi thiÕt kÕ cã thÓ thö nghiÖm ®Ó thay ®æi c¸c sù thùc hi kh¸c nhau trong mét thiÕt
kÕ. Mçi mét thiÕt kÕ d¹ng VHDL bao gåm mét vµi ®¬n vÞ th viÖn, mµ mét trong c¸c th viÖn nµy ®îc
dÞch s½n vµ cÊt trong mét th viÖn thiÕt kÕ.

3.1.1 Khai b¸o Entity:

Nh trªn ®· ®Ò cËp, phÇn khai b¸o Entity chØ ®a ra mét c¸i nh×n phÝa bªn ngoµi cu¶ mét phÇn tö mµ
kh«ng cung cÊp th«ng tin vÒ sù thùc hiÖn cña phÇn tö ®ã nh thÕ nµo. Có ph¸p khai b¸o cña mét Entity
nh sau:
Entity entity_name is

[generic (generic_declaration);]

[port (port_declaration);]

{entity_declarative_item {constants, types, signals};}

end [entity_name];

[] : DÊu ngoÆc vu«ng chØ ra c¸c tham sè cã thÓ lùa chän.

| : DÊu g¹ch ®øng hiÓn thÞ mét sù lùa chän trong sè c¸c lùa chän kh¸c.

{} : Khai b¸o mét hoÆc nhiÒu c¸c ®èi tîng, mµ c¸c ®èi tîng nµy cã thÓ ®îc ®Þnh nghÜa bëi ngêi dïng.

a. Khai b¸o Generic dïng ®Ó khai b¸o c¸c h»ng mµ chóng cã thÓ ®îc dïng ®Ó ®iÒu khiÓn cÊu tróc vµ
sù ho¹t ®éng cña Entity. Có ph¸p cña khai b¸o nµy nh sau:

generic ( constant_name : type [:=init_value]

{;constant_name: type[:=init_value]});

ë ®©y tªn h»ng constant_name chØ ra tªn cña mét h»ng d¹ng generic

(h»ng dïng chung).

KiÓu (Type) ®îc dïng ®Ó chØ ra kiÓu d÷ liÖu cña h»ng.

init_value : chØ ra gi¸ trÞ khëi t¹o cho h»ng.

b. Khai b¸o cæng ( Port ): §îc dïng ®Ó khai b¸o c¸c cæng vµo, ra cña

Entity. Có ph¸p cña khai b¸o nµy nh sau:

Port ( port_name : [mode] type [:= init_value]

{; port_name:[mode] type [:=init_value]});

port_name ®îc dïng ®Ó chØ ra tªn cña mét cæng, mode chØ ra híng

vµo ra cña tÝn hiÖu t¹i cæng ®ã. Type chØ ra kiÓu d÷ liÖu cña mét cæng vµ init_value chØ ra
gi¸ trÞ khëi t¹o cho cæng ®ã.

Chó ý ! Víi VHDL kh«ng ph©n biÖt ch÷ hoa vµ ch÷ thêng, ch¼ng h¹n nh : xyz = xYz = XYZ.

* Cã bèn mode ®îc sö dông trong khai b¸o cæng :

- in : chØ cã thÓ ®îc ®äc, nã chØ ®îc dïng cho c¸c tÝn hiÖu ®Çu vµo ( chØ ®îc phÐp n»m bªn ph¶i
phÐp g¸n )
- out : ChØ ®îc dïng ®Ó g¸n gi¸ trÞ, nã chØ ®îc dïng cho c¸c cæng ®Çu ra ( Nã chØ ®îc n»m bªn tr¸i cña
phÐp g¸n ).

- inout : Cã thÓ ®îc dïng ®Ó ®äc vµ g¸n gi¸ trÞ. Nã cã thÓ cã nhiÒu h¬n mét híng ®iÒu khiÓn ( Cã thÓ
n»m ë bªn tr¸i hoÆc bªn ph¶i phÐp g¸n ).

- Buffer : Cã thÓ ®îc dïng ®Ó ®äc vµ g¸n gi¸ trÞ. ( Cã thÓ n»m ë bªn tr¸i hoÆc bªn ph¶i phÐp g¸n ).

inout lµ mét cæng hai híng, cßn Buffer lµ mét cæng kh«ng cã híng.

c. entity_declarative_item : §îc dïng ®Ó khai b¸o c¸c h»ng, kiÓu d÷ liÖu, hoÆc tÝn hiÖu mµ nã cã
thÓ ®îc sö dông trong khi thùc hiÖn cña mét

Entity.

d. VÝ dô :

* VÝ dô vÒ khai b¸o c¸c cæng vµo ra:

entity xxx is

port ( A : in integer ;

B : in integer ;

C : out integer ;

D : inout integer ;

E : buffer integer) ;

end xxx;

architecture bhv of xxx is

begin

process (A,B)

begin

C <= A ; -- ( C©u lÖnh ®óng: A ®îc g¸n cho C ).

A <= B ; -- ( C©u lÖnh sai: A lµ mét ®Çu vµo ).

E <= D + 1; -- ( C©u lÖnh ®óng: D ë mode inout v× vËy nã cã thÓ ®îc g¸n vµ ®äc )

D <= C + 1; -- ( C©u lÖnh sai : C lµ cæng ®Çu ra nªn kh«ng thÓ ®îc ®äc cho ®Çu vµo ).

end process;

end bhv;
* VÝ dô vÒ khai b¸o Entity:

AB

COUT CIN

SUM

FULL_ADDER

H×nh trªn chØ ra mét giao diÖn cña mét bé céng mét bit. Tªn Entity cña phÇn tö nµy lµ FULL_ADDER.
Nã bao gåm c¸c cæng ®Çu vµo A, B vµ CIN.

C¸c cæng nµy cã kiÓu d÷ liÖu lµ kiÓu Bit, cßn c¸c cæng ®Çu ra SUM vµ COUT còng mang kiÓu d÷
liÖu lµ kiÓu BIT. Ng«n ng÷ VHDL dïng ®Ó diÔn t¶ giao diÖn nµy nh sau:

Entity FULL_ADDER is

port ( A, B, CIN : in BIT;

SUM, COUT : out BIT );

End FULL_ADDER ;

Chóng ta cã thÓ ®iÒu khiÓn cÊu tróc còng nh thêi gian cña mét Entity bëi viÖc sö dông c¸c h»ng
generic. VÝ dô sau sÏ chØ ra viÖc ®iÒu khiÓn nµy, trong vÝ dô nµy h»ng N ®îc dïng ®Ó chØ ra sè
bÝt cña mét bé céng. Trong qu¸ tr×nh m« pháng hoÆc qu¸ tr×nh tæng hîp, gi¸ trÞ thùc tÕ cho mçi
h»ng dïng chung generic cã thÓ bÞ thay ®æi.

entity ADDER is

generic (N : INTEGER := 4);

M : TIME := 10ns);

port ( A, B : in BIT_VECTOR (N -1 downto 0 );

CIN :in BIT;

SUM : out BIT_VECTOR (N-1 downto 0);

COUT : out BIT );

end ADDER;

Giao diÖn m« t¶ bé céng nµy nh sau:


CIN COUT

SUM (0) SUM (1) SUM (2) SUM (3)

A (3) B (3) A (2) B (2) A (1) B (1) A (0) B (0)

FULL _ ADDER

3.1.2. C¸c kiÓu kiÕn tróc ( ARCHITECTURES ):

Mét kiÕn tróc ®a ra kÕt cÊu bªn trong cña mét Entity. Mét Entity cã thÓ cã nhiÒu h¬n mét kiÕn tróc,
nã chØ ra quan hÖ gi÷a c¸c ®Çu vµo vµ ®Çu ra cña mét Entity mµ quan hÖ nµy ®îc diÔn t¶ theo c¸c
thuËt ng÷ sau :

- KiÓu hµnh vi ho¹t ®éng ( Behavioral ).

- KiÓu ho¹t ®éng cña c¸c luång d÷ liÖu ( Dataflow ).

- KiÓu cÊu tróc ( Structure ).

Mét kiÕn tróc x¸c ®Þnh chøc n¨ng cña mét Entity. Nã bao gåm phÇn khai b¸o ( Khai b¸o c¸c c¸c
tÝn hiÖu, h»ng, khai b¸o c¸c kiÓu, c¸c phÇn tö, c¸c phÇn tö, tiÕp theo lµ c¸c ph¸t biÓu(lÖnh) ®ång
thêi ).

Khai b¸o mét kiÕn tróc sö dông có ph¸p sau:

architecture architecture_name of entity_name is

{ architecture_declarative_part }

Begin

{concurrent_statement} --(lÖnh ®ång thêi)

end [ architecture_name ];

3.1.2.1. KiÕn tróc theo kiÓu hµnh vi ho¹t ®éng ( Behavioral ):

Mét kiÕn tróc kiÓu hµnh vi ho¹t ®éng chØ ra c¸c ho¹t ®éng mµ mét hÖ

thèng riªng biÖt nµo ®ã ph¶i thùc hiÖn trong mét ch¬ng tr×nh, nã gièng nh

viÖc diÔn t¶ c¸c qu¸ tr×nh ho¹t ®éng, nhng kh«ng cung cÊp chi tiÕt mµ thiÕt

kÕ ®îc thùc thi nh thÕ nµo. Thµnh phÇn chñ yÕu cña viÖc diÔn t¶ theo kiÓu

hµnh vi trong VHDL lµ process. Díi ®©y lµ vÝ dô chØ ra kiÓu diÔn t¶ theo

kiÓu hµnh vi cña mét bé céng víi tªn lµ FULL_ADDER.


architecture BEHAVIOUR of FULL_ADDER is

begin

process (A,B,CIN)

begin

if ( A ='0' and B ='0' and CIN='0' ) then

SUM <= '0';

COUT <= '0' ;

elsif

(A='0' and B='0' and CIN='1') or

(A='0' and B='1' and CIN='0') or

(A='1' and B='0' and CIN='1') then

SUM <= '1';

COUT <= '0' ;

elsif (A='0' and B='1' and CIN='1') or

(A='1' and B='0' and CIN='1') or

(A='1' and B='1' and CIN='0') then

SUM <= '0';

COUT <= '1';

elsif (A='1' and B='1' and CIN='1') then

SUM <='1';

COUT <='1';

end if;

end process;

end BEHAVIOURAL;

3.1.2.2. KiÕn tróc theo kiÓu ho¹t ®éng cña c¸c luång d÷ liÖu:
Mét kiÕn tróc kiÓu luång d÷ liÖu chØ ra mét hÖ thèng díi d¹ng m« t¶ ®ång thêi cña c¸c luång ®iÒu
khiÓn vµ dÞch chuyÓn cña d÷ liÖu. Nã sö dông theo mÉu th«ng tin hoÆc mÉu ho¹t ®éng cña luång d÷
liÖu ®ã, hoÆc mÉu thêi gian cña c¸c chøc n¨ng logic tæ hîp. Ch¼ng h¹n nh c¸c bé céng, bé so s¸nh, bé
gi¶i m·, vµ c¸c cæng logic nguyªn thuû.

VÝ dô :

architecture DATAFLOW of FULL_ADDER is

signal S : BIT;

begin

S <= A xor B ;

SUM <= S xor CIN after 10 ns;

COUT <= (A and B ) or (S and CIN) after 5ns;

end DATAFLOW;

3.1.2.3. KiÕn tróc kiÓu cÊu tróc:

Mét kiÕn tróc kiÓu cÊu tróc chØ ra sù thùc thi cÊu tróc theo d¹ng sö dông c¸c khai b¸o phÇn tö vµ c¸c
thÓ hiÖn cña phÇn tö ®ã. VÝ dô díi ®©y chØ ra sù diÔn t¶ cÊu tróc cña mét bé céng FULL_ADDER
nh trªn ®· giíi thiÖu.

Hai kiÓu phÇn tö ®îc sö dông trong vÝ dô nµy lµ HALF_ADDER vµOR_GATE.

architecture STRUCTURE of FULL_ADDER is

component HALF_ADDER

port (L1, L2 : in BIT;

CARRY, SUM : out BIT);

end component;

component OR_GATE

port (L1, L2 : in BIT;

O: out BIT);

end component;

begin
HA1: HALF_ADDER port map (A,B,N1,N2);

HA2: HALF_ADDER port map (N2,CIN,N3,SUM);

OR1 : OR_GATE port map (N1, N3,COUT);

end STRUCTURE;

ë vÝ dô nµy Entity ë møc cao nhÊt sÏ chøa hai thÓ hiÖn cña HALF_ADDER vµ mét thÓ hiÖn
cña OR_GATE. ThÓ hiÖn HALF_ADDER cã thÓ bÞ r»ng buéc víi mét Entity kh¸c, mµ Entity nµy bao
gåm mét cæng XOR vµ mét cæng AND. Giao tiÕp cña mét bé céng HALF_ADDER cã d¹ng nh
sau:

X1

A1

L1

L2

SUM

CARRY

Bé céng nµy gåm cã hai ®Çu vµo L1 vµ L2 , ®Çu ra lµ SUM vµ CARRY.

KiÓu BIT lµ kiÓu tiÒn ®Þnh nghÜa cña ng«n ng÷ VHDL, nã cã kiÓu liÖt kª d¹ng ch÷ ký tù nh
'0' vµ '1'.

3.1.3. C¸c kiÓu ®ãng gãi ( Packages ):

Môc ®Ých chÝnh cña Package lµ tËp hîp c¸c phÇn tö cã thÓ bÞ chia sÎ bëi hai hay nhiÒu ®¬n vÞ thiÕt
kÕ ( Hay c¸c phÇn tö cã thÓ dïng chung ®îc). Nã cã chøa c¸c kiÓu d÷ liÖu, c¸c h»ng, c¸c ch¬ng tr×nh
con cã thÓ dïng chung gi÷a c¸c thiÕt kÕ. Mét Package cã cha hai phÇn chÝnh:

- PhÇn khai b¸o Package.

- PhÇn th©n Package.

3.1.3.1. PhÇn khai b¸o Package.

Mét khai b¸o Package ®îc dïng ®Ó cÊt gi÷ hµng lo¹t c¸c khai b¸o dïng chung, ch¼ng h¹n nh c¸c
phÇn tö, c¸c kiÓu, c¸c thñ tôc, c¸c hµm. C¸c khai b¸o nµy cã thÓ nhËp vµo c¸c ®¬n vÞ thiÕt kÕ kh¸c bëi
viÖc sö dông mét mÖnh ®Ò use.

VÝ dô :

package EXAMPLE_PACK is
type SUMMER is ( MAY, JUN, JUL, AUG, SEP);

component D_FLIP_FLOP

port (D, CK:in BIT;

Q, QBAR: out BIT)

end component;

constant PIN2PIN_DELAY:TIME:=125ns;

function IN2BIT_VEC(INT_VALUE:INTEGER)

return BIT_VECTOR;

end EXAMPLE_PACK;

ë vÝ dô nµy tªn cña package ®îc khai b¸o lµ EXAMPLE_PACK. Nã cã chøa c¸c khai b¸o kiÓu, phÇn
tö, h»ng, vµ hµm. Lu ý r»ng ho¹t ®éng cña hµm INT2BIT_VEC kh«ng xuÊt hiÖn ë trong khai b¸o
gãi, mµ chØ cã giao tiÕp cña hµm xuÊt hiÖn. ViÖc ®Þnh nghÜa, hay th©n cña hµm chØ xuÊt
hiÖn trong th©n cña ®ãng gãi ( Body Package ).

Gi¶ sö r»ng ®ãng gãi nµy ®· ®îc dÞch vµ t¹o thµnh mét th viÖn thiÕt kÕ vµ ®îc gäi lµ DESIGN
_LIB . Xem xÐt viÖc dïng mÖnh ®Ò use ®Ó sö dông chóng díi ®©y:

library DESIGN_LIB;

use DESIGN_LIB.EXAMPLE_PACK.all

Entity RX is.........

MÖnh ®Ò library DESIGN_LIB cho phÐp th viÖn thiÕt kÕ DESIGN_LIB ®îc phÐp dïng trong phÇn
m« t¶ nµy, ®iÒu ®ã cã nghÜa lµ tªn DESIGN_LIB cã thÓ ®îc sö dông. MÖnh ®Ò use tiÕp theo sÏ
lÊy tÊt c¶ c¸c khai b¸o cã trong Package EXAMPLE_PACK vµo trong khai b¸o Entity cña RX.
Cã nghÜa lµ ta cã thÓ chän lùa c¸c khai b¸o tõ trong mét c¸c khai b¸o cña mét ®ãng gãi vµo trong mét
®¬n vÞ thiÕt kÕ kh¸c. VÝ dô :

library DESIGN_LIB;

use DESIGN_LIB.EXAMPLE_PACK.D_FLIP_FLOP;

use DESIGN_LIB.EXAMPLE_PACK.PIN2PIN_DELAY;

architecture RX_STRUCTURE of RX is.........


Hai mÖnh ®Ò use ë vÝ dô nµy nh»m t¹o ra khai b¸o cho D_FLIP_FLOP vµ khai b¸o h»ng cho
PIN2PIN_DELAY ®îc phÐp sö dông trong th©n kiÕn tróc.

3.1.3.2. PhÇn khai b¸o th©n Package.

Sù kh¸c biÖt gi÷a khai b¸o Package vµ th©n Package cã cïng môc ®Ých nh khai b¸o cña mét Entity vµ
phÇn th©n kiÕn tróc Architecture cña chóng.

Có ph¸p khai b¸o cña Package ®îc khai b¸o nh sau:

package package_name is

{package_declarative_item}

end [package_name ];

package body package_name is

{package_declarative_item}

end [package_name]

Mét th©n package ®îc dïng ®Ó lu c¸c ®Þnh nghÜa cña mét hµm vµ thñ tôc, mµ c¸c hµm vµ thñ tôc nµy
chóng ®· ®îc khai b¸o trong phÇn khai b¸o package t¬ng øng. V× vËy phÇn th©n package lu«n ®îc
kÕt hîp víi phÇn khai b¸o cña chóng, h¬n n÷a mét phÇn khai b¸o package lu«n cã Ýt nhÊt mét

phÇn th©n package kÕt hîp víi chóng.

VÝ dô : package EX_PKG is

subtype INT8 is integer range 0 to 255;

constant zero : INT8:=0;

procedure Incrementer (variable Count : inout INT8);

end EX_PKG;

package body EX_PKG is

procedure Incrementer (variable Data : inout INT8) is

begin

if (Count >= MAX ) then

Count:=ZERO;

else Count:= Count +1;


end if;

end Incrementer;

end EX_PKG;

3.1.4. §Þnh cÊu h×nh ( Configurations ) :

Mçi mét Entity bao gåm nhiÒu kiÕn tróc kh¸c nhau. Trong qu¸ tr×nh thiÕt kÕ, ngêi thiÕt kÕ cã
thÓ muèn thö nghiÖm víi c¸c sù biÕn ®æi kh¸c nhau cña thiÕt kÕ b»ng viÖc chän lùa c¸c
kiÓu kiÕn tróc kh¸c nhau.

Configuration cã thÓ ®îc sö dông ®Ó cung cÊp mét sù thay thÕ nhanh c¸cthÓ hiÖn cña c¸c phÇn tö
( Component ) trong mét thiÕt kÕ d¹ng cÊu tróc. Có ph¸p khai b¸o cña Configuration nµy nh sau:

Configuration configuration_name of entity_name is

{configuration_decalarative_part}

For block_specification

{use_cluse}

{configuration_item}

end for;

Víi mét Entity cña bé céng FULL_ADDER nh ®· giíi thiÖu ë phÇn

trªn, ë vÝ dô nµy ta cã thÓ sö dông chóng trong phÐp ®Þnh cÊu h×nh nh sau:

configuration FADD_CONFIG of FULL_ADDER is

For STRUCTURE

for HA1, HA2 : HALF_ADDER use entity

burcin.HALF_ADDER(structure);

for OR1: OR_GATE use Entity burcin.OR_GATE;

end for;

end FADD_CONFIG;

ë ®©y tªn cña phÐp ®Þnh cÊu h×nh lµ tuú ý, ë vÝ dô nµy ta lÊy tªn lµ

FADD_CONFIG, cßn víi dßng lÖnh For STRUCTURE chØ ra kiÕn tróc

®îc ®Þnh cÊu h×nh vµ ®îc sö dông víi thùc thÓ Entity FULL_ADDER. Gi¶

sö r»ng chóng ta ®· dÞch hai thùc thÓ HALF_ADDER vµ OR_GATE thµnh


th viÖn víi tªn lµ burcin vµ sö dông chóng trong vÝ dô trªn.

3.1.5. C¸c th viÖn thiÕt kÕ :

KÕt qu¶ cña viÖc biªn dÞch VHDL lµ chóng ®îc cÊt gi÷ bªn trong c¸c

th viÖn ®Ó dïng cho bíc m« pháng tiÕp theo, ®iÒu nµy gièng nh viÖc sö

dông mét phÇn tö ®· ®îc khai b¸o trong mét thiÕt kÕ kh¸c. Mét th viÖn

thiÕt kÕ cã thÓ chøa c¸c ®¬n vÞ th viÖn nh sau:

- C¸c ®ãng gãi (PACKAGES)

- C¸c thùc thÓ Entity

- C¸c kiÓu kiÕn tróc Architectures

- C¸c phÐp ®Þnh cÊu h×nh Configurations.

Chó ý! VHDL kh«ng hç trî c¸c th viÖn theo thø bËc. B¹n cã

thÓ cã nhiÒu th viÖn nh theo ý muèn nhng kh«ng ®îc khai b¸o

lång nhau!

§Ó më mét th viÖn vµ truy cËp chóng nh mét Entity ®· ®îc biªn

dÞch trong mét thiÕt kÕ VHDL míi, ®iÒu ®Çu tiªn cÇn lµm lµ ph¶i khai b¸o

tªn th viÖn. Có ph¸p cña chóng nh sau:

Library library_name : [path/directory_name];

B¹n cã thÓ truy cËp c¸c ®¬n vÞ ®· ®îc biªn dÞch tõ mét th viÖn VHDL

tíi ba møc nh sau:

library_name.Package_name.item_name

VÝ dô: Gi¶ sö chóng ta t¹o mét ®ãng gãi ®Ó cÊt mét h»ng mµ h»ng nµy

®îc sö dông trong nhiÒu thiÕt kÕ, sau ®ã dÞch nã vµ cÊt vµo trong th viÖn

víi tªn lµ burcin .

Package my_pkg is

constant delay: time:=10ns;

end my_pkg;
TiÕp ®Õn chóng ta gäi my_pkg ®Ó sö dông chóng trong thiÕt kÕ díi

®©y:

architecture DATAFLOW of FULL_ADDER is

signal S : BIT;

begin

S <= A xor B;

SUM <= S xor CIN after burcin.my_pkg.delay;

COUT <= (A and B ) or (S and CIN) after 5ns;

end DATAFLOW;

3.2. C¸c ®èi tîng d÷ liÖu :

Mét ®èi tîng d÷ liÖu gi÷ mét gi¸ trÞ cña mét kiÓu nhÊt ®Þnh. Trong

VHDL cã ba líp ®èi tîng d÷ liÖu :

- C¸c h»ng ( constants ).

- C¸c biÕn ( Variables ).

- C¸c tÝn hiÖu ( Signals ).

Líp cu¶ mét ®èi tîng ®îc chØ ra bëi mét tõ kho¸ vµ nã ®îc chØ ra ë

®iÓm b¾t ®Çu cña mét khai b¸o.

3.2.1. C¸c h»ng ( Constant ):

Mét h»ng nã lµ mét ®èi tîng mµ nã ®îc khëi t¹o ®Ó chØ ra mét gi¸ trÞ

cè ®Þnh vµ nã kh«ng bÞ thay ®æi. Khai b¸o h»ng ®îc phÐp khai b¸o trong

c¸c ®ãng gãi, c¸c Entity, c¸c kiÕn tróc, c¸c ch¬ng tr×nh con, c¸c khèi, vµ

trong ph¸t biÓu cña c¸c qu¸ tr×nh processes.

Có ph¸p khai b¸o chóng nh sau :

Constant constant_name {constant_name}: type [:= value];

VÝ dô :

constant YES : BOOLEAN:= TRUE;


constant CHAR7: BIT_VECTOR (4 downto 0 ):="00111";

constant MSB: INTEGER:=5;

3.2.2. C¸c biÕn :

C¸c biÕn ®îc dïng ®Ó lu d÷ liÖu t¹m thêi, chóng chØ ®îc phÐp khai

b¸o trong ph¸t biÓu Process hoÆc c¸c ch¬ng tr×nh con.

VÝ dô :

variable X,Y : BIT;

variable TEMP: BIT_VECTOR (8 downto 0) ;

variable DELAY : INTERGER range 0 to 15:=5;

3.2.3. C¸c kiÓu tÝn hiÖu ( Signal ):

TÝn hiÖu ®îc dïng ®Ó kÕt nèi c¸c Entity cña thiÕt kÕ l¹i víi nhau vµ

trao ®æi c¸c gi¸ trÞ biÕn ®æi ë trong ph¸t biÓu process. Chóng cã thÓ ®îc

xem nh c¸c d©y dÉn hay c¸c bus nèi ë trong m¹ch thùc tÕ. TÝn hiÖu cã thÓ

®îc khai b¸o trong c¸c ®ãng gãi ( Package ), trong c¸c khai b¸o Entity,

trong khai b¸o kiÕn tróc (Architecture), trong c¸c khèi ( Block ). Víi c¸c

tÝn hiÖu ®îc khai b¸o trong c¸c package th× tÝn hiÖu nµy ®îc gäi lµ tÝn hiÖu

toµn côc ( C¸c thiÕt kÕ cã thÓ sö dông chóng ), c¸c tÝn hiÖu ®îc khai b¸o

trong Entity lµ tÝn hiÖu toµn côc trong mét Entity, t¬ng tù víi tÝn hiÖu ®îc

khai b¸o trong mét kiÕn tróc, nã lµ tÝn hiÖu dïng chung trong mét kiÕn tróc

®ã.

Có ph¸p cña chóng cã d¹ng nh sau :

Signal Signal_name {,signal_name}: type [:=value];

VÝ dô :

signal BEEP : BIT:= '0';

signal TEMP: STD_LOGIC_VECTOR (8 downto 0);

signal COUNT: INTEGER range 0 to 100 :=5;


3.3. C¸c kiÓu d÷ liÖu:

TÊt c¶ c¸c ®èi tîng d÷ liÖu trong VHDL cÇn ph¶i ®îc ®Þnh nghÜa víi

mét kiÓu d÷ liÖu. Mét khai b¸o kiÓu ph¶i chØ ra tªn vµ d¶i cña kiÓu ®ã. Khai

b¸o kiÓu d÷ liÖu chóng ®îc phÐp khai b¸o trong phÇn khai b¸o c¸c ®ãng

gãi, trong phÇn khai b¸o Entity, trong phÇn khai b¸o kiÕn tróc, trong phÇn

khai b¸o c¸c ch¬ng tr×nh con vµ trong phÇn khai b¸o c¸c Process. C¸c kiÓu

d÷ liÖu bao gåm c¸c kiÓu sau:

- KiÓu liÖt kª

- KiÓu nguyªn.

- C¸c kiÓu d÷ liÖu tiÒn ®Þnh nghÜa.

- KiÓu m¶ng.

- KiÓu b¶n ghi.

- KiÓu d÷ liÖu chuÈn logic.

- KiÓu d÷ liÖu cã dÊu vµ kh«ng dÊu.

- C¸c kiÓu phô.

Trong mét Entity cã thÓ cã mét vµi cÊu tróc, v× vËy c¸c chi tiÕt cu¶ viÖc

®Þnh cÊu h×nh cho phÐp ngêi thiÕt kÕ chän c¸c Entity vµ kiÕn tróc cña nã.

Có ph¸p khai b¸o cña chóng nh sau:

for instantiation _list : component _name

use Entity library_name. Entity _name [( architecture _name)] ;

NÕu chØ cã mét kiÕn tróc architecture th× tªn architecture cã thÓ bÞ bá

qua. Xem thªm mét vÝ dô díi ®©y:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

Entity FULL_ADDER is
port (A, B, Cin : in STD_LOGIC;

Sum, Cout : out STD_LOGIC);

End FULL_ADDER;

Architecture IMP of FULL_ADDER is

component XOR_gate

port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );

end component ;

component AND2_gate

port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );

end component;

component OR2_gate

port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );

end component;

signal N1, N2, N3: STD_LOGIC;

for U1 : XOR_gate use entity work.XOR_gate (BHV);

for others : XOR_gate use entity work.XOR_gate (BHV);

for all : AND2_gate use entity work.AND2_gate (BHV);

for U5 : OR2_gate use entity work.OR2_gate (BHV);

begin

U1 : XOR_gate port map (I0 => A, I1=> B, O=>N1);

U2 :AND2_gate port map ( A, B, N2);

U3 :AND2_gate port map ( Cin, N1, N3);

U4 :XOR_gate port map ( Cin, N1, Sum);

U5 :OR2_gate port map ( N3, N2, Cout);

end IMP;

You might also like