Você está na página 1de 45

Baøi 2: Khaùi nieäm moâ hình theo

heä thoáng thöù baäc

Thieát keá soá vôùi Verilog HDL


Muïc tieâu nghieân cöùu:

- Heä phöông phaùp thieát keá treân-


xuoáng vaø döôùi leân.
- Nhöõng khaùc bieät giöõa module
vaø theå hieän module.
- Moâ taû 4 möùc tröøu töôïng: haønh
vi, luoàng döõ lieäu, möùc coång vaø
möùc chuyeån maïch, chuùng bieåu
dieãn cuøng moät module.
- Moâ taû nhöõng thaønh phaàn caàn
coù ñeå moâ phoûng maïch thieát
keá. Ñònh nghóa khoái kích thích vaø
Heä phöông phaùp thieát keá

Coù hai heä phöông phaùp thieát keá


cô baûn: treân-xuoáng vaø döôùi-
leân.
Trong heä phöông phaùp thieát keá
treân-xuoáng, ta thieát keá khoái
möùc ñænh vaø nhaän daïng caùc
khoái con caàn thieát ñeå xaây döïng
khoái möùc ñænh. Ta chia nhoû
theâm nöõa caùc khoái con cho ñeán
khi ta gaëp caùc cell laù, ñaây laø
cell khoâng theå ñöôïc chia nhoû
Heä phöông phaùp thieát keá
(tieáp theo)
Top level
block

Sub-block Sub-block Sub-block Sub-block


1 2 3 4

Leaf Leaf Leaf Leaf Leaf Leaf Leaf


cell cell cell cell cell cell cell

Thieát keá treân xuoáng


Heä phöông phaùp thieát keá
(tieáp theo)
Trong heä phöông phaùp thieát keá
döôùi-leân, tröôùc tieân ta nhaän
daïng caùc khoái xaây döïng saün
maø ta coù. Ta xaây döïng caùc cell
lôùn hôn baèng caùch söû duïng
caùc khoái xaây döïng saün. Caùc
cell naøy keá ñeán ñöôïc söû duïng
ñoái vôùi caùc khoái möùc cao hôn
cho ñeán khi ta xaây döïng ñöôïc
khoái möùc ñænh trong thieát keá.
Heä phöông phaùp thieát keá
(tieáp theo)
Top level
block

Macrocell Macrocell Macrocell Macrocell


1 2 3 4

Leaf Leaf Leaf Leaf Leaf Leaf Leaf


cell cell cell cell cell cell cell

Thieát keá döôùi leân


Heä phöông phaùp thieát keá
(tieáp theo)
Thoâng thöôøng hai phöông phaùp
treân ñöôïc keát hôïp vôùi nhau.
Ngöôøi xaây döïng thieát keá seõ
ñònh nghóa ñaëc taû cuûa khoái
möùc ñænh. Ngöôøi thieát keá logic
quyeát ñònh caùch thöùc maø thieát
keá seõ ñöôïc caáu truùc baèng
caùch chia chöùc naêng heä thoáng
thaønh nhieàu khoái vaø khoái con.
Vaøo luùc naøy, ngöôøi thieát keá
Heä phöông phaùp thieát keá
(tieáp theo)
Ngöôøi thieát keá maïch xaây döïng
caùc cell möùc cao hôn töø caùc cell
laù. Luoàng thieát keá gaëp nhau taïi
ñieåm trung gian, ôû ñoù ngöôøi
thieát keá maïch ôû möùc chuyeån
maïch ñaõ taïo ra thö vieän caùc cell
laù baèng caùch söû duïng caùc
chuyeån maïch vaø ngöôøi thieát keá
möùc logic ñaõ thieát keá töø treân
xuoáng cho ñeán khi taát caû
module ñaõ ñöôïc ñònh nghóa baèng
Heä phöông phaùp thieát keá
(tieáp theo)
Thí duï thieát keá maïch ñeám khoâng
ñoàng boä 4-bit. Maïch naøy ñöôïc
thieát laäp baèng caùch söû duïng 4
flipflop T kích caïnh aâm (xuoáng).
Moãi flipflop T ñöôïc xaây döïng töø
flipflop D vaø coång NOT. Ta ñang
thieát keá theo caùch coù thöù baäc
baèng caùch söû duïng caùc khoái
xaây döïng saün. Trong phöông
phaùp thieát keá treân-xuoáng,
tröôùc tieân ta chæ ra chöùc naêng
Heä phöông phaùp thieát keá
(tieáp theo)
q

d q

clock
D_FF

reset

T_FF suy ra töø D_FF


Heä phöông phaùp thieát keá (tieáp
theo)
q0 q1 q2 q3

q q q q
clock

T_FF T_FF T_FF T_FF


tff0 tff1 tff2 tff3
reset

