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
CHUONG I
TONG @UAN

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
Chuong II
CHUC NANG CAC TU VUNG
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
Chuong III
CAC CONG CO BAN
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
Chuong IV
CAC DANG DU LIEU

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
ChuongV
TOAN TU

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 traùi), >> (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
Chuong VI
TOAN HANG

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
Chuong 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
Chuong VIII
KHUON MAU HANH VI
(BEHAVIORALJ


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
Chuong IX
KHOI ALWAYS VA
KHOI 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
Chuong X
HAM

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
Chuong XI
CHUC NANG LINH KIEN

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
Chuong XII
MOT 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

TAI LIEU THAM KHAO

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

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

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

Toùm taét baøi giaûng TK Heä Thoáng Soá VI. Toaùn töû:

Phaàn Verilog

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

thöù hai laø trì hoaõn xuoáng. c. vaø coù moät hoaëc nhieàu ngoõ vaøo. thì khi ñoù trì hoaõn leân xuoáng laø nhö nhau. // coång Or ñöôïc goïi laø ig. Delay: #( leân. nand. b. 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”. Ñoä beàn ngoõ ra laø söï keát noái moät chieàu ñeán nguoàn. thì khi ñoù coång khoâng coù trì hoaõn truyeàn taûi. Drive_strenght thöôøng khoâng ñöôïc chæ roõ. keát thuùc laø toång trôû keùo leân hoaëc xuoáng. d). Caùc coång cô baûn: Caùc coång cô baûn coù moät ngoõ ra. input_N). input_2. 1. cuù phaùp cuï theå bieåu dieãn beân döôùi. // coù 4 ngoõ vaøo coång And goïi laø c1 c2 (p. Cuù phaùp: GATE (drive_strength)#(delays) Teân töø khoùa coång _teân (output. // vaø 2 ngoõ vaøo coång and goïi laø c2 Or #(4.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. b. Ví duï: And c1 (o. neáu coù hai delay ñöôïc chæ ñònh. or. Delay: neáu delay khoâng ñöôïc chæ roõ. g). …. caùc töø khoaù cuûa caùc coång: and. trong tröôøng hôïp naøy ñoä beàn maëc ñònh laø strong1 vaø strong0 . Trong caùc coång. thì tröôùc tieân laø mieâu taû trì hoaõn leân. Coù hai ñaëc tính ñöôïc chæ roõ laø: drive_strenght vaø delay. fall time = 3 GV: Nguyeãn Troïng Haûi Trang 4 . I. Drive_strenght chæ söùc beàn cuûa coång. input_1. a.3) ig ( o. keá ñoù taïo neân söï keát noái trong suoát trans daãn. Delay ñöôïc boû qua trong toång hôïp. Neáu chæ coù moät delay ñöôïc chæ ñònh. f. xuoáng) hoaëc #leân_vaø_xuoáng hoaëc #( leân_vaø_xuoáng) 2. rise time = 4. c). nor. Caùc tham soá cho caùc coång cô sôû phaûi ñöôïc ñònh nghóa tröôùc nhö delay.

Chuùng coù moät ngoõ vaøo. Cuù phaùp cuï theå bieåu dieãn ôû beân döôùi. Cuù phaùp: Teân töø khoùa coång _teân (output_1. input). f. g). 1. Ví duï: Not #(5) not_1( a. in). // sau 5 ñôn vò thôøi gian thì a = ñaûo c Buf c1 (o. hai hay nhieàu ngoõ ra. töø khoaù buf. r.c). output_2. …. output_N. GV: Nguyeãn Troïng Haûi Trang 5 . q. b. // sau 5 ñôn vò thôøi gian thì a = b xor c II.Toùm taét baøi giaûng TK Heä Thoáng Soá Xor #(5) xor1 (a. p. 2. not. Coång buf. // boä ñeäm 5 ngoõ ra vaø 2 ngoõ ra c2 (p. not: Phaàn Verilog Caùc coång naøy thöïc thi ñeäm vaø ñaûo theo theo thöù töï ñòmh saún. c).

1: möùc logic 1. hoaëc ñieàu kieän ñuùng. 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. Giaù trò cuûa Wire coù theå ñoïc. X: möùc logic tuyø ñònh Z: traïng thaùi toång trôû cao. Tri [msb:lsb] teân bieán tri. 1. Cuù phaùp: Wire [msb:lsb] teân bieá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. 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. 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. 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.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. Ví duï: Trang 6 GV: Nguyeãn Troïng Haûi . X vaø Z duøng coù giôùi haïn trong toång hôïp (synthesis) II. Wand [msb:lsb] teân bieán wand. Wor [msb:lsb] teân bieán wor. Haàu heát caùc daïng döõ lieäu Verilog chöùa caùc giaù trò sau: 0: möùc logic 0. 2. nhöng khoâng ñöôïc gaùn trong haøm (function) hoaëc khoái (block). Ñaët giaù trò: Verilog bao goàm 4 giaù trò cô baûn. hoaëc ñieàu kieän sai.

wand. Maëc ñònh laø wire. Inout: Nhöõng töø khoaù naøy bieåu thò ngoõ vaøo. // hai ngoõ ra maëc ñònh laø kieåu wire.// giaù trò d laø möùc logic cuûa pheùp And a vaø b. 1. vaø port hai chieàu cuûa moät module hoaëc task. Reg: Phaàn Verilog 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. 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. moät bank cuûa 8 thanh ghi. 1. hoaëc tri. Output b. /* ngoõ ra hai bit. Assign d= b.ra hai chieàu. // moät ngoõ vaøo maëc ñònh laø kieåu wire.Toùm taét baøi giaûng TK Heä Thoáng Soá Wire c. phaûi ñöôïc khai baùotrong moät leänh rieâng*/ Reg [1:0] c. reg. GV: Nguyeãn Troïng Haûi Trang 7 . Output. // hai bieán thanh ghi 6 bit. Output [msb:lsb] port ngoõ ra. Ví duï: Module sample (b. // vectô A coù 10 wire. c. e. 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. c. Ví duï: Reg a. Wand d. Cuù phaùp: Reg [msb:lsb] teân bieán reg. ñöôïc thöïc hieän maø ngöôøi söû duïng coù chuû y ùlaø soá buø hai. // bieán thanh ghi ñôn giaûn 1 bit. wor. // moät vectô 8 bit. Reg [7:0] A. Cuù phaùp: Input [msb:lsb] port ngoõ vaøo. 2. Inout [msb:lsb] port ngoõ vaøo. III. Assign d= a. 2. a). Wire [9:0] A. Moät port ngoõ ra coù theå ñöôïc caáu hình töø caùc daïng: wire. ngoõ ra. Input a. IV. Input. Output [1:0] c. e. // ngoõ c ñöôïc khai baùo nhö moät reg. Reg [5:0]b.

…. Cuù phaùp: Time bieán time.Toùm taét baøi giaûng TK Heä Thoáng Soá V. Parameter [giôùi haïn] par_3 = giaù trò. tham soá. VII. 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. 1. Neáu chuùng chöùa haèng. Chuùng hoaøn toaøn laø reg. VIII. Time khoâng ñöôïc hoã trôï toång hôïp vaø vì theá chæ ñöôïc duøng trong muïc ñích moâ phoûng. Supply 0. c = $time. par_2= gaùi trò. 2. Supply1: Xaùc ñònh choå ñöôøng daãn leân möùc logic 0 ( ñaát). heä thoáng thao taùc chöùa löôïng thôøi gian moâ phoûng. Tuy nhieâu chuùng chöùa döõ lieäu baèng nhöõng soá coù daáu. …teân haèng nguyeân…. Time: Time laø moät löôïng 64 bit maø ñöôïc söû duïng cuøng vôùi $time. trong khi ñoù khai baùo daïng reg chöùa chung baèng soá khoâng daáu. Cuù phaùp: Parameter par_1= gaùi trò. VI. Ví duï: Time c. 2. 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. 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. // soá nguyeân ñôn giaûn 32bit. vaø haèng soá. // c = thôøi gian moâ phoûng doøng ñieän. Cuù phaùp: Integer teân bieán nguyeân. Integer (Soá nguyeân): Phaàn Verilog Integer laø moät bieán ña naêng. // maëc ñònh laø moät bieán 7 bit. Assign b= 63. Trong toång hôïp chuùng ñöôïc duøng chuû yeáu cho voøng laëp. 2. 1. Ví duï: Trang 8 GV: Nguyeãn Troïng Haûi . Caùc naøy cho pheùp ta coù theå söûa chöõa. 1. logic 1( nguoàn) theo thöù töï ñònh saün. Ví duï: Integer a.

end. else state =par_2[2]. … Phaàn Verilog reg [n-1:0] harry. always @(x) y = {{(add .Toùm taét baøi giaûng TK Heä Thoáng Soá Parameter add = 2b’00.// moät thanh ghi 4 bít maø ñoä roäng ñöôïc ñaët bôûi tham soá n ôû treân. Parameter [3:0] par_2 = 4b’1010.sub) {x}}} if (x) begin state = par_2[1]. Parameter n = 4. sub = 3b’111. GV: Nguyeãn Troïng Haûi Trang 9 .

Ví duï: parameter n = 4. // so saùnh hai vector a. // coù theå ñeám töø 0 ñeán 15. Vì theá. Ví duï: If (x= =y) e =1. = =. 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. GV: Nguyeãn Troïng Haûi Trang 10 . /. II. if (a[3] = =b [3]) a[2:0] >b[2:0]. count = (count +1) % 16. 1. f= a +c. 2. Reg[3:0] a. *.y). g. else b[3]. Daáu ’+’ vaø ’-’ coù theå ñöôïc söû duïng moät trong hai toaùn töû ñôn (-z) hoaëc keùp (x . c. -. f. (-3b001) = (3b111) vaø (-3b001) > ( 3b110) nhöng neáu laø soá nguyeân thì -1< 6. Toaùn töû: +. count. Bieán Wire vaø Reg laø nhöõng bieán döông. >. g= c –n. <=. Nhöõng toaùn töû naøy toång hôïp vaøo duïng cuï so saùnh. 1. >=. Caùc toaùn töû quan heä: <. %. Else e= 0. 2. b.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öû 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. !=. b reg [3:0] a.

^ (bieán ñoåi XOR). ~&( bieán ñoåi NAND). 2. … if ((x= = y)&&(z)) a=1. chuùng gioáng nhö toaùn töû bitwire chæ laø nhöõng toaùn haïng ñôn bit. c). 1. y. b. Toaùn töû logic ñöôïc duøng nhieàu trong leänh ñieàu kieän (if… else). & (bitwire AND). V. Toaùn töû bit_wire: So saùnh töøng bit hai toaùn toaùn haïng. Ví duï: Trang 11 GV: Nguyeãn Troïng Haûi . ~| (bieán ñoåi NOR). khi chuùng laøm vieäc treân bieåu thöùc. Endmodule IV. ~^ hoaëc Toaùn töû logic traû veà 1 bit ñôn 0 hoaëc 1. 1. z. 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. 2. Assign c = a & b. ^~ (bitwire XNOR). | (bieán ñoåi OR). Caùc toaùn töû: ~ (bitwire NOT). vaø coi nhu taát caû caùc giaù trò khoâng baèng 0 laø ’1’. Toaùn töû: !(NOT). Reg a. ~^ hoaëc ^~ (bieán ñoåi XNOR). Toaùn töû logic: Phaàn Verilog | (bitwire OR). Caùc toaùn töû: ~ (bieán ñoåi NOT). Ví duï: Module and2(a. & (bieán ñoåi AND). soá nguyeân hoaïc nhoùm bit. Input [1:0] a. || (OR) Ví duï: Wire [7:0] x. Chuùng coù theå laøm vieäc treân bieåu thöùc. 2. && (AND). else a=! x. Output [1:0] c. ^ (bitwire XOR).Toùm taét baøi giaûng TK Heä Thoáng Soá III. b. 1. 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.

Ví duï: Wire [1:0] a. >> (dòch phaûi). 2. VII. Endmodule VI. Ví duï: assign c = a<<2. y[1] = b[1]. c = a dòch traùi 2 bit caùc choã troáng ñöôïc ñieàn vôùi nhöõng soá 0. Toaùn töû: {} (concatenation) Ví duï: Wire [1:0] a. Toaùn töû gheùp: Phaàn Verilog 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. Output z. y[0] = b[0].Toùm taét baøi giaûng TK Heä Thoáng Soá Module chk_zero (a. GV: Nguyeãn Troïng Haûi Trang 12 . // y[3]= a[1]. Input [2:0] a. 1. Toaùn töû: << ( dòch traùi). 2. x[0] = a[0]. Assign y = {a. a}. b}. Z.z). Toaùn töû thöù baûn: Taïo ra nhieàu baûn sao cuûa moät muïc choïn. Toaùn töû: {n{ muïc choïn }} n nhoùm thöù baûn trong moät muïc choïn. Wire [2:0] x. // x[2] = 0. Assign x = {1’b0. b. VIII. b. Toaùn töû dòch: Gheùp hai hoaëc nhieàu toaùn haïng thaønh moät vectô lôùn. Wire [3:0] y. Assign z = ~| a. x[1] = a[1]. 2. Wire [3:0] x. 1. y[2] = a[0]. 1. 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. NAND. 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öû [] () !. Bit_wire XOR.3’b110} = 6’b101110 Thöù baûn {3{3’b101 } }=9’b101101101 Nhaân. Dòch traùi. phaàn traêm. Toaùn töû ñieàu kieän: Phaàn Verilog Gioáng nhö C/C++. chia. Bit_wire OR. ~^ Bieán ñoåi: AND. >. Baèng vaø khoâng baèng trong toaùn töû logic. >= = =. {} {{ } } *. Daáu so saùnh. ~&. != & ^. OR. XNOR. ~ +. 0. Assign a = ( inc = =2) ? a+1: a-1. Bit_wire XNOR. /. >> <. a}. Bit_wire AND. OR. X. |. ~^ | &&. <<. . <=.Toùm taét baøi giaûng TK Heä Thoáng Soá Assign x = {2{1’b0}. ^. % +. Ví duï: assign a = (g) ? x : y. // x= {0. Gheùp noái { 3’b101. 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. Chuùng ñònh giaù moät trong hai bieåu thöùc cô baûn trong moät ñieàu kieän. NOT. and taát caû caùc bit vôùi nhau. Bieán Reg vaø wire ñöôïc laáy baèng nhöõng soá döông. Coäng tröø nhò phaân. XOR. ~|. || ?: GV: Nguyeãn Troïng Haûi Choïn bit. 2. Noù seõ toång hôïp thaønh boä ña coäng (MUX). choïn phaàn Phaàn trong ngoaëc ñôn Möùc logic vaø bit_wire NOT Daáu chæ soá aâm soá döông. x = ( ñieàu kieän ) T:F Trang 13 Teân &. IX. Toaùn töû logic AND.a}. phaûi.

nhò phaân. F: moät trong boán ñònh daïng sau: b( soá nhò phaân). 267 // maëc ñònh 32 bit soá thaäp phaân. reg hoaëc töø tham soá ñaët trong ngoaïc [ ]. 2. 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. 2’b01 // 2 bit nhò phaân. Cuù phaùp caùc chöõ soá: n’F dddd… Trong ñoù: n : soá nguyeân mieâu taû soá bit. Ñaây laø söï löïa choïn moät bít ñôn hoaëc moät nhoùm bit theo thöù töï. II. 2. d( soá thaäp phaân). 1. Cuù phaùp: Teân bieán [ thöù töï bit]. Choïn 1 phaàn töû bit vaø choïn 1 phaàn caùc bit. 20’h B36E // 20 bit soá hex. töø moät wire. 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 ””. Teân bieán [ msb: lsb]. o( soá baùt phaân). ‘o62 // 32 bit baùt phaân. Ví duï: “time is”// chuoãi kí töï.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông VI TOAÙN HAÏNG I. Chöõ soá: laø nhöõng soá khoâng ñoåi. 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. baùt phaân. hoaëc soá hex. 1. h( soá hex). Ví duï: Trang 14 GV: Nguyeãn Troïng Haûi . thaäp phaân.

Goïi haøm chöùc naêng nhö laø moät trong nhöõng toaùn haïng. reg. 2. Input c. III. Ví duï: Assign a = b & c & chk_bc(b.Toùm taét baøi giaûng TK Heä Thoáng Soá Reg [7:0] a. Wire. reg. Cuù phaùp: Teân haøm(danh saùch bieán). b. Endfunction IV. c = a[7] & b[7]. GV: Nguyeãn Troïng Haûi Trang 15 . c). Reg [3:0] ls. Goïi haøm chöùc naêng: Phaàn Verilog 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. Chieàu roäng bít cuûa giaù trò traû veà chaéc chaén ñöôïc bieát tröôùc. Chk_bc = b^ c. b. 1. vaø tham soá: Wire. ls = a[7:4] + b[3:0]. Function chk_bc. vaø tham soá coù theå ñuôïc duøng nhö laø caùc toaùn haïng trong bieåu thöùc Verilog.

wand. Inout [ msb:lsb ] danh saùch port vaøo_ ra. Ví duï: Module add_sub(add. hoaëc inout) vaø chieàu roäng cuûa moãi port. vaø tham soá: Input[7:0 ] in1. Output [msb:lsb] danh saùch port ngoõ ra. 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. Cuù phaùp: Module teân module (danh saùch port). out). Nhöõng doøng keá tieáp chæ roõ daïng I/O (input. in2. …. Reg out. in2. nhöõng bieán port phaûi ñöôïc khai baùo wire. output. Wire in1. Input [msb:lsb] danh saùch port ngoõ vaøo. in2. reg.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông VII MODULES I. in1. Sau ñoù. Maëc ñònh chieàu roäng port laø 1 bit. Khai baùo modules: Moät module laø baûn thieát keá chuû yeáu toàn taïi trong Verilog. Wire. … caùc leänh khaùc… Endmodule GV: Nguyeãn Troïng Haûi Trang 16 . 1. … caùc leänh… endmodule 2. Output [7:0] out. 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á). reg. Maëc ñònh laø wire.

teân port khuoân maãu ( teân cuûa wire keát noái ñeán port)”.b. Ví duï: // ñònh nghóa module module and4(a. Cuù phaùp: Wire bieán wire = giaù trò. 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. 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. 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). III. Chæ ñònh lieân tieáp: Phaàn Verilog 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. Teân instance2(danh saùch keát noái port).Toùm taét baøi giaûng TK Heä Thoáng Soá II. Cuù phaùp: Teân instance1 (danh saùch keát noái port ).c). Caùc port cuûa module ví duï phaûi thoûa nhöõng dònh nghóa trong khuoân maãu. Assign bieán wire = bieåu thöùc. Assign b = c &d. 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.b. Assign d = x | y. output [3:0]c. Ví duï: Wire [ 1:0 ] a = 2’b 01. 1. Thöù töï caùc leänh gaùn khoâng quan troïng. input [3:0]a. 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. ñ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. GV: Nguyeãn Troïng Haûi Trang 17 . Ñoù laø caùc chæ ñònh thoâng thöôøng beân ngoaøi khoái always hoaëc khoái initial. söû duïng daáu chaám(. 1. … 2.) ”. Chuù yù raèng. 2. Baèng vò trí. Ñaây laø maët lyù thuyeát: baèng teân. Ngoaïi tröø ñoù laø module möùc treân laø nhöõng daãn chöùng töø chính chuùng.

Toùm taét baøi giaûng TK Heä Thoáng Soá assign c = a&b. Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 18 .a(in1). // ñaët vò trí and4 C1(in1.o1).b(in2)). // teân and4 C2(. . . in2.c(o2). endmodule // module instantiations wire [3:0] in1. in2. o2. wire [3:0] o1.

Vôùi nhieàu chæ ñònh treã (intra-assignment delay). Khoâng ñöôïc ñeà caäp ñeán ôû ñaây. Caùc leänh thuû tuïc chæ coù theå ñöôïc duøng trong nhöõng thuû tuïc. II. 1. Tuy nhieân. 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. Cuù phaùp chæ ñònh thuû tuïc: Bieán = bieåu thöùc. 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. I. 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. Delay khoâng ñöôïc hoã trôï bôûi caùc coâng cuï. vaø keát noái thoâng tin) coù theå ñöôïc ñaët beân traùi daáu ‘=’ trong thuû tuïc. 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. 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. Chæ dònh treã: GV: Nguyeãn Troïng Haûi Trang 19 . Chæ bieán reg vaø integers (vaø choïn ñôn bit/ nhoùm bit cuûa chuùng. • Möùc traøn döõ lieäu. • Coång. • 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.thì khoâng cho keát quaû ôû ngoõ ra. 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).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.

Phaàn Verilog Ziltch = #15 ckz & h.Toùm taét baøi giaûng TK Heä Thoáng Soá #∆t bieán = bieåu thöùc. IV. Y = X. // d = a = 5. b & c ñöôïc ñònh giaù vaø hat thay ñoåi*/ III./* 10 ñôn vò thôøi gian sau khi ziltch thay ñoåi. // flip flop song song. zilch. // thanh ghi dòch. #10 hat = b & c. Cuù phaùp: Bieán = bieåu thöùc. c = 3. z = y. Nhöõng khoái naøy coù theå ñöôïc tuøy yù goïi teân. 2. Chæ ñònh thöù hai khoâng ñöôïc thöïc thi neáu nhö chæ ñònh ñaàu cho hoaøn thaønh. Ví duï: Reg [6:0] sum. Ví duï: Initial Begin a = 1. ziltch thay ñoåi sau 15 ñôn vò thôøi gian. intra_assignment delay: bieán = #∆t bieåu thöùc. GV: Nguyeãn Troïng Haûi Trang 20 . integer. Sum[7] = b[7]^c[7]. // thöïc thi töùc thôøi. Vaø bao goàm khai baùo reg. // sau 5 ñôn vò thôøi gian thöïc hieän a = b + c = 5. reg h. 1. d = a. Bao goàm function. Bieán = #∆t bieåu thöùc. Always @(posedge clk) Begin Z = Y. #∆t bieán = bieåu thöùc. // ckz & h ñònh giaù trò töùc thôøi. b = 2. #5 a = b + c. khoái always vaø khoái initial. y = x. 2. 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. tham soá. 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.

Cuù phaùp: Begin: teân khoái Reg[msb:lsb] danh saùch bieán reg. begin: adder_blk integer i.// teân khoái laø: trivial_one input a. j = j+1) Begin c[j] = a[j] & b[j]. Voøng laëp while: GV: Nguyeãn Troïng Haûi Trang 21 . Ví duï: function trivial_one. Ví duï: For (j = 0.Toùm taét baøi giaûng TK Heä Thoáng Soá 1. bieán ñeám = bieán ñeám +/. end VI. Neáu trong voøng laëp chæ chöùa moät leänh thì khoái begin … end coù theå boû qua. …caùc leänh… End 2.giaù trò) begin … leänh … end 2. Cuù phaùp: For (bieán ñeám = giaù trò 1. Voøng laëp for: Phaàn Verilog 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. 1. Parameter [msb:lsb] danh saùch tham soá. Integer [msb:lsb] danh saùch integer. bieán ñeám </ <=/ >/ >= giaù trò 2. d[j] = a[j] | b[j]. … leänh… end V. j<=7.

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. a = a +1.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog 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. Case: Leänh case cho pheùp löïa choïn tröôøng hôïp. 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: While (bieåu thöùc) Begin … caùc leänh… end 2. end VII. Ví duï: While (!overflow) @(posedge clk). 1. 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 GV: Nguyeãn Troïng Haûi Trang 22 .

söï toång hôïp seõ taïo ra choát khoâng mong muoán. endcase GV: Nguyeãn Troïng Haûi Trang 23 .Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog saùnh. bao goàm caû default. Ví duï: Case (alu_clk) 2’b00: aluout = a + b. default: aluout = 1’bx. 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. laø ñuùng. 1.b. 2’b10: aluout = a & b. 2’b01: aluout = a .

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. 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. 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. 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. 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). 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. flip flop hay caùc keát noái logic. ñ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. Khoái always coù theå ñöôïc duøng trong choát. GV: Nguyeãn Troïng Haûi Trang 24 .Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog 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). chuùng ñöôïc thöïc thi ñoàng thôøi (chæ trong moâ phoûng). neáu naèm trong khoái fort… join. Gioáng chæ ñònh lieân tuïc. Khoái always thöïc hieän baèng möùc.

Toùm taét baøi giaûng TK Heä Thoáng Soá 1. Cuù phaùp: Initial Begin … caùc leänh… end 2. End Initial Begin a = 2’b00. end Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 25 . Clk = 1. #50 a = 2’b01. #50 a = 2’b10. Ví duï: Initial Begin Clr = 0.

Do ñoù moät leänh if maø khoâng else se moâ phoûng . Ví duï Function [7:0] my_func. ñoái soá haøm döõ lieäu vaøo. hoaëc nhöõng haøm khaùc. 1. vaø khoâng taïo ra choát. soá nguyeân cuûa haøm. 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à. Trong leänh chæ ñònh lieân tuïc. … caùc leänh… endfunction 2. Cuù phaùp: Function [msb:lsb] teân haøm. Integer n. caùc bieán (reg) duøng trong haøm. Reg [4:0] temp. Caùc haøm moâ taû söï keát noái logic. vaø tham soá cuïc boä cuûa haøm. Integer [msb:lsb] soá nguyeân. Reg [msb:lsb]bieán reg.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông X HAØM Haøm ñöôïc khai baùo trong phaïm vi moät module. 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. khoái always. Ñaây laø tröôøng hôïp dôû cuûa toång hôïp khoâng coù moâ phoûng theo sau. vaø coù theå ñöôïc goïi töø nhöõng leänh lieân tuïc. Ñaây laø khaùi nieäm toát ñeå maõ hoùa haøm. Input [msb:lsb]bieán vaøo. I. Parameter [msb:lsb] tham soá. GV: Nguyeãn Troïng Haûi Trang 26 . maëc duø noù coù choát döõ lieäu nhöng moâ phoûng thì khoâng coù. // haøm traû veà giaù trò 8 bit Input [7:0] i. 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.

Reg [7:0] opcode. Reg add_func. my_func = {temp. Neáu coù nhieàu hôn moät giaù trò traû veà ñöôïc yeâu caàu. Reg [7:0] opr1. rieâng ñoái vôùi ngoõ ra töø caùc bieåu maåu noái vaøo nhau. opr1. 1. Ví duï: Module simple_processor (instruction. opr2 = instr[15:8]. endfunction II.// coù theå ñöôïc gaùn trong khoái always. outp). Opr1 = instr[7:0]. end GV: Nguyeãn Troïng Haûi Trang 27 .Toùm taét baøi giaûng TK Heä Thoáng Soá temp = i[7:4]| (i[3:0]). Input [31:0] instruction. Function[16:0] decode add(instr) Input [31:0] instr. Reg [7:0] outp. opr2. 2. Begin Opcode = instr[31:24].i[1:0]}. Goïi teân chöông trình module coù theå trích ra sau ñoù. opr2. Cuù phaùp: Teân haøm = bieåu thöùc. Reg func. 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. Ví duï: Phaàn Verilog Moät haøm chæ coù chöùa moät döõ lieäu ra. Case (opcode) 8’b 10001000: begin add_func = 1. Output [7:0] outp. 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.

opr2. opr2 = 8’b00000001. opr2 = instr[15:8]. if (func= =1) outp = opr1+ opr2. end endcase decode_add = {add_func. end default: begin add_func = 0. end endfunction always @(intruction) begin {func. opr2. opr1}= decode_add (intruction).Toùm taét baøi giaûng TK Heä Thoáng Soá 8’b 10001001: begin add_func = 0. end 8’b 10001010: begin add_func = 1. opr1}. else outp = opr1 – opr2. end endmodule Phaàn Verilog GV: Nguyeãn Troïng Haûi Trang 28 . opr2 = 8’b 00000001.

moät söï xaùc laäp hôïp lí neân ñöôïc suy ra töø maõ Verilog. Theo lyù thuyeát. 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. I. Coù theå traùnh caùc chæ ñònh vaø moïi nhaùnh coù theå GV: Nguyeãn Troïng Haûi Trang 29 . 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. 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. flip_flop. moät trong caùc bit khoâng ñöôïc gaùn trong caùc nhaùnh cuûa moät leänh if. Thanh ghi Edge_triggered. Cuù phaùp: If… else if… else vaø case. 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.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông XI CHÖÙC NAÊNG LINH KIEÄN Choát döõ lieäu (latches): ñöôïc suy neáu moät bieán.

Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog toàn taïi baèng vieäc söû duïng ngoaøi nhöõng nhaùnh maëc ñònh. 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. case. or. 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. inv…) mieãn laø baèng ngoân ngöõ Verilog. Boä coäng. duøng leänh case ñeå taïo maãu ña coäng lôùn. 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. III. GV: Nguyeãn Troïng Haûi Trang 30 . 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.… V. Ñeå hoaøn thieän maõ coù theå ñoïc ñöôïc. 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. nor.

hoaëc khoái initial. … caùc leänh … Endmodule II.out). 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).0 BASELINE Ví duï 1: Chöông trình tính NOR caùc bit cuûa bieán vaøo module vdcong(in. // Khai baùo khoái always. Output [msb:lsb] bieán. assign out= ~|in. Input [msb:lsb] bieán. Moät soá ví duï: Phaàn meàn hoã trôï: MAX+plusII 10. a. input[3:0] in. output out.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông XII MOÄT SOÁ VÍ DUÏ I. // teân chöông trình truøng teân file.v. Reg [msb:lsb] bieán reg. endmodule GV: Nguyeãn Troïng Haûi Trang 31 . Wire [msb: lsb] bieán wire. 1.

carry_out. Ví duï 2: Chöông trình coäng hai bieán boán bit module adder (sum_out. inb. input [3:0]ina. sum_out } = ina + inb + carry_in. Moâ phoûng Phaàn Verilog 2.Toùm taét baøi giaûng TK Heä Thoáng Soá b. ina. assign { carry_out. output [3:0]sum_out. input carry_in. a. inb). carry_in. wire carry_out. output carry_out. wire[3:0] sum_out. carry_in. ina. inb. Endmodule GV: Nguyeãn Troïng Haûi Trang 32 .

2'b01: y<=4'b0100. wire en. reg[3:0]y. a. wire[1:0]w. output[3:0] y. Ví duï 3: Chöông trình giaûi maõ 2 sang 4 module dec2to4 (w. input [1:0] w. default:y<=4'b0001. input en. GV: Nguyeãn Troïng Haûi Trang 33 . en. Moâ phoûng Phaàn Verilog 3. y). always @(w or en) begin if(en==1'b1) begin case(w) 2'b00: y<=4'b1000. 2'b10: y<=4'b0010.Toùm taét baøi giaûng TK Heä Thoáng Soá b.

wire w0. w1. output y. a. y). input w0. Moâ phoûng 4. input s. s. endmodule b. w1. reg y. w1.Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog endcase end else end y<= 4'b0000. GV: Nguyeãn Troïng Haûi Trang 34 . s. Ví duï 4: Boä doàn keânh 2 sang 1 module mux12(w0.

