Académique Documents
Professionnel Documents
Culture Documents
VERILOG
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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
Endmodule
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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 -, &, #, @
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Chöông III
CAÙC COÅNG CÔ BAÛN
TRONG VERILOG
Caùc coång logic cô sôû laø moät boä phaän cuûa ngoân ngöõ Verilog. Coù hai ñaëc tính ñöôïc
chæ roõ laø: drive_strenght vaø delay.
Drive_strenght chæ söùc beàn cuûa coång. Ñoä beàn ngoõ ra laø söï keát noái moät chieàu
ñeán nguoàn, keá ñoù taïo neân söï keát noái trong suoát trans daãn, keát thuùc laø toång trôû
keùo leân hoaëc xuoáng. Drive_strenght thöôøng khoâng ñöôïc chæ roõ, trong tröôøng
hôïp naøy ñoä beàn maëc ñònh laø strong1 vaø strong0 .
Delay: neáu delay khoâng ñöôïc chæ roõ, thì khi ñoù coång khoâng coù trì hoaõn truyeàn
taûi; neáu coù hai delay ñöôïc chæ ñònh, thì tröôùc tieân laø mieâu taû trì hoaõn leân, thöù
hai laø trì hoaõn xuoáng. Neáu chæ coù moät delay ñöôïc chæ ñònh, thì khi ñoù trì hoaõn
leân xuoáng laø nhö nhau. Delay ñöôïc boû qua trong toång hôïp. Phöông phaùp cuûa
söï trì hoaõn chæ ñònh naøy laø moät tröôøng hôïp ñaëc bieät cuûa “Parameterized
Modules”. Caùc tham soá cho caùc coång cô sôû phaûi ñöôïc ñònh nghóa tröôùc nhö
delay.
I. Caùc coång cô baûn:
Caùc coång cô baûn coù moät ngoõ ra, vaø coù moät hoaëc nhieàu ngoõ vaøo. Trong caùc
coång, cuù phaùp cuï theå bieåu dieãn beân döôùi, caùc töø khoaù cuûa caùc coång: and, or,
nand, nor.
1. Cuù phaùp:
GATE (drive_strength)#(delays)
Teân töø khoùa coång _teân (output, input_1, input_2, …, input_N);
Delay: #( leân, xuoáng) hoaëc #leân_vaø_xuoáng hoaëc #( leân_vaø_xuoáng)
2. Ví duï:
And c1 (o, a, b, c. d); // coù 4 ngoõ vaøo coång And goïi laø c1
c2 (p, f, g); // vaø 2 ngoõ vaøo coång and goïi laø c2
Or #(4,3) ig ( o, b, c); // coång Or ñöôïc goïi laø ig, rise time = 4, fall time = 3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Xor #(5) xor1 (a, b, c); // sau 5 ñôn vò thôøi gian thì a = b xor c
II. Coång buf, not:
Caùc coång naøy thöïc thi ñeäm vaø ñaûo theo theo thöù töï ñòmh saún. Chuùng coù moät
ngoõ vaøo, hai hay nhieàu ngoõ ra. Cuù phaùp cuï theå bieåu dieãn ôû beân döôùi, töø khoaù
buf, not.
1. Cuù phaùp:
Teân töø khoùa coång _teân (output_1, output_2, …, output_N, input);
2. Ví duï:
Not #(5) not_1( a,c); // sau 5 ñôn vò thôøi gian thì a = ñaûo c
Buf c1 (o, p, q, r, in); // boä ñeäm 5 ngoõ ra vaø 2 ngoõ ra
c2 (p, f, g);
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Chöông IV
CAÙC DAÏNG DÖÕ LIEÄU
I. Ñaët giaù trò:
Verilog bao goàm 4 giaù trò cô baûn. Haàu heát caùc daïng döõ lieäu Verilog chöùa caùc
giaù trò sau:
0: möùc logic 0, hoaëc ñieàu kieän sai.
1: möùc logic 1, hoaëc ñieàu kieän ñuùng.
X: möùc logic tuyø ñònh
Z: traïng thaùi toång trôû cao.
X vaø Z duøng coù giôùi haïn trong toång hôïp (synthesis)
II. Wire:
Moâ taû vaät lieäu ñöôøng daây daãn trong moät maïch ñieän vaø ñöôïc duøng ñeå keát noái
caùc coång hay caùc module. Giaù trò cuûa Wire coù theå ñoïc, nhöng khoâng ñöôïc gaùn
trong haøm (function) hoaëc khoái (block). Wire khoâng löu tröõ giaù trò cuûa noù
nhöng vaãn phaûi ñöôïc thöïc thi bôûi 1 leänh gaùn keá tieáp hay bôûi söï keát noái Wire
vôùi ngoõ ra cuûa 1 coång hoaëc 1 module. Nhöõng daïng ñaëc bieät khaùc cuûa Wire:
Wand(wired_and): giaù trò phuï thuoäc vaøo möùc logic And toaøn boä boä ñieàu khieån
keát noái ñeán Wire.
Wor (wired_or): giaù trò phuï thuoäc vaøo möùc logic Or toaøn boä boä ñieàu khieån keát
noái ñeán Wire.
Tri(three_state): taát caû boä ñieàu khieån keát noái ñeán 1 tri phaûi ôû traïng thaùi toång
trôû cao.
1. Cuù phaùp:
Wire [msb:lsb] teân bieán wire.
Wand [msb:lsb] teân bieán wand.
Wor [msb:lsb] teân bieán wor.
Tri [msb:lsb] teân bieán tri.
2. Ví duï:
GV: Nguyeãn Troïng Haûi Trang 6
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Wire c;
Wand d;
Assign d= a;
Assign d= b;// giaù trò d laø möùc logic cuûa pheùp And a vaø b.
Wire [9:0] A; // vectô A coù 10 wire.
III. Reg:
Reg (register) laø moät ñoái töôïng döõ lieäu maø noù chöùa giaù trò töø moät thuû tuïc gaùn
keá tieáp. Chuùng chæ ñöôïc duøng trong haøm vaø khoái thuû tuïc. Reg laø moät loaïi bieán
Verilog vaø khoâng nhaát thieát laø thanh ghi töï nhieân. Trong thanh ghi nhieàu bit,
data ñöôïc löu tröõ baèng nhöõng chöõ soá khoâng daáu vaø khoâng coù kí hieäu ñuoâi môû
roäng, ñöôïc thöïc hieän maø ngöôøi söû duïng coù chuû y ùlaø soá buø hai.
1. Cuù phaùp:
Reg [msb:lsb] teân bieán reg.
2. Ví duï:
Reg a; // bieán thanh ghi ñôn giaûn 1 bit.
Reg [7:0] A; // moät vectô 8 bit; moät bank cuûa 8 thanh ghi.
Reg [5:0]b, c; // hai bieán thanh ghi 6 bit.
IV. Input, Output, Inout:
Nhöõng töø khoaù naøy bieåu thò ngoõ vaøo, ngoõ ra, vaø port hai chieàu cuûa moät module
hoaëc task. Moät port ngoõ ra coù theå ñöôïc caáu hình töø caùc daïng: wire, reg, wand,
wor, hoaëc tri. Maëc ñònh laø wire.
1. Cuù phaùp:
Input [msb:lsb] port ngoõ vaøo.
Output [msb:lsb] port ngoõ ra.
Inout [msb:lsb] port ngoõ vaøo,ra hai chieàu.
2. Ví duï:
Module sample (b, e, c, a);
Input a; // moät ngoõ vaøo maëc ñònh laø kieåu wire.
Output b, e; // hai ngoõ ra maëc ñònh laø kieåu wire.
Output [1:0] c; /* ngoõ ra hai bit, phaûi ñöôïc khai baùotrong moät leänh rieâng*/
Reg [1:0] c; // ngoõ c ñöôïc khai baùo nhö moät reg.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
ChöôngV
TOAÙN TÖÛ
I. Toaùn töû soá hoïc:
Nhöõng toaùn töû naøy thöïc hieän caùc pheùp tính soá hoïc. Daáu ’+’ vaø ’-’ coù theå ñöôïc
söû duïng moät trong hai toaùn töû ñôn (-z) hoaëc keùp (x - y).
1. Toaùn töû:
+, -, *, /, %.
2. Ví duï:
parameter n = 4;
Reg[3:0] a, c, f, g, count;
f= a +c;
g= c –n;
count = (count +1) % 16; // coù theå ñeám töø 0 ñeán 15.
II. Toaùn töû quan heä:
Toaùn töû quan heä so saùnh hai toaùn haïng vaø traû veà moät ñôn bit laø 0 hoaëc 1.
Nhöõng toaùn töû naøy toång hôïp vaøo duïng cuï so saùnh. Bieán Wire vaø Reg laø nhöõng
bieán döông. Vì theá, (-3b001) = (3b111) vaø (-3b001) > ( 3b110) nhöng neáu laø
soá nguyeân thì -1< 6.
1. Caùc toaùn töû quan heä:
<, <=, >, >=, = =, !=.
2. Ví duï:
If (x= =y) e =1;
Else e= 0;
// so saùnh hai vector a, b
reg [3:0] a, b;
if (a[3] = =b [3]) a[2:0] >b[2:0];
else b[3];
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Chöông VI
TOAÙN HAÏNG
I. Literals (daïng kí töï):
Laø toaùn haïng coù giaù trò khoâng ñoåi maø ñöôïc duøng trong bieåu thöùc Verilog. Coù
hai daïng kí töï laø:
Chuoãi: laø moät maûng coù nhieàu kí töï ñöôïc ñaët trong daáu ””.
Chöõ soá: laø nhöõng soá khoâng ñoåi, nhò phaân, baùt phaân, thaäp phaân, hoaëc soá hex.
1. Cuù phaùp caùc chöõ soá:
n’F dddd…
Trong ñoù:
n : soá nguyeân mieâu taû soá bit.
F: moät trong boán ñònh daïng sau: b( soá nhò phaân), o( soá baùt phaân), d( soá thaäp
phaân), h( soá hex).
2. Ví duï:
“time is”// chuoãi kí töï.
267 // maëc ñònh 32 bit soá thaäp phaân.
2’b01 // 2 bit nhò phaân.
20’h B36E // 20 bit soá hex.
‘o62 // 32 bit baùt phaân.
II. Choïn 1 phaàn töû bit vaø choïn 1 phaàn caùc bit.
Ñaây laø söï löïa choïn moät bít ñôn hoaëc moät nhoùm bit theo thöù töï, töø moät wire,
reg hoaëc töø tham soá ñaët trong ngoaïc [ ]. Choïn 1 phaàn töû bit vaø choïn 1 phaàn caùc
bit coù theå ñöôïc duøng nhö laø caùc toaùn haïng trong bieåu thöùc baèng nhieàu caùch
thöùc gioáng nhau maø caùc ñoái töôïng döõ lieäu goác ñöôïc duøng.
1. Cuù phaùp:
Teân bieán [ thöù töï bit].
Teân bieán [ msb: lsb].
2. Ví duï:
GV: Nguyeãn Troïng Haûi Trang 14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Reg [7:0] a, b;
Reg [3:0] ls;
c = a[7] & b[7];
ls = a[7:4] + b[3:0];
III. Goïi haøm chöùc naêng:
Giaù trò traû veà cuûa moät haøm coù theå ñöôïc duøng tröïc tieáp trong bieåu thöùc maø
khoâng caàn gaùn tröôùc cho bieán reg hoaëc wire. Goïi haøm chöùc naêng nhö laø moät
trong nhöõng toaùn haïng. Chieàu roäng bít cuûa giaù trò traû veà chaéc chaén ñöôïc bieát
tröôùc.
1. Cuù phaùp:
Teân haøm(danh saùch bieán).
2. Ví duï:
Assign a = b & c & chk_bc(b, c);
Function chk_bc;
Input c, b;
Chk_bc = b^ c;
Endfunction
IV. Wire, reg, vaø tham soá:
Wire, reg, vaø tham soá coù theå ñuôïc duøng nhö laø caùc toaùn haïng trong bieåu thöùc
Verilog.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
Chöông VII
MODULES
I. Khai baùo modules:
Moät module laø baûn thieát keá chuû yeáu toàn taïi trong Verilog. Doøng ñaàu tieân cuûa
khai baùo module chæ roõ danh saùch teân vaø port (caùc ñoái soá). Nhöõng doøng keá tieáp
chæ roõ daïng I/O (input, output, hoaëc inout) vaø chieàu roäng cuûa moãi port. Maëc
ñònh chieàu roäng port laø 1 bit.
Sau ñoù, nhöõng bieán port phaûi ñöôïc khai baùo wire, wand, …, reg. Maëc ñònh laø
wire. Nhöõng ngoõ vaøo ñaëc tröng laø wire khi döõ lieäu ñöôïc choát bean ngoaøi
module. Caùc ngoõ ra laø daïng reg neáu nhöõng tín hieäu cuûa chuùng ñöôïc chöùa trong
khoái always hoaëc initial.
1. Cuù phaùp:
Module teân module (danh saùch port);
Input [msb:lsb] danh saùch port ngoõ vaøo;
Output [msb:lsb] danh saùch port ngoõ ra;
Inout [ msb:lsb ] danh saùch port vaøo_ ra;
… caùc leänh…
endmodule
2. Ví duï:
Module add_sub(add, in1, in2, out);
Wire, reg, vaø tham soá:
Input[7:0 ] in1, in2;
Wire in1, in2;
Output [7:0] out;
Reg out;
… caùc leänh khaùc…
Endmodule
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
assign c = a&b;
endmodule
// module instantiations
wire [3:0] in1, in2;
wire [3:0] o1, o2;
// ñaët vò trí
and4 C1(in1, in2,o1);
// teân
and4 C2(.c(o2), .a(in1), .b(in2));
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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:
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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.
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
GV: Nguyeãn Troïng Haûi Trang 22
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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). 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.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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, 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;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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, 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å
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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. 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.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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. Caáu truùc moät chöông trình duøng ngoân ngöõ Verilog:
Endmodule
module vdcong(in,out);
input[3:0] in;
output out;
endmodule
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
b. Moâ phoûng
2. Ví duï 2:
a. Chöông trình coäng hai bieán boán bit
assign
{ carry_out, sum_out } = ina + inb + carry_in;
Endmodule
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
b. Moâ phoûng
3. Ví duï 3:
a. Chöông trình giaûi maõ 2 sang 4
wire[1:0]w;
reg[3:0]y;
wire 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;
GV: Nguyeãn Troïng Haûi Trang 33
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
7. Ví duï 7:
a. Chöông trình giaûm töø 9 xuoáng 0, hieån thò ra led 7 ñoaïn
end
endmodule
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
end
endmodule
b. Moâ phoûng
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog
CuuDuongThanCong.com https://fb.com/tailieudientucntt