Maïch ñeám khoâng ñoàng boä 4-bit


Heä phöông phaùp thieát keá
(tieáp theo)
Mach dem khong dong bo 4-bit

T_FF T_FF T_FF T_FF


(tff0) (tff1) (tff2) (tff3)

D_FF not D_FF not D_FF not D_FF not


Heä phöông phaùp thieát keá
(tieáp theo)
Ñaây laø khoái möùc ñænh. Keá ñeán
ta thöïc hieän maïch ñeám vôùi
flipflop T. Ta xaây döïng flipflop T töø
flipflop D vaø coång NOT. Nhö vaäy,
ta ñaõ chia caùc khoái lôùn thaønh
caùc khoái con nhoû hôn coù saün
cho ñeán khi ta quyeát ñònh khoâng
chia nöõa.
Heä phöông phaùp thieát keá döôùi-
leân ñi theo chieàu ngöôïc laïi. Ta
keát hôïp caùc khoái nhoû xaây
Heä phöông phaùp thieát keá
(tieáp theo)

Ñieàu naøy coù nghóa laø ta xaây


döïng flipflop D töø caùc coång logic
AND vaø OR hoaëc coù theå töø caùc
transistor. Nhö vaäy, luoàng treân-
xuoáng seõ gaëp luoàng döôùi-leân
ôû möùc cuûa flipflop D.
Module

Module laø khoái xaây döïng saün


