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

pdf 10 trang phuongnguyen 3120
Bạn đang xem tài liệu "Trộn lẫn thành phần Hardware và Software (Phần 7)", để 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_7.pdf

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

  1. http:// www.diachiweb.com signal RX_BUS :BIT_VECTOR (0 to 5) :=O”37’; O”37” laø moät chuoãi thöïc xuaát hieän laïi ôû giaù trò 37 constant ADD_CODE :BIT_VECTOR :=(‘0’,’1’,’1’,’1’,’0’); Moät giaù trò ñaïi dieän cho moät daõy thöù nguyeân cuûa kyù töï ñöôïc goïi laø string literal. String literals ñöôïc vieát bôûi daõy kyù töï trong daáu nhaùy ñoâi . Nhöõng ví duï string literals laø : “THIS IS A TEST” “SPIKE DETECTED ! “ “State “”READY”” entered !” Moät string literal coù theå ñöôïc gaùn cho nhöõng kieåu khaùc nhau cuûa moät ñoái töôïng ,ví duï ,cho moät ñoái töôïng kieåu STRING hoaëc moät kieåu ñoái töôïng BIT_VECTOR .Kieåu cuûa moät string literal ñöôïc xaùc ñònh töø phaïm vi nôi chuùng xuaát hieän .Sau ñaây laø nhöõng ví duï : variable ERROR_MESSAGE :STRING(1 to 19); ERROR_MESSAGE:=”fatal ERROR :abort !”; variable BUS_VALUE :BIT_VECTOR (0 to 3); BUS_VALUE:=”1101”; Trong ví duï ñaàu tieân , string literal laø kieåu STRING ,trong khi ñoù ,trong thí duï 2 ,string literal coù kieåu BIT_VECTOR .Kieåu cuûa moät string literal cuõng coù theå coù traïng thaùi roõ raøng bôûi söû duïng bieåu thöùc ñònh löôïng (qualified expression) Moät string literal ñaïi dieän cho moät loaït BIT lieân tuïc (giaù trò cuûa kieåu BIT),cuõng coù theå ñöôïc xuaát hieän nhö moät bit string literal .Nhöõng BIT lieân tuïc naøy goïi laø bit strings ,coù theå ñöôïc theå hieän laïi nhö moät giaù trò nhò phaân ,moät giaù trò octal ,hoaëc moät giaù trò hexa decimal.Kyù töï gaïch döôùi coù theå töï do söû duïng trong moät bit string literal cho trong saùng deã hieåu.Ví duï : X”FFO” X for hexa decimal . B”00_0011_1101” B for binary . O”327” O for octal . Kieåu cuûa moät bit string literal cuõng coù theå ñöôïc xaùc ñònh töø phaïm vi nôi noù xuaát hieän .Ví duï : type MVL is (‘X’,’0’,’1’,’Z’); type MVL_vector is array (NATURAL range ’1’, 5=>’1’, others=>’0’) phaàn töû thöù hai vaø thöù naêm cuûa OP_CODES ñöôïc gaùn cho giaù trò ‘1’ vaø nhöõng giaù trò coøn laïi ñöôïc gaùn cho ‘0’. OP_CODES:=(others=>’0’); taát caû caùc giaù trò ñöôïc ñaët veà 0.
  2. http:// www.diachiweb.com Löu yù khi söû duïng nhöõng töø khoùa khaùc coù nghóa chæ nhöõng giaù trò khoâng ñöôïc gaùn tröôùc ñoù ,khi söû duïng ,chuùng phaûi laø keát hôïp cuoái cuøng .Bieåu thöùc söû duïng 3 pheùp gaùn cuoái cuøng cho OP_CODES laø nhöõng thí duï cuûa kieåu daõy toång hôïp(array aggregate) .Moät aggregate laø taäp hôïp nhöõng phaàn töû caùch nhau bôûi daáu phaåy rieâng leû (comma_separated)ñöôïc ñoùng maø khoâng coù ngoaëc ñôn (parenthesis). KIEÅU RECORD: Moät ñoái töôïng cuûa kieåu record bao goàm nhöõng phaàn töû gioáng nhau hoaëc khaùc kieåu .Moät kieåu record thì töông ñöông vôùi kieåu döõ lieäu record trong PASCAL vaø khai baùo keát caáu trong C. Ví duï: Type PIN_TYPE is range 0 to 10; Type MODULE is record SIZE:INTEGER range 20 to 200; CRITICAL_DLY:TIME NO_INPUTS:PIN_TYPE; NO_OUTPUT:PINTYPE ; end record; Giaù trò coù theå ñöôïc gaùn cho nhöõng ñoái töôïng record söû duïng toång hôïp . Ví duï: variable NAND_COMP:MODULE; NAND_COMP laø moät ñoái töôïng kieåu RECORD kieåu MODULE NAND_COMP:=(50,20 ns,3 ,2); Nguï yù 50 ñöôïc gaùn cho size ,20 ns ñöôïc gaùn cho CRITIAL_DLY,v.v Giaù trò ñöôïc gaùn cho moät ñoái töôïng record töø moät ñoái töôïng record khaùc coù cuøng kieåu söû duïng bieåu thöùc gaùn .Trong thí duï sau moãi phaàn töû cuûaNAND_GENERIC ñöôïc gaùn cho giaù trò cuûa phaàn töû töông öùng trong NAND_COMP. Signal NAND_GENERIC : MODULE ; NAND_GENERIC ’0’); Neáu CAB laø moät ñoái töôïng kieåu daõy ,taäp hôïp laïi ñöôïc ñoái xöû nhö moät daõy toång hôïp .Noùi moät caùch khaùc .Neáu CAB laø moät ñoái töôïng kieåu record taäp hôïp laø moät record taäp hôïp ôû nôi nhöõng phaàn töû khaùc ñöôïc gaùn cho taát caû caùc phaàn töû trong record . 3.3.4 ACCESS TYPES(CON TROÛ) Giaù trò tuøy thuoäc 1 kieåu access laø nhöõng pointer ñeán ñoái töôïng ñöôïc chæ ra cuûa nhöõng kieåu khaùc .Noù töông töï nhö nhöõng pointer trong ngoân ngöõ PASCAL vaø ngoân ngöõ C.Nhöõng Ví duï cuûa khai baùo kieåu access nhö sau : MODULE laø kieåu khai baùo record trong ñoaïn sau : type PRT is access MODULE;
  3. http:// www.diachiweb.com type FIFO is array(0 to 63 ,0 to 7) of BIT; type FIFO_PTR is access FIFO; PTR laø moät kieåu access ,nhöõng giaù trò cuûa noù laø nhöõng ñòa chæ chæ ñeán ñoái töôïng cuûa kieåu MODULE .Moãi moät kieåu access cuõng coù theå coù giaù trò roãng ,coù nghóa laø noù chöa ñöôïc chæ ñeán baát kyø ñoái töôïng naøo .Nhöõng ñoái töôïng cuûa moät kieåu coù theå chæ tuøy thuoäc vaøo lôùp bieán .khi moät ñoái töôïng cuûa moät kieåu access ñöôïc khai baùo .Giaù trò maëc ñònh cuûa ñoái töôïng ñoù laø NULL . Ví duï : variable MOD1PTR,MOD2PTR:PTR—Giaù trò maëc ñònh laø NULL Ñoái töôïng maø kieåu access chæ ñeán coù theå ñöôïc taïo baèng caùch söû duïng allocators (cung caáp), allocators cung caáp 1 cô caáu ñeå taïo ra moät ñoái töôïng nhö moät kieåu roõ raøng MOD1PTR:=new MODULE; new trong pheùp gaùn laø nguyeân nhaân ñoái töôïng cuûa kieåu MODULE ñaõ ñöôïc taïo ,vaø chæ ñeán ñoái töôïng traû veà .Nhöõng giaù trò cuûa nhöõng phaàn töû cuûa record MODULE laø nhöõng giaù trò maëc ñònh cuûa moãi phaàn töû . Ví duï: MOD2PTR:=new MODULE’(25,10ns,4,9); Nhöõng ñoái töôïng cuûa 1 kieåu access coù theå ñöôïc tham khaûo nhö: 1. obj-ptr.all : Quyeàn lui tôùi toaøn theå ñoái töôïng ñöôïc chæ bôûi obj_ptr nôi maø obj-ptr laø moät pointer chæ ñeán moät ñoái töôïng cuûa baát kyø kieåu naøo 2.array-obj-ptr(element-index) :quyeàn lui tôùi cuûa daõy phaàn töû nôi maø array-obj-ptr laø moät pointer chæ ñeán moät ñoái töôïng daõy . 3.record-obj-ptr.element-name : quyeàn lui tôùi cuûa 1 phaàn töû record nôi maø record-obj-ptr laø moät pointer chæ ñeán moät ñoái töôïng record . Nhöõng phaàn töû cuûa ñoái töôïng maø MOD2PTR chæ ñeán coù theå ñöôïc theâm vaøo nhö :MOD2PTR.SIZE, MOD2PTR.CRITICAL_DLY, MOD2PTR.NO_INPUTS and MOD2PTR.NO_OUTPUTS,cung caáp pointer laø NOT NULL. Ñoái vôùi moãi kieåu access ,thuû tuïc DEALLOCATE ñaõ ñöôïc khai baùo ngaàm ,thuû tuïc naøy ,khi ñaõ goïi traû laïi nôi löu tröõ bò chieám giöõ bôûi ñoái töôïng trong moâi tröôøng chính .Ñoái vôùi kieåu PTR va FIFO_TR khai baùo ôû treân ,thuû tuïc DEALLOCATE theo sau ñöôïc hieåu ngaàm nhö sau : procedure DEALLOCATE (P : inout PTR) ; procedure DEALLOCATE (P : inout FIFO_PTR) ; Phaàn thöïc thi cuûa phaùt bieåu : DEALLOCATE (MOD2PTR); laøm nôi löu tröõ bò chieám giöõ bôûi ñoái töôïng maø MOD2PTR chæ ñeán ,bò deallocated(giaûi phoùng) ,vaø MOD2PTR chuyeån thaønh NULL. Pointers coù theå ñöôïc gaùn cho moät bieán pointer khaùc cuûa kieåu access töông töï ,nhö laø : MOD1PTR:=MOD2PTR; ,baây giôø caû hai MOD1PTR vaø MOD2PTR chæ ñeán cuøng moät ñoái töôïng .Xem thí duï sau : type BITVEC_PTR is access BIT_VECTOR ; variable BITVEC:BITVEC_PTR :=new BIT_VECTOR(“1001”); BITVEC1 chæ ñeán ñoái töôïng ñöôïc raøng buoäc 4 bits .Bits coù theå ñöôïc xem nhö BITVEC1(0),laø 1,laø 0 vaø cöù nhö theá .Ñaây laø thí duï khaùc nôi maø nhöõng giaù trò ñöôïc gaùn cho ñoái töôïng töông töï söû duïng teân keát hôïp MOD2PTR:=new MODUEL’(CRITICAL_DLY=>10 ns, NO_INPUTS=>2,NO_OUTPUTS=>SIZE=>100); Kieåu access coù lôïi trong kieåu maãu haønh vi möùc ñoä cao ,ñaëc bieät trong caáu truùc thöôøng gaëp nhö RAMs vaø FIFOs, nôi pointers coù theå söû duïng ñeán nhöõng ñoái töôïng ñeå truy caäp töùc thôøi trong phoái hôïp . 3.3.5 .INCOMPLETE TYPES(KIEÅU CHÖA ÑAÀY ÑUÛ).
  4. http:// www.diachiweb.com Coù theå coù moät kieåu access chæ ñeán 1 ñoái töôïng maø ñoái töôïng coù nhöõng phaàn töû cuõng laø kieåu access .Ñieàu naøy coù theå ñöôïc chæ ñaïo phuï thuoäc laãn nhau hoaëc trôû laïi kieåu access.Vì theá 1 kieåu phaûi ñöôïc khai baùo tröôùc khi söû duïng ,moät khai baùo kieåu chöa hoaøn thaønh coù theå ñöôïc söû duïng ñeå cöùu cho vaán ñeà naøy .Moät kieåu khai baùo chöa hoaøn thaønh coù daïng nhö sau : Type type_nam ; chæ moät kieåu khoâng ñaày ñuû ñöôïc ,type_nam coù theå ñöôïc söû duïng trong moät kieåu phuï thuoäc laãn nhau hoaëc 1 kieåu access ngöôïc (recursive access type), duø sao moät khai baùo kieåu ñaày ñuû töông öùng phaûi theo sau ñoù .Moät thí duï cuûa moät kieåu access phuï thuoäc access laãn nhau laø: type COMP; record chöùa ñöïng bao goàm teân vaø danh saùch maïng löôùi maø noù lieân laïc tôùi . type NET; record chöùa ñöïng bao goàm teân vaø danh saùch component maø noù lieân laïc tôùi . type COMP_PTR is access COMP; type NET_PTR is access NET; constant MODMAX : INTEGER:=100; constant NETMAX :INTEGER:=2500; type COMP_LIST is array (1 to MODMAX) of COMP_PTR; type NET_LIST is array (1 to NETMAX) of NET_PTR; type COMPLIST_PTR is acccess COMP_LIST; type NETLIST_PTR is access NET_LIST; Kieåu khai baùo ñaày ñuû cho COMP vaø NET nhö sau : type COMP is record COMP_NAME:STRING(1 to 10); NET:NETLIST_PTR; end record; type NET is record NET_NAME (1 to 10); COMPONENTS:COMPLIST_PTR; 1end record; ÔÛ ñaây ,COMPvaø NET coù nhöõng phaàn töû laø nhöõng ñoái töôïng access cuûa kieåu NET vaø COMP ,töông öùng .Moät thí duï cuûa kieåu access recursive laø: type DFG ; array data flow graph node. type OP_TYPE is (ADD,SUB,MUL,SHIFT,ROTATE); type PTR is access DFG; type DFG is record OP_CODE :OP_TYPE; SUCC :PTR successor node list. FRED:PTR predecessor node list. End record; PTR laø mot kieåu access cuûa DFG.noù cuõng laø kieåu cuûa 1 phaàn töû trong DFG. 3.3.6 FILE TYPES Ñoái töôïng cuûa nhöõng kieåu file ñaïi dieän cho nhöõng taäp tin trong moâi tröôøng chính .Chuùng cung caáp moät cô caáu bôûi 1 loaïi truyeàn ñaït thoâng tin thieát keá VHDL vôùi moâi tröôøng chính .Cuù phaùp cuûa khai baùo kieåu taäp tin laø: type file_type_nam is file of type_name; type_nam laø moät kieåu cuûa nhöõng giaù trò chöùa ñöïng trong moät file . Ví duï : type VECTOR is file of BIT_VECTOR;
  5. http:// www.diachiweb.com type NAMES is file of STRING; Moät taäp tin cuûa kieåu VECTORS coù nhöõng giaù trò lieân tieáp kieåu BIT_VECTOR moät file kieåu NAMES coù lieân tuïc nhöõng chuoãi nhö giaù trò trong noù . Moät taäp tin coù theå môû,ñoùng ,ñoïc ,vieát,hoaëc kieåm tra ñieàu kieän end-of-file bôûi vieäc söû duïng nhöõng thuû tuïc vaø haøm ñaëc bieät ,khai baùo ngaàm cho moãi taäp tin . procedure FILE_OPEN (file F: fiel_type-name; EXTERNAL_NAME :in STRING; OPEN_KIND:in FILE_OPEN_KIND:=READ_MODE); môû moät taäp tin F chæ ñeán taäp tin vaät lyù trong chuoãi EXTERNAL_NAME ,vôùi specified mode. Kieåu FILE_OPEN_KIND, coù nhöõng giaù trò : READ_MODE(maëc ñònh),WRITE_MODE,vaø APPEND_MODE procedure FILE_OPEN(STATUS :out FILE_OPEN_STATUS; file F :file-type-name; EXTERNAL_NAME: in STRING; OPEN_KIND: in FILE_OPEN_KIND:=READ_MODE); Töông töï nhö thuû tuïc thöù nhaát ,nhöng thuû tuïc naøy traû veà trang thaùi môû taäp tin FILE-OPEN-STATUS coù nhöõng giaù trò nhö sau : OPEN_OK :taäp tin môû thaønh coâng . STATUS_ERROR:taäp tin ñaõ môû roài NAME_ERROR : taäp tin khoâng tìm thaáy hoaëc khoâng cho pheùp MODE_ERROR :khoâng theå môû taäp tin vôùi specified access mode. Procedure FILE_CLOSE(file F:file-type-name); closes the specified file. Procedure READ(file F:file-type-name,VALUE :out type-name); Laáy nhöõng giaù trò sau trong VALUE töø taäp tin F. Procedure WRITE(file F:file-type-name,VALUE :in type-name); noái giaù trò trong VALUE vaøo file F. Function ENDFILE(file F:file-type-name) return BOOLEAN; traû veà falses neáu ñoïc treân taäp tin F seõ thaønh coâng trong vieäc laáy giaù trò khaùc ,ngöôïc laïi traû veà true. Neáu type-name laø moät kieåu daõy khoâng raøng buoäc ,moät thuû tuïc READ khaùc ñöôïc khai baùo ngaàm ,coù daïng nhö sau : procedure READ(file F:file-type-name;VALUE :out type-name; LENGTH:out NATURAL); LENGTH traû veà soá phaàn töû cuûa daõy ñaõ ñöôïc ñoïc Nhöõng giaù trò naèm trong moät taäp tin coù theå chæ bò aûnh höôûng Moät taäp tin coù theå ngaàm môû bôûi thoâng tin môû file trong khai baùo file .Nhöõng thí duï sau theå hieän ñieàu ñoù file DUMP:NAMES open APPEND_MODE is “top.dump”; Moät kieåu goïi aån ñeán FILE_OPEN ñöôïc taïo ra taïi thôøi ñieåm sinh ra . FILE_OPEN(DUMP,”top.dump”,READ_MODE); file PATTERNS:VECTOR is”uart.pat” Moät kieåu goïi aån ñeán FILE_OPEN ñöôïc taïo ra taïi thôøi ñieåm sinh ra . FILE_OPEN(PATTERNS,”uart.pat”,READ_MODE); file TMP: VECTORS;
  6. http:// www.diachiweb.com Vì khoâng coù thoâng tin môû taäp tin ñöôïc cung caáp ,moät laàn goïi roõ raøng ñeán FILE_OPEN caàn ñöôïc thöïc hieän tröôùc khi taäp tin TMP coù theå bò gia taêng (accessed) Ñaây laø moät thí duï ñaày ñuû cuûa moät test bench,ñoïc nhöõng vector töø file”fadd.vec”,ñaët nhöõng vector vaøo test component : moät one-bit full adder,vaø vieát keát quaû vaøo moät taäp tin khaùc “fadd.out”. entity FA_TEST is end; architecture IO_EXAMPLE of FA_TEST is component FULL_ADD port(CIN, A, B:in BIT;COUTN,SUM:out BIT); end component; subtype STRING3 is BIT_VECTOR(0 to 2); subtype STRING2 is BIT_VECTOR(0 to 1); type IN_TYPE is file of STRING3; type OUT_TYPE is file of STRING2; file VEC_FILE :IN_TYPE open READ_MODE is “usr/home/jb/vhdl_ex/fadd.vec”; fiel RESULT_FILE:OUT_TYPE open WRITE_MODE is “usr/home/jb/vhdl_ex/fadd.out”; signal S:STRING3; signal Q:STRING2; begin FA:FULL_ADD port map (S(0),S(2),Q(0),Q(1)); process constant PROPAGATION_DELAY:TIME:=25ns; variable IN_STR:STRING3; variable OUT_STR:STRING2; begin while not ENDFILE(VEC_FILE) loop READ(VEC_FILE,IN_STR); S<=IN_STR; wait for PROPAGATION_DELAY; OUT_STR:=Q; WRITE(RESULT_FILE,OUT_STR); end loop; report “completed processing all vectors”; wait; stop tröôøng hôïp end process; end IO_EXAMPLE; Hai taäp tin VEC_FILE vaø RESULT_FILE ñaõ khai baùo .VEC_FILE laø moät taäp tin ñaàu vaøo vaø chöùa ñöïng chuoãi 3 bits, vaø RESULT_FILE laø moät taäp tin xuaát laø chuoãi 2 bit .Vectors ñaàu vaøo ñöôïc ñoïc moät laàn taïi moät thôøi ñieåm cho ñeán cuoái file .Moãi vector ñöôïc tham gia va øroài quaù trình chôø maïch coäng (full-addder circuit) ñöôïc oån ñònh tröôùc khi ñôn giaûn giaù trò xuaát maïch coäng ñöôïc ghi vaøo taäp tin xuaát .Phaùt bieåu report ,khi thöïc thi ,in ñôn giaûn thoâng baùo report ,phaùt bieåu wait laø nguyeân nhaân laøm quùa trình trì hoaõn voâ haïn ñònh.
  7. http:// www.diachiweb.com Moät kieåu taäp tin ,TEXT,ñöôïc xaùc ñònh tröôùc trong ngoân ngöõ .kieåu taäp tin naøy ñaïi dieän phuø hôïp vôùi nhöõng chuoãi text coù ñoä daøi thay ñoåi(variable length).Moät kieåu access ,LINE ,cuõng chæ ñònh ñeán moät chuoãi töông töï .Ñieàu khieån ñoïc vaø vieát nhöõng lines cuõng ñöôïc cung caáp .Vieäc xaùc ñònh cho taát caû caùc kieåu vaø nhöõng toaùn töû xuaát hieän trong goùi ñöôïc xaùc ñònh tröôùc ,TEXTIO. 3.4 .OPERATORS (TOAÙN TÖÛ). Nhöõng toaùn töû ñöôïc xaùc ñònh tröôùc trong ngoân ngöõ ñöôïc phaân chia thaønh 6 loaïi : 1. Toaùn töû luaän lyù (logical operators) 2. Toaùn töû quan heä (relation operators) 3. Toaùn töû dòch(Shift operators) 4. Toaùn töû coäng (Adding operators) 5. Toaùn töû nhaân (Multiplying operators) 6. Toaùn töû phöùc hôïp (miscellaneuos operators) Nhöõng toaùn töû coù quyeàn öu tieân taêng töø loaïi 1 cho ñeán 6.Toaùn töû cuøng loaïi coù cuøng quyeàn öu tieân nhö nhau ,tính töø traùi sang phaûi .ngoaëc ñôn coù theå ñöôïc söû duïng ñeå phaân ñònh tính töø traùi sang phaûi. 3.4.1 .LOGICAL OPERATORS : Coù baûy toaùn töû luaän lyù laø : and or nand nor xor xnor not Nhöõng toaùn töû ñöôïc xaùc ñònh tröôùc bôûi kieåu BIT vaø BOOLEAN.Chuùng cuõng coù theå ñöôïc xaùc ñònh bôûi moät daõy thöù nguyeân cuûa BIT vaø BOOLEAN.Trong quaù trình ñònh löôïng cuûa toaùn töû luaän lyù .rieâng giaù trò BIT ‘0’ vaø ‘1’ ñöôïc coi nhö laø giaù trò FALSE vaø TRUE cuûa kieåu BOOLEAN.Keát quaû cuûa moät toaùn töû luaän lyù coù kieåu töông töï nhö toaùn haïng cuûa noù Toaùn töû NAND vaø NOR khoâng keát hôïp vôùi nhau ,do ñoù cuù phaùp cuûa moät bieåu thöùc toaùn töû lieân tuïc nand vaø nor laø traùi luaät .Thí duï bieåu thöùc sau laø traùi luaät A and B nand C. Daáu ngoaëc ñôn coù theå söû duïng ñeå traùnh tröôøng hôïp naøy . 3 4.2 RELATIONAL OPERATORS (toaùn töû quan heä) : Ñoù laø : = /= = Kieåu keâát quaû cuûa taát caû caùc toaùn töû quan heä luoân luoân ñöôïc xaùx ñònh tröôùc laø kieåu BOOLEAN.Toaùn töû baèng(=) vaø khoâng baèng (/=) luoân ñöôïc xaùc ñònh tröôùc trong baát kyø kieåu naøo tröø kieåu FILE .Coøn laïi 4 toaùn töû ñöôïc xaùc ñònh tröôùc trong kieåu voâ höôùng baát kyø (kieåu integer hoaëc kieåu lieät keâ ) hoaëc kieåu daõy rôøi raïc (daõy naøy coù caùc phaàn töû trong daõy tuøy thuoäc vaøo kieåu rôøi raïc ,rieâng bieät).Khi toaùn haïng laø nhöõng kieåu daõy rôøi raïc .Pheùp so saùnh ñoùng vai moät phaàn töû taïi moät thôøi ñieåm töø traùi sang phaûi ,thí duï : BIT_VECTOR(‘0’,’1’,’1’)<BIT_VECTOR(‘1’,’0’,’1’) Sau ñaây laø thí duï maø toaùn haïng luoân luoân coù chieàu daøi khaùc nhau : “VHDL”<”VHDL92” laø ñuùng .Söï so saùnh moät laàn nöõa ñoùng vai troø taïi moät thôøi ñieåm töø traùi sang phaûi. Tuy nhieân, phaàn töû töông öùng khoâng ñöôïc taïo ra trong toaùn haïng . Noù coi nhö laø NULL,vaø NULL luoân luoân ñöôïc xem nhö keùm hôn baát kyø kyù töï naøo .trong thí duï naøy, character ‘9’ trong toaùn haïng thöù hai khoâng töông thích vôùi phaàn töû trong toaùn haïng thöù nhaát . 3.4.3 SHIFT OPERATORS : Ñoù laø : SLL SRL SLA SRA ROL ROR
  8. http:// www.diachiweb.com Moãi moät toaùn töû giöõ moät daõy BIT hoaëc BOOLEAN nhö moät toaùn haïng traùi vaø giaù trò INTEGER nhö toaùn haïng phaûi ,ñoùng vai troø giaûi thích toaùn töû . Neáu giaù trò integer laø soá aâm , haønh vi ngöôïc nhau seõ xaûy ra, ñoù laø xoay traùi hoaëc quay trôû thaønh xoay phaûi hoaëc quay . toaùn töû SLL (xoay traùi luaän lyù) vaø toaùn töû SRL (xoay phaûi luaän lyù) ñieàn vaøo nhöõng bit huyû boû vôùi left-operand-type’LEFT.Toaùn töû SLA (xoay traùi soá hoïc ) ñieàn vaøo nhöõng bit bò huyû boû vôùi bit cöïc phaûi cuûa toaùn haïng traùi .trong khi toaùn töû SRA (xoay phaûi soá hoïc ) ñieàn vaøo nhöõng phaàn töû bò huyû boû vôùi bit cöïc traùi cuûa toaùn haïng traùi .Toaùn töû rotate laø nguyeân nhaân nhöõng bit bò ñieàn vaøo vôùi nhöõng bit chieám giöõ trong 1 voøng caáu thaønh . Ví duï : giaû söû taát caû nhöõng toaùn haïng traùi ñeàu laø BIT_VECTOR “1001010” sll 2 is “0101000” –filled with BIT’LEFT ,which is ‘0’ “1001010” srl 3 is “0001001” “1001010”la 2 is “0101000” . . . . 3.4.4.ADDING OPERATORS : Goàm : + - & Toaùn haïng cho toaùn töû + vaø toaùn töû - ñeàu phaûi laø kieåu soá ,vaø keát quaû cuõng laø kieåu soá toaùn töû + vaø - cuõng ñöôïc söû duïng nhö toaùn töû unary,trong tröôøng hôïp toaùn haïng vaø kieåu keát quaû nhö nhau .Toaùn haïng cho toaùn töû & coù theå laø kieåu daõy thöù nguyeân hoaëc kieåu moät phaàn töû .Keát quaû luoân luoân laø moät kieåu daõy .Thí duï : ‘0’&’1’ keát quaû laø kieåu daõy character ‘01’. 3.4.5 MULIPLYING OPERATORS: Ñoù laø : * / MOD REM Toaùn töû nhaân vaø chia phaûi ñöôïc xaùc ñònh tröôùc cho caû hai toaùn haïng phaûi laø cuøng kieåu soá nguyeân hoaëc laø kieåu floating point .Keát quaû cuõng phaûi cuøng kieåu .Toaùn töû nhaân cuõng ñöôïc xaùc ñònh bôûi tröôøng hôïp khi moät trong nhöõng toaùn haïng laø kieåu vaät lyù vaø toaùn haïng thöù hai laø kieåu integer hoaëc real .Keát quaû traû veà laø kieåu vaät lyù. Ñoái vôùi toaùn töû chia ,chia moät giaù trò vaät lyù bôûi moät giaù trò integer hoaëc real thì ñöôïc cho pheùp.vaø keát quaû traû veà laø kieåu vaät lyù .Pheùp chia cuûa moät giaù trò kieåu vaät lyù bôûi moät ñoái töôïng khaùc cuøng kieåu vaät lyù vaø phaàn coøn laïi cuûa noù ,moät giaù trò nguyeân coi nhö moät keát quaû . toaùn töû REM vaø MOD taùc duïng cho toaùn haïng cuûa kieåu integer vaø keát quaû coù cuøng moät kieåu .Keát quaû cuûa REM coù bieåu hieän cuûa toaùn haïng thöù nhaát vaø noù ñöôïc xaùc ñònh nhö sau: A rem B =A -(A / B) * B Keát quaû cuûa toaùn töû Mod laø bieåu hieän toaùn haïng thöù hai .Vaø noù ñöôïc xaùc ñònh nhö sau : A mod B =A - B * N cho moät vaøi soá nguyeân N Sau ñaây laø nhöõng thí duï söû duïng toaùn töû mod vaø rem : 7 mod 4 baèng 3 (-7) rem 4 baèng -3 7 mod (-4) baèng -1 (-7) rem (-4) baèng -3 3.4.6 MISCELLANEUOS OPERATORS: goàm : abs Toaùn töû abs (absolute):trò tuyeät ñoái ñöôïc xaùc ñònh cho moät kieåu soá baát kyø
  9. http:// www.diachiweb.com Toaùn töû (exponentiatation):muõ xaùc ñònh cho toaùn haïng traùi laø kieåu integer hoaëc floating point ,vaø toaùn haïng phaûi phaûi laø kieåu integer(soá muõ).Toaùn töû khoâng luaän lyù coù möùc ñoä öu tieân töông ñöông nhö 2 toaùn haïng treân 4.CAÙC MOÂ HÌNH(MODELINGS) 4.1.MOÂ HÌNH HAØNH VI( BEHAVIORAL MODELING) Phaàn naøy ñöa ra loaïi moâ hình haønh vi ,Trong moâ hình naøy ,haønh vi cuûa thöïc theå ñöôïc bieåu dieãn bôûi vieäc thöïc thi moät caùch tuaàu töï , code thuû tuïc coù cuù phaùp ñôn giaûn vaø ngöõ nghóa nhö ngoân ngöõ laäp trình caáp cao nhö C hoaëc PASCAL.Phaùt bieåu process coù moät cô caáu cô baûn söû duïng haønh vi maãu cuûa thöïc theå .phaàn naøy moâ taû phaùt bieåu cho moät quùa trình vaø theå loaïi khaùc nhau cuûa nhöõng phaùt bieåu . Baát keå moâ hình söû duïng naøo ,moãi moät thöïc theå phaûi mieâu taû söû duïng khai baùo thöïc theå vaø ít nhaát 1 architecture body.Hai phaàn ñaàu tieân seõ moâ taû nhöõng chi tieát naøy . 4.1.1.ENTITY DECLARATION Moät khai baùo thöïc theå moâ taû giao dieän beân ngoaøi cuûa thöïc theå .noù ghi roõ teân cuûa thöïc theå ,teân coång giao tieáp .kieåu mode,vaø kieåu cuûa caùc coång .Cuù phaùp cuûa moät khai baùo thöïc theå laø : entity entity-name is [generic (list-of-generic-and-their-types);] [port(list-of interface-port-name-and-their-types);] [entity-item-declaration] [begin entity-statement] end [entity][entity-name]; Entity-name laø teân cuûa thöïc theå ,vaø coång giao dieän laø nhöõng tín hieäu ñi qua thöïc theå ñöa thoâng tin ñi vaø ñeán ra moâi tröôøng ngoaøi .moãi coång giao dieän coù theå coù moät trong nhöõng kieåu sau 1. in :giaù trò coång vaøo chæ coù theå ñoïc trong maãu thöïc theå 2. out :giaù trò coång ra chæ coù theå ñöôïc caäp nhaät maø khoâng theå ñoïc 3. inout giaù trò cuûa coång ñieàu khieån coù theå ñoïc vaø caäp nhaät . 4. buffer: Giaù trò cuûa coång buffer coù theå ñöôïc ñoïc vaø caäp nhaät.Tuy nhieân ,noù khaùc vôùi inout ôû choã noù khoâng theå coù hôn 1 nguoàn ,vaø chæ coù 1 loaïi tín hieäu ñöôïc noái vôùi noù (coù theå laø moät coång buffer hoaëc 1 tín hieäu ) 5. linkage :Giaù trò cuûa coång lieân keát coù theå ñöôïc ñoïc vaø caäp nhaät .Noù chæ coù theå ñöôïc laøm bôûi moät coång khaùc cuûa kieåu lieân keát . Caùch linkage port cuûa coång lieân keát thì khoâng ñöôïc saùng suûa vaø vì vaäy khoâng gôïi nhôù .Trong quaù khöù noù ñöôïc söû duïng ñeå giao tieáp vôùi ngoân ngöõ laï vaø ngoân ngöõ giaû . Khai baùo ñaët trong entity-item-declaration laø chung cho taát caû ñôn vò thieát keá keát hôïp vôùi khai baùo thöïc theå naøy (chuùng cuõng coù theå laø architecture bodies vaø khai baùo config) Ví duï: entity AOI is port(A,B,C,D:in Bit ;Z:out BIT); end AOI; Khai baùo entity chæ ra teân cuûa thöïc theå laø AOI vaø noù coù 4 tín hieäu vaøo thuoäc kieåu BIT,moät tín hieäu ra hieåu BIT.Chuù yù raèng noù khoâng chæ ra baûn chaát hoaëc chöùc naêng cuûa thöïc theå . 4.1.2.ARCHITECTURE BODY: Moät architecture body moâ taû beân trong cuûa moät thöïc theå .Noù moâ taû chöùc naêng vaø caáu truùc cuûa thöïc theå .Cuù phaùp cuûa moät architecture body laø :
  10. http:// www.diachiweb.com architecture architecture-name of entity-name is [architecture-item-declaration] begin concurrent-statements;these are -> process-statement block-statement concurrent-procedure-call- statement concurrent-assertion- statement concurrent-signal-assignment- statement component-instantiation-statement generate-statement end [architecture][architecture-name]; Nhöõng phaùt bieåu ñoàng thôøi moâ taû caáu hình beân trong cuûa thöïc theå .Taát caû nhöõng phaùt bieåu ñoàng thôøi thöïc thi song song vôùi nhau ,nhöõng thöù töï nguyeân baûn hieän dieän beân trong architecture body thì khoâng taùc ñoäng taùc ñoäng leân haønh vi bao haøm .Caáu hình beân trong cuûa thöïc theå coù theå ñöôïc theå hieän trong quan heä cuûa caáu truùc ,doøng döõ lieäu vaø haønh vi lieân tuïc .Chuùng ñöôïc moâ taû baèng caùch söû duïng nhöõng phaùt bieåu ñoàng thôøi. Ví duï,Khai baùo thaønh phaàn ñeå theå hieän caáu truùc ,phaùt bieåu gaùn tín hieäu ñoàng thôøi ñöôïc söû duïng ñeå theå hieän doøng döõ lieäu vaø phaùt bieåu process(quaù trình) ñeå theå hieän haønh vi . Nhöõng muïc khai baùo items laø saün saøng cho vieäc söû duïng trong architecture body,teân cuûa nhöõng item ñaõ khai baùo trong khai baùo thöïc theå ,bao goàm nhöõng coång vaø nhöõng generics, saün saøng cho vieäc söû duïng trong architecture body bôûi vì söï keát hôïp cuûa teân thöïc theå vôùi architecture body bôûi phaùt bieåu sau : architecture architecture-nam of entity-name is Moät thöïc theå coù theå coù raát nhieàu caùch nhìn (views) beân trong ,moãi moät caùch nhìn ñöôïc moâ taû architecture body khaùc nhau .Noùi chung ,moät thöïc theå töông öùng vôùi 1 khai baùo thöïc theå (cung caáp caùch nhìn beân ngoaøi) vaø moät hoaëc nhieàu architecture bodies(cung caáp caùch nhìn beân trong).Sau ñaây laø 2 Ví duï cuûa architecture body cho cuøng 1 thöïc theå AOI: architecture AOI_CONCURRENT of AOI is begin Z<=not((A and B) or (C and D); end AOI_CONCURRENT; architecture AOI_SEQUENTIAL of AOI is begin process(A,B,C,D) variable TEMP1,TEMP2:BIT; begin TEMP1:=A and B; statement 1 TEMP2:=C and D ; statement2 TEMP1:=TEMP1 or TEMP2; statement3 Z<=not TEMP; statement4 end process end AOI-SEQUENTIAL; Architecture body ñaàu tieân ,AOI_CONCURRENT,moâ taû thöïc theå AOI söû duïng kieåu dataflow ,Architecture body thöù hai ,AOI_SEQUENTIAL,söû duïng kieåu haønh vi .trong phaàn naøy chuùng ta