Đăng ký Đăng nhập

Tài liệu So tay lap trinh vhdl

.PDF
87
160
119

Mô tả:

Vhdl
Sổ tay lập trình VHDL [email protected] Created by [email protected] 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 thi 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: A COUT B FULL_ADDER CIN SUM 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: A (3) B (3) COUT A (2) B (2) A (1) B (1) A (0) B (0) CIN FULL _ ADDER SUM (3) SUM (2) SUM (1) SUM (0) 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, nh­ng 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: L1 L2 X1 SUM A1 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ã ch­a 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. L­u ý 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 ®Ó l­u 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¸c thÓ 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 nh­ng 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 ®Ó l­u 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ô. 3.3.1. C¸c kiÓu liÖt kª ( ENUMERATION ). Mét kiÓu liÖt kª ®­îc chØ ra bëi viÖc liÖt kª c¸c gi¸ trÞ cho phÐp cña kiÓu ®ã. TÊt c¶ c¸c gi¸ trÞ ®­îc ®Þnh nghÜa bëi ng­êi dïng cã thÓ lµ c¸c tªn ®Þnh danh, hoÆc c¸c c¸c kiÓu ch÷ ký tù . Tªn ®Þnh danh thùc chÊt lµ mét tªn do ng­êi dïng ®Æt ra, ch¼ng h¹n nh­ blue, ball, monday. KiÓu ch÷ ký tù lµ kiÓu cña c¸c ký tù cã kÌm theo dÊu ngoÆc ®¬n, ch¼ng h¹n nh­ 'x', ' 0'... Có ph¸p khai b¸o c¶u chóng nh­ sau: Type type_name is (enumerattion_literal {, enumeration_literal}); Víi type_name lµ mét tªn ®Þnh danh vµ mçi enumerattion_literal hoÆc lµ mét tªn ®Þnh danh hoÆc lµ mét ch÷ ký tù. VÝ dô : type COLOR is (RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE); type DAY is (MONDAY, TUESDAY,WEDNESDAY,THURDAY,FRIDAY); type STD_LOGIC is ('U','X','0','1','Z','W','L','H','_'); Mçi mét ®Þnh danh trong mét kiÓu ®Òu cã mét vÞ trÝ nhÊt ®Þnh trong kiÓu, chóng ®­îc x¸c ®Þnh bëi thø tù xuÊt hiÖn cu¶ chóng trong kiÓu ®ã. Trong vÝ dô trªn, mÆc ®Þnh RED cã vÞ trÝ 0, ORANGE sÏ cã vÞ trÝ 1 ..... NÕu chóng ta khai b¸o mét ®èi t­îng d÷ liÖu víi kiÓu lµ COLOR vµ kh«ng ®Þnh nghÜa gi¸ trÞ khëi t¹o th× ®èi t­îng d÷ liÖu sÏ ®­îc khëi t¹o mÆc ®Þnh ë vÞ trÝ ®Çu tiªn cña kiÓu liÖt kª ( VÞ trÝ kh«ng ), trong tr­êng hîp nµy COLOR sÏ nhËn gi¸ trÞ RED. 3.3.2. KiÓu nguyªn : KiÓu nguyªn lµ c¸c kiÓu sè nguyªn, chóng ®­îc dïng cho c¸c phÐp tÝnh, c¸c chØ sè, c¸c ®iÒu khiÓn sè vßng lÆp. Trong hÇu hÕt c¸c kiÓu thùc thi trong VHDL cã d¶i tõ - 2,147,483,647 ®Õn + 2, 147, 483,647. Có ph¸p cña chóng ®­îc khai b¸o nh­ sau: type type_name is range - 2,147,483,647 to + 2, 147, 483,647; VÝ dô : type INTEGER is range - 2,147,483,647 to + 2, 147, 483,647; type COUNT is range 0 to 10; 3.3.3. C¸c kiÓu d÷ liÖu tiÒn ®Þnh nghÜa trong VHDL : IEEE ®Þnh nghÜa hai gãi d÷ liÖu STANDART vµ TEXTIO trong th­ viÖn STD. Mçi mét gãi d÷ liÖu nµy cã chøa mét lo¹t c¸c kiÓu vµ c¸c phÐp tÝnh chuÈn . D­íi ®©y lµ c¸c kiÓu d÷ liÖu ®­îc ®Þnh nghÜa trong gãi STANDARD: - BOOLEAN: Mét kiÓu liÖt kª víi hai gi¸ trÞ true vµ False, c¸c thao t¸c Logic vµ c¸c phÐp to¸n quan hÖ sÏ tr¶ vÒ gi¸ trÞ Boolean. - BIT : Mét kiÓu liÖt kª víi hai gi¸ trÞ '0' vµ '1' , c¸c phÐp tÝnh logic cã thÓ lÊy vµ tr¶ vÒ gi¸ trÞ kiÓu BIT. - CHARACTER: KiÓu liÖt kª cña c¸c m· ASCII. - INTEGER : §­îc dïng ®Ó miªu t¶ c¸c sè ©m vµ d­¬ng. D¶i ho¹t ®éng cña chóng ®­îc Ên ®Þnh tõ - 2.147.438.647 ®Õn 2.147.438.647. C¸c hµm to¸n häc nh­ céng, trõ ,nh©n, chia ®­îc hç trî kiÓu nguyªn. - NATURE: C¸c kiÓu con cña kiÓu nguyªn ®ù¬c dïng ®Ó miªu t¶ c¸c sè kiÓu tù nhiªn ( kh«ng ©m ). - POSITIVE: c¸c kiÓu con cña kiÓu nguyªn ®­îc dïng ®Ó miªu t¶ c¸c sè d­¬ng. - BIT_VECTOR : §­îc dïng ®Ó miªu t¶ mét m¶ng c¸c gi¸ trÞ kiÓu BIT. - STRING : Mét m¶ng c¸c ký tù, mét gi¸ trÞ kiÓu chuçi ®­îc ®i kÌm bëi dÊu ngoÆc kÐp. - REAL: §­îc dïng ®Ó m« t¶ c¸c kiÓu sè thùc, d¶i ho¹t ®éng tõ1.0E+38 ®Õn +1.0E+38. - KiÓu thêi gian vËt lý : M« t¶ c¸c gi¸ trÞ thêi gian ®­îc dïng trong m« pháng. Cã mét vµi kiÓu d÷ liÖu ®­îc ®Þnh nghÜa trong gãi STANDARD nh­ sau: Type BOOLEAN is ( fase, true); Type BIT is ( '0', '1' ); Type SEVERITY_LEVEL is (note, warning, error, failure ); Type INTEGER is range -2147483648 to 2147483648; Type REAL is Range -1.0E38 to 1.0E38; Type CHARACTER is (nul, soh, stx, eot, enq, ack, bel,............); 3.3.4. KiÓu m¶ng : KiÓu m¶ng lµ kiÓu cña nhãm c¸c phÇn tö cã cïng kiÓu gièng nhau. Cã hai kiÓu m¶ng nh­ sau: - KiÓu m¶ng ®­îc g¸n kiÓu . - KiÓu m¶ng kh«ng bÞ g¸n kiÓu. KiÓu m¶ng bÞ g¸n kiÓu lµ kiÓu mµ c¸c chØ sè m¶ng cña chóng ®­îc ®Þnh nghÜa t­êng minh. Có ph¸p cña chóng nh­ sau: type array_type_name is array (discrete_range) of subtype_indication; ë ®©y array_type_name lµ tªn cña kiÓu m¶ng ®­îc Ðp kiÓu, discrete_range kiÓu phô cña kiÓu nguyªn kh¸c hoÆc kiÓu liÖt kª, subtype_indication chÝnh lµ kiÓu cña mçi phÇn tö cña m¶ng. KiÓu m¶ng kh«ng bÞ g¸n kiÓu lµ kiÓu mµ chØ sè m¶ng cña chóng kh«ng bÞ chØ ra, nh­ng c¸c kiÓu chØ sè cña chóng ph¶i ®­îc chØ ra. Có ph¸p cña chóng ®­îc chØ ra nh­ sau: type array_type_name is array (type_name range <>) of subtype_indication; VÝ dô : type A1 is array ( 0 to 31) of INTEGER; type Bit_Vector is arrray (NATURAL range <>) of BIT; type STRING is array (POSITIVE range <>) of CHARACTER; A1 lµ mét m¶ng gåm ba hai phÇn tö mµ trong ®ã mçi phÇn tö lµ mét kiÓu nguyªn. Mét vÝ dô kh¸c chØ ra kiÓu Bit_vector vµ kiÓu String ®­îc t¹o ra trong chuÈn c¸c gãi STANDARD. VÝ dô : subtype B1 is BIT_VECTOR ( 3 downto 0); variable B2 : BIT_VECTOR (0 to 10); D¶i chØ sè x¸c ®Þnh sè phÇn tö trong m¶ng vµ h­íng cña chóng ( low to high | high to low ). VHDL cho phÐp khai b¸o c¸c m¶ng nhiÒu chiÒu ®Ó cã thÓ dïng ®Ó khai b¸o c¸c mÉu RAM vµ ROM. Xem vÝ dô d­íi ®©y: type Mat is array (0 to 7, 0 to 3) of BIT; constant ROM : MAT : = (( '0', '1', '0', '1'), ('1', '1', '0', '1' ), ('0', '1', '1', '1' ), ('0', '1' , '0', '0' ), ('0', '0' ,'0' , '0'), ('1', '1' , '0', '0' ), ('1', '1' , '1', '1' ), ('1', '1' , '0', '0' ); X := ROM (4,3); BiÕn X sÏ lÊy gi¸ trÞ '0' ®­îc t« ®Ëm. 3.3.5. KiÓu Record : KiÓu record lµ mét nhãm cã nhiÒu h¬n mét phÇn tö cã c¸c kiÓu kh¸c
- Xem thêm -

Tài liệu liên quan