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ânxuoá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öôùileâ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 1 Leaf cell
Leaf cell
Sub-block 2 Leaf cell
Leaf cell
Sub-block 3 Leaf cell
Thieát keá treân xuoáng
Sub-block 4 Leaf cell
Leaf cell
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 1 Leaf cell
Leaf cell
Macrocell 2 Leaf cell
Leaf cell
Macrocell 3 Leaf cell
Thieát keá döôùi leân
Macrocell 4 Leaf cell
Leaf cell
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) q1
q0
clock
q2
q3
q
q
q
q
T_FF tff0
T_FF tff1
T_FF tff2
T_FF 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
D_FF
not
T_FF (tff2)
T_FF (tff1)
T_FF (tff0)
D_FF
not
D_FF
not
T_FF (tff3)
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öôùileâ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ânxuoá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); .. .. .. .. 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 thieát keá) Maïch ñeám khoâng ñoàng boä. q
Khoái kích thích
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
Khoái kích d_reset thích c_q
clk reset q
Khoái thieát keá
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 180 190 195 210 220
output output output output output output
q q q q q q
= = = = = =
0 1 2 0 1 2