w1. input w0. w3. input[1:0] s. reg y. w1. Ví duï 5: Chöông trình doàn keânh 4 sang 1 module mux14(w0. w2. w1.w2.Toùm taét baøi giaûng TK Heä Thoáng Soá always @(w0 or w1 or s) Phaàn Verilog begin if(s==1) y = w0. end endmodule b. a. w3. else y = w1. GV: Nguyeãn Troïng Haûi Trang 35 . wire w0. s. Moâ phoûng 5. w2. y). output y.w3.

output [7:0] led. GV: Nguyeãn Troïng Haûi Trang 36 . a.led). endcase end endmodule b. 2'b01: y=w1. default: y = w3. Moâ phoûng Phaàn Verilog 6. 2'b10: y=w2. wire [3:0] bcd.Toùm taét baøi giaûng TK Heä Thoáng Soá always @(w0 or w1 or s) begin case (s) 2'b00: y=w0. input [3:0] bcd. Ví duï 6: Chöông trình ñoåi BCD sang baûy ñoaïn Module mp_led(bcd.

4'b0011: led = 8'b00001101. 4'b0110: led = 8'b01000001. 4'b1000: led = 8'b00000001. Moâ phoûng GV: Nguyeãn Troïng Haûi Trang 37 . always @(bcd) begin case(bcd) 4'b0000: led = 8'b00000011. 4'b0101: led = 8'b01001001. 4'b0100: led = 8'b10011001. 4'b0111: led = 8'b00011111. 4'b0001: led = 8'b10011111.Toùm taét baøi giaûng TK Heä Thoáng Soá reg [7:0] led. default: led = 8'b00000000. 4'b0010: led = 8'b00100101. endcase end endmodule Phaàn Verilog b. 4'b1001: led = 8'b00001001.

