Trộn lẫn thành phần Hardware và Software (Phần 6)

pdf 10 trang phuongnguyen 2260
Bạn đang xem tài liệu "Trộn lẫn thành phần Hardware và Software (Phần 6)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftron_lan_thanh_phan_hardware_va_software_phan_6.pdf

Nội dung text: Trộn lẫn thành phần Hardware và Software (Phần 6)

  1. http:// www.diachiweb.com Ví du: khai baùo configuration cho thöïc theå HALF_ADDER : Library CMOS_LIB, MY_LIB ; Configuration HA_BINDING of HALF_ADDER is For HA_STRUCTURE For X1 : XOR2 Use entity CMOS_LIB.XOR_GATE(dataflow); End for; For A1 : AND2 Use configuration MY_LIB.AND_CONFIG; End for; End for; End HA_BINDING; Phaùt bieåu ñaàu tieân laø meänh ñeà library vôùi caùc teân thö vieän CMOS_LIB vaø MY_LIB ñöôïc khai baùo configuration tham khaûo ñeán . teân cuûa configuration laø HA_BINDING vaø xaùc ñònh daïng cho thöïc theå HALF_ADDER. Phaùt bieåu keá laø xaùc ñònh thaân architecture HA_STRUCTURE ( moâ taû ôû phaàn 2.3.1 ) ñöôïc choïn cho configuration naøy . Architecture naøy goàm 2 component , 2 component baét buoäc phaûi coù Phaùt bieåu ñaàu tieân ( for X1: end for ), lieân quan giöõa component instantiation cuûa nhaõn X1 tôùi moâ taû thöïc theå trong boä entity_architecture . Khai baùo thöïc theå XOR_GATE vaø architecture dataflow , taát caû coù trong thö vieän thieát keá CMOS_LIB. Töông töï vôùi component instantiation A1 xuaát hieän 1 thöïc theå xaùc ñònh baèng khai baùo configuration , vôùi teân AND_CONFIG coù trong thö vieän MY_LIB. Khoâng coù haønh vi hoaëc ngöõ nghóa moâ phoûng keát hôïp vôùi khai baùo configuration. Noù ñôn thuaàn xaùc ñònh raøng buoäc 1 configuration vôùi 1 entity . Raøng buoäc ñoù ñöôïc thi haønh laøm chi tieát quaù trình moâ phoûng khi thieát keá , vaø ñeán khi thieát keá xong thì toång hôïp laïi. 2.5 KHAI BAÙO GOÙI (PACKAGE) : Moät khai baùo package söû duïng chöùa taäp hôïp nhöõng khai baùo chung vaøo 1 goùi nhö caùc component , caùc type , caùc procedure, vaø caùc function . Caùc khai baùo naøy coù theå ñöa vaøo ñôn vò thieát keá khaùc ,söû duïng meänh ñeà use . Ví duïï: Package EXAMBLE_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:= 125 ns ; Function INT2BIT_VEC (INT_VALUE : INTEGER ) Return BIT_VECTOR; End EXAMBLE_PACK ; Teân cuûa package laø EXAMBLE_PACK , thaân noù bao goàm khai baùo type , component ,constant,vaø function . rieâng haønh vi cuûa function noù khoâng xuaát hieän beân trong khai baùo package , chæ xuaát hieän phaàn giao tieáp vôùi function . Phaàn ñònh nghóa hoaëc phaàn thaân cuûa function thì xuaát hieän trong thaân goùi ( xem phaàn sau ). Moâ phoûng package naøy ñöôïc bieân dòch vaøo thö vieän thieát keá goïi laø DESIGN_LIB . Bao goàm caùc meänh ñeà sau coù lieân quan tôùi khai baùo entity : Library DESIGN_LIB;
  2. http:// www.diachiweb.com Use DESIGN_LIB.EXAMBLE_PACK.all; Entity RX is Meänh ñeà library ñöôïc taïo töø teân cuûa thö vieän DESIGN_LIB maø quaù trình moâ taû nhìn thaáy ñöôïc , coøn coù meänh ñeà use vaø quan troïng laø khai baùo .all trong package EXAMBLE_PACK , taát caû ñöôïc ñöa vaøo khai baùo thöïc theå RX. Ngoaøi ra coøn coù theå choïn caùc khai baùo töø khai baùo package ñöa vaøo 1 ñôn vò thieát keá khaùc . Ví duï : Library DESIGN_LIB; Use DESIGN_LIB.EXAMBLE_PACK.D_FLIP_FLOP; Use DESIGN_LIB.EXAMBLE_PACK.PIN2PIN_DELAY; Architecture RX_STRUCTURE of RX is Hai meänh ñeà use taïo töø khai baùo component cho D_FLIP_FLOP vaø haèng PIN2PIN_DELAY maø architecture coù theå nhìn thaáy ñöôïc . Töông töï choïn khai baùo töøng phaàn trong package baèng caùc teân choïn Ví duï : Library DESIGN_LIB; Package ANOTHER_PACKAGE is Function POCKET_MONEY (MONTH DESIGN_LIB.EXAMBLE_PACK.SUMMER) return INTEGER; constant TOTAL_ALU: INTEGER ; end ANOTHER_PACKAGE; Kieåu khai baùo SUMMER trong package EXAMBLE_PACK laø söû duïng trong package hieän haønh xaùc ñònh baèng caùch choïn teân. Trong tröôøng hôïp naøy , meänh ñeà use laø khoâng caàn thieát . Package ANOTHER_PACKAGE goàm 1 khai baùo constant vôùi giaù trò cuûa noù khoâng xaùc ñònh , maø noù chæ moâ taû cho deferred constant(haèng chöa coù giaù trò). Giaù trò cuûa constant thay ñoåi theo thaân pakage töông öùng . 2.6 THAÂN GOÙI (pakage body): Thaân goùi söû duïng ñeå chöùa nhöõng ñònh nghóa cuûa function vaø procedure , chuùng ñöôïc khai baùo trong package töông öùng vaø cuõng nhö hoaøn thaønh khai baùo constant cho deferred constant töông öùng xuaát hieän trong khai baùo package . Package body luoân gaén lieàn vôùi khai baùo khoái , 1 khai baùo package duy nhaát chæ coù 1 package body lieân keát vôùi noù . Ñieàu naøy khaùc vôùi söï lieân keát architecture vaø entity ,nhieàu architecture coù theå lieân keát vôùi 1 khai baùo entity . Package body bao goàm caùc khai baùo khaùc (seõ noùi kó trong phaàn 7). Ñaây laø package body cuûa khai baùo package EXAMBLE_PACK trong phaàn tröôùc : Ví duï : package body EXAMBLE_PACK is function INT2BIT_VEC (INT_VALUE: INTEGER) return BIT_VECTOR is begin Behavior of function described here. End INT2BIT_VEC; End EXAMBLE_PACK;
  3. http:// www.diachiweb.com Teân cuûa package body phaûi truøng vôùi teân cuûa khai baùo package body maø noù lieân keát . Ñoù laø ñieàu quan troïng , chuù yù noù chæ khoâng caàn thieát neáu nhö trong khai baùo package töông öùng khoâng coù caùc function , procedure vaø deferred constant . 2.7. PHAÂN TÍCH MOÂ HÌNH( Model Analysis ) Moät thöïc theå ñöôïc moâ taû trong VHDL ,böôùc ñaàu tieân ñeå quaù trình coù hieäu löïc laø söï phaân tích. Phaân tích laáy file bao goàm 1 hoaëc nhieàu ñôn vò thieát keá 1 ñôn vò thieát keá laø 1 khai baùo entity , 1 architecture , 1 khai baùo configuration, 1 khai baùo package hoaëc 1 package body vaø chuùng ñöôïc bieân dòch vaøo trong 1 form trung chuyeån. Ñònh daïng(format) naøy khoâng ñònh nghóa baèng ngoân ngöõ . Trong suoát quaù trình bieân dòch ,boä phaân tích kieåm tra cuù phaùp vaø ngöõ nghóa . Söï phaùt sinh form trung chuyeån ñöôïc chöùa vaøo trong moät thö vieän thieát keá roû raøng maø quaù trình thieát keá coi nhö laø thö vieän ñang laøm vieäc . Thö vieän thieát keá ñöôïc ñònh vò trong moâi tröôøng host ( maùy tính hoå trôï cho heä thoáng VHDL ) maø ôû ñaây moâ taû bieân dòch ñöôïc löu tröõ.Moãi thö vieän thieát keá coù 1 caùi teân logic söû duïng moâ taû cho thö vieän trong VHDL . Aùnh xaï caùc teân logic naøy vaøo vuøng löu tröõ vaät lyù ,laø vuøng daønh rieâng bôûi moâi tröôøng host vaø khoâng ñònh nghóa baèng ngoân ngöõ.Ví duï moät thö vieän thieát keá coù theå ñöôïc hieän thöïc nhö 1 thö muïc trong moâi tröôøng host vôùi thö muïc naøy chöùa caùc file laø caùc ñôn vò thieát keá. Söï aùnh xaï teân vaät lyù tôùi teân logic laø söï aùnh xaï beân trong file , ñoù laø ñieàu heä thoáng VHDL caàn phaûi phieân dòch . Baát kyø thö vieän thieát keá naøo cuõng coù theå toàn taïi trong quaù trình moâ phoûng . Taát caû caùc thö vieän thieát keá coù theå cuøng toàn taïi , 1 phaàn cuûa thö vieän laø thieát keá thö vieän laøm vieäc vôùi teân logic laø WORK . boä phaân tích ngoân ngöõ bieân dòch nhöõng ñaëc taû vaøo trong thö vieän naøy . Taïi 1 thôøi ñieåm chæ 1 thö vieän ñöôïc caäp nhaät vaøo . Hình 6 chæ ra quaù trình bieân dòch : VHDL analyzer Intermediate Design units format VHDL design file Working library WORK A design is : LIB2 LIB1 - entity declaration - architecture body - configuration declaration - package declaration - package body STD LIB3 Hình 6: The compilation process. Thö vieän thieát keá vôùi teân goïi laø STD ñöôïc ñònh nghóa tröôùc trong moâi tröôøng VHDL.Thö vieän naøy coù 2 package: STANDARD vaø TEXTIO . Package STANDARD goàm nhöõng khai baùo cho taát caû caùc kieåu ñònh nghóa tröôùc cuûa ngoân ngöõ ( BIT,TIME,INTEGER ), package TEXTIO bao goàm caùc procedure vaø caùc function caàn thieát ñeå ñoïc vaø ghi trong quaù trình hoaït ñoäng. ÔÛ ñaây coøn coù IEEE package chuaån ,goïi STD_LOGIC_1164 ,package naøy ñònh nghóa moät kieåu nine_value logic,goïi laø STD_ULOGIC vaø caùc kieåu con , ñieàu khieån caùc function vaø caùc
  4. http:// www.diachiweb.com tieän ích khaùc . Tieâu chuaån naøy goïi laø IEEE.STD_1164-1993.moâi tröôøng hots phaûi ñöôïc trôï giuùp bôûi goùi naøy goïi laø thö vieän thieát keá. 2.8. MOÂ PHOÛNG (simulation): Chæ moät moâ taû moâ hình ñöôïc bieân dòch thaønh coâng vaøo trong 1 hoaëc nhieàu thö vieän thieát keá , böôùc keá tieáp trong quaù trình thöïc hieän laø söï moâ phoûng, taát caû nhöõng thaønh phaàn ôû möùc thaáp nhaát cuûa noù ñöôïc moâ taû ôû möùc haønh vi. Söï moâ phoûng coù theå thöïc hieän 1 trong 2 phaàn sau : + Moät ñoâi söï khai baùo entity vaø architecture body. + Moät configuration. Quaù trình moâ phoûng goàm 2 böôùc lôùn : 1.Elaboration phase : trong phaàn naøy kieán truùc cuûa entity ñöôïc môû roäng vaø lieân keát , caùc component höôùng ñeán caùc entity trong thö vieän , vaø giai ñoaïn ñaàu entity ñöôïc xaây döïng nhö laø moâ hình maïng haønh vi ñeå ñoïc cho quaù trình moâ phoûng . Ngoaøi ra coøn cung caáp vuøng caùc tín hieäu , caùc bieán vaø khai baùo haèng trong thieát keá . Giaù trò ban ñaàu gaùn cho bieán vaø haèng . Caùc file seõ ñöôïc môû neáu noù ñöôïc chæ ra trong khai baùo cuûa chuùng. 2. Initialization phase : caùc tín hieäu aûnh höôûng ñöôïc tính toaùn , tín hieäu aån ñöôïc gaùn trò ,caùc process ñöôïc thöïc thi cho ñeán khi bò treo vaø thôøi gian moâ phoûng ñöôïc set laø 0 ns. Söï moâ phoûng khôûi ñaàu bôûi taêng thôøi gian ñeán khi coù söï kieän keá. Caùc giaù trò maø ñöôïc saép trình töï ñöôïc gaùn ñeán nhöõng tín hieäu taïi thôøi gian naøy,neáu giaù trò cuûa tín hieäu thay ñoåi vaø neáu tín hieäu ñoù toàn taïi trong danh saùch ñoä nhaïy cuûa process ,process seõ thöïc thi cho tôùi khi bò treo . Keát thuùc moâ phoûng khi xuaát hieän söï vi phaïm cuûa söï xaùc nhaän(assertion), phuï thuoäc vaøo quaù trình hieän thöïc cuûa heä thoáng VHDL ( phaùt bieåu assertion ñöôïc noùi roû trong phaàn sau) hoaëc khi thôøi gian quaù lôùn so vôùi ñònh nghóa cuûa ngoân ngöõ . 3.1 ÑÒNH DANH (IDENTIFIERS): Coù hai loaïi cuûa identifiers trong VHDL goàm : identifiers cô baûn vaø identifiers môû roäng .Moät identifiers cô baûn trong VHDL bao goàm nhöõng phoái hôïp cuûa 1 hoaëc nhieàu kyù töï. Nhöõng kyù töï cho pheùp laø moät letter hoa (A Z), moät letter thöôøng (a z), moät soá digit (0 9) hoaëc kyù töï gaïch döôùi( _ ) .Kyù töï ñaàu tieân trong moät indentifier cô baûn phaûi laø 1 letter vaø kyù töï cuoái cuøng khoâng theå laø kyù töï gaïch döôùi .Chöõ hoa vaø chöõ thöôøng ñöôïc xem nhö ñoàng nhaát khi söû duïng trong 1 identifier cô baûn , ví duï nhö : Count, COUNT, CouNT taát caû ñeàu ñöôïc xem nhö nhau trong identifier cô baûn . Töông töï , hai kyù töï gaïch döôùi khoâng theå xuaát hieän lieân tieáp nhau. Moät soá ví duï cho identifiers cô baûn : DRIVE_BUS, SelectSignal, RAM_Address- SET_CK_HIGH, CONST32_59, r2d2 Moät identifier môû roäng laø phoái hôïp cuûa nhöõng kyù töï ñöôïc vieát giöõa hai daáu (\ \).Coù theå söû duïng nhöõng kyù töï baát kyø ,ñöa vaøo nhöõng kyù töï nhö :,!,@,’, and $ .Trong moät identifier môû roäng ,kyù töï hoa vaø kyù töï thöôøng ñöôïc phaân bieät laø khaùc nhau roõ raøng .Moät soá ví duï identifier môû roäng : \TEST\, \-25\, \2FOR$\, \~Q\, \process\, \~$ \, \7400TTL\, \Count\ khaùc \COUNT\ Lôøi chuù giaûi phaûi ñöôïc ñaët tröôùc baèng hai daáu (-) lieân tieáp nhau ,lôøi chuù thích thöôøng ñaët ôû cuoái doøng hoaëc ñaët taïi moät vò trí baát kyø . Ví duï : entity UART is end; This comment starts after the entity declaration
  5. http:// www.diachiweb.com Ngoân ngöõ xaùc ñònh moät taäp töø (words) ñònh tröôùc ,.Nhöõng töø naøy cuõng coù theå goïi laø töø khoùa(keywords),coù moät yù nghóa roõ raøng trong ngoân ngöõ vaø do ñoù khoâng theå söû duïng nhö nhöõng identifier cô baûn 3.2 ÑOÁI TÖÔÏNG DÖÕ LIEÄU : (data objects) Moät ñoái töôïng döõ lieäu giöõ moät giaù trò cuûa moät kieåu döõ lieäu roõ raøng. Noù ñöôïc taïo bôûi yù nghóa cuûa moät khai baùo ñoái töôïng.Ví duï nhö : variable COUNT : INTEGER ; Keát quaû taïo ra moät ñoái töôïng döõ lieäu goïi laø COUNT, noù coù theå giöõ giaù trò nguyeân. Ñoái töôïng COUNT cuõng ñöôïc khai baùo laø lôùp bieán (variable class ) Moãi moät ñoái töôïng döõ lieäu phuï thuoäc vaøo moät trong boán lôùp sau : 1. Constant : moät ñoái töôïng cuûa lôùp constant (thöôøng ñöôïc goïi laø constant) coù theå giöõ moät giaù trò duy nhaát cuûa kieåu ñaõ cho. Giaù trò naøy ñöôïc gaùn cho moät constant tröôùc khi baét ñaàu , vaø giaù trò khoâng theå thay ñoåi trong suoát quaù trình. ñeå khai baùo moät constant trong moät subprogram, giaù trò seõ ñöôïc gaùn cho constant ôû moãi thôøi ñieåm chöông trình con (subprogram) ñöôïc goïi 2. Variable (bieán) : moät lôùp ñoái töôïng bieán ( thöôøng goïi laø variable) coù theå giöõ moät loaïi giaù trò duy nhaát cuûa kieåu ñaõ cho .Tuy nhieän trong tröôøng hôïp naøy giaù trò khaùc nhau coù theå ñöôïc gaùn vaøo bieán taïi nhöõng thôøi ñieåm khaùc nhau (söû duïng bieåu thöùc gaùn bieán ) 3. Signal (tín hieäu) : Moät ñoái töôïng tuøy thuoäc vaøo lôùp tín hieäu thöôøng goïi laø signal ,giöõ 1 loaït caùc giaù trò ,nhöõng giaù trò naøy bao goàm giaù trò hieän haønh cuûa tín hieäu vaø 1 taäp hôïp caùc giaù trò töông lai coù theå coù(xuaát hieän trong tín hieäu) .Nhöõng giaù trò töông lai coù theå ñöôïc gaùn cho 1 tín hieäu (söû duïng cho moät bieåu thöùc gaùn tín hieäu ) 4. File (taäp tin) :1 ñoái töôïng tuøy thuoäc vaøo lôùp taäp tin (thöôøng goïi laø file).Bao goàm nhöõng giaù trò lieân tieáp nhau .Nhöõng giaù trò coù theå ñöôïc ñaët hoaëc ñöôïc vieát vaøo 1 file söû duïng cho nhöõng chöông trình con ñoïc vaø nhöõng chöông trình con vieát töông öùng . Tín hieäu coù theå ñöôïc coi nhö nhöõng daây trong maïch ,khi nhöõng bieán vaø haèng gioáng nhau ôû nhöõng bieán ñeám trong nhöõng ngoân ngöõ laäp trình baäc cao nhö C hoaëc PASCAL .Tín hieäu laø kieåu maåu söû duïng ñeå moâ hình nhöõng daây vaø FLIP-FLOPS.Khi nhöõng bieán vaø haèng ñöôïc söû duïng ñeå moâ hình haønh vi maïch ñieän .1 file ñöôïc söû duïng nhö moät kieåu maãu taäp tin trong moâi tröôøng chính . Moät khai baùo ñoái töôïng ñöôïc söû duïng cho vieäc khai baùo 1 ñoái töôïng ,kieåu cuûa noù vaø lôùp cuûa noù .Moät giaù trò coù theå ñöôïc gaùn tuøy yù cho moät tín hieäu ,1 bieán hoaëc 1 haèng .Ñoái vôùi 1 file ,moät khai baùo ñoái töôïng coù theå coù thoâng tin roõ raøng trong vieäc laøm theá naøo ñeå môû 1 file CONSTANT DECLARATIONS : Nhöõng thí duï khai baùo haèng nhö sau : constant RISE_TIME:TIME:=10 ns constant BUS_WIDTH:INTEGER:=8; Khaibaùo ñaàu tieân laø khai baùo ñoái töôïng RISE_TIME noù coù theå chöùa giaù trò cuûa kieåu thôøi gian (moät kieåu ñöôïc khai baùo tröôùc trong ngoân ngöõ )vaø giaù trò ñöôïc gaùn vaøo ñoái töôïng taïi thôøi ñieåm laø 10 ns , haèng thöù hai ñöôïc khai baùo laø BUS_WIDTH,vôùi kieåu soá nguyeân ,giaù trò laø 8 VARIABLE DECLARATIONS : Moät soá thí duï khai baùo bieán laø : variable CTRL_STATUS :BIT_VECTOR (10 downto 0); variable SUM :INTEGER range 0 to 100 :=10; variable FOUND,DONE:BOOLEAN;
  6. http:// www.diachiweb.com Khai baùo ñaàu tieân chæ roõ laø moät ñoái töôïng bieán CTRL_STATUS laø moät daõy coù 11 phaàn töû ,vôùi moãi phaàn töû trong daõy coù kieåu laø BIT.Trong khai baùo thöù hai giaù trò ñaàu theå hieän ñöôïc gaùn vaøo bieán SUM,Khi tröôøng hôïp baét ñaàu ,SUM seõ coù giaù trò khôûi ñaàu laø 10 .Neáu khoâng coù giaù trò ñaàu roõ raøng cho moïi bieán .Giaù trò maëc ñònh seõ ñöôïc söû duïng nhö moät giaù trò khôûi ñaàu .Giaù trò maëc ñònh naøy laø T’LEFT.Khi T laø ñoái töôïng vaø ‘LEFT laø thuoäc tính ñöôïc xaùc ñònh tröôùc cuûa kieåu ñaõ ñöôïc ñaët ra cho giaù trò cöïc traùi trong taäp hôïp giaù trò phuï thuoäc coù kieåu T .Trong khai baùo thöù ba,giaù trò khôûi ñaàu seõ ñöôïc gaùn cho FOUND vaø DONE trong tröôøng hôïp giaù trò khôõi ñaàu laø sai (sai laø giaù trò cöïc traùi cuûa kieåu BOOLEAN xaùc ñònh tröôùc ).Neáu kieåu cuûa moät bieán laø kieåu daõy hoaëc 1 kieåu record giaù trò khôûi ñaàu cuûa moãi phaàn töû trong daõy cuûa CTRL_STATUS laø ‘0’ SIGNAL DECLARATIONS Sau ñaây laø nhöõng ví duï cuûa khai baùo tín hieäu : signal CLOCK:BIT; signal DATA_BUS :BIT_VECTOR (0 to 7); signal GATE_DELAY:TIME:=10 ns; Vieäc giaûi thích cuûa nhöõng khai baùo tín hieäu thì gioáng ñoái vôùi khai baùo bieán .Khai baùo tín hieäu ñaàu tieân laø khai baùo tín hieäu CLOCK cuûa kieåu BIT vaø laáy giaù trò ñaàu laø ‘0’ (0 laø giaù trò cöïc traùi cuûa kieåu BIT).Khai baùo tín hieäu thöù ba laø khai baùo ñoái töôïng tín hieäu GATE_DELAYcuûa kieåu thôøi gian coù giaù trò ñaàu laø 10 ns FILE DECLARATION: Moät file ñöôïc khai baùo söû duïng khai baùo file vôùi cuù phaùp khai baùo file laø : file file_nam :file-type-name [ [open mode ] is string-expression]; chuoãi bieåu thöùc ñöôïc laøm saùng toû bôûi moâi tröôøng chính nhö teân vaät lyù cuûa file .Kieåu ghi chuù trong tröôøng hôïp taäp tin ñaõ ñöôïc söû duïng nhö loaïi chæ ñöôïc ñoïc hoaëc chæ ñöôïc vieát ,hoaëc trong loaïi noái. Ví duï: Type STD_LOGIhC_FILE is file of STD_LOGIC_VECTOR; Type BIT_FILE is file of BIT_VECTOR; file STIMULUS :TEXT open READ_MODE is “usr /home/james/add.vec”; file PAT1,PAT2:STD_LOGIC_FILE OTHER WAYS TO DECLARE OBJECTS: Khoâng coù ñoái töôïng naøo trong moät moâ taû VHDL ñöôïc taïo ra roõ raøng ñeå söû duïng khai baùo ñoái töôïng .Nhöõng ñoái töôïng khaùc nhö moät trong nhöõng ñoái töôïng sau : 1. nhöõng coång cuûa thöïc theå .taát caû coång laø ñoái töôïng tín hieäu 2. generics cuûa thöïc theå ,chuùng laø ñoái töôïng khoâng ñoåi 3. Thoâng soá hình thöùc cuûa haøm vaø thuû tuïc .Thoâng soá haøm laø haèng hoaëc tín hieäu ,thoâng soá thuû tuïc coù theå phuï thuoäc vaøo baát kyø lôùp ñoái töôïng naøo . Ví duï sau minh hoïa cho khai baùo aån trong moät phaùt bieåu laëp FOR : for COUNT in 1 to 10 loop SUM:=SUM+COUNT; end loop; Trong phaùt bieåu laëp FOR naøy ,COUNT laø moät haèng ñöôïc khai baùo aån cuûa kieåu integer trong khoaûng töø 1 ñeán 10 .Vì theá khoâng theå khai baùo roõ raøng .Haèng COUNT ñöôïc taïo ra khi vaøo voøng laëp ñaàu tieân vaø khoâng coøn toàn taïi khi thoaùt khoûi voøng laëp. 3.3 .DATA TYPES :
  7. http:// www.diachiweb.com Moãi ñoái töôïng döõ lieäu trong VHDL coù theå giöõ 1 giaù trò phuï thuoäc vaøo taäp giaù trò ñöôïc xaùc ñònh bôûi vieäc söû duïng moät khai baùo kieåu .Moät kieåu laø 1 teân keát hôïp vôùi 1 taäp giaù trò vaø moät taäp taùc vuï .Nhöõng kieåu naøo ñoù vaø nhöõng taùc vuï ñöôïc trình baøy trong ñoái töôïng cuûa kieåu ñoù thì ñöôïc ñònh nghóa tröôùc trong ngoân ngöõ .Thí duï kieåu integer laø 1 kieåu vôùi taäp giaù trò laø nhöõng soá nguyeân trong vuøng xaùc ñònh ñöôïc cung caáp bôûi heä thoáng VHDL .Vuøng toái thieåu phaûi ñöôïc cung caáp laø -(231-1) ñeán (231-1).Caùc taùc vuï thöôøng xuyeân söû duïng laø :+, -, *, / vaø boolean co hai giaù trò laø true vaø false cuøng vôùi nhöõng taùc vuï OR,AND,NOR vaø NOT.Khai baùo cho 1 kieåu ñöôïc ñònh nghóa tröôùc ñöôïc khai baùo trong goùi chuaån standar.Nhöõng toaùn töû cho nhöõng kieåu naøy ñöôïc ñònh nghóa tröôùc trong ngoân ngöõ .Ngoaøi ra coøn nhöõng kieåu khaùc coù theå toàn taïi trong ngoân ngöõ ñöôïc phaân thaønh 4 loaïi sau : 1. Scalar type (kieåu voâ höôùng):nhöõng giaù trò phuï thuoäc vaøo nhöõng kieåu xuaát hieän theo thöù töï lieân tuïc 2. Composite type (ña hôïp):goàm nhöõng phaàn töû kieåu ñôn leû,kieåu daõy hoaëc nhöõng phaàn töû kieåu khaùc nhau 3. Access type(con troû) :Cung caáp theâm vaøo ñoái töôïng ñaõ cho theo ñöôøng con troû 4. File type(kieåu file): Cung caáp theâm vaøo ñoái töôïng chöùa ñöïng moät daõy giaù trò cuûa kieåu ñaõ cho Coù theå nhaän ñöôïc nhöõng kieåu con töø nhöõng kieåu ñöôïc ñònh nghóa tröôùc do ngöôøi söû duïng ñònh nghóa. 3.3.1.SUBTYPE :Kieåu con laø 1 kieåu vôùi ñieàu kieän xaùc ñònh moät taäp giaù trò con trong moät ñoái töôïng ñöôïc goïi laø kieåu cô sôû .Moät kieåu ñöôïc goïi laø kieåu con neáu noù phuï thuoäc kieåu cô sôû vaø thoûa maõn ñieàu kieän khai baùo kieåu con Ví duï : Subtype my-integer is integer rang 48 to 156 type digit is (‘0’,’1’,’2,’3’,’4,’5,’6,’7,’8,’9’); subtype MIDDLE is DIGIT range ‘3’ to’7’; 3.3.2 .SCALAR TYPE: Nhöõng giaù trò cuûa kieåu naøy ñöôïc saép xeáp coù nghóa laø taùc vuï quan heä coù theå ñöôïc söû duïng cho nhöõng giaù trò naøy .Thí duï BIT laø moät kieåu scalar type vaø bieåu thöùc ‘0’<’1’ laø ñuùng vaø coù giaù trò laø true .Coù 4 loaïi kieåu voâ höôùng khaùc nhau ñoù laø : enumeration 1. integer 2. physical 3. floating point Enumeration (Kieåu lieät keâ) :Moät khai baùo kieåu lieät keâ ñònh nghóa moät kieåu taäp hôïp nhöõng giaù trò ñöôïc ngöôøi söû duïng ñònh nghóa bao goàm nhöõng ñaëc tính vaø nhöõng kyù töï .Ví duï : type MVL is (‘U’,’0’,’1’,’Z’) Traät töï caùc giaù trò xuaát hieän trong khai baùo kieåu lieät keâ ñònh nghóa thöù töï cuûa chuùng .Coù nghóa laø khi söû duïng caùc toaùn töû quan heä 1 giaù trò luoân nhoû hôn giaù trò beân phaûi cuûa noù trong traät töï 1. Integer : Ñöôïc ñònh nghóa laø 1 kieåu taäp hôïp nhöõng giaù trò rôi vaøo vuøng soá nguyeân ñöôïc chæ ra .Ví duï type index is range 0 to 15; type WORD_LENGTH is range 31 downto 0;
  8. http:// www.diachiweb.com Nhöõng giaù trò kieåu nguyeân ñöôïc goïi laø tham soá nguyeân 3. Floating point : Kieåu floating point coù moät taäp giaù trò trong vuøng soá thöïc .Ví duï type TTL_VOLTAGE is range -5.5 to -1.4; type REAL_DATA is range 0.0 to 31.9 Giôùi haïn ñieàu kieän xaùc ñònh trong 1 khai baùo kieåu floating point phaûi laø coá ñònh hoaëc nhöõng bieåu thöùc tính cuïc boä . floating point literal laø giaù trò cuûa kieåu floating point .Moät vaøi Ví duï cuûa floating point literals laø: 16.26 , 0.0 ,0.002 , 3_1.4_2 floating point literals khaùc nhau töø literals soá nguyeân (integer literals) bôûi söï coù maët cuûa daáu (.) (the dot), duø vaäy 0 laø moät literal nguyeân khi 0.0 laø moät floating point literal . floating point literals cuõng coù theå ñöôïc trình baøy theo moät kieåu soá muõ.Soá muõ ñöôïc trình baøy thaønh moät luyõ thöøa cuûa 10 vaø giaù trò soá muõ phaûi laø moät soá nguyeân .Ví duï nhö : 62.3E-2 50.E+2 soá nguyeân vaø floating point literals cuõng coù theå ñöôïc vieát treân heä khaùc heä thaäp phaân (decimal).Heä coù theå laø baát kyø töø 2 ñeán 16 .Do ñoù literals coù theå goïi laø based literals .Trong tröôøng hôïp naøy ,soá muõ bieåu dieãn thaønh 1 luõy thöøa treân moät heä ñöôïc giaûi thích .Cuù phaùp cho moät based literals laø : base# based _value# form 1 base# based _value#E exponent form 2 Moät soá ví duï : 2#101_101_000# bieåu dieãn cho (101101000)2 =(360) trong heä thaäp phaân 16#FA# bieåu dieãn cho (FA)16 = (11111010)2 = (250) trong heä thaäp phaân 1 16#E#E1 bieåu dieãn cho (E)16 *(16 )=14*16=(224) trong heä thaäp phaân 2#110.01# bieåu dieãn cho (110.01)2 =(6.25) trong heä thaäp phaân Heä vaø giaù trò soá muõ treân 1 based literal phaûi ôû trong moät kyù hieäu thaäp phaân Chæ coù duy nhaát kieåu floating point laø REAL .Vuøng cuûa REAL laø söï leä thuoäc vaøo boå sung moät laàn nöõa ,nhöng ít nhaát phaûi traûi trong vuøng giôùi haïn töø -1.0E38 ñeán +1.0E38,vaø ñoä chính xaùc phaûi ít nhaát 6 soá thaäp phaân . 4.physical types Moät kieåu physical chöùa ñöïng nhöõng giaù trò töôïng tröng cho kích thöôùc cuûa moät vaøi tieâu chuaån ño löôøng ,nhö thôøi gian ,ñieän aùp, luoàng ñieän .Giaù trò cuûa kieåu naøy bieåu dieãn nhö moät boäi soá nguyeân cuûa 1 base unit .Ví duï cuûa moät khai baùo kieåu physical laø : Type CURRENT is rang 0 to 1E9 units nA; nano_ampere uA =1000nA; micro_ampere mA =1000uA; milli_ampere Amp =1000mA; ampere end units; Subtype FILTER_CURRENT is CURRENT range 10 uA to 5 mA; CURRENT xaùc ñònh cho 1 kieåu physical ,noù chöùa ñöïng giaù trò töø 0 nA cho ñeán 109nA.côsôû unit laø moät nano_ampere ,khi taát caû nhöõng caùi khaùc ñeàu laáy töø units.Vò trí soá cuûa gía trò laø soá cuûa côsôû units töôïng tröng bôûi giaù trò naøy .Ví duï :2uA coù moät vò trí 2000 khi 100nA coù vò trí 100.Vuøng cuûa giaù trò coù theå bao goàm caû nhöõng giaù trò aâm.
  9. http:// www.diachiweb.com Ví duï : Type STEP_TYPE is range -10 to +10 units STEP; base unit STEP2=2 STEP; chuyeån hoùa töø unit STEP5=5 STEP; chuyeån hoùa töø unit end units; Giaù trò trong kieåu naøy töø -10 STEP cho ñeán +10 STEP .Nhöõng unit khaùc cuûa kieåu naøy laø STEP2 vaø STEP5 Giaù trò cuûa kieåu physical(vaät lyù ) ñöôïc goïi laø Physical literals. Physical literals ñöôïc vieát nhö moät integer hoaëc 1 floating point literal theo sau bôûi teân unit.Ví duï :”10 nA” laø literal physical(löu yù caùch khoaûng 10 vaø nA laø caàn thieát ),khi “Amp” cuõng laø 1 literal ,noù nguï yù laø 1 Amp . Kieåu vaät lyù chæ ñöôïc khai baùo tröôùc laø TIME,vaø naèm trong vuøng giaù trò cô sôû (base unit).Vuøng naøy leä thuoäc vaøo boå sung moät laàn nöõa ,nhöng ít nhaát phaûi traûi trong vuøng giôùi haïn töø -(231-1) ñeán +(231-1).Ñaây cuõng laø moät kieåu subtype physical khai baùo tröôùc .Khai baùo cuûa kieåu TIME vaø kieåu con DELAY_LENGHT xuaát hieän trong goùi chuaån (STANDARD) 3.3.3 COMPOSITE TYPE Comment: Kieåu ña hôïp töôïng tröng cho söï taäp hôïp caùc giaù trò .Coù hai kieåu ña hôïp :kieåu daõy ( array type ) vaø kieåu record ( record type ) . Moät kieåu array ñaïi dieän cho moät taäp hôïp cuûa caùc giaù trò phuï thuoäc vaøo moät kieåu duy nhaát, maët khaùc ,kieåu record ñaïi dieän cho moät taäp caùc giaù trò phuï thuoäc vaøo caùc kieåu khaùc nhau .Moät ñoái töôïng phuï thuoäc vaøo kieåu ña hôïp cho neân ñaïi dieän cho moät taäp hôïp cuûa caùc ñoái töôïng con (subobjects),moät trong moãi phaàn töû cuûa kieåu ña hôïp.Kieåu ña hôïp coù theå coù giaù trò phuï thuoäc vaøo kieåu voâ höôùng (scalar type), moät kieåu ña hôïp, hoaëc moät kieåu con troû (access type) ARRAY TYPES: Moät ñoái töôïng kieåu daõy bao goàm nhöõng phaàn töû coù cuøng moät kieåu .Ví duï moät khai baùo daõy nhö sau : type ADDRESS_WORD is array (0 to 63) of BIT; type DATA_WORD is array (7 downto 0) of MVL; type ROM is array (0 to 125) of DATA_WORD; type DECODE_MATRIX is array (POSITIVE range 15 downto 1, NATURAL range 3 downto 0 ) of MVL; subtype NATURAL is INTEGER range 0 to INTEGER’HIGHT; subtype POSITIVE is INTEGER range 0 to INTEGER’HIGHT ; Ví duï nhöõng kieåu khai baùo söû duïng nhöõng kieåu treân laø : variable ROM_ADDR:ROM; signal ADDRESS_BUS:ADDRESS_WORD; constant DECODER:DECODE_MATRIX; variable DECODE_VALUE:DECODE_MATRIX; ADDRESS_BUS laø moät ñoái töôïng daõy thöù nguyeân (one_dimensional)noù bao goàm 64 phaàn töû coù kieåu BIT,ROM_ADDR laø moät ñoái töôïng daõy thöù nguyeân (one_dimensional)noù bao goàm 126 phaàn töû moãi phaàn töû laø ñoái töôïng daõy khaùc chöùa ñöïng 8 phaàn töû cuûa kieåu MVL .Vaäy ta ñaõ coù daõy cuûa daõy .
  10. http:// www.diachiweb.com Nhöõng phaàn töû cuûa daõy coù theå ñöôïc gia taêng bôûi vieäc lieät keâ giaù trò trong moät daõy .Thí duï :ADDRESS_BUS(26) chuyeån ñeán phaàn töû thöù 27 cuûa ñoái töôïng daõy ADDRESS_BUS,ROM_ADDR(10)(5) chuyeån ñeán giaù trò (cuûa kieåu MVL) taïi index 5 cuûa ñoái töôïng döõ lieäu ROM_ADDR(10) (cuûa kieåu DATA_WORD),DECODER(5,2) chuyeån ñeán giaù trò cuûa phaàn töû taïi coät thöù hai vaø haøng thöù naêm cuûa ñoái töôïng daõy 2 chieàu(two_dimensional).Löu yù söï khaùc nhau trong ñòa chæ cuûa 1 kieåu daõy 2 chieàu vaø daõy cuûa moät kieåu laø moät daõy cuûa moät kieåu khaùc . Ngoân ngöõ cho pheùp moät soá tuøy yù vôùi kích côõ coù theå hôïp vôùi moät daõy .Noù cuõng cho pheùp moät ñoái töôïng daõy coù theå ñöôïc gaùn cho moät ñoái töôïng daõy khaùc coù cuøng kieåu coù bôûi do söû duïng moät phaùt bieåu gaùn .Pheùp gaùn coù theå taïo ra moät daõy nguyeân veïn .hoaëc moät phaàn cuûa daõy . Ví duï : ROM_ADDR(5):=”01000100” gaùn cho moät phaàn töû cuûa moät daõy DECODE_VALUE:=DECODER; moät kieåu daõy nguyeân veïn ñaõ ñöôïc gaùn ADDRESS_BUS(8 to 15) ) of ADDRESS_WORD; subtype STACK is STACK_TYPE (0 to 63); type OP_TYPE is (ADD,SUB,MUL,DIV); type TIMING is array(OP_TYPE range ) of TIME; Nhöõng Ví duï cuûa vieäc khai baùo cuûa nhöõng kieåu ñoái töôïng treân laø : variable FAST_STK :STACK_TYPE ( -127 to 127); constant ALU_TIMING:TIMING:= ADD,SUB,MUL ((10 ns, 20 ns, 45 ns), ADD (20 ns, 15 ns, 40 ns), SUB (45 ns, 40 ns, 30 ns)) MUL STACK_TYPE ñöôïc xaùc ñònh laø moät kieåu daõy khoâng raøng buoäc ñöôïc laøm roõ bôûi phaàn lieät keâ cuûa daõy nhö moät kieåu integer,vaø kieåu phaàn töû nhö kieåu ADDRESS_WORD .STACK laø moät kieåu con cuûa kieåu neàn STACK_TYPE vôùi phaàn raøng buoäc ñöôïc lieät keâ thöù töï .khai baùo bieán cho FAST_STK xaùc ñònh bôûi kieåu STACK_TYPE , cuõng ñöôïc laøm roõ bôûi raøng buoäc lieät keâ.Haèng ALU_TIMING ñònh roõ thôøi gian cho 2 toaùn töû ALU,khi toaùn töû coù theå laø ADD,SUB hoaëc MUL Thí duï moät ALU coù theå ñoùng vai troø toaùn töû ADD vaø SUB coù trì hoaõn 20 ns .Khai baùo cho ALU_TIMING laø tröôøng hôïp ñaëc bieät cuûa khai baùo haèng .Khi khoâng raøng buoäc caàn chæ roõ kieåu daõy khoâng raøng buoäc vì theá kieåu cuûa ñoái töôïng haèng ñöôïc xaùc ñònh töø soá cuûa nhöõng giaù trò trong haèng . Coù hai kieåu daõy khoâng raøng buoäc thöù nguyeân ñöôïc xaùc ñònh tröôùc trong ngoân ngöõ .STRING vaø BIT_VECTOR .STRING laø moät kieåu daõy cuûa kí töï ,trong khi BIT_VECTOR laø kieåu daõy cuûa BIT. Ví duï: variable MESSAGE:STRING(1 to 17) :=”hello,VHDL World”;