Xem mẫu

  1. BOÄ GIAÙO DUÏC & ÑAØO TAÏO TRÖÔØNG ÑAÏI HOÏC KYÕ THUAÄT COÂNG NGHEÄ THAØNH PHOÁ HOÀ CHÍ MINH Ths. NGUYEÃN TROÏNG HAÛI TOÙM TAÉT BAØI GIAÛNG VERILOG LÖU HAØNH NOÄI BOÄ 07/2005
  2. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog CHÖÔNG I TOÅNG QUAN Verilog HDL laø moät trong hai ngoân ngöõ moâ phoûng phaàn cöùng thoâng duïng nhaát, ñöôïc duøng trong thieát keá IC, ngoân ngöõ kia laø VHDL. HDL cho pheùp moâ phoûng caùc thieát keá deã daøng, söûa chöõa loãi, hoaëc thöïc nghieäm baèng nhöõng caáu truùc khaùc nhau. Caùc thieát keá ñöôïc moâ taû trong HDL laø nhöõng kyõ thuaät ñoäc laäp, deã thieát keá, deã thaùo gôõ, vaø thöôøng deå ñoïc hôn ôû daïng bieåu ñoà, ñaëc bieät laø ôû caùc maïch ñieän lôùn. Verilog thöôøng ñöôïc duøng ñeå moâ taû thieát keá ôû boán daïng: Thuaät toaùn (moät soá leänh gioáng ngoân ngöõ C nhö: if, case, for,while…). Chuyeån ñoåi thanh ghi (keát noái baèng caùc bieåu thöùc Boolean). Caùc coång keát noái( coång: OR, AND, NOT…). Chuyeån maïch (BJT, MOSFET). Ngoân ngöõ naøy cuõng chæ roõ caùch thöùc keát noái, ñieàu khieån vaøo/ra trong moâ phoûng. Caáu truùc chöông trình duøng ngoân ngöõ Verilog // Khai baùo module Module teân chöông trình (teân bieán I/O); // teân chöông trình truøng teân file.v. Input [msb:lsb] bieán; Output [msb:lsb] bieán; Reg [msb:lsb] bieán reg; Wire [msb: lsb] bieán wire; // Khai baùo khoái always, hoaëc khoái initial. … caùc leänh … Endmodule GV: Nguyeãn Troïng Haûi Trang 1
  3. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông II CHÖÙC NAÊNG CAÙC TÖØ VÖÏNG TRONG VERILOG Nhöõng taäp tin vaên baûn nguoàn Verilog bao goàm nhöõng bieåu hieän thuoäc tính töø vöïng sau ñaây: I. Khoaûng traéng Khoaûng traéng ngaên nhöõng töø vaø coù theå chöùa khoaûng caùch, khoaûng daøi, doøng môùivaø daïng ñöôøng daãn. Do ñoù, moät leänh coù theå ñöa ra nhieàu doøng phöùc taïp hôn maø khoâng coù nhöõng ñaëc tính ñaëc bieät. II. Chuù giaûi Nhöõng chuù giaûi coù theå chæ ñònh baèng hai caùch: ( gioáng trong C/C++) Chuù giaûi ñöôïc vieát sau hai daáu gaïch xieân (//). Ñöôïc vieát treân cuøng moät doøng. Ñöôïc vieát giöõa /* */, khi vieát nhieàu doøng chuù giaûi. III. Chöõ soá: Löu tröõ soá ñöôïc ñònh nghóa nhö laø moät con soá cuûa caùc bit, giaù trò coù theå laø: soá nhò phaân, baùt phaân, thaäp phaân, hoaëc thaäp luïc phaân. Ví duï: 3’b001, 5’d30 = 5’b11110, 16’h5ED4 = 16’d24276 = 16’b0101111011010100 IV. Töø ñònh danh: Töø ñònh danh do ngöôøi duøng quy ñònh cho bieán soá, teân haøm, teân moâñun, teân khoái vaø teân tröôøng hôïp. Töø ñònh danh baét ñaàu baèng moät maãu töï hoaëc ñöôøng gaïch döôùi ’_’ ( khoâng baét ñaàu baèng moät con soá hoaëc $ ) vaø keå caû moïi chöõ soá cuûa maåu töï, nhöõng con soá vaø ñöôøng gaïch döôùi, töø ñònh danh trong Verilog thì phaân bieät daïng chöõ. V. Cuù phaùp: Kí hieäu cho pheùp: ABDCE…abcdef…1234567890_$ Khoâng cho pheùp: caùc kí hieäu khaùc -, &, #, @ GV: Nguyeãn Troïng Haûi Trang 2
  4. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog VI. Toaùn töû: Toaùn töû laø moät, hai, hoaëc ba kí töï duøng ñeå thöïc hieän caùc toaùn haïng treân bieán. Caùc toaùn töû bao goàm >, +, &, !=. VII. Töø khoùaVerilog: Coù nhöõng töø maø phaûi coù yù nghóa ñaëc bieät trong Verilog. Ví duï: assign, case, while, wire, reg, and, or, nand, vaø module. Chuùng khoâng ñöôïc duøng nhö töø ñònh danh. Töø khoùa Verilog cuõng bao goàm caû chæ daãn chöông trình bieân dòch vaø System Task (heä thoáng soaïn thaûo) vaø caùc haøm. GV: Nguyeãn Troïng Haûi Trang 3
  5. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông III CAÙC COÅNG CÔ BAÛN TRONG VERILOG Caùc coång logic cô sôû laø moät boä phaän cuûa ngoân ngöõ Verilog. Coù hai ñaëc tính ñöôïc chæ roõ laø: drive_strenght vaø delay. Drive_strenght chæ söùc beàn cuûa coång. Ñoä beàn ngoõ ra laø söï keát noái moät chieàu ñeán nguoàn, keá ñoù taïo neân söï keát noái trong suoát trans daãn, keát thuùc laø toång trôû keùo leân hoaëc xuoáng. Drive_strenght thöôøng khoâng ñöôïc chæ roõ, trong tröôøng hôïp naøy ñoä beàn maëc ñònh laø strong1 vaø strong0 . Delay: neáu delay khoâng ñöôïc chæ roõ, thì khi ñoù coång khoâng coù trì hoaõn truyeàn taûi; neáu coù hai delay ñöôïc chæ ñònh, thì tröôùc tieân laø mieâu taû trì hoaõn leân, thöù hai laø trì hoaõn xuoáng. Neáu chæ coù moät delay ñöôïc chæ ñònh, thì khi ñoù trì hoaõn leân xuoáng laø nhö nhau. Delay ñöôïc boû qua trong toång hôïp. Phöông phaùp cuûa söï trì hoaõn chæ ñònh naøy laø moät tröôøng hôïp ñaëc bieät cuûa “Parameterized Modules”. Caùc tham soá cho caùc coång cô sôû phaûi ñöôïc ñònh nghóa tröôùc nhö delay. I. Caùc coång cô baûn: Caùc coång cô baûn coù moät ngoõ ra, vaø coù moät hoaëc nhieàu ngoõ vaøo. Trong caùc coång, cuù phaùp cuï theå bieåu dieãn beân döôùi, caùc töø khoaù cuûa caùc coång: and, or, nand, nor. 1. Cuù phaùp: GATE (drive_strength)#(delays) Teân töø khoùa coång _teân (output, input_1, input_2, …, input_N); Delay: #( leân, xuoáng) hoaëc #leân_vaø_xuoáng hoaëc #( leân_vaø_xuoáng) 2. Ví duï: And c1 (o, a, b, c. d); // coù 4 ngoõ vaøo coång And goïi laø c1 c2 (p, f, g); // vaø 2 ngoõ vaøo coång and goïi laø c2 Or #(4,3) ig ( o, b, c); // coång Or ñöôïc goïi laø ig, rise time = 4, fall time = 3 GV: Nguyeãn Troïng Haûi Trang 4
  6. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Xor #(5) xor1 (a, b, c); // sau 5 ñôn vò thôøi gian thì a = b xor c II. Coång buf, not: Caùc coång naøy thöïc thi ñeäm vaø ñaûo theo theo thöù töï ñòmh saún. Chuùng coù moät ngoõ vaøo, hai hay nhieàu ngoõ ra. Cuù phaùp cuï theå bieåu dieãn ôû beân döôùi, töø khoaù buf, not. 1. Cuù phaùp: Teân töø khoùa coång _teân (output_1, output_2, …, output_N, input); 2. Ví duï: Not #(5) not_1( a,c); // sau 5 ñôn vò thôøi gian thì a = ñaûo c Buf c1 (o, p, q, r, in); // boä ñeäm 5 ngoõ ra vaø 2 ngoõ ra c2 (p, f, g); GV: Nguyeãn Troïng Haûi Trang 5
  7. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông IV CAÙC DAÏNG DÖÕ LIEÄU I. Ñaët giaù trò: Verilog bao goàm 4 giaù trò cô baûn. Haàu heát caùc daïng döõ lieäu Verilog chöùa caùc giaù trò sau: 0: möùc logic 0, hoaëc ñieàu kieän sai. 1: möùc logic 1, hoaëc ñieàu kieän ñuùng. X: möùc logic tuyø ñònh Z: traïng thaùi toång trôû cao. X vaø Z duøng coù giôùi haïn trong toång hôïp (synthesis) II. Wire: Moâ taû vaät lieäu ñöôøng daây daãn trong moät maïch ñieän vaø ñöôïc duøng ñeå keát noái caùc coång hay caùc module. Giaù trò cuûa Wire coù theå ñoïc, nhöng khoâng ñöôïc gaùn trong haøm (function) hoaëc khoái (block). Wire khoâng löu tröõ giaù trò cuûa noù nhöng vaãn phaûi ñöôïc thöïc thi bôûi 1 leänh gaùn keá tieáp hay bôûi söï keát noái Wire vôùi ngoõ ra cuûa 1 coång hoaëc 1 module. Nhöõng daïng ñaëc bieät khaùc cuûa Wire: Wand(wired_and): giaù trò phuï thuoäc vaøo möùc logic And toaøn boä boä ñieàu khieån keát noái ñeán Wire. Wor (wired_or): giaù trò phuï thuoäc vaøo möùc logic Or toaøn boä boä ñieàu khieån keát noái ñeán Wire. Tri(three_state): taát caû boä ñieàu khieån keát noái ñeán 1 tri phaûi ôû traïng thaùi toång trôû cao. 1. Cuù phaùp: Wire [msb:lsb] teân bieán wire. Wand [msb:lsb] teân bieán wand. Wor [msb:lsb] teân bieán wor. Tri [msb:lsb] teân bieán tri. 2. Ví duï: GV: Nguyeãn Troïng Haûi Trang 6
  8. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Wire c; Wand d; Assign d= a; Assign d= b;// giaù trò d laø möùc logic cuûa pheùp And a vaø b. Wire [9:0] A; // vectô A coù 10 wire. III. Reg: Reg (register) laø moät ñoái töôïng döõ lieäu maø noù chöùa giaù trò töø moät thuû tuïc gaùn keá tieáp. Chuùng chæ ñöôïc duøng trong haøm vaø khoái thuû tuïc. Reg laø moät loaïi bieán Verilog vaø khoâng nhaát thieát laø thanh ghi töï nhieân. Trong thanh ghi nhieàu bit, data ñöôïc löu tröõ baèng nhöõng chöõ soá khoâng daáu vaø khoâng coù kí hieäu ñuoâi môû roäng, ñöôïc thöïc hieän maø ngöôøi söû duïng coù chuû y ùlaø soá buø hai. 1. Cuù phaùp: Reg [msb:lsb] teân bieán reg. 2. Ví duï: Reg a; // bieán thanh ghi ñôn giaûn 1 bit. Reg [7:0] A; // moät vectô 8 bit; moät bank cuûa 8 thanh ghi. Reg [5:0]b, c; // hai bieán thanh ghi 6 bit. IV. Input, Output, Inout: Nhöõng töø khoaù naøy bieåu thò ngoõ vaøo, ngoõ ra, vaø port hai chieàu cuûa moät module hoaëc task. Moät port ngoõ ra coù theå ñöôïc caáu hình töø caùc daïng: wire, reg, wand, wor, hoaëc tri. Maëc ñònh laø wire. 1. Cuù phaùp: Input [msb:lsb] port ngoõ vaøo. Output [msb:lsb] port ngoõ ra. Inout [msb:lsb] port ngoõ vaøo,ra hai chieàu. 2. Ví duï: Module sample (b, e, c, a); Input a; // moät ngoõ vaøo maëc ñònh laø kieåu wire. Output b, e; // hai ngoõ ra maëc ñònh laø kieåu wire. Output [1:0] c; /* ngoõ ra hai bit, phaûi ñöôïc khai baùotrong moät leänh rieâng*/ Reg [1:0] c; // ngoõ c ñöôïc khai baùo nhö moät reg. GV: Nguyeãn Troïng Haûi Trang 7
  9. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog V. Integer (Soá nguyeân): Integer laø moät bieán ña naêng. Trong toång hôïp chuùng ñöôïc duøng chuû yeáu cho voøng laëp, tham soá, vaø haèng soá. Chuùng hoaøn toaøn laø reg. Tuy nhieâu chuùng chöùa döõ lieäu baèng nhöõng soá coù daáu, trong khi ñoù khai baùo daïng reg chöùa chung baèng soá khoâng daáu. Neáu chuùng chöùa nhöõng soá maø khoâng ñònh nghóa thôøi gian bieân dòch thì kích thöôùc maëc ñònh laø 32 bit. Neáu chuùng chöùa haèng, söï toång hôïp ñieàu chænh caùc soá coù kích thöôùc nhoû nhaát caàn thieát cho söï bieân dòch. 1. Cuù phaùp: Integer teân bieán nguyeân; …teân haèng nguyeân…; 2. Ví duï: Integer a; // soá nguyeân ñôn giaûn 32bit. Assign b= 63; // maëc ñònh laø moät bieán 7 bit. VI. Supply 0, Supply1: Xaùc ñònh choå ñöôøng daãn leân möùc logic 0 ( ñaát), logic 1( nguoàn) theo thöù töï ñònh saün. VII. Time: Time laø moät löôïng 64 bit maø ñöôïc söû duïng cuøng vôùi $time, heä thoáng thao taùc chöùa löôïng thôøi gian moâ phoûng. Time khoâng ñöôïc hoã trôï toång hôïp vaø vì theá chæ ñöôïc duøng trong muïc ñích moâ phoûng. 1. Cuù phaùp: Time bieán time; 2. Ví duï: Time c; c = $time; // c = thôøi gian moâ phoûng doøng ñieän. VIII. Parameter (Tham soá): Moät Parameter xaùc ñònh 1 haèng soá maø ñöôïc ñaët khi baïn cho ví duï cuï theå laø moät module. Caùc naøy cho pheùp ta coù theå söûa chöõa. 1. Cuù phaùp: Parameter par_1= gaùi trò, par_2= gaùi trò, …; Parameter [giôùi haïn] par_3 = giaù trò; 2. Ví duï: GV: Nguyeãn Troïng Haûi Trang 8
  10. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Parameter add = 2b’00, sub = 3b’111; Parameter n = 4; Parameter [3:0] par_2 = 4b’1010; … reg [n-1:0] harry;// moät thanh ghi 4 bít maø ñoä roäng ñöôïc ñaët bôûi tham soá n ôû treân. always @(x) y = {{(add - sub) {x}}} if (x) begin state = par_2[1]; else state =par_2[2]; end. GV: Nguyeãn Troïng Haûi Trang 9
  11. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog ChöôngV TOAÙN TÖÛ I. Toaùn töû soá hoïc: Nhöõng toaùn töû naøy thöïc hieän caùc pheùp tính soá hoïc. Daáu ’+’ vaø ’-’ coù theå ñöôïc söû duïng moät trong hai toaùn töû ñôn (-z) hoaëc keùp (x - y). 1. Toaùn töû: +, -, *, /, %. 2. Ví duï: parameter n = 4; Reg[3:0] a, c, f, g, count; f= a +c; g= c –n; count = (count +1) % 16; // coù theå ñeám töø 0 ñeán 15. II. Toaùn töû quan heä: Toaùn töû quan heä so saùnh hai toaùn haïng vaø traû veà moät ñôn bit laø 0 hoaëc 1. Nhöõng toaùn töû naøy toång hôïp vaøo duïng cuï so saùnh. Bieán Wire vaø Reg laø nhöõng bieán döông. Vì theá, (-3b001) = (3b111) vaø (-3b001) > ( 3b110) nhöng neáu laø soá nguyeân thì -1< 6. 1. Caùc toaùn töû quan heä: =, = =, !=. 2. Ví duï: If (x= =y) e =1; Else e= 0; // so saùnh hai vector a, b reg [3:0] a, b; if (a[3] = =b [3]) a[2:0] >b[2:0]; else b[3]; GV: Nguyeãn Troïng Haûi Trang 10
  12. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog III. Toaùn töû bit_wire: So saùnh töøng bit hai toaùn toaùn haïng. 1. Caùc toaùn töû: ~ (bitwire NOT), & (bitwire AND), | (bitwire OR), ^ (bitwire XOR), ~^ hoaëc ^~ (bitwire XNOR). 2. Ví duï: Module and2(a, b, c); Input [1:0] a, b; Output [1:0] c; Assign c = a & b; Endmodule IV. Toaùn töû logic: Toaùn töû logic traû veà 1 bit ñôn 0 hoaëc 1. chuùng gioáng nhö toaùn töû bitwire chæ laø nhöõng toaùn haïng ñôn bit. Chuùng coù theå laøm vieäc treân bieåu thöùc, soá nguyeân hoaïc nhoùm bit, vaø coi nhu taát caû caùc giaù trò khoâng baèng 0 laø ’1’. Toaùn töû logic ñöôïc duøng nhieàu trong leänh ñieàu kieän (if… else), khi chuùng laøm vieäc treân bieåu thöùc. 1. Toaùn töû: !(NOT), && (AND), || (OR) 2. Ví duï: Wire [7:0] x, y, z; Reg a; … if ((x= = y)&&(z)) a=1; else a=! x; V. Toaùn töû bieán ñoåi: Coù taùc duïng treân taát caû caùc bit cuûa moät vectô toaùn haïng vaø traû veà giaù trò ñôn bit. Nhöõng toaùn töû naøy laø hình thöùc töï ñoåi soá cuûa caùc toaùn töû bitwire ôû treân. 1. Caùc toaùn töû: ~ (bieán ñoåi NOT), & (bieán ñoåi AND), ~&( bieán ñoåi NAND), | (bieán ñoåi OR), ~| (bieán ñoåi NOR), ^ (bieán ñoåi XOR), ~^ hoaëc ^~ (bieán ñoåi XNOR). 2. Ví duï: GV: Nguyeãn Troïng Haûi Trang 11
  13. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Module chk_zero (a,z); Input [2:0] a; Output z; Assign z = ~| a; Endmodule VI. Toaùn töû gheùp: Dòch toaùn töû ñaàu baèng chöõ soá cuûa caùc bit ñöôïc ñònh nghóa bôûi toaùn töû thou hai. Vò trí coøn troáng seõ ñöôïc ñieàn vaøo vôùi nhöõng soá 0 cho caû hai tröôøng hôïp dòch traùi hoaëc phaûi. 1. Toaùn töû: > (dòch phaûi). 2. Ví duï: assign c = a
  14. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Assign x = {2{1’b0},a}; // x= {0, 0, a}. IX. Toaùn töû ñieàu kieän: Gioáng nhö C/C++. Chuùng ñònh giaù moät trong hai bieåu thöùc cô baûn trong moät ñieàu kieän. Noù seõ toång hôïp thaønh boä ña coäng (MUX). 1. Toaùn töû : (ñieàu kieän)? keát quaû khi ñieàu kieän ñuùng : keát quaû khi ñieàu kieän sai. 2. Ví duï: assign a = (g) ? x : y; Assign a = ( inc = =2) ? a+1: a-1; X. Thöù töï toaùn töû: Nhöõng toaùn töû trong möùc gioáng nhau ñònh giaù töø traùi sang phaûi Toaùn töû Teân [] Choïn bit, choïn phaàn () Phaàn trong ngoaëc ñôn !, ~ Möùc logic vaø bit_wire NOT &, |, ~&, ~|, ^, ~^ Bieán ñoåi: AND, OR, NAND, NOT, XOR, XNOR. +, - Daáu chæ soá aâm soá döông. Gheùp noái { 3’b101,3’b110} = 6’b101110 {} Thöù baûn {3{3’b101 } }=9’b101101101 {{ } } *, /, % Nhaân, chia, phaàn traêm. +, - Coäng tröø nhò phaân. Dòch traùi, phaûi. = Daáu so saùnh. Bieán Reg vaø wire ñöôïc laáy baèng nhöõng soá döông. = =, != Baèng vaø khoâng baèng trong toaùn töû logic. & Bit_wire AND, and taát caû caùc bit vôùi nhau. ^, ~^ Bit_wire XOR, Bit_wire XNOR. | Bit_wire OR. &&, || Toaùn töû logic AND, OR. ?: x = ( ñieàu kieän ) T:F GV: Nguyeãn Troïng Haûi Trang 13
  15. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông VI TOAÙN HAÏNG I. Literals (daïng kí töï): Laø toaùn haïng coù giaù trò khoâng ñoåi maø ñöôïc duøng trong bieåu thöùc Verilog. Coù hai daïng kí töï laø: Chuoãi: laø moät maûng coù nhieàu kí töï ñöôïc ñaët trong daáu ””. Chöõ soá: laø nhöõng soá khoâng ñoåi, nhò phaân, baùt phaân, thaäp phaân, hoaëc soá hex. 1. Cuù phaùp caùc chöõ soá: n’F dddd… Trong ñoù: n : soá nguyeân mieâu taû soá bit. F: moät trong boán ñònh daïng sau: b( soá nhò phaân), o( soá baùt phaân), d( soá thaäp phaân), h( soá hex). 2. Ví duï: “time is”// chuoãi kí töï. 267 // maëc ñònh 32 bit soá thaäp phaân. 2’b01 // 2 bit nhò phaân. 20’h B36E // 20 bit soá hex. ‘o62 // 32 bit baùt phaân. II. Choïn 1 phaàn töû bit vaø choïn 1 phaàn caùc bit. Ñaây laø söï löïa choïn moät bít ñôn hoaëc moät nhoùm bit theo thöù töï, töø moät wire, reg hoaëc töø tham soá ñaët trong ngoaïc [ ]. Choïn 1 phaàn töû bit vaø choïn 1 phaàn caùc bit coù theå ñöôïc duøng nhö laø caùc toaùn haïng trong bieåu thöùc baèng nhieàu caùch thöùc gioáng nhau maø caùc ñoái töôïng döõ lieäu goác ñöôïc duøng. 1. Cuù phaùp: Teân bieán [ thöù töï bit]. Teân bieán [ msb: lsb]. 2. Ví duï: GV: Nguyeãn Troïng Haûi Trang 14
  16. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Reg [7:0] a, b; Reg [3:0] ls; c = a[7] & b[7]; ls = a[7:4] + b[3:0]; III. Goïi haøm chöùc naêng: Giaù trò traû veà cuûa moät haøm coù theå ñöôïc duøng tröïc tieáp trong bieåu thöùc maø khoâng caàn gaùn tröôùc cho bieán reg hoaëc wire. Goïi haøm chöùc naêng nhö laø moät trong nhöõng toaùn haïng. Chieàu roäng bít cuûa giaù trò traû veà chaéc chaén ñöôïc bieát tröôùc. 1. Cuù phaùp: Teân haøm(danh saùch bieán). 2. Ví duï: Assign a = b & c & chk_bc(b, c); Function chk_bc; Input c, b; Chk_bc = b^ c; Endfunction IV. Wire, reg, vaø tham soá: Wire, reg, vaø tham soá coù theå ñuôïc duøng nhö laø caùc toaùn haïng trong bieåu thöùc Verilog. GV: Nguyeãn Troïng Haûi Trang 15
  17. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông VII MODULES I. Khai baùo modules: Moät module laø baûn thieát keá chuû yeáu toàn taïi trong Verilog. Doøng ñaàu tieân cuûa khai baùo module chæ roõ danh saùch teân vaø port (caùc ñoái soá). Nhöõng doøng keá tieáp chæ roõ daïng I/O (input, output, hoaëc inout) vaø chieàu roäng cuûa moãi port. Maëc ñònh chieàu roäng port laø 1 bit. Sau ñoù, nhöõng bieán port phaûi ñöôïc khai baùo wire, wand, …, reg. Maëc ñònh laø wire. Nhöõng ngoõ vaøo ñaëc tröng laø wire khi döõ lieäu ñöôïc choát bean ngoaøi module. Caùc ngoõ ra laø daïng reg neáu nhöõng tín hieäu cuûa chuùng ñöôïc chöùa trong khoái always hoaëc initial. 1. Cuù phaùp: Module teân module (danh saùch port); Input [msb:lsb] danh saùch port ngoõ vaøo; Output [msb:lsb] danh saùch port ngoõ ra; Inout [ msb:lsb ] danh saùch port vaøo_ ra; … caùc leänh… endmodule 2. Ví duï: Module add_sub(add, in1, in2, out); Wire, reg, vaø tham soá: Input[7:0 ] in1, in2; Wire in1, in2; Output [7:0] out; Reg out; … caùc leänh khaùc… Endmodule GV: Nguyeãn Troïng Haûi Trang 16
  18. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog II. Chæ ñònh lieân tieáp: Caùc chæ ñònh lieân tieáp ñöôïc duøng ñeå gaùn moät giaù trò leân treân moät wire trong moät module. Ñoù laø caùc chæ ñònh thoâng thöôøng beân ngoaøi khoái always hoaëc khoái initial. Caùc chæ ñònh lieân tieáp ñöôïc thöïc hieän vôùi moät leänh gaùn (assign) roõ raøng hoaëc baèng söï chæ ñònh moät giaù trò ñeán moät wire trong luùc khai baùo. Chuù yù raèng, caùc leänh chæ ñònh lieân tieáp thì toàn taïi vaø ñöôïc chaïy lieân tuïc trong suoát quaù trình moâ phoûng. Thöù töï caùc leänh gaùn khoâng quan troïng. Moïi thay ñoåi beân phaûi cuûa baát cöù ngoõ vaøo seõ laäp töùc thay ñoåi beân traùi cuûa caùc ngoõ ra. 1. Cuù phaùp: Wire bieán wire = giaù trò; Assign bieán wire = bieåu thöùc; 2. Ví duï: Wire [ 1:0 ] a = 2’b 01; Assign b = c &d; Assign d = x | y; III. Module instantiations: Nhöõng khai baùo module laø nhöõng khuoân maãu maø noù ñöôïc taïo neân töø caùc ñoái töôïng thöïc teá ( instantiation). Caùc module ñôn cöû beân trong caùc module khaùc, vaø moãi daãn chöùng taïo moät ñoái töôïng ñoäc nhaát töø khuoân maãu. Ngoaïi tröø ñoù laø module möùc treân laø nhöõng daãn chöùng töø chính chuùng. Caùc port cuûa module ví duï phaûi thoûa nhöõng dònh nghóa trong khuoân maãu. Ñaây laø maët lyù thuyeát: baèng teân, söû duïng daáu chaám(.) ”.teân port khuoân maãu ( teân cuûa wire keát noái ñeán port)”. Baèng vò trí, ñaët nhöõng port ôû nhöõng vò trí gioáng nhau trong danh saùch port cuûa caû khuoân maãu laãn instance. 1. Cuù phaùp: Teân instance1 (danh saùch keát noái port ); Teân instance2(danh saùch keát noái port); … 2. Ví duï: // ñònh nghóa module module and4(a,b,c); input [3:0]a,b; output [3:0]c; GV: Nguyeãn Troïng Haûi Trang 17
  19. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog assign c = a&b; endmodule // module instantiations wire [3:0] in1, in2; wire [3:0] o1, o2; // ñaët vò trí and4 C1(in1, in2,o1); // teân and4 C2(.c(o2), .a(in1), .b(in2)); GV: Nguyeãn Troïng Haûi Trang 18
  20. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông VIII KHUOÂN MAÃU HAØNH VI (BEHAVIORAL) Verilog coù 4 möùc khuoân maãu: • Chuyeån maïch. Khoâng ñöôïc ñeà caäp ñeán ôû ñaây. • Coång. • Möùc traøn döõ lieäu. • Haønh vi hoaëc thuû tuïc ñöôïc ñeà caäp ôû beân döôùi Caùc leänh thuû tuïc Verilog ñöôïc duøng taïo moät maãu thieát keá ôû möùc cao hôn. Chuùng chæ ra nhöõng caùch thöùc maïnh cuûa veäc laøm ra nhöõng thieát keá phöùc taïp. Tuy nhieân, nhöõng thay ñoåi nhoû n phöông phaùp maõ hoùa coù theå gay ra bieán ñoåi lôùn trong phaàn cöùng. Caùc leänh thuû tuïc chæ coù theå ñöôïc duøng trong nhöõng thuû tuïc. I. Nhöõng chæ ñònh theo thuû tuïc: Laø nhöõng chæ ñònh duøng trong phaïm vi thuû tuïc Verilog (khoái always vaø initial). Chæ bieán reg vaø integers (vaø choïn ñôn bit/ nhoùm bit cuûa chuùng, vaø keát noái thoâng tin) coù theå ñöôïc ñaët beân traùi daáu ‘=’ trong thuû tuïc. Beân phaûi cuûa chæ ñònh laø moät bieåu thöùc maø coù theå duøng baát cöù daïng toaùn töû naøo. II. Delay trong chæ ñònh: Trong chæ ñònh treã ∆t laø khoaûng thôøi gian traûi qua tröôùc khi moät leänh ñöôïc thöïc thi vaø beân traùi leänh gaùn ñöôïc taïo ra. Vôùi nhieàu chæ ñònh treã (intra-assignment delay), beân phaûi ñöôïc ñònh giaù trò tröïc tieáp nhöng coù moät delay cuûa ∆t tröôùc khi keát quaû ñöôïc ñaët beân traùi leänh gaùn. Neáu theâm moät quaù trình thay ñoåi nöõa caïnh beân phaûi tín hieäu trong khoaûng thôi gian ∆t,thì khoâng cho keát quaû ôû ngoõ ra. Delay khoâng ñöôïc hoã trôï bôûi caùc coâng cuï. 1. Cuù phaùp chæ ñònh thuû tuïc: Bieán = bieåu thöùc; Chæ dònh treã: GV: Nguyeãn Troïng Haûi Trang 19
nguon tai.lieu . vn