trong Verilog. Module coù theå laø
moät phaàn töû hoaëc moät taäp coù
löïa choïn caùc khoái thieát keá
möùc thaáp hôn. Thoâng thöôøng,
caùc phaàn töû ñöôïc nhoùm laïi
trong caùc module ñeå cho ta chöùc
naêng toång quaùt ñöôïc söû duïng
ôû nhieàu nôi trong thieát keá.
Module cung caáp chöùc naêng caàn
thieát cho “khoái möùc cao hôn”
thoâng qua giao dieän port (ngoõ
Module (tieáp theo)

Ñieàu naøy cho pheùp ngöôøi thieát


keá söûa ñoåi nhöõng phaàn beân
trong cuûa module maø khoâng aûnh
höôûng ñeán phaàn coøn laïi cuûa
thieát keá.
Trong thí duï maïch ñeám khoâng
ñoàng boä, flipflop D vaø flipflop T
laø nhöõng thí duï veà module.
Module ñöôïc khai baùo baèng töø
khoùa module. Töø khoùa endmodule
Module (tieáp theo)
Moãi module phaûi coù module_name
(ñònh danh cuûa module) vaø
module_terminal_list (moâ taû caùc
ñaàu cuoái ngoõ vaøo vaø ngoõ ra
cuûa module)

module <module_name>
(<module_terminal_list>);
..
<module internals>
..
endmodule
Module (tieáp theo)

Thí duï: Flipflop T

module T_FF (q, clock, reset);


..
..
<Functionality of T-flipflop>
..
..
endmodule
Module (tieáp theo)

Verilog laø ngoân ngöõ haønh vi laãn


caáu truùc. Caùc thaønh phaàn trong
moãi module coù theå ñöôïc ñònh
nghóa ôû 4 möùc tröøu töôïng, phuï
thuoäc vaøo nhu caàu cuûa thieát
keá. Module hoaït ñoäng gioáng nhau
ñoái vôùi moâi tröôøng beân ngoaøi
baát chaáp möùc tröøu töôïng maø
ôû ñoù module ñöôïc moâ taû.
Nhöõng thaønh phaàn beân trong
cuûa module ñöôïc che giaáu ñoái
Module (tieáp theo)

Möùc tröøu töôïng moâ taû module coù


theå ñöôïc thay ñoåi maø khoâng
caàn baát kyø thay ñoåi naøo trong
moâi tröôøng. Caùc möùc tröøu
töôïng naøy seõ ñöôïc khaûo saùt
trong caùc chöông tieáp theo. Sau
ñaây laø ñònh nghóa toång quaùt
cuûa caùc möùc tröøu töôïng naøy.
Module (tieáp theo)

Möùc haønh vi hoaëc giaûi thuaät.


Ñaây laø möùc tröøu töôïng cao nhaát
ñöôïc cung caáp bôûi Verilog. Module
coù theå ñöôïc thöïc hieän nhôø vaøo
giaûi thuaät thieát keá mong muoán
maø khoâng caàn quan taâm ñeán
nhöõng chi tieát thöïc hieän phaàn
cöùng. Vieäc thieát keá ôû möùc
naøy töông töï nhö laäp trình C.
Module (tieáp theo)

Möùc luoàng döõ lieäu.


ÔÛ möùc naøy module ñöôïc thieát
keá baèng caùch chæ roõ luoàng döõ
lieäu. Ngöôøi thieát keá quan taâm
ñeán caùch thöùc maø döõ lieäu di
chuyeån giöõa nhöõng thanh ghi
phaàn cöùng vaø caùch thöùc maø
döõ lieäu ñöôïc xöû lyù trong thieát
keá.
Module (tieáp theo)

Möùc coång.
Module ñöôïc thöïc hieän nhôø vaøo
caùc coång logic vaø lieân keát noái
giöõa caùc coång naøy. Thieát keá
ôû möùc naøy töông töï nhö vieäc
moâ taû thieát keá döïa vaøo sô ñoà
logic ôû möùc coång.
Module (tieáp theo)

Möùc chuyeån maïch.


Ñaây laø möùc tröøu töôïng thaáp
nhaát ñöôïc cung caáp bôûi Verilog.
Moät module coù theå ñöôïc thöïc
hieän nhôø vaøo caùc chuyeån
maïch, caùc nuùt nhôù vaø lieân keát
noái giöõa chuùng vôùi nhau. Thieát
keá ôû möùc naøy yeâu caàu kieán
thöùc veà caùc chi tieát thöïc hieän
ôû möùc chuyeån maïch.
Module (tieáp theo)

Verilog cho pheùp ta troän vaø töông


thích caû 4 möùc tröøu töôïng trong
moät thieát keá. Trong coäng ñoàng
thieát keá soá, thuaät ngöõ möùc
truyeàn thanh ghi (RTL) thöôøng
ñöôïc duøng ñoái vôùi moâ taû
Verilog söû duïng keát hôïp caáu
truùc haønh vi vaø luoàng döõ lieäu,
ñöôïc chaáp nhaän bôûi nhöõng
coâng cuï toång hôïp logic.
Module (tieáp theo)

Thoâng thöôøng, möùc tröøu töôïng


caøng cao, thieát keá caøng ñoäc
laäp vôùi coâng ngheä vaø caøng
linh hoaït. Khi ta ñi daàn veà phía
döôùi höôùng ñeán thieát keá möùc
chuyeån maïch, thieát keá trôû neân
phuï thuoäc vaøo coâng ngheä vaø
khoâng linh hoaït. Moät thay ñoåi
nhoû coù theå gaây ra löôïng thay
ñoåi ñaùng keå trong thieát keá.
Theå hieän

• Module cung caáp khuoân maãu töø


ñoù ta coù theå taïo ra caùc ñoái
töôïng thöïc söï. Khi moät module
ñöôïc goïi, Verilog taïo ra moät ñoái
töôïng duy nhaát töø khuoân maãu.
Quaù trình taïo ra caùc ñoái töôïng
töø moät khuoân maãu module ñöôïc
goïi laø söï theå hieän vaø caùc ñoái
töôïng ñöôïc goïi laø nhöõng theå
hieän. Trong thí duï sau ñaây, khoái
möùc ñænh taïo ra 4 theå hieän töø
khuoân maãu flipflop T (T_FF). Moãi
T_FF theå hieän moät D_FF vaø
Theå hieän (tieáp theo)

module ripple_carry_counter(q, clk,


reset);
output [3:0] q;
input clk, reset;
T_FF tff0(q[0], clk, reset);
T_FF tff1(q[1], q[0], reset);
T_FF tff2(q[2], q[1], reset);
T_FF tff3(q[3], q[2], reset);
endmodule
Theå hieän (tieáp theo)

module T_FF(q, clk, reset);


output q;
input clk, reset;
wire d;
D_FF dff0(q, d, clk, reset);
not n1(d, q);
endmodule
Theå hieän (tieáp theo)
Khoâng ñöôïc loàng caùc module vaøo
nhau.

module ripple_carry_counter(q, clk,


reset);
output [3:0] q;
input clk, reset;
module T_FF(q, clk, reset);

<module T_FF internals>

Caùc thaønh phaàn moâ phoûng

Moät khi khoái thieát keá ñaõ hoaøn


taát, khoái naøy caàn ñöôïc kieåm
tra. Chöùc naêng cuûa khoái thieát
keá coù theå ñöôïc kieåm tra baèng
caùch aùp duïng taùc nhaân kích
thích vaø kieåm tra keát quaû. Ta
goïi khoái nhö vaäy laø khoái kích
thích, coù theå ñöôïc vieát baèng
Verilog. Teân toång quaùt cuûa khoái
naøy laø testbench.
Caùc thaønh phaàn moâ phoûng (tt)

Coù hai kieåu aùp duïng taùc nhaân


kích thích.
- Khoái kích thích theå hieän khoái
thieát keá vaø kích tröïc tieáp caùc
tín hieäu vaøo khoái thieát keá.
Khoái kích thích trôû thaønh khoái
möùc ñænh. Vôùi thí duï maïch ñeám
khoâng ñoàng boä, khoái kích thích
quaûn lyù caùc tín hieäu clk vaø
reset, kieåm tra vaø hieån thò tín
Caùc thaønh phaàn moâ phoûng (tt)

clk reset Khoái kích


thích

(Khoái thieát keá)


Maïch ñeám khoâng
ñoàng boä.

q
Caùc thaønh phaàn moâ phoûng (tt)
- Caû hai khoái kích thích vaø khoái
thieát keá ñeàu ñöôïc theå hieän
trong module möùc ñænh giaû vaø 2
khoái töông taùc nhau thoâng qua
giao dieän. Module kích thích kích tín
hieäu d_clk vaø d_reset, caùc tín
hieäu naøy ñöôïc noái vôùi clk vaø
reset cuûa khoái thieát keá. Khoái
kích thích cuõng kieåm tra vaø hieån
thò tín hieäu c_q, noái vôùi tín hieäu
q cuûa khoái thieát keá. Chöùc
naêng cuûa khoái ñænh chæ laø
Caùc thaønh phaàn moâ phoûng (tt)

Khoái möùc ñænh

d_clk clk
Khoái Khoái
kích d_reset reset thieát
thích keá
c_q q
Thí duï

Ta xaây döïng hai khoái: thieát keá vaø


kích thích. AÙp duïng taùc nhaân
kích thích ñeán khoái thieát keá vaø
giaùm saùt ngoõ ra. Do ta ñang
phaùt trieån moâ hình Verilog, ta
khoâng caàn bieát caáu truùc chính
xaùc vaøo luùc naøy. Ta caàn chuù
yù ñeå hieåu quaù trình thieát keá.
Cuù phaùp seõ ñöôïc ñeà caäp chi
tieát ôû caùc chöông sau.
Thí duï (tieáp theo)

Khoái thieát keá.


Ta söû duïng heä phöông phaùp thieát
keá treân-xuoáng. Tröôùc tieân ta
vieát moâ taû Verilog cho khoái
thieát keá möùc ñænh, khoái naøy
laø maïch ñeám khoâng ñoàng boä
ñaõ ñöôïc ñeà caäp ôû caùc slide
tröôùc.
Thí duï (tieáp theo)

module ripple_carry_counter(q, clk,


reset);
output [3:0] q;
input clk, reset;
T_FF tff0(q[0], clk, reset);
T_FF tff1(q[1], q[0], reset);
T_FF tff2(q[2], q[1], reset);
T_FF tff3(q[3], q[2], reset);
endmodule
Thí duï (tieáp theo)

module T_FF(q, clk, reset);


output q;
input clk, reset;
wire d;
D_FF dff0(q, d, clk, reset);
not n1(d, q); // not laø cell maãu cô
baûn
endmodule
Thí duï (tieáp theo)
module D_FF(q, d, clk, reset);
output q;
input d, clk, reset;
reg q;
always @(posedge reset or negedge
clk)
if (reset)
q = 1’b0; // reset khoâng ñoàng boä.
else
q = d;
endmodule
Thí duï (tieáp theo)

Khoái kích thích.


Ta vieát khoái kích thích ñeå kieåm tra
xem thieát keá maïch ñeám khoâng
ñoàng boä hoaït ñoäng coù ñuùng
khoâng. Ta ñieàu khieån clk vaø
reset sao cho hoaït ñoäng bình
thöôøng vaø cô cheá reset khoâng
ñoàng boä ñeàu ñöôïc kieåm tra.
Giaû ñònh chu kyø xung clk laø 10
ñôn vò thôøi gian, tín hieäu reset ôû
logic 1 (tích cöïc) trong khoaûng
Thí duï (tieáp theo)
module stimulus;
reg clk;
reg reset;
wire [3:0] q;
ripple_carry_counter r1(q, clk, reset);
initial
clk = 1’b0; // clk = 0.
always
#5 clk = ~clk; // ñaûo clk moãi 5 ñôn
vò // thôøi gian
Thí duï (tieáp theo)
initial
begin
reset = 1’b1;
#15 reset = 1’b0;
#180 reset = 1’b1;
#10 reset = 1’b0;
#20 $finish; // keát thuùc moâ
phoûng.
end
initial // hieån thò ngoõ ra
$monitor($time, “output q = %d”, q);
Thí duï (tieáp theo)

Ngoõ ra moâ phoûng ñöôïc.


0 output q = 0 20 output q = 1
30 output q = 2 40 output q = 3
50 output q = 4 60 output q = 5
70 output q = 6 80 output q = 7
90 output q = 8 100 output q = 9
110 output q = 10 120 output q =
11
130 output q = 12 140 output q =
13
Thí duï (tieáp theo)

170 output q = 0
180 output q = 1
190 output q = 2
195 output q = 0
210 output q = 1
220 output q = 2

Você também pode gostar