Tóm tắt bài giảng verilog

tóm tắt bài giảng verilog chương 1: Tổng quan chương 2:chức năng các từ vựng trong verilog chương 3: Các cổng trong verilog chương 4: Các dạng dữ liệu chương 5: Toán tử chương 6: Toán hạng chơng 7: Modules chương 8: Khuôn mẫu hành vi

pdf42 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 1997 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tóm tắt bài giảng verilog, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 1 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 Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 2 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 -, &, #, @ Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 3 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. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 4 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 Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 5 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); Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 6 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ï: Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 7 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. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 8 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ï: Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 9 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. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 10 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]; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 11 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ï: Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 12 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<<2; c = a dòch traùi 2 bit caùc choã troáng ñöôïc ñieàn vôùi nhöõng soá 0. VII. Toaùn töû dòch: Gheùp hai hoaëc nhieàu toaùn haïng thaønh moät vectô lôùn. 1. Toaùn töû: {} (concatenation) 2. Ví duï: Wire [1:0] a, b; Wire [2:0] x; Wire [3:0] y, Z; Assign x = {1’b0, a}; // x[2] = 0, x[1] = a[1], x[0] = a[0]. Assign y = {a, b}; // y[3]= a[1], y[2] = a[0], y[1] = b[1], y[0] = b[0]. VIII. Toaùn töû thöù baûn: Taïo ra nhieàu baûn sao cuûa moät muïc choïn. 1. Toaùn töû: {n{ muïc choïn }} n nhoùm thöù baûn trong moät muïc choïn. 2. Ví duï: Wire [1:0] a, b; Wire [3:0] x; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 13 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 Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 14 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ï: Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 15 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. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 16 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 Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 17 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; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 18 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)); Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 19 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ã: Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 20 #∆t bieán = bieåu thöùc; intra_assignment delay: bieán = #∆t bieåu thöùc. 2. Ví duï: Reg [6:0] sum; reg h, zilch; Sum[7] = b[7]^c[7]; // thöïc thi töùc thôøi; Ziltch = #15 ckz & h; // ckz & h ñònh giaù trò töùc thôøi; ziltch thay ñoåi sau 15 ñôn vò thôøi gian. #10 hat = b & c;/* 10 ñôn vò thôøi gian sau khi ziltch thay ñoåi, b & c ñöôïc ñònh giaù vaø hat thay ñoåi*/ III. Chæ ñònh khoái: Chæ ñònh khoái (=) thöïc hieän lieân tuïc trong thöù töï leänh ñaõ ñöôïc vieát. Chæ ñònh thöù hai khoâng ñöôïc thöïc thi neáu nhö chæ ñònh ñaàu cho hoaøn thaønh. 1. Cuù phaùp: Bieán = bieåu thöùc; Bieán = #∆t bieåu thöùc; #∆t bieán = bieåu thöùc; 2. Ví duï: Initial Begin a = 1; b = 2; c = 3; #5 a = b + c; // sau 5 ñôn vò thôøi gian thöïc hieän a = b + c = 5. d = a; // d = a = 5. Always @(posedge clk) Begin Z = Y; Y = X; // thanh ghi dòch. y = x; z = y; // flip flop song song. IV. Begin …end: Leänh khoái begin … end ñöôïc duøng ñeå nhoùm moät vaøi leänh maø moät leänh cuù phaùp ñöôïc cho pheùp. Bao goàm function, khoái always vaø khoái initial. Nhöõng khoái naøy coù theå ñöôïc tuøy yù goïi teân. Vaø bao goàm khai baùo reg, integer, tham soá. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 21 1. Cuù phaùp: Begin: teân khoái Reg[msb:lsb] danh saùch bieán reg; Integer [msb:lsb] danh saùch integer; Parameter [msb:lsb] danh saùch tham soá; …caùc leänh… End 2. Ví duï: function trivial_one;// teân khoái laø: trivial_one input a; begin: adder_blk integer i; … leänh… end V. Voøng laëp for: Gioáng nhö c/c++ ñöôïc duøng ñeå thöïc hieän nhieàu laàn moät leänh hoaëc khoái leänh. Neáu trong voøng laëp chæ chöùa moät leänh thì khoái begin … end coù theå boû qua. 1. Cuù phaùp: For (bieán ñeám = giaù trò 1; bieán ñeám / >= giaù trò 2; bieán ñeám = bieán ñeám +/- giaù trò) begin … leänh … end 2. Ví duï: For (j = 0; j<=7; j = j+1) Begin c[j] = a[j] & b[j]; d[j] = a[j] | b[j]; end VI. Voøng laëp while: Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 22 Voøng laëp while thöïc hieän nhieàu laàn moät leänh hoaëc khoái leänh cho ñeán khi bieåu thöùc trong leänh while ñònh giaù laø sai. 1. Cuù phaùp: While (bieåu thöùc) Begin … caùc leänh… end 2. Ví duï: While (!overflow) @(posedge clk); a = a +1; end VII. Khoái leänh if… else if… else: Thöïc hieän moät leänh hoaëc moät khoái leänh phuï thuoäc vaøo keát quaû cuûa bieåu thöùc theo sau meänh ñeà if. Cuù phaùp If (bieåu thöùc) Begin … caùc leänh… end else if (bieåu thöùc) Begin … caùc leänh… end else Begin … caùc leänh… end VIII. Case: Leänh case cho pheùp löïa choïn tröôøng hôïp. Caùc leäng trong khoái default thöïc thi khi khoâng coù tröôøng hôïp löïa choïn so saùnh gioáng nhau. Neáu khoâng coù söï so Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 23 saùnh, bao goàm caû default, laø ñuùng, söï toång hôïp seõ taïo ra choát khoâng mong muoán. 1. Cuù phaùp: Case (bieåu thöùc) Case 1: Begin … caùc leänh… end Case 2: Begin … caùc leänh… end Case 3: Begin … caùc leänh… end … default: begin … caùc leänh… end endcase 2. Ví duï: Case (alu_clk) 2’b00: aluout = a + b; 2’b01: aluout = a - b; 2’b10: aluout = a & b; default: aluout = 1’bx; endcase Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 24 Chöông IX KHOÁI ALWAYS VAØ KHOÁI INITIAL I. Khoái always: Laø caáu truùc chín trong khuoân maãu RTL (Register Transfer Level). Gioáng chæ ñònh lieân tuïc, ñaây laø traïng thaùi toàn taïi maø ñöôïc thöïc thi lieân tuïc trong khi moâ phoûng. Caùi naøy cuõng coù nghóa laø taát caû caùc khoái always trong moät module thöïc thi moät caùch lieân tuïc. Khoái always coù theå ñöôïc duøng trong choát, flip flop hay caùc keát noái logic. Neáu caùc leänh cuûa khoái always naèm trong phaïm vi khoái begin… end thì ñöôïc thöïc thi lieân tuïc, neáu naèm trong khoái fort… join, chuùng ñöôïc thöïc thi ñoàng thôøi (chæ trong moâ phoûng). Khoái always thöïc hieän baèng möùc, caïnh leân hoaëc caïnh xuoáng cuûa moät hay nhieàu tín hieäu (caùc tín hieäu caùch nhau bôûi töø khoùa OR). Cuù phaùp: Always @(söï kieän 1 or söï kieän 2 or…) Begin … caùc leänh… end Always @(söï kieän 1 or söï kieän 2 or…) Begin: teân khoái … caùc leänh… end II. Khoái initial Gioáng nhö khoái always nhöng khoái initial chæ thöïc thi moät laàn töø luùc baét d8aàu cuûa quaù trình moâ phoûng. Khoái naøy thì tieâu bieåu ñeå bieán khôûi chaïy vaø chæ ñònh daïng soùng tín hieäu trong luùc moâ phoûng. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 25 1. Cuù phaùp: Initial Begin … caùc leänh… end 2. Ví duï: Initial Begin Clr = 0; Clk = 1; End Initial Begin a = 2’b00; #50 a = 2’b01; #50 a = 2’b10; end Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 26 Chöông X HAØM Haøm ñöôïc khai baùo trong phaïm vi moät module, vaø coù theå ñöôïc goïi töø nhöõng leänh lieân tuïc, khoái always, hoaëc nhöõng haøm khaùc. Trong leänh chæ ñònh lieân tuïc, cuùng ñöôïc chæ ñònh lieân tuïc khi baát kì caùc haøm khai baùo ngoõ vaøo thay ñoåi. Trong chöông trinh chuùng ñöôïc chæ dòng tôùi khi caàn goïi. Caùc haøm moâ taû söï keát noái logic, vaø khoâng taïo ra choát. Do ñoù moät leänh if maø khoâng else se moâ phoûng , maëc duø noù coù choát döõ lieäu nhöng moâ phoûng thì khoâng coù. Ñaây laø tröôøng hôïp dôû cuûa toång hôïp khoâng coù moâ phoûng theo sau. Ñaây laø khaùi nieäm toát ñeå maõ hoùa haøm, vì vaäy chuùng seõ khoâng taïo ra choát neáu maõ haøm ñöôïc duøng trong moät chöông trình. I. Khai baùo haøm: Khai baùo haøm laø chæ ra teân haøm, chieàu roäng cuûa haøm giaù trò traû veà, ñoái soá haøm döõ lieäu vaøo, caùc bieán (reg) duøng trong haøm, vaø tham soá cuïc boä cuûa haøm, soá nguyeân cuûa haøm. 1. Cuù phaùp: Function [msb:lsb] teân haøm; Input [msb:lsb]bieán vaøo; Reg [msb:lsb]bieán reg; Parameter [msb:lsb] tham soá; Integer [msb:lsb] soá nguyeân; … caùc leänh… endfunction 2. Ví duï Function [7:0] my_func; // haøm traû veà giaù trò 8 bit Input [7:0] i; Reg [4:0] temp; Integer n; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 27 temp = i[7:4]| (i[3:0]); my_func = {temp,i[1:0]}; endfunction II. Ví duï: Moät haøm chæ coù chöùa moät döõ lieäu ra. Neáu coù nhieàu hôn moät giaù trò traû veà ñöôïc yeâu caàu, ngoõ ra seõ phaûi keát noái taïo thaønh moät vector tröôùc khi ñaët giaù trò cho haøm ñeå goïi teân haøm. Goïi teân chöông trình module coù theå trích ra sau ñoù, rieâng ñoái vôùi ngoõ ra töø caùc bieåu maåu noái vaøo nhau. Ví duï döôùi ñaây minh hoïa toång quaùt caùch duøng vaø cuù phaùp haøm trong verilog. 1. Cuù phaùp: Teân haøm = bieåu thöùc. 2. Ví duï: Module simple_processor (instruction, outp); Input [31:0] instruction; Output [7:0] outp; Reg [7:0] outp;// coù theå ñöôïc gaùn trong khoái always. Reg func; Reg [7:0] opr1, opr2; Function[16:0] decode add(instr) Input [31:0] instr; Reg add_func; Reg [7:0] opcode, opr1, opr2; Begin Opcode = instr[31:24]; Opr1 = instr[7:0]; Case (opcode) 8’b 10001000: begin add_func = 1; opr2 = instr[15:8]; end Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 28 8’b 10001001: begin add_func = 0; opr2 = instr[15:8]; end 8’b 10001010: begin add_func = 1; opr2 = 8’b 00000001; end default: begin add_func = 0; opr2 = 8’b00000001; end endcase decode_add = {add_func, opr2, opr1}; end endfunction always @(intruction) begin {func, opr2, opr1}= decode_add (intruction); if (func= =1) outp = opr1+ opr2; else outp = opr1 – opr2; end endmodule Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 29 Chöông XI CHÖÙC NAÊNG LINH KIEÄN Choát döõ lieäu (latches): ñöôïc suy neáu moät bieán, moät trong caùc bit khoâng ñöôïc gaùn trong caùc nhaùnh cuûa moät leänh if. Choát döõ lieäu cuõng ñöôïc suy ra töø leänh case neáu moät bieán ñöôïc gaùn chæ trong moät vaøi nhaùnh. Hoaøn thieän maõ coù theå ñoïc ñöôïc duøng leänh if ñeå toång hôïp choát vì thaät khoù ñeå chæ ñònh roõ raøng. Theo lyù thuyeát, moät söï xaùc laäp hôïp lí neân ñöôïc suy ra töø maõ Verilog. Cuù phaùp: If… else if… else vaø case. I. Thanh ghi Edge_triggered, flip_flop, boä ñeám: Moät thanh ghi (flip_flop) ñöôïc suy luaän baèng vieäc duøng xung kích caïnh leân hoaëc xuoáng trong danh saùch söï kieän cuûa leänh khoái always. Cuù phaùp: Always @(posedge clk or posedge reset1 or nesedge reset2) Begin If (reset1) begin Caùc chæ ñònh reset end else if (reset2) begin Caùc chæ ñònh reset End Else begin Caùc chæ ñònh reset End II. Boä ña coäng: Ñöôïc suy ra bôûi vieäc gaùn moät bieán maø giaù trò moãi bieán khaùc nhau trong moûi nhaùnh cuûa leänh if hoaëc case. Coù theå traùnh caùc chæ ñònh vaø moïi nhaùnh coù theå Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 30 toàn taïi baèng vieäc söû duïng ngoaøi nhöõng nhaùnh maëc ñònh. Chuù yù raèng choát seõ ñöôïc taïo ra neáu moät bieán khoâng ñöôïc gaùn cho caùc ñieàu kieän nhaùnh coù theå toàn taïi. Ñeå hoaøn thieän maõ coù theå ñoïc ñöôïc, duøng leänh case ñeå taïo maãu ña coäng lôùn. III. Boä coäng, tröø: Toaùn töû coäng tröø trong boä coäng tröø maø coù chieàu roäng phuï thuoäc vaøo chieàu roäg cuûa toaùn töû lôùn hôn. IV. Boä ñeäm 3 traïng thaùi: Boä ñeäm ba traïng thaùi ñöôïc suy ra neáu bieán ñöôïc gaùn theo ñieàu kieän giaù trò toång trôû cao Z duøng moät trong caùc toaùn töû: if, case,… V. Caùc linh kieän khaùc: Haàu heát caùc coång logic ñöôïc suy ra töø vieäc duøng nhöõng toaùn haïng töông öùng cuûa chuùng. Nhö moät söï löïa choïn moät coång hoaëc moät thaønh phaàn coù theå ñöôïc giaûi thích roõ raøng baèng ví duï cuï theå vaø söû duïng caùc coång cô sôû (and, or, nor, inv…) mieãn laø baèng ngoân ngöõ Verilog. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 31 Chöông XII MOÄT SOÁ VÍ DUÏ I. Caáu truùc moät 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 II. Moät soá ví duï: Phaàn meàn hoã trôï: MAX+plusII 10.0 BASELINE 1. Ví duï 1: a. Chöông trình tính NOR caùc bit cuûa bieán vaøo module vdcong(in,out); input[3:0] in; output out; assign out= ~|in; endmodule Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 32 b. Moâ phoûng 2. Ví duï 2: a. Chöông trình coäng hai bieán boán bit module adder (sum_out, carry_out, carry_in, ina, inb); output [3:0]sum_out; input [3:0]ina, inb; output carry_out; input carry_in; wire carry_out, carry_in; wire[3:0] sum_out, ina, inb; assign { carry_out, sum_out } = ina + inb + carry_in; Endmodule Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 33 b. Moâ phoûng 3. Ví duï 3: a. Chöông trình giaûi maõ 2 sang 4 module dec2to4 (w, en, y); input [1:0] w; input en; output[3:0] y; wire[1:0]w; reg[3:0]y; wire en; always @(w or en) begin if(en==1'b1) begin case(w) 2'b00: y<=4'b1000; 2'b01: y<=4'b0100; 2'b10: y<=4'b0010; default:y<=4'b0001; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 34 endcase end else y<= 4'b0000; end endmodule b. Moâ phoûng 4. Ví duï 4: a. Boä doàn keânh 2 sang 1 module mux12(w0, w1, s, y); input w0, w1; input s; output y; wire w0, w1, s; reg y; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 35 always @(w0 or w1 or s) begin if(s==1) y = w0; else y = w1; end endmodule b. Moâ phoûng 5. Ví duï 5: a. Chöông trình doàn keânh 4 sang 1 module mux14(w0, w1, w2, w3, s, y); input w0, w1, w2, w3; input[1:0] s; output y; wire w0, w1,w2,w3; reg y; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 36 always @(w0 or w1 or s) begin case (s) 2'b00: y=w0; 2'b01: y=w1; 2'b10: y=w2; default: y = w3; endcase end endmodule b. Moâ phoûng 6. Ví duï 6: a. Chöông trình ñoåi BCD sang baûy ñoaïn Module mp_led(bcd,led); input [3:0] bcd; output [7:0] led; wire [3:0] bcd; Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 37 reg [7:0] led; always @(bcd) begin case(bcd) 4'b0000: led = 8'b00000011; 4'b0001: led = 8'b10011111; 4'b0010: led = 8'b00100101; 4'b0011: led = 8'b00001101; 4'b0100: led = 8'b10011001; 4'b0101: led = 8'b01001001; 4'b0110: led = 8'b01000001; 4'b0111: led = 8'b00011111; 4'b1000: led = 8'b00000001; 4'b1001: led = 8'b00001001; default: led = 8'b00000000; endcase end endmodule b. Moâ phoûng Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 38 7. Ví duï 7: a. Chöông trình giaûm töø 9 xuoáng 0, hieån thò ra led 7 ñoaïn module bcd (clock, rst, s1, led, digit1); input clock, s1, rst; output [7:0] led; output digit1; reg [7:0] led; reg [3:0] bcd; wire digit1; assign digit1 = 1'b1; always @(posedge clock ) begin if (rst == 1'b1) bcd <= 4'b1001; else if (s1 == 1'b1) bcd <= bcd - 1'b1; if (bcd == 4'b0) bcd <= 4'b1001; end always @(posedge clock) begin case(bcd) 4'b0000: led = 8'b11111100; 4'b0001: led = 8'b01100000; 4'b0010: led = 8'b11011010; 4'b0011: led = 8'b11110010; 4'b0100: led = 8'b01100110; 4'b0101: led = 8'b10110110; 4'b0110: led = 8'b10111110; 4'b0111: led = 8'b11100000; 4'b1000: led = 8'b11111110; 4'b1001: led = 8'b11100110; default: led = 8'b11111111; endcase end endmodule Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 39 b. Moâ phoûng 8. Ví duï 8: a. Chöông trình taêng töø 0 ñeán 9, hieån thò ra led 7 ñoaïn module bcdtang (clock, rst, s1, led, digit1); input clock, s1, rst; output [7:0] led; output digit1; reg [7:0] led; reg [3:0] bcd; wire digit1; assign digit1 = 1'b1; always @(posedge clock ) begin if (rst == 1'b1) bcd <= 4'b0; else if (s1 == 1'b1) bcd <= bcd + 1'b1; if (bcd == 4'b1001) bcd <= 4'b0000; end Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 40 always @(posedge clock) begin case(bcd) 4'b0000: led = 8'b11111100; 4'b0001: led = 8'b01100000; 4'b0010: led = 8'b11011010; 4'b0011: led = 8'b11110010; 4'b0100: led = 8'b01100110; 4'b0101: led = 8'b10110110; 4'b0110: led = 8'b10111110; 4'b0111: led = 8'b11100000; 4'b1000: led = 8'b11111110; 4'b1001: led = 8'b11100110; default: led = 8'b11111111; endcase end endmodule b. Moâ phoûng Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 41 TAØI LIEÄU THAM KHAÛO 1. “Verilog Digital System Design” Zainalabedin Navadi Northeastern University University of Tehran 2. “Introduction of Verilog” Peter M. Nyasulu 3. “Cadence Verilog – XL Reference Manual” 4. “Synopsys HDL Compiler for Verilog Reference Manual” 5. Diglab 10K10 Mannual

Các file đính kèm theo tài liệu này:

  • pdfTóm tắt bài giảng verilog.pdf