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
42 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2147 | Lượt tải: 0
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:
- Tóm tắt bài giảng verilog.pdf