output [7:0] led. 4'b0010: led = 8'b11011010. a.1'b1. digit1). 4'b0011: led = 8'b11110010. 4'b1000: led = 8'b11111110. reg [7:0] led. 4'b1001: led = 8'b11100110. s1. wire digit1. default: led = 8'b11111111. rst. reg [3:0] bcd. end always @(posedge clock) begin case(bcd) 4'b0000: led = 8'b11111100. assign digit1 = 1'b1. 4'b0110: led = 8'b10111110. if (bcd == 4'b0) bcd <= 4'b1001. hieån thò ra led 7 ñoaïn module bcd (clock. s1.Toùm taét baøi giaûng TK Heä Thoáng Soá 7. led. output digit1. 4'b0100: led = 8'b01100110. rst. endcase end endmodule GV: Nguyeãn Troïng Haûi Phaàn Verilog Trang 38 . Ví duï 7: Chöông trình giaûm töø 9 xuoáng 0. else if (s1 == 1'b1) bcd <= bcd . 4'b0101: led = 8'b10110110. input clock. always @(posedge clock ) begin if (rst == 1'b1) bcd <= 4'b1001. 4'b0001: led = 8'b01100000. 4'b0111: led = 8'b11100000.

else if (s1 == 1'b1) bcd <= bcd + 1'b1. reg [3:0] bcd. Moâ phoûng Phaàn Verilog 8. output digit1. hieån thò ra led 7 ñoaïn module bcdtang (clock. if (bcd == 4'b1001) bcd <= 4'b0000. reg [7:0] led.Toùm taét baøi giaûng TK Heä Thoáng Soá b. always @(posedge clock ) begin if (rst == 1'b1) bcd <= 4'b0. digit1). wire digit1. rst. led. a. s1. end GV: Nguyeãn Troïng Haûi Trang 39 . Ví duï 8: Chöông trình taêng töø 0 ñeán 9. s1. rst. output [7:0] led. input clock. assign digit1 = 1'b1.

Toùm taét baøi giaûng TK Heä Thoáng Soá always @(posedge clock) begin case(bcd) 4'b0000: led = 8'b11111100. 4'b1001: led = 8'b11100110. 4'b0110: led = 8'b10111110. 4'b1000: led = 8'b11111110. endcase end endmodule Phaàn Verilog b. 4'b0011: led = 8'b11110010. 4'b0111: led = 8'b11100000. 4'b0100: led = 8'b01100110. Moâ phoûng GV: Nguyeãn Troïng Haûi Trang 40 . 4'b0010: led = 8'b11011010. 4'b0001: led = 8'b01100000. default: led = 8'b11111111. 4'b0101: led = 8'b10110110.

Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog TAØI LIEÄU THAM KHAÛO 1. Nyasulu 3. “Introduction of Verilog” GV: Nguyeãn Troïng Haûi Trang 41 . “Cadence Verilog – XL Reference Manual” “Synopsys HDL Compiler for Verilog Reference Manual” Diglab 10K10 Mannual 2. 5. 4. “Verilog Digital System Design” Zainalabedin Navadi Northeastern University University of Tehran Peter M.

Sign up to vote on this title
UsefulNot useful