Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
TRÖÔØNG ÑAÏI HOÏC SÖ PHAÏM KYÕ THUAÄT TP.HCM KHOA ÑIEÄN TÖÛ BOÄ MOÂN VIEÃN THOÂNG (cid:181)(cid:9)(cid:182)
Bieân soaïn: Nguyeãn Ñình Phuù TP.HCM 2007
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
TRÖÔØNG ÑAÏI HOÏC SÖ PHAÏM KYÕ THUAÄT TP.HCM KHOA ÑIEÄN TÖÛ BOÄ MOÂN VIEÃN THOÂNG (cid:181)(cid:9)(cid:182)
Bieân soaïn: Nguyeãn Ñình Phuù TP.HCM 2007
LÔØI NOÙI ÑAÀU
Caùc heä thoáng soá laäp trình ngaøy caøng hieän dieän trong nhieàu thieát bò ñieän töû daân duïng cuõng nhö
trong caùc thieát bò ñieàu khieån coâng nghieäp.
Öu ñieåm cuûa thieát bò soá laäp trình laø laøm cho maïch ñieän ngaøy caøng nhoû goïn do maät ñoä tích hôïp cao, khoâng maát nhieàu thôøi gian cho vieäc keát noái vaø thöû nghieäm so vôùi IC rôøi, deã thay ñoåi yeâu caàu ñieàu khieån cuûa maïch, chieám ít dieän tích khoâng gian, toác ñoä hay taàn soá laøm vieäc cao ñaùp öùng ñöôïc caùc öùng duïng ñoøi hoûi veà toác ñoä hoaëc xöû lyù khoái löôïng döõ lieäu lôùn.
Noäi dung cuoán saùch naøy ñöôïc bieân soaïn goàm 4 chöông nhaèm phuïc vuï cho moân hoïc 2 tín chæ, trong ñoù chöông 1 giôùi thieäu veà caùc thieát bò soá laäp trình ñöôïc, chöông 2 trình baøy ngoân ngöõ VHDL duøng ñeå laäp trình cho heä thoáng soá, chöông 3 trình baøy caùch laäp trình cho caùc maïch ñieän toå hôïp, chöông 4 trình baøy caùch laäp trình cho caùc maïch ñieän tuaàn töï.
Noäi dung trong cuoán saùch nhaèm trang bò caùc kieán thöùc cô baûn veà kyõ thuaät PLD vaø ASIC cho
sinh vieân ngaønh ñieän – ñieän töû.
Trong quaù trình bieân soaïn coù tham khaûo nhieàu taøi lieäu neân vaãn coøn sai soùt neân mong söï ñoùng goùp xaây döïng ñeå baøi giaûng ñöôïc hoaøn thieän hôn xin haõy gôûi veà taùc giaû theo ñòa chæ phu_nd@yahoo.com - xin chaân thaønh caûm ôn.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
MUÏC LUÏC
LÔØI NOÙI ÑAÀU
CHÖÔNG 1. GIÔÙI THIEÄU CAÙC CAÁU TRUÙC LAÄP TRÌNH ÑÖÔÏC
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
I.
4 4 5 5 7 7 9 10
GIÔÙI THIEÄU PLD 1. 2. 3. 4. 5. 6. 7. HOAÏT ÑOÄNG CUÛA SPLD CÔ BAÛN LAØ PAL HOAÏT ÑOÄNG CUÛA SPLD CÔ BAÛN LAØ GAL KÍ HIEÄU ÑÔN GIAÛN CHO SÔ ÑOÀ CUÛA PAL/GAL SÔ ÑOÀ KHOÁI TOÅNG QUAÙT CUÛA PAL/GAL MACROCELL CAÙC SPLD THÖÏC TEÁ CAÙC CPLD
II.
CPLD CUÛA HAÕNG ALTERA 1. 2. 3. 4. 5. CPLD MAX 7000 MACROCELL KHOÁI MÔÛ ROÄNG CHIA SEÛ KHOÁI MÔÛ ROÄNG SONG SONG CPLD MAX II 12 12 13 13 15 16
1. 2.
III. CPLD CUÛA HAÕNG XILINX
18 18 19
PLA (PROGRAMMABLE LOGIC ARRAY) COOLRUNNER II
IV.
22 23 24 25 26
LOGIC LAÄP TRÌNH FPGA 1. 2. 3. 4. CAÙC KHOÁI LOGIC COÙ THEÅ ÑÒNH CAÁU HÌNH CLB CAÙC MODULE LOGIC FPGA DUØNG COÂNG NGHEÄ SRAM CAÙC LOÕI CUÛA FPGA
V.
27 27 28 30
FPGA CUÛA ALTERA 1. 2. 3. KHOÁI MAÛNG LOGIC (LAB: LOGIC ARRAY BLOCK) MODULE LOGIC THÍCH NGHI ALM CAÙC CHÖÙC NAÊNG TÍCH HÔÏP
VI.
31 31 32 35
FPGA CUÛA XILINX 1. 2. 3. CAÙC KHOÁI LOGIC COÙ THEÅ ÑÒNH CAÁU HÌNH CLB (CONFIGURABLE LOGIC BLOCK) CHUOÃI LIEÂN TIEÁP SOP CAÁU TRUÙC FPGA TRUYEÀN THOÁNG VAØ CAÁU TRUÙC ASMBL
1. 2.
VII. PHAÀN MEÀM LAÄP TRÌNH
37 39 43
CAÙCH THIEÁT KEÁ MOÂ PHOÛNG CHÖÙC NAÊNG
3. 4. 5. 6. 7.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
TOÅNG HÔÏP LIEÄT KEÂ LÖÔÙI (NETLIST) PHAÀN MEÀM THI HAØNH MOÂ PHOÛNG THÔØI GIAN LAÄP TRÌNH CHO THIEÁT BÒ – HAY NAÏP CHÖÔNG TRÌNH CHO THIEÁT 44 45 46 47 47
48
CHÖÔNG 2. NGOÂN NGÖÕ LAÄP TRÌNH VHDL
VIII. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
1. 2. 3. 4. 5. 6. 7.
I. SÖÏ RA ÑÔØI NGOÂN NGÖÕ VHDL II. CAÙC THUAÄT NGÖÕ CUÛA VHDL III. MOÂ TAÛ PHAÀN CÖÙNG TRONG VHDL
1. 2. 3. 4. 5. 6.
ENTITY (THÖÏC THEÅ ) ARCHITECTURE CAÙC THIEÁT KEÁ COÙ CAÁU TRUÙC HOAÏT ÑOÄNG TUAÀN TÖÏ LÖÏA CHOÏN KIEÁN TRUÙC CAÙC CAÂU LEÄNH CAÁU HÌNH TOÙM TAÉT
IV. GIÔÙI THIEÄU VEÀ MOÂ HÌNH HAØNH VI DELAY QUAÙN TÍNH VAØ DELAY TRUYEÀN MOÂ PHOÛNG DELTA DRIVER GENERIC CAÙC PHAÙT BIEÅU KHOÁI TOÙM TAÉT
1. 2. 3. 4. 5. 6. 7. 8.
V. XÖÛ LYÙ TUAÀN TÖÏ
PHAÙT BIEÅU GAÙN BIEÁN KHAÙC VÔÙI GAÙN TÍN HIEÄU CAÙC PHAÙT BIEÅU TUAÀN TÖ PHAÙT BIEÅU IF PHAÙT BIEÅU CASE PHAÙT BIEÅU LOOP PHAÙT BIEÅU ASSERT PHAÙT BIEÅU WAIT
1. 2. 3.
VI. CAÙC KIEÅU ÑOÁI TÖÔÏNG TRONG VHDL
1.
51 55 55 53 53 54 56 57 58 59 60 60 63 65 68 69 71 76 76 76 78 81 81 82 83 87 88 91 91 92 93 93 94
KHAI BAÙO TÍN HIEÄU KHAI BAÙO BIEÁN KHAI BAÙO HAÈNG SOÁ VII. CAÙC KIEÅU DÖÕ LIEÄU TRONG VHDL
LOAÏI SCALAR
2. 3.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
KIEÅU VAÄT LYÙ CAÙC THUOÄC TÍNH
1. 2. 3. 4. 5. 6. 7.
VIII. CAÙC TOAÙN TÖÛ CÔ BAÛN TRONG VHDL
1. 2.
CAÙC TOAÙN TÖÛ LOGIC CAÙC TOAÙN TÖÛ QUAN HEÄ CAÙC TOAÙN TÖÛ SOÁ HOÏC CAÙC TOAÙN TÖÛ COÙ DAÁU CAÙC TOAÙN NHAÂN CHIA CAÙC TOAÙN TÖÛ DÒCH CAÙC TOAÙN TÖÛ HOÃN HÔÏP
IX. CHÖÔNG TRÌNH CON VAØ GOÙI CHÖÔNG TRÌNH CON GOÙI
CHÖÔNG 3. THIEÁT KEÁ MAÏCH TOÅ HÔÏP BAÈNG VHDL
129
X. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP 103 103 106 106 107 108 108 109 106 107 107 107 122 126
129
GIÔÙI THIEÄU I.
II.
129 129 131 132
THIEÁT KEÁ MAÏCH GIAÛI MAÕ – MAÏCH MAÕ HOAÙ 1. 2. 3. THIEÁT KEÁ MAÏCH GIAÛI MAÕ THIEÁT KEÁ MAÏCH MAÕ HOAÙ THIEÁT KEÁ MAÏCH GIAÛI MAÕ LED 7 ÑOAÏN LOAÏI ANODE CHUNG
III.
134 134 135
THIEÁT KEÁ MAÏCH ÑA HÔÏP – MAÏCH GIAÛI ÑA HÔÏP 1. 2. THIEÁT KEÁ MAÏCH ÑA HÔÏP THIEÁT KEÁ MAÏCH GIAÛI ÑA HÔÏP
CHÖÔNG 4. CAÙC THANH GHI BOÄ ÑEÁM TRON VHDL
119
IV. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP 137
141
GIÔÙI THIEÄU I.
141
141
THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP II.
1. THIEÁT KEÁ FLIP FLOP JK
2. THIEÁT KEÁ FLIP FLOP D COÙ ENABLE 144
III.
146 146 148 149
THIEÁT KEÁ THANH GHI DÒCH N 1. THIEÁT KEÁ THANH GHI DÒCH 4 BIT 2. THIEÁT KEÁ THANH GHI DÒCH 8 BIT 3. THIEÁT KEÁ MAÏCH ÑEÁM JOHNSON 8 BIT
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
THIEÁT KEÁ MAÏCH ÑEÁM VOØNG 8 BIT THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN 151 153 4. 5.
IV. THIEÁT KEÁ MAÏCH ÑEÁM
155 155 156 157 159 161
THIEÁT KEÁ MAÏCH ÑEÁM NHÒ PHAÂN 4 BIT – ÑEÁM LEÂN THIEÁT KEÁ MAÏCH BCD – ÑEÁM LEÂN THIEÁT KEÁ MAÏCH ÑEÁM BCD VAØ GIAÛI MAÕ HIEÅN THÒ LED 7 ÑOAÏN THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 00 ÑEÁN 59 – HIEÅN THÒ TREÂN 2 LED 7 ÑOAÏN THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 000 ÑEÁN 999 – HIEÅN THÒ TREÂN 3 LED 7 ÑOAÏN 1. 2. 3. 4. 5.
163
V. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
Taøi lieäu tham khaûo. 166
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Chöông 1 GIÔÙI THIEÄU CAÙC CAÁU TRUÙC LAÄP TRÌNH ÑÖÔÏC
GIÔÙI THIEÄU PLD
HOAÏT ÑOÄNG CUÛA SPLD CÔ BAÛN LAØ PAL HOAÏT ÑOÄNG CUÛA SPLD CÔ BAÛN LAØ GAL KÍ HIEÄU ÑÔN GIAÛN CHO SÔ ÑOÀ CUÛA PAL/GAL SÔ ÑOÀ KHOÁI TOÅNG QUAÙT CUÛA PAL/GAL MACROCELL CAÙC SPLD THÖÏC TEÁ CAÙC CPLD
CPLD CUÛA HAÕNG ALTERA
CPLD MAX 7000 MACROCELL KHOÁI MÔÛ ROÄNG CHIA SEÛ KHOÁI MÔÛ ROÄNG SONG SONG CPLD MAX II
CPLD CUÛA HAÕNG XILINX
PLA (PROGRAMMABLE LOGIC ARRAY) COOLRUNNER II LOGIC LAÄP TRÌNH FPGA
CAÙC KHOÁI LOGIC COÙ THEÅ ÑÒNH CAÁU HÌNH CLB CAÙC MODULE LOGIC FPGA DUØNG COÂNG NGHEÄ SRAM CAÙC LOÕI CUÛA FPGA FPGA CUÛA ALTERA
KHOÁI MAÛNG LOGIC (LAB: LOGIC ARRAY BLOCK) MODULE LOGIC THÍCH NGHI ALM
Kieåu hoaït ñoäng bình thöôøng Kieåu hoaït ñoäng LUT môû roäng
CAÙC CHÖÙC NAÊNG TÍCH HÔÏP
FPGA CUÛA XILINX
CAÙC KHOÁI LOGIC COÙ THEÅ ÑÒNH CAÁU HÌNH CLB (CONFIGURABLE LOGIC BLOCK) CHUOÃI LIEÂN TIEÁP SOP CAÁU TRUÙC FPGA TRUYEÀN THOÁNG VAØ CAÁU TRUÙC ASMBL
Caáu truùc truyeàn thoáng
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Caáu truùc ASMBL
PHAÀN MEÀM LAÄP TRÌNH CAÙCH THIEÁT KEÁ MOÂ PHOÛNG CHÖÙC NAÊNG TOÅNG HÔÏP LIEÄT KEÂ LÖÔÙI (NETLIST) PHAÀN MEÀM THiI HAØNH MOÂ PHOÛNG THÔØI GIAN LAÄP TRÌNH CHO THIEÁT BÒ – HAY NAÏP CHÖÔNG TRÌNH CHO THIEÁT BÒ
CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
CAÂU HOÛI OÂN TAÄP Hình 1-1. Caáu truùc cuûa PAL. Hình 1-2. PAL sau khi laäp trình ñeå taïo haøm. Hình 1-3. Caáu truùc cuûa GAL. Hình 1-4. Kí hieäu ñôn giaûn cho PAL/GAL. Hình 1-5. Hình cho ví duï 1-1. Hình 1-6. Sô ñoà khoái cuûa PAL/GAL. Hình 1-7. Sô ñoà maïch caùc Macrocell. Hình 1-8. Sô ñoà khoái vaø hình daïng voû cuûa PAL16V8. Hình 1-9. Sô ñoà khoái vaø hình daïng voû cuûa GAL22V10. Hình 1-10. Sô ñoà khoái cuûa CPLD toång quaùt. Hình 1-11. Caáu truùc CPLD MAX 7000 Hình 1-12. Sô ñoà khoái mcrocell ñôn giaûn cuûa MAX 7000. Hình 1-13. Ví duï caùch môû roäng. Hình 1-14. Minh hoïa cho vieäc chia seû. Hình 1-15. Minh hoïa cho boä môû roäng song song. Hình 1-16. Minh hoïa cho boä môû roäng song song töø macrocell khaùc. Hình 1-17. Sô ñoà khoái cuûa MAX II. Hình 1-18. Phaân bieät 2 kieåu xaây döïng haøm. Hình 1-19. Phaân bieät 2 kieåu keát noái. Hình 1-20. So saùnh PAL vôùi PLA. Hình 1-21. Sô ñoà caáu truùc cuûa Coolrunner II. Hình 1-22. Caáu truùc cuûa moät khoái chöùc naêng FB. Hình 1-23. Minh hoïa cho ví duï 1-2. Hình 1-24. Caáu truùc cô baûn cuûa FPGA. Hình 1-25. Caùc khoái CLB cuûa FPGA. Hình 1-26. Sô ñoà khoái cô baûn cuûa 1 module logic trong FPGA. Hình 1-27. Khaùi nieäm cô baûn cuûa LUT ñöôïc laäp trình ñeå taïo SOP ngoõ ra . Hình 1-28. Minh hoïa cho ví duï 1-3. Hình 1-29. Khaùi nieäm veà FPGA bay hôi. Hình 1-30. Khaùi nieäm chöùc naêng loõi phaàn cöùng trong FPGA. Hình 1-31. Sô ñoà khoái cuûa caáu truùc LAB cuûa Stratix II vaø ALM Hình 1-32. Sô ñoà khoái ALM cuûa Stratix II. Hình 1-33. Caùc caáu hình coù theå coù cuûa LUT trong ALM ôû kieåu bình thöôøng. Hình 1-34. Môû roäng ALM ñeå taïo ra haøm SOP 7 bieán trong kieåu LUT môû roäng. Hình 1-35. Minh hoïa cho ví duï 1-4. Hình 1-36. Sô ñoà khoái cuûa FPGA Stratic II.
2
Kyõ thuaät PLD vaø ASIC
SPKT – Nguyeãn Ñình Phuù
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Hình 1-37. Minh hoïa caùc caáp logic ñònh caáu hình töø teá baøo logic cho ñeán CLB. Hình 1-38. Ví duï caùch duøng chuoãi noái tieáp ñeå môû roäng bieåu thöùc SOP. Hình 1-39. Minh hoïa cho ví duï 1-5. Hình 1-40. Tích hôïp nhieàu chöùc naêng IP keát quaû laøm giaûm CLB vaø/hoaëc phaûi taêng kích thöôùc chip. Hình 1-41. Minh hoïa caáu truùc ASMBL cuûa FPGA platform. Hình 1-42. Sô ñoà doøng thieát keá toång quaùt ñeå laäp trình cho SPLD, CPLD hoaëc FPGA. Hình 1-43. Caùc thieát bò cô baûn ñeå laäp trình cho SPLD, CPLD hoaëc FPGA. Hình 1-44. Minh hoïa cho 2 kieåu laäp trình. Hình 1-45. Minh hoïa cho kieåu laäp trình töøng ñoaïn. Hình 1-46. Löu thaønh khoái logic 3. Hình 1-47. Maøn hình soaïn thaûo daïng soùng toång quaùt . Hình 1-48. Thieát laäp caùc daïng soùng ngoõ vaøo. Hình 1-49. Daïng soùng ngoõ vaøo vaø ra khi chaïy moâ phoûng. Hình 1-50. Minh hoïa cho chöùc naêng toång hôïp. Hình 1-51. Sô ñoà maïch vaø danh saùch lieät keâ. Hình 1-52. Minh hoïa cho moâ phoûng thôøi gian. Hình 1-53. Download thieát keá vaøo thieát bò laäp trình.
3
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
I. GIÔÙI THIEÄU PLD:
Hai thaønh phaàn chính cuûa thieát bò logic laäp trình ñôn giaûn SPLD (Simple Programmable Logic Device) laø PAL vaø GAL. PAL töôïng tröng cho logic maûng laäp trình (Programmable Array Logic) vaø GAL töôïng tröng cho logic maûng toång quaùt (Generic Array Logic). Thöôøng thì PAL chæ laäp trình 1 laàn coøn GAL thì cho pheùp laäp trình laïi, tuy nhieân coù nhieàu loaïi SPLD laäp trình laïi vaãn coøn ñöôïc goïi laø PAL.
Thuaät ngöõ GAL laø teân do haõng Lattice Semeconductor ñaët vaø sau ñoù thì ñöôïc caáp pheùp cho
caùc nhaø saûn xuaát khaùc.
Caáu truùc cô baûn cuûa PAL vaø GAL laø maûng AND cho pheùp laäp trình vaø maûng OR coá ñònh toå chöùc theo phöông phaùp toång cuûa caùc tích SOP (Sum-Of-Product). Vôùi CPLD (Complex Programmable Logic Device) ñöôïc tích hôïp töø nhieàu SPLD ñeå coù chöùc naêng maïnh hôn cho caùc thieát keá phöùc taïp.
Trong phaàn naøy chuùng ta seõ khaûo saùt hoaït ñoäng cuûa SPLD, phöông phaùp toång cuûa caùc tích ñöôïc duøng trong PAL vaø GAL, giaûi thích ñöôïc sô ñoà logic cuûa PAL/GAL, moâ taû macrocell cô baûn cuûa PAL/GAL, khaûo saùt PAL16V8 vaø GAL22V10, moâ taû CPLD cô baûn.
1. HOAÏT ÑOÄNG CUÛA SPLD CÔ BAÛN LAØ PAL
PAL chöùa maûng coång AND laäp trình vaø ñöôïc noái vôùi maûng coång OR coá ñònh. Thöôøng thì PAL duøng coâng ngheä xöû lyù caàu chì neân chæ cho pheùp laäp trình 1 laàn OTP (One-time- Programmable).
Caáu truùc PAL cho pheùp thöïc hieän taát caû caùc haøm toång cuûa caùc tích vôùi caùc bieán ñaõ ñöôïc xaùc ñònh. Caáu truùc cuûa moät PAL ñôn giaûn ñöôïc trình baøy nhö hình 1-1 cho 2 bieán ngoõ vaøo vaø 1 bieán ngoõ ra:
Hình 1-1. Caáu truùc cuûa PAL.
Moät maûng laäp trình laø moät ma traän caùc daây daãn goàm caùc haøng vaø caùc coät vaø chuùng coù theå laäp trình ñeå noái vôùi nhau taïi ñieåm giao nhau. Moãi ñieåm noái laäp trình coù caáu taïo laø caàu chì ñoái vôùi loaïi PAL vaø ñöôïc goïi laø moät teá baøo cell. Moãi haøng coù theå noái vôùi moät ngoõ vaøo cuûa coång AND vaø moãi coät laø moät bieán ngoõ vaøo hoaëc bieán phuû ñònh. Baèng caùch laäp trình giöõ nguyeân caàu chì hay phaù hoûng caàu chì thì coù theå taïo ra baát kyø haøm toå hôïp naøo töø caùc bieán ngoõ vaøo ñeå ñöa
4
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc. SPKT – Nguyeãn Ñình Phuù ñeán coång AND taïo ra caùc thaønh phaàn tích mong muoán. Caùc coång AND ñöôïc keát noái vôùi coång OR ñeå taïo neân caùc haøm ngoõ ra toång cuûa caùc tích.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
X
AB
=
+
BABA +
Ví duï 1: Moät PAL ñöôïc laäp trình nhö hình 1-2 ñeå taïo ra thaønh phaàn AB , BA vaø BA . Trong hình 1-2 ta coù theå nhìn thaáy moät soá caáu chì bò phaù hoûng vaø moät soá caàu chì coøn nguyeân ñeå keát noái caùc bieán ngoõ vaøo vôùi caùc ngoõ vaøo cuûa caùc coång AND taïo ra haøm tích theo yeâu caàu vaø sau cuøng laø haøm toång cuûa caùc tích:
Hình 1-2. PAL sau khi laäp trình ñeå taïo haøm.
2. HOAÏT ÑOÄNG CUÛA SPLD CÔ BAÛN LAØ GAL
GAL veà cô baûn chính laø PAL coù theå laäp trình ñöôïc, GAL coù toå chöùc AND/OR gioáng nhö PAL nhöng söï khaùc nhau cô baûn laø GAL duøng coâng ngheä xöû lyù cho pheùp laäp trình laïi gioáng nhö EEPROM thay cho caàu chì ñöôïc trình baøy nhö hình 1-3.
Hình 1-3. Caáu truùc cuûa GAL.
3. KÍ HIEÄU ÑÔN GIAÛN CHO SÔ ÑOÀ CUÛA PAL/GAL
5
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù Caùc thieát bò laäp trình PAL vaø GAL coù caùc coång logic AND vaø OR vaø theâm moät soá phaàn töû khaùc cuøng vôùi caùc bieán ngoõ vaøo vaø caùc bieán phuû ñònh. Haàu heát caùc PAL vaø GAL ñeàu coù sô ñoà kí hieäu ñôn giaûn nhö hình 1-4:
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-4. Kí hieäu ñôn giaûn cho PAL/GAL.
Caùc bieán ngoõ vaøo cuûa PAL hoaëc GAL thöôøng coù maïch ñeäm ñeå ngaên chaën quaù taûi khi coù quaù nhieàu coång AND noái tôùi ngoõ vaøo ñoù. Trong sô ñoà, khoái ñeäm laø khoái tam giaùc vöøa ñeäm tín hieäu ngoõ vaøo vaø ñaûo tín hieäu ñeå taïo ra bieán phuû ñònh cuûa tín hieäu ñoù.
AB
X
BABA +
+
=
PAL vaø GAL ñeàu coù moät löôïng raát lôùn caùc ñöôøng laäp trình keát noái beân trong vaø moãi coång AND coù nhieàu ngoõ vaøo. Thöôøng thì trong sô ñoà maïch cuûa PAL vaø GAL thay coång AND nhieàu ngoõ vaøo baèng coång AND chæ coù moät ñöôøng ngoõ vaøo cho goïn nhöng treân ñoù coù ghi soá löôïng ngoõ vaøo thöïc cho coång AND ñoù. Trong hình 1-4 thì moãi coång AND ñeàu coù 2 ngoõ vaøo.
. Ñieåm noái laäp trình naèm trong ma traän ñöôïc xaùc ñònh baèng daáu × naèm treân caùc ñöôøng giao nhau vaø caàu chì seõ ñöôïc giöõ nguyeân, coøn caùc ñieåm khoâng coù ñaùnh daáu × thì caàu chì seõ bò phaù hoûng. Hình 1-4 cuûa ví duï ôû treân ñöôïc laäp trình ñeå taïo ra haøm
X
BACBACBA
AC
=
+
+
+
Ví duï 1-2: Haõy veõ sô ñoà maïch cho moät PAL ñaõ laäp trình ñeå taïo ra haøm coù 3 bieán ngoõ vaøo
nhö sau:
Giaûi: Sô ñoà maïch cuûa PAL nhö hình 1-5:
6
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-5. Hình cho ví duï 1-1.
4. SÔ ÑOÀ KHOÁI TOÅNG QUAÙT CUÛA PAL/GAL
Sô ñoà khoái cuûa PAL hoaëc GAL ñöôïc trình baøy ôû hình 1-6. Neân nhôù raèng söï khaùc nhau cô baûn laø GAL coù maûng cho pheùp laäp trình laïi coøn PAL thì chæ laäp trình moät laàn. Caùc ngoõ ra cuûa maûng coång AND laäp trình ñöôïc ñöa ñeán caùc coång OR coá ñònh ñaõ ñöôïc keát noái ñeå taïo caùc haøm logic ngoõ ra. Coång OR keát hôïp vôùi haøm logic ngoõ ra thöôøng ñöôïc goïi laø macrocell.
Hình 1-6. Sô ñoà khoái cuûa PAL/GAL.
5. MACROCELL
Moät macrocell goàm moät coång OR vaø caùc haøm logic ngoõ ra keát hôïp. Möùc ñoä phöùc taïp cuûa macrocell tuyø thuoäc vaøo thieát bò cuï theå PAL hoaëc GAL. Moät macrocell coù theå ñöôïc ñònh caáu hình cho moät haøm toå hôïp, haøm thanh ghi hoaëc cho caû hai.
7
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù Haøm thanh ghi coù lieân quan ñeán flip flop chính vì theá trong macrocell cuõng coù flip flop ñeå
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
taïo ra caùc haøm tuaàn töï.
Hình 1-7 trình baøy 3 loaïi macrocell cô baûn vôùi caùc haøm toå hôïp.
(a)
(b)
(c)
Hình 1-7. Sô ñoà maïch caùc Macrocell.
Hình 1-7a trình baøy moät macrocell ñôn giaûn vôùi moät coång OR vaø moät coång ñaûo ba traïng thaùi. Ngoõ ra cuûa coång ñaûo ba traïng thaùi coù theå hoaït ñoäng taïo ra möùc HIGH, möùc LOW vaø traïng thaùi toång trôû cao xem nhö hôû maïch.
11
0
011 =⊕
=⊕
Hình 1-7b trình baøy moät macrocell coù theå hoaït ñoäng nhö ngoõ vaøo hoaëc ngoõ ra. Khi ngoõ vaøo ñöôïc duøng nhö ngoõ ra thì coång ñaûo phaûi ôû traïng thaùi toång trôû cao ñeå hôû maïch vaø tín hieäu töø beân ngoaøi ñöa ñeán boä ñeäm vaø keát noái vôùi maûng coång AND beân trong.
Hình 1-7c trình baøy moät macrocell coù theå laäp trình ñeå coù ngoõ ra tích cöïc möùc HIGH hoaëc möùc tích cöïc möùc LOW vaø cuõng coù theå söû duïng nhö ngoõ vaøo. Moät ngoõ vaøo cuûa coång XOR (ex- or) coù theå ñöôïc laäp trình ôû möùc HIGH hoaëc möùc LOW. Khi laäp trình ngoõ vaøo coång XOR ôû möùc HIGH thì tín hieäu ngoõ ra cuûa coång OR seõ bò ñaûo vì : . Töông töï khi laäp trình vaø
8
Kyõ thuaät PLD vaø ASIC
0
0
SPKT – Nguyeãn Ñình Phuù 0 =⊕ vaø
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc. ngoõ vaøo coång XOR ôû möùc LOW thì tín hieäu ngoõ ra coång OR khoâng bò ñaûo vì: 1
10
=⊕
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
.
6. CAÙC SPLD THÖÏC TEÁ
Thöôøng thì hình daïng voû cuûa SPLD coù caáu hình chaân naèm trong khoaûng töø 20 ñeán 28 chaân. Coù 2 thaønh phaàn giuùp chuùng ta xaùc ñònh PAL hoaëc GAL moät caùch thích hôïp cho caùc thieát keá logic ñaõ cho laø soá löôïng ngoõ vaøo vaø ngoõ ra cuøng vôùi soá löôïng coång logic. Moät vaøi thoâng soá khaùc caàn phaûi xem xeùt laø taàn soá hoaït ñoäng cöïc ñaïi, thôøi gian treå vaø nguoàn ñieän aùp cung caáp.
Caùc nhaø saûn xuaát Lattice, Actel, Atmel vaø Cypress laø caùc coâng ty saûn xuaát SPLD.
Caùc loaïi PAL vaø GAL thöôøng söû duïng laø PAL16V8 vaø GAL22V10. Caùc maõ soá cho bieát soá löôïng ngoõ vaøo, soá löôïng ngoõ ra vaø loaïi ngoõ ra logic. Ví duï: PAL16V8 seõ cho bieát thieát bò naøy coù 16 ngoõ vaøo, 8 ngoõ ra vaø ngoõ ra laø bieán (V: variable). Chöõ H hoaëc chöõ L coù nghóa laø ngoõ ra tích cöïc möùc HIGH hoaëc möùc LOW töông öùng. Sô ñoà khoái cuûa PAL16V8 vaø hình daïng voû ñöôïc trình baøy ôû hình 1-8.
Hình 1-8. Sô ñoà khoái vaø hình daïng voû cuûa PAL16V8.
Moãi macrocell coù 8 ngoõ vaøo laáy töø maûng coång AND neân coù theå coù tôùi 8 thaønh phaàn tích cho moãi ngoõ ra. Coù 10 ngoõ vaøo kí hieäu laø I, 2 ngoõ ra kí hieäu laø O vaø 6 chaân coù theå ñöôïc duøng
9
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc SPKT – Nguyeãn Ñình Phuù nhö laø ngoõ vaøo hoaëc ngoõ ra vaø kí hieäu laø I/O. Moãi ngoõ ra tích cöïc möùc LOW. PAL16V8 coù maät ñoä tích hôïp khoaûng 300 coång.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Sô ñoà khoái cuûa GAL 22V10 vaø hình daïng voû nhö hình 1-9. GAL naøy coù 12 ngoõ vaøo vaø 10 chaân coù theå söû duïng nhö ngoõ vaøo hoaëc ngoõ ra. Caùc macrocell coù caùc ngoõ vaøo keát noái vôùi maûng coång AND coù theå thay ñoåi soá löôïng keát noái töø 8 ñeán 16. GAL 22V10 coù maät ñoä tích hôïp khoaûng 500 coång.
Hình 1-9. Sô ñoà khoái vaø hình daïng voû cuûa GAL22V10.
7. CAÙC CPLD
Moät CPLD chöùa nhieàu maûng SPLD vôùi keát noái beân trong cho pheùp laäp trình nhö hình 1-10.
10
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
SPKT – Nguyeãn Ñình Phuù Chuùng ta xem moãi maûng SPLD trong CPLD laø moät khoái maûng logic LAB (Logic Array Block). Moät teân khaùc ñoâi khi cuõng ñöôïc duøng laø khoái chöùc naêng, khoái logic hoaëc khoái toång quaùt.
Caùc keát noái laäp trình beân trong thöôøng ñöôïc goïi laø PIA (Programmable Interconnect Array) nhöng moät soá nhaø cheá taïo nhö Xilinx duøng thuaät ngöõ AIM (Advance Interconnect Matrix) hoaëc caùc thuaät ngöõ töông töï.
Caùc LAB vaø caùc keát noái beân trong ñöôïc laäp trình baèng phaàn meàm. Moät CPLD coù theå ñöôïc laäp trình cho caùc chöùc naêng phöùc taïp döïa vaøo caáu truùc toång cuûa caùc tích cho moãi LAB ñoäc laäp hay chính xaùc hôn laø moãi SPLD. Caùc ngoõ vaøo coù theå keát noái tôùi baát kyø khoái LAB naøo vaø caùc ngoõ ra cuõng coù theå keát noái tôùi baát kyø LAB naøo thoâng qua PIA.
Hình 1-10. Sô ñoà khoái cuûa CPLD toång quaùt.
Haàu heát caùc nhaø cheá taïo ra moät chuoãi CPLD ñöôïc saép xeáp theo maät ñoä tích hôïp, coâng ngheä xöû lyù, coâng suaát tieâu thuï, nguoàn cung caáp vaø toác ñoä. Caùc nhaø cheá taïo thöôøng cung caáp maät ñoä CPLD theo caùc thaønh phaàn macrocell hoaëc LAB. Maät ñoä tích hôïp coù theå saép xeáp töø 10 macrocell ñeán 2000 macrocell trong moät voû coù theå leân ñeán vaøi traêm chaân.
PLD caøng phöùc taïp thì maät ñoä tích hôïp caøng cao. Moät vaøi CPLD coù theå laäp trình laïi vaø duøng coâng ngheä xöû lyù EEPROM hoaëc SRAM cho caùc ñieåm keát noái laäp trình. Coâng suaát tieâu taùn coù theå naèm trong khoaûng töø vaøi mili watt ñeán vaøi traêm mili watt. Nguoàn cung caáp DC thöôøng thì naèm trong khoaûng töø 2,5V ñeán 5V tuyø thuoäc vaøo caùc chæ ñònh cuûa thieát bò. Coù nhieàu nhaø saûn xuaát CPLD nhö Altera, Xilinx, Lattice vaø Cypress.
Trong phaàn tieáp theo chuùng ta seõ khaûo saùt caùc CPLD cuûa hai nhaø saûn xuaát laø Altera vaø Xilinx bôûi vì hai coâng ty naøy ñang chieám lónh thò tröôøng. Caùc nhaø cheá taïo khaùc thì cuõng saûn xuaát thieát bò vaø phaàn meàm töông töï.
11
Kyõ thuaät PLD vaø ASIC
SPKT – Nguyeãn Ñình Phuù
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc II. CPLD CUÛA HAÕNG ALTERA
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Altera saûn xuaát ra nhieàu hoï CPLD nhö MAX II, MAX 3000 vaø MAX 7000. Trong phaàn
naøy chæ trình baøy chuû yeáu hoï MAX 7000.
Sau khi hoaøn taát phaàn naøy thì baïn coù theå: moâ taû ñöôïc hoï CPLD MAX, thaûo luaän veà caáu truùc cuûa CPLD MAX 7000 vaø CPLS MAX II, giaûi thích caùch taïo caùc thaønh phaàn tích ñöôïc taïo ra trong CPLD.
1. CPLD MAX 7000
Caáu truùc cuûa CPLD laø caùch thöùc maø caùc thaønh phaàn beân trong ñöôïc toå chöùc vaø ñöôïc saép xeáp. Caáu truùc cuûa hoï CPLD MAX 7000 thì gioáng nhö sô ñoà khoái cuûa CLPD toång quaùt ñöôïc trình baøy ôû hình 1-11.
Hình 1-11. Caáu truùc CPLD MAX 7000.
CPLD MAX 7000 coù caáu truùc lôùp PAL/GAL ñeå taïo ra caùc haøm SOP. Maät ñoä naèm trong khoaûng töø 2 LAB ñeán 16 LAB tuyø thuoäc vaøo CPLD cuï theå. Neân nhôù laø moät LAB töông ñöông vôùi moät SPLD duøng coâng ngheä xöû lyù EEPROM. Kieåu laäp trình trong heä thoáng ISP (In-System Programmable) duøng giao tieáp chuaån JTAG.
Hình 1-11 trình baøy sô ñoà khoái toång quaùt CPLD hoï MAX 7000 cuûa Altera. Boán khoái LAB ñöôïc trình baøy nhöng soá löôïng coù theå leân ñeán 16 khoái LAB. Moãi khoái LAB coù 16 macrocell,
12
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc. SPKT – Nguyeãn Ñình Phuù nhieàu khoái LAB ñöôïc keát noái vôùi nhau thoâng qua PIA, PIA laø caáu truùc bus laäp trình toaøn cuïc (cho taát caû caùc LAB) bao goàm caùc ngoõ vaøo coù cuøng chöùc naêng, I/O vaø caùc macrocell.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
2. MACROCELL
Sô ñoà khoái macrocell ñôn giaûn cuûa hoï MAX 7000 ñöôïc trình baøy trong hình 1-12. Macrocell chöùa moät maûng coång AND laäp trình goàm 5 coång AND, moät coång OR, moät ma traän löïa choïn thaønh phaàn tích ñeå keát noái caùc ngoõ ra cuûa coång AND vôùi coång OR, vaø logic keát hôïp ñeå coù theå laäp trình cho ngoõ vaøo, ngoõ ra logic toång hôïp hoaëc ngoõ ra thanh ghi dòch.
Hình 1-12. Sô ñoà khoái macrocell ñôn giaûn cuûa MAX 7000.
Maëc duø vaãn duøng cuøng moät khaùi nieäm nhöng macrocell naøy khaùc vôùi macrocell ñaõ trình baøy ôû phaàn SPLD bôûi vì noù coù maûng coång AND laäp trình vaø ma traän löïa choïn thaønh phaàn tích. Trong hình 1-12 coù 5 coång AND taïo ra caùc thaønh phaàn tích töø PIA vaøo ma traän löïa choïn thaønh phaàn tích. Thaønh phaàn tích töø coång AND naèm döôùi cuøng coù theå ñöôïc hoài tieáp trôû laïi ma traän laäp trình xem nhö phaàn môû roäng chia seû ñeå söû duïng bôûi caùc macrocell khaùc.
Caùc ngoõ vaøo môû roäng song song cho pheùp möôïn caùc thaønh phaàn tích khoâng duøng töø caùc macrocell khaùc ñeå môû roäng bieåu thöùc SOP. Ma traän löïa choïn thaønh phaàn tích laø moät ma traän cuûa caùc keát noái laäp trình ñöôïc duøng ñeå keát noái caùc ngoõ ra ñaõ löïa choïn töø maûng coång AND vaø töø ngoõ vaøo môû roäng ñeán coång OR.
3. KHOÁI MÔÛ ROÄNG CHIA SEÛ
Buø cuûa thaønh phaàn tích ñöôïc duøng ñeå taêng soá löôïng thaønh phaàn tích trong bieåu thöùc SOP thì coù theå duøng ñöôïc cho moãi macrocell trong LAB. Hình 1-13 minh hoaï caùch thöùc thaønh phaàn môû chia seû töø macrocell khaùc coù theå ñöôïc duøng ñeå thieát laäp theâm caùc thaønh phaàn tích.
Trong tröôøng hôïp naøy moät trong 5 coång AND trong 1 maûng macrocell bò giôùi haïn, chæ coù 4 ngoõ vaøo vaø do ñoù coù theå taïo ra 1 thaønh phaàn tích coù 4 bieán khaùc nhau ñöôïc minh hoïa trong hình (a). Hình (b) trình baøy phaàn môû roäng cho 2 thaønh phaàn tích.
13
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
a. Coång AND 4 ngoõ vaøo taïo ra
b. Coång AND ñöôïc môû roäng ñeå
thaønh phaàn tích 4 bieán.
taïo ra 2 thaønh phaàn tích.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-13. Ví duï caùch môû roäng.
Moãi macrocell cuûa MAX 7000 coù theå taïo ra 5 thaønh phaàn tích töø maûng coång AND. Neáu 1 macrocell caàn nhieàu hôn 5 thaønh phaàn tích cho haøm ngoõ ra SOP thì noù phaûi duøng theâm thaønh phaàn môû roäng töø macrocell khaùc. Giaû söû thieát keá caàn bieåu thöùc SOP chöùa 6 thaønh phaàn tích. Hình 1-14 trình baøy caùch thaønh phaàn tích töø macrocell khaùc coù theå ñöôïc duøng ñeå taêng bieåu thöùc SOP ngoõ ra.
Hình 1-14. Minh hoïa cho vieäc chia seû.
14
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
(
)
FE +
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
SPKT – Nguyeãn Ñình Phuù ñöôïc noái ñeán coång AND thöù 5 trong macrocell thöù 1 ñeå taïo ra bieåu thöùc SOP vôùi 6 thaønh phaàn tích. Caùc daáu keát noái × ñöôïc taïo ra trong phaàn cöùng töø chöông trình thieát keá vaø phaàn meàm bieân dòch roài naïp vaøo chip.
Macrocell thöù 2 taïo ra thaønh phaàn môû roäng chia seû
4. KHOÁI MÔÛ ROÄNG SONG SONG
Moät phöông phaùp khaùc ñeå taêng soá löôïng caùc thaønh phaàn tích cho moät macrocell baèng caùch duøng boä môû roäng song song – trong noù caùc thaønh phaàn tích môû roäng ñöôïc OR vôùi caùc thaønh phaàn ñöôïc taïo ra macrocell thay vì duøng keát hôïp trong ma traän AND nhö ôû boä môû roäng chia seû. Moät macrocell ñaõ cho coù theå möôïn caùc thaønh phaàn tích khoâng duøng töø caùc macrocell laân caän (coù theå leân ñeán 5 thaønh phaàn töø caùc macrocell khaùc ñoái vôùi MAX 7000). Khaùi nieäm naøy ñöôïc minh hoïa nhö hình 1-15 trong ñoù maïch ñieän ñôn giaûn ñöôïc taïo ra töø 2 thaønh phaàn tích möôïn theâm 3 thaønh phaàn tích môû roäng.
Hình 1-15. Minh hoïa cho boä môû roäng song song.
15
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-16. Minh hoïa cho boä môû roäng song song töø macrocell khaùc.
Hình 1-16 trình baøy caùch moät macrocell coù theå möôïn caùc thaønh phaàn môû roäng song song töø macrocell khaùc ñeå taêng bieåu thöùc ngoõ ra SOP. Macrocell thöù 2 duøng 3 thaønh phaàn tích töø macrocell thöù 1 ñeå taïo ra bieåu thöùc SOP goàm 8 thaønh phaàn.
5. CPLD MAX II
Caáu truùc cuûa CPLD MAX II khaùc vôùi hoïc MAX 7000 vaø ñöôïc Altera goïi laø CPLD “Post- macrocell”. Nhö ñaõ trình baøy trong sô ñoà khoái hình 1-17, thieát bò naøy chöùa caùc khoái LAB cuøng vôùi nhieàu thaønh phaàn logic LE (Logic Elements). Moät LE laø moät ñôn vò thieát keá logic cô baûn vaø töông töï nhö macrocell. Keát noái beân trong coù theå laäp trình ñöôïc saép xeáp theo haøng vaø coät chaïy giöõa caùc LAB vaø caùc phaàn töû ngoõ vaøo/ngoõ ra (IOE: Input/Output Elements) ñöôïc ñònh höôùng xung quanh. Caáu truùc cuûa hoï CPLD naøy gioáng nhö FPGA – coù theå xem MAX II laø FPGA coù maät ñoä thaáp.
Söï khaùc nhau giöõa CPLD MAX II vaø caùc CPLD thieát keá töø SPLD laø caùch xaây döïng moät haøm logic. CPLD MAX II söû duïng caùc baûng tra LUT (Look-Up Tables) thay cho ma traän AND/OR. Moät LUT veà cô baûn laø loaïi boä nhôù coù theå laäp trình ñeå taïo ra caùc haøm SOP. Hai phöông phaùp naøy ñöôïc minh hoïa nhö hình 1-18.
16
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Loaïi duøng LUT.
Loaïi duøng logic maûng AND/OR
Hình 1-17. Sô ñoà khoái cuûa MAX II.
Hình 1-18. Phaân bieät 2 kieåu xaây döïng haøm.
17
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù Nhö ñaõ ñeà caäp CPLD MAX II coù caùch saép xeáp haøng/coät cuûa caùc keát noái beân trong thay cho caùch keát noái beân trong theo loaïi keânh coù trong haàu heát caùc CPLD. Coù 2 phöông phaùp ñöôïc minh hoïa trong hình 1-19.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Keát noái beân trong duøng haøng/coät Keát noái theo kieåu keânh
Hình 1-19. Phaân bieät 2 kieåu keát noái.
Haàu heát caùc CPLD duøng coâng ngheä xöû lyù khoâng bay hôi cho caùc ñieåm noái laäp trình. Tuy nhieân MAX II duøng coâng ngheä xöû lyù nhö SRAM neân chuùng coù theå bay hôi – taát caû caùc logic ñaõ laäp trình seõ maát heát khi maát ñieän. Boä nhôù ñöôïc gaén vaøo beân trong chip ñeå löu tröõ döõ lieäu chöông trình duøng coâng ngheä boä nhôù khoâng bay hôi vaø seõ ñònh caáu hình laïi cho CPLD khi coù ñieän.
III. CPLD CUÛA HAÕNG XILINX:
Cuõng gioáng nhö Altera, Xilinx saûn xuaát ra caùc hoï CPLD ñöôïc saép xeáp theo maät ñoä tích hôïp, coâng ngheä xöû lyù, ñieän aùp nguoàn cung caáp vaø toác ñoä. Xilinx cheá taïo ra nhieàu hoï CPLD nhö Cool Runner II, Cool Runner XPLA3 vaø XC9500. Hoï XC9500 thì coù caáu truùc gioáng nhö hoï CPLD MAX 7000 cuûa Altera söû duïng caáu truùc loaïi PAL/GAL. Trong phaàn naøy chuùng ta chæ phaân tích Cool Runner II.
Sau khi keát thuùc phaàn naøy baïn coù theå: moâ taû PLA vaø so saùnh vôùi PAL, thaûo luaän veà caáu
truùc CPLD Cool Runner II vaø moâ taû caùc khoái chöùc naêng.
1. PLA (PROGRAMMABLE LOGIC ARRAY)
Nhö ñaõ trình baøy, caáu truùc cuûa CPLD laø caùch maø caùc thaønh phaàn beân trong ñöôïc toå chöùc vaø saép xeáp. Caáu truùc cuûa hoï Cool Runner II cuûa Xilinx thì döïa vaøo caáu truùc maûng logic laäp trình PLA (Programmable Logic Array) toát hôn caáu truùc PAL (Programmable Array Logic). Hình 1- 20 so saùnh caáu truùc PAL vôùi caáu truùc PLA ñôn giaûn.
18
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-20. So saùnh PAL vôùi PLA.
Nhö ñaõ trình baøy, PAL coù maûng coång AND laäp trình vaø theo sau laø maûng coång OR coá ñònh ñeå taïo ra caùc bieåu thöùc SOP nhö hình 1-20a. PLA coù maûng coång AND laäp trình vaø theo sau laø maûng coång OR laäp trình nhö hình 1-20b.
2. COOLRUNNER II
CPLD Cool Runner II duøng loaïi caáu truùc PLA. Cool Runner II coù nhieàu khoái chöùc naêng FB (Function Block) töông töï nhö LAB trong CPLD MAX 7000 cuûa Altera. Moãi khoái chöùc naêng FB chöùa 16 macrocell. Caùc khoái chöùc naêng ñöôïc keát noái beân trong bôûi moät ma traän keát noái beân trong caûi tieán AIM töông töï nhö PIA trong MAX 7000. Sô ñoà caáu truùc cô baûn cho Cool Runner II ñöôïc trình baøy ôû hình 1-21.
19
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-21. Sô ñoà caáu truùc cuûa Cool runner II.
Sô ñoà khoái CPLD cuûa Xilinx vaø cuûa Altera gaàn nhö laø gioáng nhau tuy nhieân beân trong thì
khaùc nhau.
CPLD hoï Cool Runner II chöùa töø 32 macrocell ñeán 512 macrocell. Do coù 16 macrocell cho moãi khoái chöùc naêng, soá löôïng khoái chöùc naêng naèm trong khoaûng töø 2 ñeán 32. Sô ñoà khoái cuûa moät khoái chöùc naêng FB ñöôïc trình baøy nhö hình 1-22.
20
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-22. Caáu truùc cuûa moät khoái chöùc naêng FB.
DCBA
DCAB
+
+
Maûng coång AND coù 56 coång AND vaø maûng coång OR laäp trình coù 16 coång OR. Vôùi caáu truùc PLA thì baát kyø thaønh phaàn tích naøo cuõng coù theå noái tôùi coång OR ñeå taïo neân bieåu thöùc SOP cho ngoõ ra. Vôùi khaû naêng cöïc ñaïi moãi khoái chöùc naêng coù theå taïo ra 16 ngoõ ra vaø moãi ngoõ ra coù bieåu thöùc SOP chöùa 56 thaønh phaàn tích.
CDBA
DABC
Ví duï 1-2: Haõy laäp trình keát noái beân trong khoái FB cuûa hình 1-22 ñeå taïo ra haøm chöùc naêng vaø haøm cho macrocell thöù 2 laø:
+
ABCD
SOP töø macrocell thöù 1 laø: BCDADBCA + +
Giaûi: keát quaû nhö hình 1-23:
21
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-23. Minh hoïa cho ví duï 1-2.
IV. LOGIC LAÄP TRÌNH FPGA
Nhö ñaõ trình baøy ôû treân, caáu truùc phaân loaïi CPLD bao goàm caùc khoái logic loaïi PAL/GAL hoaëc PLA vôùi caùc keát noái beân trong coù theå laäp trình. Veà cô baûn FPGA (Field Programmable Gate Array) coù caáu truùc khaùc – khoâng duøng maûng loaïi PAL/PLA – coù maät ñoä tích hôïp cao hôn nhieàu so vôùi CPLD. Caùc phaàn töû duøng ñeå taïo ra caùc haøm logic trong FPGA thöôøng thì nhoû hôn nhieàu so vôùi caùc thaønh phaàn trong CPLD. Töông töï trong FPGA thì caùc keát noái beân trong ñöôïc toå chöùc theo haøng vaø coät.
Sau khi keát thuùc phaàn naøy baïn coù theå: moâ taû caáu truùc cô baûn cuûa FPGA, so saùnh FPGA vôùi CPLD, thaûo luaän veà LUT, thaûo luaän veà FPGA duøng caáu truùc SRAM vaø ñònh nghóa loõi cuûa FPGA.
Coù 3 thaønh phaàn cô baûn trong FPGA laø khoái logic coù theå ñònh caáu hình logic CLB (Configurable Logic Block), caùc keát noái beân trong vaø caùc khoái ngoõ vaøo/ra ñöôïc minh hoïa nhö hình 1-24.
22
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-24. Caáu truùc cô baûn cuûa FPGA.
Caùc khoái coù theå ñònh caáu hình logic CLB trong FPGA thì khoâng phöùc taïp baèng caùc khoái LAB hoaëc FB trong CPLD nhöng thöôøng thì coù nhieàu thaønh phaàn hôn. Khi CLB khaù ñôn giaûn thì caáu truùc FPGA ñöôïc goïi laø fine grained. Caùc khoái IO naèm xung quanh cuûa caáu truùc taïo ra söï truy xuaát ngoõ vaøo, ngoõ ra hoaëc caû hai chieàu coù theå löïa choïn moät caùch ñoäc laäp ñeán theá giôùi beân ngoaøi.
Ma traän phaân loaïi cuûa caùc keát noái beân trong coù theå laäp trình taïo ra caùc keát noái beân trong cuûa CLB vaø keát noái ñeán caùc ngoõ vaøo vaø caùc ngoõ ra. Caùc FPGA lôùn coù theå coù 10000 CLB vaø coù theâm boä nhôù vaø caùc nguoàn taøi nguyeân khaùc.
Haàu heát caùc nhaø cheá taïo caùc thieát bò logic laäp trình thöôøng saép xeáp thaønh chuoãi FPGA phaân loaïi theo maät ñoä, coâng suaát tieâu taùn, ñieän aùp nguoàn cung caáp, toác ñoä vaø moät vaøi möùc ñoä khaùc nhau veà caáu truùc. FPGA laø thieát bò coù theå laäp trình laïi vaø söû duïng coâng ngheä xöû lyù SRAM hoaëc baùn caàu chì ñeå laäp trình cho caùc ñieåm noái. Maät ñoä coù theå naèm trong khoaûng töø vaøi traêm module logic ñeán saép xæ khoaûng 180000 module logic trong 1 voû vôùi soá löôïng chaân leân ñeán 1000. Nguoàn cung caáp DC thöôøng naèm trong khoaûng 1,2V ñeán 2,5V tuyø thuoäc vaøo loaïi chip.
1. CAÙC KHOÁI LOGIC COÙ THEÅ ÑÒNH CAÁU HÌNH CLB
Thöôøng thì khoái logic cuûa FPGA chöùa moät vaøi module logic khaù nhoû töông töï nhö macrocell trong CPLD. Hình 1-25 trình baøy caùc khoái CLB cô baûn naèm trong caùc keát noái beân trong coù theå laäp trình haøng/coät toaøn cuïc – ñöôïc duøng ñeå keát noái caùc khoái logic. Moãi CLB ñöôïc
23
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc SPKT – Nguyeãn Ñình Phuù thieát laäp töø nhieàu module logic nhoû hôn vaø caùc keát noái beân trong coù theå laäp trình cuïc boä – ñöôïc duøng ñeå keát noái caùc module logic vôùi CLB.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-25. Caùc khoái CLB cuûa FPGA.
2. CAÙC MODULE LOGIC
Moät module logic trong moät khoái logic cuûa FPGA coù theå ñöôïc ñònh caáu hình cho haøm logic toå hôïp, haøm logic thanh ghi hoaëc cho caû 2. Flip flop laø thaønh phaàn logic keát hôïp vaø ñöôïc duøng cho caùc haøm logic thanh ghi. Sô ñoà khoái cuûa module logic tieâu bieåu duøng caáu truùc LUT ñöôïc trình baøy nhö hình 1-26.
Hình 1-26. Sô ñoà khoái cô baûn cuûa 1 module logic trong FPGA.
n2 , trong ñoù n laø soá löôïng caùc bieán ngoõ vaøo. Ví duï: 3 ngoõ vaøo coù theå löïa choïn ñeán 8 oâ nhôù, do ñoù LUT vôùi bieán ngoõ vaøo coù theå taïo ra bieåu thöùc SOP leân ñeán 8 thaønh phaàn tích. Moät moâ hình maãu cuûa 1 vaø 0 coù theå ñöôïc laäp trình vaøo trong caùc oâ nhôù cuûa LUT ñöôïc minh hoïa nhö hình 1-27 ñeå taïo ra haøm SOP theo chæ ñònh. Caùc oâ nhôù chöùa soá 1 coù nghóa laø thaønh phaàn tích ñöôïc keát hôïp trong bieåu thöùc SOP cuûa ngoõ ra vaø oâ nhôù chöùa soá 0 coù nghóa laø thaønh phaàn tích keát hôïp khoâng xuaát hieän trong bieåu thöùc SOP cuûa ngoõ ra.
Thöôøng thì toå chöùc cuûa moät LUT bao goàm moät soá caùc oâ nhôù baèng vôùi
24
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
+
+
+
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
AAA 0 1
2
AAA 0 1
2
AAA 0 1
2
AAA 0 1
2
Keát quaû bieåu thöùc SOP ngoõ ra laø
+
+
+
+
Hình 1-27. Khaùi nieäm cô baûn cuûa LUT ñöôïc laäp trình ñeå taïo SOP ngoõ ra.
AAA 0 1
AAA 0 1
AAA 0 1
AAA 0 1
2
2
2
2
2
sau: Ví duï 1-3: Haõy thieát laäp LUT coù 3 bieán cô baûn ñöôïc laäp trình ñeå taïo ra bieåu thöùc SOP theo AAA 0 1
Giaûi: keát quaû nhö hình 1-28:
Hình 1-28. Minh hoïa cho ví duï 1-3.
3. FPGA DUØNG COÂNG NGHEÄ SRAM
Caùc FPGA cuõng coù theå laø khoâng bay hôi neáu duøng coâng ngheä baùn caàu chì hoaëc coù theå bay hôn neáu duøng coâng ngheä SRAM. Khaùi nieäm bay hôi coù nghóa laø taát caû caùc döõ lieäu ñaõ laäp trình
25
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc SPKT – Nguyeãn Ñình Phuù vaøo trong caùc khoái CLB seõ bò maát heát khi maát ñieän. Do ñoù, caùc FPGA duøng coâng ngheä SRAM chöùa caû boä nhôù khoâng bay hôi tích hôïp beân trong chip ñeå löu tröõ chöông trình vaø döõ lieäu vaø ñònh caáu hình laïi cho thieát bò moãi khi coù ñieän trôû laïi hoaëc chuùng duøng boä nhôù beân ngoaøi vôùi vieäc chuyeån döõ lieäu ñöôïc ñieàu khieån vi xöû lyù chuû. Khaùi nieäm boä nhôù tích hôïp trong chip ñöôïc minh hoïa nhö hình 1-29a vaø khaùi nieäm ñònh caáu hình laïi duøng vi xöû lyù ñöôïc trình baøy nhö hình 1-29b.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
a. FPGA bay hôi ñònh laïi caáu hình duøng boä nhôù khoâng bay hôi beân trong.
b. FPGA bay hôi ñònh laïi caáu hình duøng boä nhôù khoâng bay hôi vaø vi xöû lyù.
Hình 1-29. Khaùi nieäm veà FPGA bay hôi.
4. CAÙC LOÕI CUÛA FPGA
Caùc FPGA veà cô baûn gioáng nhö caùc phieán traéng maø ngöôøi duøng coù theå laäp trình cho caùc thieát keá logic. Caùc FPGA tieän lôïi khi maø noù chöùa caùc maïch logic “loõi phaàn cöùng” (hard core). Moät maïch logic loõi phaàn cöùng laø moät phaàn logic trong FPGA ñöôïc ñaët vaøo beân trong bôûi nhaø cheá taïo ñeå cung caáp caùc chöùc naêng ñaët bieät vaø khoâng theå laäp trình laïi. Ví duï neáu khaùch haøng caàn moät vi xöû lyù nhoû nhö laø moät phaàn cuûa thieát keá heä thoáng thì noù coù theå ñöôïc laäp trình vaøo trong FPGA cho khaùch haøng hoaëc noù coù theå ñöôïc cung caáp nhö laø moät loõi phaàn cöùng bôûi nhaø cheá taïo. Neáu chöùc naêng ñöôïc tích hôïp vaøo beân trong coù vaøi caáu truùc coù theå laäp trình ñöôïc thì noù ñöôïc xem nhö laø chöùc naêng “loõi meàm” (soft core).
Öu ñieåm cuûa phöông phaùp duøng loõi phaàn cöùng laø cuøng moät thieát keá coù theå thöïc hieän ñaày ñuû duøng khaû naêng cuûa FPGA ít hôn neáu so vôùi caùch ngöôøi duøng söû duïng caùch laäp trình, keát quaû laø khoâng gian treân chip nhoû hôn vaø thôøi gian thieát keá ngaén hôn.
26
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù Khuyeát ñieåm cuûa phöông phaùp duøng loõi phaàn cöùng laø caùc thoâng soá kyõ thuaät laø coá ñònh trong quaù trình cheá taïo vaø khaùch haøng phaûi coù khaû naêng duøng ñöôïc chöùc naêng ñoù. Noù khoâng theå thay ñoåi veà sau.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Caùc loõi phaàn cöùng thöôøng coù taùc duïng cho caùc chöùc naêng maø chuùng ñöôïc söû duïng phoå bieán trong caùc heä thoáng soá nhö vi xöû lyù, giao tieáp ngoõ vaøo/ngoõ ra vaø xöû lyù tín hieäu soá (Digital Signal Processor). Coù nhieàu chöùc naêng loõi phaàn cöùng coù theå laäp trình trong FPGA. Hình 1-30 minh hoaï cho khaùi nieäm loõi phaàn cöùng ñöôïc bao quanh bôûi CLB ñöôïc laäp trình bôûi ngöôøi söû duïng.
Hình 1-30. Khaùi nieäm chöùc naêng loõi phaàn cöùng trong FPGA.
Vieäc thieát keá caùc loõi phaàn cöùng thöôøng ñöôïc xaây döïng bôûi nhaø cheá taïo FPGA vaø chuùng thuoäc sôû höõu cuûa nhaø cheá taïo. Caùc thieát keá rieâng bôûi nhaø cheá taïo ñöôïc ñaët teân laø Intellectual Property (IP) – sôû höõu trí tueä. Moät coâng ty thöôøng lieät caùc loaïi sôû höõu trí tueä maø chuùng coù hieäu löïc treân caùc website. Nhieàu sôû höõu trí tueä laø söï keát hôïp cuûa loõi phaàn cöùng vaø loõi phaàn meàm. Vi xöû lyù laø moät ví duï minh hoïa – coù vaøi tính naêng meàm deûo trong löïa choïn vaø ñieàu chænh moät vaøi thoâng soá bôûi ngöôøi duøng.
Caùc FPGA chöùa caùc vi xöû lyù tích hôïp moät trong hai hoaëc caû hai loõi phaàn cöùng vaø loõi phaàn meàm vaø nhieàu chöùc naêng khaùc thì ñöôïc ñaët teân laø Platform FPGA bôûi vì chuùng coù theå ñöôïc duøng ñeå ñieàu khieån moät heä thoáng ñaày ñuû maø khoâng caàn theâm moät thieát bò hoã trôï naøo.
V. FPGA CUÛA ALTERA
Altera saûn xuaát ra nhieàu hoï FPGA bao goàm Stratix II, Stratix , Cyclone vaø ACEX. Trong
phaàn naøy chuùng ta chæ khaûo saùt hoï Stratix II ñeå minh hoïa cho caùc khaùi nieäm.
Sau khi keát thuùc phaàn naøy chuùng ta coù theå:
Thaûo luaän veà caáu truùc cô baûn cuûa FPGA hoï Stratix II, giaûi thích caùch thaønh phaàn ñöôïc taïo
ra trong FPGA, thaûo luaän veà caùc chöùc naêng ñöôïc tích hôïp.
1. KHOÁI MAÛNG LOGIC (LAB – LOGIC ARRAY BLOCK)
Sô ñoà khoái cuûa FPGA toång quaùt ñaõ ñöôïc trình baøy nhö hình 1-24; caáu truùc cuûa Stratix II vaø caùc hoï Altera khaùc thì gioáng nhau. Chuùng ñeàu coù caáu truùc loaïi LUT cho caùc module logic – ñöôïc goïi laø module logic thích nghi ALM (Adaptive Logic Module) ñöôïc trình baøy trong thieát bò toång quaùt LAB. Maät ñoä ñöôïc phaân loaïi töø 2000 LAB cho ñeán 22000 LAB tuyø thuoäc vaøo caùc hoï cuï theå vaø moãi LAB coù 8 ALM. Kích thöôùc voû thay ñoåi töø 314 chaân ñeán 1173 chaân. Thieát bò
27
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc SPKT – Nguyeãn Ñình Phuù yeâu caàu söû duïng nguoàn DC cung caáp töø 1,2V; 1,5V vaø 2,5V. Hoï FPGA Stratix II söû duïng coâng ngheä cuûa SRAM.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-31 trình baøy sô ñoà khoái cuûa caáu truùc LAB cuûa Stratix II. Moãi LAB chöùa 8 ALM, caùc LAB ñöôïc lieân keát vôùi nhau thoâng qua caùc keát noái haøng vaø coät beân trong. Caùc ñieåm keát noái cuïc boä beân trong lieân keát caùc ALM vôùi moãi LAB.
Hình 1-31. Sô ñoà khoái cuûa caáu truùc LAB cuûa Stratix II vaø ALM
2. MODULE LOGIC THÍCH NGHI ALM
ALM laø ñôn vò thieát keá cô baûn trong FPGA Stratix II. Moãi ALM chöùa moät phaàn toå hôïp logic duøng caáu truùc LUT vaø maïch logic keát hôïp coù theå ñöôïc laäp trình cho 2 ngoõ ra logic toå hôïp hoaëc hai ngoõ ra thanh ghi dòch. Beân caïnh ñoù, ALM coù maïch coäng logic, caùc flip flop vaø caùc maïch logic khaùc – cho pheùp thöïc hieän chöùc naêng tính toaùn soá hoïc, chöùc naêng ñeám vaø thanh ghi dòch. Sô ñoà khoái ALM cuûa Stratix II ñöôïc trình baøy nhö hình 1-32.
Hoaït ñoäng cuûa ALM:
Moät ALM coù theå ñöôïc laäp trình cho ra nhieàu kieåu hoaït ñoäng nhö sau:
• Kieåu hoaït ñoäng bình thöôøng.
• Kieåu hoaït ñoäng LUT môû roäng.
• Kieåu tính toaùn soá hoïc.
• Kieåu tính toaùn soá hoïc duøng chung.
Ngoaøi 4 kieåu hoaït ñoäng thì ALM coù theå ñöôïc duøng nhö laø 1 chuoãi thanh ghi ñeå xaây döïng boä ñeám vaø thanh ghi dòch. Trong phaàn naøy chuùng ta seõ khaûo saùt kieåu hoaït ñoäng bình thöôøng vaø kieåu hoaït ñoäng LUT môû roäng.
28
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-32. Sô ñoà khoái ALM cuûa Stratix II.
a. Kieåu hoaït ñoäng bình thöôøng
Ñöôïc söû duïng ñaàu tieân ñeå taïo caùc haøm logic toå hôïp. Moät ALM coù theå thöïc hieän moät hoaëc hai haøm ngoõ ra toå hôïp vôùi hai LUT cuûa noù. Ví duï veà 4 caáu hình LUT ñöôïc minh hoïa ôû hình 1-33.
Hình 1-33. Caùc caáu hình coù theå coù cuûa LUT trong ALM ôû kieåu bình thöôøng.
Hai haøm SOP – moãi haøm coù 4 bieán hoaëc ít hôn – coù theå ñöôïc thöïc hieän trong moät ALM maø khoâng caàn duøng caùc ngoõ vaøo chia seõ. Ví duï baïn coù theå coù “2 haøm 4 bieán”, “moät haøm coù 4 bieán vaø moät haøm 3 bieán” hoaëc “hai haøm 3 bieán”. Baèng caùch chia seõ caùc ngoõ vaøo, baïn coù theå coù baát kyø toå hôïp naøo cuûa 8 ngoõ vaøo leân ñeán toái ña 6 ngoõ vaøo cho moãi LUT. Trong kieåu hoaït ñoäng bình thöôøng thì baïn bò giôùi haïn laø caùc haøm SOP chæ coù toái ña laø 6 bieán.
29
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
b. Kieåu hoaït ñoäng LUT môû roäng
Cho pheùp môû roäng haøm leân ñeán 7 bieán ñöôïc minh hoïa ôû hình 1-34. Maïch ñieän AND – OR vôùi ngoõ vaøo ñaûo laø moät ví duï ñôn giaûn cuûa maïch doàn keânh. Maïch doàn keânh laø moät phaàn cuûa maïch logic duøng rieâng trong ALM.
Hình 1-34. Môû roäng ALM ñeå taïo ra haøm SOP 7 bieán trong kieåu LUT môû roäng.
Ví duï 1-4: Moät ALM trong FPGA Stratix II ñöôïc ñònh caáu hình hoaït ñoäng ôû kieåu LUT môû
roäng ñöôïc trình baøy ôû hình 1-35. Haõy xaùc ñònh bieåu thöùc ngoõ ra SOP.
Hình 1-35. Minh hoïa cho ví duï 1-4.
0A vaø bieåu thöùc ngoõ ra beân döôùi thì
Giaûi: bieåu thöùc ngoõ ra ôû treân thì AND vôùi bieán ngoõ vaøo
0A . Bieåu thöùc sau cuøng nhö sau:
+
+
+
+
+
AAAAAA 0 3
4
5
2
1
AAAAAA 3 0
1
2
5
4
AAAAAA 0 3
2
1
5
4
AAAAAA 4 0
3
6
2
5
AAAAAA 4 0
6
2
5
3
AAAAAA 0 4
6
5
3
2
AND vôùi
3. CAÙC CHÖÙC NAÊNG TÍCH HÔÏP
30
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù Sô ñoà khoái toång quaùt cuûa FPGA Stratix II ñöôïc trình baøy ôû hình 1-36. FPGA chöùa caùc thaønh phaàn boä nhôù vaø chöùc naêng xöû lyù tín hieäu soá DSP. Chöùc naêng cuûa DSP nhö caùc maïch loïc soá thöôøng ñöôïc söû duïng nhieàu trong caùc heä thoáng. Khi quan saùt sô ñoà khoái, caùc khoái tích hôïp beân trong ñöôïc saép xeáp ôû khaép nôi trong ma traän keát noái beân trong cuûa FPGA vaø caùc phaàn töû ngoõ vaøo/ngoõ ra ñöôïc ñaët xung quanh chu vi FPGA.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-36. Sô ñoà khoái cuûa FPGA Stratix II.
VI. FPGA CUÛA XILINX
Xilinx coù 2 hoï FPGA chính laø Spartan vaø Virtex vaø coù nhieàu loaïi khaùc nhau trong moãi hoï. Ví duï Spartan 3 vaø Spartan IIE, Virtex-4, Virtex II vaø Virtex II Pro X. Xilinx ñònh roõ Virtex-4, Virtex II vaø Virtex II Pro X laø caùc FPGA loaïi platform (neàn) bôûi vì chuùng tích hôïp nhieàu chöùc naêng nhö boä nhôù, vi xöû lyù, boä thu phaùt vaø caùc phaàn cöùng khaùc vaø caùc loõi phaàn meàm IP. Caùc hoï FPGA thöôøng thì khaùc veà maät ñoä tích hôïp vaø caùc thoâng soá kyõ thuaät. Haàu heát caùc thieát bò cuûa Xilinx coù caáu truùc FPGA truyeàn thoáng, tuy nhieân Virtex II Pro X coù caùi goïi laø caáu truùc khoái module chæ ñònh öùng duïng ASMBL (Application Specific Modular Block – ñöôïc phaùt aâm laø assemble) coù treân 1 tæ transistor trong 1 chip ñôn.
1. CAÙC KHOÁI LOGIC COÙ THEÅ ÑÒNH CAÁU HÌNH CLB (CONFIGURABLE LOGIC BLOCK)
Vuøng logic ñònh caáu hình cuûa haàu heát caùc FPGA hoï Xilinx ñöôïc chia thaønh nhieàu khoái logic coù theå ñònh caáu hình CLB vôùi moãi CLB chöùa nhieàu ñôn vò logic cô baûn ñöôïc laø caùc teá baøo logic (logic cell - LC). Moãi teá baøo logic LC söû duïng maïch logic LUT truyeàn thoáng coù 4 ngoõ vaøo vaø theâm maïch logic coäng vaø moät flip flop. Moät LUT coù 4 ngoõ vaøo coù theå taïo ra töø moät thaønh phaàn tích cho ñeán haøm SOP chöùa 16 thaønh phaàn tích. Hai teá baøo logic LC gioáng nhau ñöôïc goïi laø slice (laùt moûng). Hình 1-37 minh hoïa caùc caáp logic ñònh caáu hình töø teá baøo logic cho ñeán
31
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc SPKT – Nguyeãn Ñình Phuù CLB. Maät ñoä tích hôïp naèm trong khoaûng töø 2000 ñeán 74000 teá baøo logic LC trong moät thieát bò Virtex ñôn.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-37. Minh hoïa caùc caáp logic ñònh caáu hình töø teá baøo logic cho ñeán CLB.
2. CHUOÃI LIEÂN TIEÁP SOP
Slice ñôn giaûn (hai teá baøo logic LC) vôùi logic chuoãi lieân tieáp ñöôïc trình baøy ôû hình 1-38. Coù maïch ña hôïp (MUX) daønh rieâng naèm trong maïch logic keát hôïp cuûa moãi LC – ñöôïc duøng trong chuoãi lieân tieáp vaø moät coång OR daønh rieâng naèm trong slice.
32
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù Hình 1-38a trình baøy ví duï caùch maø moät slice trong CLB coù theå ñöôïc ñònh caáu hình nhö laø moät coång AND ñeå taïo ra thaønh phaàn tích 8 bieán. Hai slice coù theå ñöôïc ñònh caáu hình ñeå taïo ra moät haøm SOP vôùi 2 thaønh phaàn tích 8 bieán ñöôïc trình baøy ôû hình 1-38b. Toaøn boä CLB cuûa 4 slice coù theå ñöôïc ñònh caáu hình thaønh moät chuoãi lieân tieáp ñeå taïo ra moät haøm SOP vôùi 4 thaønh phaàn tích coù 8 bieán ñöôïc trình baøy nhö hình 1-38c. Bieåu thöùc SOP daøi hôn nöõa coù theå ñöôïc thöïc hieän duøng theâm caùc CLB môû roäng.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
(a)
(b)
33
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
(c)
Hình 1-38. Ví duï caùch duøng chuoãi noái tieáp ñeå môû roäng bieåu thöùc SOP.
Ví duï 1-5: Haõy trình baøy caùch coång AND coù 16 ngoõ vaøo coù theå taïo ra bieåu thöùc trong CLB.
Giaûi: Hai slice ñöôïc ñònh caáu hình ñöôïc trình baøy ôû hình 1-39 laø keát quaû cuûa coång AND coù
16 ngoõ vaøo.
34
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-39. Minh hoïa cho ví duï 1-5.
3. CAÁU TRUÙC FPGA TRUYEÀN THOÁNG VAØ CAÁU TRUÙC ASMBL
a. Caáu truùc truyeàn thoáng
(a) FPGA vôùi logic ñònh hình ñaày ñuû.
(b) FPGA cuøng kích thöôùc vôùi boä nhôù
vaø loõi IP (DSP) neân coù ít CLB hôn.
Nhö ñaõ bieát, caáu truùc FPGA truyeàn thoáng xuaát hieän nhö laø moät maûng cuûa caùc khoái logic (CLB hoaëc LAB) ñöôïc bao boïc xung quanh bôûi caùc teá baøo ngoõ vaøo/ngoõ ra coù theå ñònh caáu hình. Soá LCB trong FPGA tuyø thuoäc vaøo soá löôïng caùc phaàn töû IO – coù theå ñaët xung quanh. Khi loõi IP nhö DSP vaø boä nhôù tích hôïp beân trong khi ñöôïc yeâu caàu thì moät löôïng logic ñònh caáu hình phaûi maát ñi vaø taïi moät vaøi vò trí ñöôïc thay theá baèng IO neáu coù yeâu caàu. Khi nhieàu loõi IP ñöôïc theâm vaøo thì kích thöôùc vaät lyù cuûa FPGA phaûi taêng leân ñeå ñaûm baûo soá löôïng logic caáu hình caàn thieát vaø taêng theâm soá löôïng IO. Khaùi nieäm naøy ñöôïc minh hoïa baèng hình 1-40.
35
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
(c) FPGA coù nhieàu boä nhôù, theâm loõi DSP vaø loõi vi xöû lyù seõ yeâu caàu kích thöôùc lôùn hôn.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-40. Tích hôïp nhieàu chöùc naêng IP keát quaû laøm giaûm CLB vaø/hoaëc phaûi taêng kích thöôùc chip.
Logic caáu hình trong FPGA caøng phöùc taïp thì caøng duøng nhieàu IO. Moái lieân heä raøng buoäc giöõa logic vaø IO seõ daãn ñeán taêng kích thöôùc chip vaø taêng giaù thaønh. Ngoaøi ra moät vaán ñeà khaùc vôùi FPGA platform laø khi theâm caùc chöùc naêng loõi IP tích hôïp beân trong neáu coù yeâu caàu thì phaûi thieát keá laïi thaønh phaàn chính hoaëc thieát keá laïi moät phaàn trong caùch boá trí chip (layout) coù theå ñöôïc yeâu caàu seõ laøm taêng theâm giaù thaønh.
a. Caáu truùc ASMBL
Xilinx ñaõ xaây döïng moät phöông phaùp meàm deûo cho FPGA platform ôû chip Virtex II Pro X ñeå khaéc phuïc moät vaøi haïn cheá xuaát hieän trong caáu truùc truyeàn thoáng. Caáu truùc ASMBL laø caáu truùc söû duïng coät thay vì duøng caáu truùc haøng/coät. Caùc IO ñöôïc ñaët raûi raùc khaép nôi toát hôn laø ñaët xung quanh, daãn ñeán soá löôïng IO cuûa noù taêng maø khoâng caàn laøm taêng kích thöôùc chip. Moãi coät veà cô baûn laø moät daûi logic coù theå ñöôïc thay theá baèng daûi logic khaùc maø khoâng caàn thieát keá laïi caùch boá trí chip. Caùc ví duï veà caùc loaïi cuûa caùc daûi logic laø caùc khoái logic ñònh caáu hình CLB, khoái IO, boä nhôù vaø caùc loõi phaàn cöùng vaø phaàn meàm nhö DSP vaø vi xöû lyù.
Soá löôïng khaùc nhau cuûa moãi loaïi daûi logic coù theå ñöôïc troän laïi ñeå töông thích vôùi caùc yeâu caàu öùng duïng rieâng bieät. Ví duï, trong caáu hình ñôn giaûn nhaát thì coù theå pha troän caùc daûi CLB vaø caùc daûi khoái IO ñöôïc minh hoïa nhö hình 1-41a. Nhieàu hoaëc ít hôn cuûa caû 2 cuõng coù theå ñöôïc söû duïng tuyø thuoäc vaøo caùc yeâu caàu.
36
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù Neáu caàn nhieàâu boä nhôù thì moät hoaëc nhieàu daûi CLB coù theå ñöôïc thay theá nhö hình 1-41b. Neáu vuøng rieâng bieät trong öùng duïng laø xöû lyù tín hieäu soá thì coù theå theâm vaøo caùc loõi IP DSP troän vôùi boä nhôù nhö hình 1-41c. Hình 1-41d trình baøy caùc loõi vi xöû lyù ñöôïc theâm vaøo.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
(a) (b)
(c) (d)
Hình 1-41. Minh hoïa caáu truùc ASMBL cuûa FPGA platform.
VII. PHAÀN MEÀM LAÄP TRÌNH
Ñeå söû duïng thieát bò logic laäp trình thì phaûi coù phaàn cöùng vaø phaàn meàm keát hôïp vôùi nhau. Taát caû caùc nhaø cheá taïo SPLD, CPLD vaø FPGA cung caáp phaàn meàm hoã trôï cho moãi thieát bò phaàn cöùng. Caùc goùi phaàn meàm naèm trong danh saùch phaàn meàm ñöôïc duøng ñeå thieát keá döôùi söï giuùp ñôõ cuûa maùy tính – CAD. Trong phaàn naøy phaàn meàm laäp trình ñöôïc giôùi thieäu moät caùch toång quaùt.
Sau khi keát thuùc phaàn naøy baïn coù theå: giaûi thích quy trình laäp trình cho caùc thaønh phaàn cuûa thieát keá, moâ taû giai ñoaïn thieát keá, moâ taû giai ñoaïn moâ phoûng chöùc naêng, moâ taû giai ñoaïn toång hôïp, moâ taû giai ñoaïn thi haønh, moâ taû moâ phoûng theo thôøi gian, moâ taû caùch taûi chöông trình.
37
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù Quy trình laäp trình thieát keá ñöôïc xem nhö laø doøng thieát keá (design flow). Giaûn ñoà doøng thieát keá cô baûn duøng ñeå thöïc hieän thieát keá logic cho thieát bò laäp trình ñöôïc trình baøy nhö hình 1- 42. Haàu heát caùc goùi phaàn meàm rieâng leû seõ keát hôïp caùc coâng ñoaïn cuûa quy trình laïi vôùi nhau vaø quaù trình xöû lyù hoaøn toaøn töï ñoäng. Thieát bò ñeå ñöôïc laäp trình thöôøng ñöôïc xem laø thieát bò ñích (target device)
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-42. Sô ñoà doøng thieát keá toång quaùt ñeå laäp trình cho SPLD, CPLD hoaëc FPGA.
Phaûi coù 4 thieát bò ñeå coù theå laäp trình cho thieát bò laø: maùy tính, phaàn meàm laäp trình, thieát bò logic laäp trình (SPLD, CPLD hoaëc FPGA) vaø thieát bò keát noái maùy tính vôùi thieát bò laäp trình (caùp hoaëc maïch naïp). Taát caû caùc thaønh phaàn naøy ñöôïc minh hoïa nhö hình 1-43.
38
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-43. Caùc thieát bò cô baûn ñeå laäp trình cho SPLD, CPLD hoaëc FPGA.
1. CAÙCH THIEÁT KEÁ
Giaû söû raèng chuùng ta coù moät thieát keá maïch ñieän logic muoán ñieàu khieån baèng thieát bò laäp trình thì chuùng ta coù theå thieát keá treân maùy tính baèng moät trong hai caùch cô baûn: thieát keá duøng sô ñoà nguyeân lyù (schematic entry) vaø caùch duøng ngoân ngöõ (text entry).
Ñeå duøng caùch thieát keá baèng ngoân ngöõ thì phaûi laøm quen vôùi ngoân ngöõ HDL nhö VHDL, Verilog, ABEL hoaëc AHDL. Haàu heát caùc nhaø cheá taïo thieát bò laäp trình cung caáp caùc goùi phaàn meàm hoã trôï ngoân ngöõ VHDL vaø Verilog bôûi vì chuùng laø ngoân ngöõ HDL chuaån. Nhieàu nhaø cheá taïo coøn cung caáp theâm ngoân ngöõ ABEL, AHDL.
Kieåu thieát keá duøng sô ñoà maïch cho pheùp chuùng ta ñaët caùc kí hieäu cuûa caùc coång logic vaø caùc chöùc naêng logic khaùc töø thö vieän leân maøn hình vaø keát noái chuùng theo yeâu caàu cuûa thieát keá. Vôùi kieåu thieát keá naøy thì caàn bieát caùc ngoân ngöõ HDL. Hình 1-44 minh hoïa cho caû 2 kieåu thieát keá cho moät maïch ñieän logic AND-OR ñôn giaûn.
39
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-44. Minh hoïa cho 2 kieåu laäp trình.
Xaây döïng sô ñoà logic:
Z
+
+
+
+
=
Khi xaây döïng maïch ñieän logic ñaày ñuû treân maøn hình thì noù ñöôïc goïi laø sô ñoà phaúng “flat”. Caùc maïch ñieän logic phöùc taïp hôn thì khoù maø töông thích vôùi maøn hình. Chuùng ta coù theå thieát keá maïch ñieän logic thaønh nhieàu ñoaïn (segment), löu tröõ moãi ñoaïn nhö laø moät kí hieäu khoái vaø sau ñoù keát noái caùc kí hieäu khoái laïi vôùi nhau ñeå taïo thaønh moät maïch ñieän hoaøn chænh – ñöôïc goïi laø thieát keá coù thöù töï.
Ví duï thieát keá maïch ñieän coù bieåu thöùc SOP nhö sau: )
(
(
AAAA 0 2
AAAA 0 2
AAAA 0 2
AAAA 2 0
3
1
1
3
1
3
3
1
)0 AAAA 2
3
1
Chuùng ta duøng phöông phaùp thieát keá coù thöù töï vaø xaây döïng maïch logic cho 2 thaønh phaàn toång trong phöông trình, laøm ñôn giaûn moãi maïch ñieän logic baèng moät kí hieäu duy nhaát, sau khi thieát keá xong caû 2 maïch ñieän thì ñaët chuùng leân maøn hình vaø keát noái caùc ngoõ ra vôùi coång OR ñeå taïo thaønh maïch hoaøn chænh – taát caû ñöôïc minh hoïa baèng hình 1-45.
a. Thieát keá thaønh phaàn thöù 1 goàm toång cuûa 2 tích.
40
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
b. Laøm ñôn giaûn khoái maïch ñieän baèng kí hieäu logic 1.
c. Thieát keá thaønh phaàn thöù 2 goàm toång cuûa 3 tích.
d. Laøm ñôn giaûn khoái maïch ñieän baèng kí hieäu logic 2.
41
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
e. Keát noái 2 khoái logic 1 vaø logic 2 baèng coång OR.
Hình 1-45. Minh hoïa cho kieåu laäp trình töøng ñoaïn.
Toaøn boä maïch ñieän treân coù theå ñaët leân maøn hình nhöng phöông phaùp thieát keá theo trình töï
raát tieän lôïi khi maïch ñieän logic lôùn vaø phaûi chia ra thaønh nhieàu phaàn.
ÔÛ hình 1-46e, maïch ñieän logic coù theå laøm ñôn giaûn baèng 1 kí hieäu khaùc vaø ñöôïc söû duïng ñeå thieát keá maïch ñieän lôùn hôn hoaëc coù theå löu vaø duøng laïi cho caùc thieát keá khaùc ñöôïc minh hoïa nhö hình 1-46.
42
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-46. Löu thaønh khoái logic 3.
2. MOÂ PHOÛNG CHÖÙC NAÊNG
Muïc ñích cuûa chöùc naêng moâ phoûng trong doøng thieát keá laø ñeå ñaûm baûo chaéc chaén thieát keá hoaït ñoäng ñuùng theo yeâu caàu tröôùc khi toång hôïp thaønh thieát keá phaàn cöùng. Veà cô baûn sau khi maïch ñieän logic ñöôïc bieân dòch thì sau ñoù coù theå moâ phoûng baèng caùch cung caáp caùc daïng soùng ñaàu vaøo vaø kieåm tra daïng soùng ngoõ ra cho caùc toå hôïp ngoõ vaøo coù theå coù duøng trình soaïn thaûo daïng soùng.
Trình soaïn thaûo daïng soùng cho pheùp löïa choïn caùc nuùt (caùc ngoõ vaøo vaø caùc ngoõ ra) muoán kieåm tra. Teân caùc ngoõ vaøo vaø ngoõ ra ñaõ choïn xuaát hieän treân maøn hình soaïn thaûo daïng soùng baèng kí hieäu hoaëc teân khaùc ñeå xaùc ñònh cho moãi moät ngoõ vaøo hoaëc moät ngoõ ra – ñöôïc trình baøy ôû hình 1-47. Khi baét ñaàu thì taát caû caùc ngoõ vaøo maëc nhieân ôû möùc 0 vaø caùc ñöôøng cheùo song song töôïng tröng cho tín hieäu chöa xaùc ñònh. Coù theå löïa choïn caùc khoaûng thôøi gian ñeå hieån thò.
Hình 1-47. Maøn hình soaïn thaûo daïng soùng toång quaùt .
Böôùc tieáp theo chuùng ta xaây döïng daïng soùng cho moãi ngoõ vaøo baèng caùch nhaäp vaøo 1 hoaëc
0 cho moãi khoaûng thôøi gian. Hình 1-48 trình baøy caùc daïng soùng ngoõ vaøo.
43
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-48. Thieát laäp caùc daïng soùng ngoõ vaøo.
Sau khi thieát laäp caùc daïng soùng ngoõ vaøo thì môû cöûa soå ñieàu khieån moâ phoûng ñeå thieát laäp thôøi gian baét ñaàu vaø thôøi gian keát thuùc cho vieäc moâ phoûng vaø chæ ñònh caùc khoaûng thôøi gian hieån thò. Khi baét ñaàu moâ phoûng thì daïng soùng cuûa tín hieäu Z seõ ñöôïc hieån thò treân maøn hình daïng soùng nhö hình 1-49.
Keát quaû daïng soùng ngoõ ra Z cuûa ví duï naøy seõ cho chuùng ta bieát thieát keá hoaït ñoäng ñuùng hay khoâng ñuùng. Trong tröôøng hôïp naøy daïng soùng ngoõ ra laø ñuùng vôùi daïng soùng ngoõ vaøo ñaõ choïn. Khi daïng soùng ngoõ ra khoâng ñuùng thì phaûi quay laïi kieåm tra thieát keá ban ñaàu cho ñeán khi maïch hoaït ñoäng ñuùng.
Hình 1-49. Daïng soùng ngoõ vaøo vaø ra khi chaïy moâ phoûng.
3. TOÅNG HÔÏP
Moãi khi maïch logic ñöôïc xaây döïng vaø ñöôïc moâ phoûng chöùc naêng ñeå kieåm tra ñuùng sai cuûa maïch logic thieát keá thì phaàn meàm bieân dòch ñaõ töï ñoäng thöïc hieän moät vaøi coâng ñoaïn ñeå chuaån bò cho vieäc naïp thieát keá vaøo cho thieát bò laäp trình.
Trong coâng ñoaïn toång hôïp cuûa doøng thieát keá thì thieát keá ñöôïc toái öu theo caùc thaønh phaàn ñeå laøm giaûm soá löôïng coång, thay theá caùc phaàn töû logic baèng caùc phaàn töû logic khaùc maø chuùng coù theå thöïc hieän cuøng moät chöùc naêng nhöng hieäu quaû hôn vaø loaïi tröø caùc thaønh phaàn logic thöøa.
44
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù Ngoõ ra cuoái cuøng töø coâng ñoaïn toång hôïp laø lieät keâ keát noái (netlist) – chuùng dieãn taû traïng
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
thaùi toái öu cuûa maïch ñieän logic.
4. LIEÄT KEÂ LÖÔÙI (NETLIST)
Lieät keâ löôùi veà cô baûn laø moät danh saùch lieät löôùi maø chuùng moâ taû caùc thaønh phaàn vaø caùch keát noái vôùi nhau. Toång quaùt, lieät keâ löôùi chöùa caùc tham chieáu moâ taû caùc thaønh phaàn vaø caùc phaàn töû ñöôïc söû duïng.
Moãi laàn moät thaønh phaàn nhö coång logic ñöôïc söû duïng trong lieät keâ löôùi thì noù ñöôïc goïi laø instance. Moãi instance coù xaùc ñònh lieät keâ caùc keát noái. Caùc ñieåm keát noái ñöôïc goïi laø caùc caûng (port) hoaëc caùc chaân (pin).
Thöôøng thì moãi instance seõ coù moät teân duy nhaát, ví duï nhö neáu coù 2 instance cuûa caùc coång AND thì moät laø “and1” vaø coång coøn laïi laø “and2”. Ngoaøi teân ra coøn coù teân khaùc, caùc löôùi laø caùc ñöôøng daây – noái vôùi nhau trong maïch ñieän. Baûng lieät keâ caùc löôùi thöôøng moâ taû taát caû caùc instance vaø caùc thuoäc tính cuûa chuùng, sau ñoù moâ taû töøng löôùi vaø ñaët bieät laø caùc port noái vôùi moãi instance.
Maïch ñieän logic AND-OR ñaõ thieát keá ôû treân ñöôïc trình baøy ôû hình 1-50a coù theå ñöôïc toái öu thaønh maïch ñieän hình 1-50b. Trong phaàn minh hoïa naøy, trình bieân dòch thay theá caùc coång OR vaø baèng moät coång OR coù 5 ngoõ vaøo, boû hai coång ñaûo thöøa trong maïch.
(a). Maïch ñieän thieát keá (b). Maïch toái öu sau khi toång hôïp
Hình 1-50. Minh hoïa cho chöùc naêng toång hôïp.
Phaàn meàm toång hôïp taïo ra danh saùch lieät keâ löôùi. Ñeå minh hoïa cho khaùi nieäm taïo ra danh saùch löôùi thì hình 1-51a seõ trình baøy caùch gaùn teân cho löôùi, gaùn teân cho instance vaø gaùn teân cho IO. Danh saùch lieät keâ löôùi ñöôïc trình baøy ôû hình 1-51b khoâng caàn thieát phaûi gioáng baát kyø danh saùch lieät keâ naøo veà cuù phaùp vaø khuoân khoå. Danh saùch lieät keâ nhaèm xaùc ñònh caùc loaïi thoâng tin caàn ñeå moâ taû maïch ñieän. Moät khuoân khoå ñöôïc duøng cho baûng lieät keâ caùc löôùi laø EDIF (Electronic Design Interchange Format).
45
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
(a) (b)
Hình 1-51. Sô ñoà maïch vaø danh saùch lieät keâ.
5. PHAÀN MEÀM THI HAØNH
Sau khi thieát keá ñaõ ñöôïc toång hôïp thì trình bieân dòch thi haønh thieát keá – veà cô baûn coâng vieäc naøy chính laø saép xeáp thieát keá ñeå noù coù theå töông thích vôùi thieát bò laäp trình ñaõ choïn baèng caùch döïa vaøo caáu truùc vaø caáu hình chaân.
Quaù trình xöû lyù naøy goïi laø laøm cho töông thích (fitting). Ñeå keát thuùc coâng ñoaïn thi haønh cuûa doøng thieát keá thì phaàn meàm phaûi bieát thieát bò roõ raøng vaø coù ñaày ñuû caùc thoâng tin chi tieát veà chaân. Döõ lieäu ñaày ñuû cho taát caû caùc thieát bò thöôøng ñöôïc löu trong thö vieän cuûa boä nhôù vaø ngöôøi thieát keá chæ caàn choïn ñuùng thieát bò laäp trình.
6. MOÂ PHOÛNG THÔØI GIAN
Phaàn naøy naèm trong doøng thieát keá ñöôïc thöïc hieän sau khi phaàn meàm thi haønh bieân dòch vaø tröôùc khi naïp chöông trình vaøo thieát bò. Moâ phoûng theo thôøi gian ñeå kieåm tra maïch ñieän hoaït ñoäng taïi taàn soá thieát keá vaø khoâng coù thôøi gian treå hoaëc caùc vaán ñeà veà thôøi gian khaùc laøm aûnh höôûng ñeán hoaït ñoäng cuûa maïch.
Phaàn meàm thieát keá duøng caùc thoâng tin cuûa thieát bò laäp trình nhö thôøi gian trì hoaõn cuûa caùc
coång ñeå thöïc hieän moâ phoûng theo thôøi gian cuûa thieát keá.
Khi moâ phoûng chöùc naêng ñaõ ñöôïc thöïc hieän thì maïch ñieän seõ hoaït ñoäng ñuùng theo quan ñieåm logic. Khi moâ phoûng chöùc naêng thì caùc thoâng soá chæ ñònh veà thieát bò ñích laø khoâng caàn thieát nhöng khi moâ phoûng veà thôøi gian thì phaûi löïa choïn thieát bò ñích. Phaàn meàm soaïn thaûo daïng soùng coù theå ñöôïc duøng ñeå xem keát quaû moâ phoûng cuõng nhö moâ phoûng chöùc naêng ñöôïc minh hoïa nhö hình 1-52.
46
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù Neáu khoâng coù vaán ñeà gì vôùi keát quaû moâ phoûng nhö ñöôïc trình baøy ôû hình 1-52a thì thieát keá coù theå naïp vaøo thieát bò laäp trình. Tuy nhieân, giaû söû raèng caùc khoaûng moâ phoûng thôøi gian phaùt hieän khoâng ñeàu hay khoâng gioáng nhau phuï thuoäc vaøo thôøi gian treå nhö ñöôïc trình baøy ôû hình 1- 52b.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-52. Minh hoïa cho moâ phoûng thôøi gian.
Vieäc thöïc thi khoâng gioáng nhau chæ xaûy ra trong moät khoaûng thôøi gian raát ngaén trong daïng soùng. Trong tröôøng hôïp naøy caàn phaûi phaân tích thieát keá moät caùch caån thaän ñeå tìm ra nguyeân nhaân vaø sau ñoù hieäu chænh laïi thieát keá vaø laëp laïi caùc böôùc thieát keá.
7. LAÄP TRÌNH CHO THIEÁT BÒ – HAY NAÏP CHÖÔNG TRÌNH CHO THIEÁT BÒ
Sau khi kieåm tra moâ phoûng chöùc naêng vaø moâ phoûng theo thôøi gian vaø thieát keá ñaõ hoaït ñoäng ñuùng thì coù theå tieán haønh download. Chuoãi bit nhò phaân ñöôïc taïo ra töôïng tröng cho thieát keá vaø ñöôïc gôûi ñeán thieát bò ñích ñeå töï ñoäng ñònh caáu hình cho thieát bò. Sau khi thöïc hieän xong thì thieát keá coù theå ñöôïc kieåm tra baèng maïch ñieän thöïc teá. Hình 1-53 trình baøy khaùi nieäm cho quaù trình download.
47
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 1-53. Download thieát keá vaøo thieát bò laäp trình.
VIII. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
Caâu 1-1. PAL töôïng tröng cho caùi gì ?
Caâu 1-2. GAL töôïng tröng cho caùi gì ?
Caâu 1-3. Söï khaùc nhau giöõa PAL vaø GAL laø gì ?
Caâu 1-4. Moät macrocell cô baûn chöùa caùc thaønh phaàn naøo?
Caâu 1-5. CPLD laø gì?
Caâu 1-6. LAB töôïng tröng cho caùi gì ?
Caâu 1-7. Moâ taû LAB trong CPLD MAX 7000 ?
Caâu 1-8. Muïc ñích cöûa boä môû roäng chia seõ laø gì ?
Caâu 1-9. Muïc ñích cöûa boä môû roäng song song laø gì ?
Caâu 1-10. CPLD MAX II khaùc vôùi MAX 7000 ôû ñieåm naøo ?
Caâu 1-11. Söï khaùc nhau cô baûn cuûa CPLD haõng Altera vaø haõng Xilinx laø gì?
Caâu 1-12. Haõy moâ taû PLA ?
Caâu 1-13. PLA khaùc vôùi PAL laø gì ?
Caâu 1-14. FB töôïng tröng cho caùi gì ?
Caâu 1-15. FPGA khaùc vôùi CPLD nhö theá naøo ?
Caâu 1-16. CLB töôïng tröng cho caùi gì ?
Caâu 1-17. Moâ taû LUT vaø cho bieát chöùc naêng cuûa noù ?
Caâu 1-18. Söï khaùc nhau giöõa keát noái beân trong toaøn cuïc vaø cuïc boä trong FPGA laø gì ?
Caâu 1-19. Loõi FPGA laø gì ?
Caâu 1-20. Ñònh nghóa thuaät ngöõ IP coù lieân ñeán nhaø saûn xuaát FPGA ?
48
Kyõ thuaät PLD vaø ASIC
Chöông 1. Giôùi thieäu caùc caáu truùc laäp trình ñöôïc.
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Caâu 1-21. Ñôn vò thieát keá logic cô baûn trong FPGA Stratix II laø gì?
Caâu 1-22. Coù bao nhieâu ALM trong LAB?
Caâu 1-23. Caùi gì taïo ra caùc haøm logic toå hôïp trong ALM?
Caâu 1-24. Coù bao nhieâu haøm SOP coù theå ñöôïc taïo ra töø moät ALM ?
Caâu 1-25. Haõy cho bieát teân cuûa 2 loaïi chöùc naêng tích hôïp trong Stratix II ?
Caâu 1-26. CLB trong FPGA cuûa Xilinx chöùa caùi gì ?
Caâu 1-27. LC chöùa caùi gì ?
Caâu 1-28. Haõy moâ taû slice trong FPGA cuûa Xilinx ?
Caâu 1-29. Chuoãi noái tieáp SOP laø gì ?
Caâu 1-30. ASMBL töôïng tröng cho caùi gì ?
Caâu 1-31. Haõy lieät keâ caùc coâng ñoaïn cuûa doøng thieát keá cho moät thieát bò laäp trình ?
Caâu 1-32. Haõy lieät keâ caùc phaàn töû cô baûn ñeå laäp trình cho CPLD vaø FPGA?
Caâu 1-33. Haõy cho bieát chöùc naêng cuûa baûng lieät keâ caù löôùi ?
Caâu 1-34. Coù bao nhieâu haøm SOP coù theå ñöôïc taïo ra töø moät ALM ?
Caâu 1-35. Haõy cho bieát teân cuûa 2 loaïi chöùc naêng tích hôïp trong Stratix II ?
end
49
Kyõ thuaät PLD vaø ASIC
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Chöông 2
NGOÂN NGÖÕ LAÄP TRÌNH VHDL
SÖÏ RA ÑÔØI NGOÂN NGÖÕ VHDL
CAÙC THUAÄT NGÖÕ CUÛA VHDL
MOÂ TAÛ PHAÀN CÖÙNG TRONG VHDL
ENTITY (THÖÏC THEÅ ) ARCHITECTURE
Gaùn Caùc Tín Hieäu Ñoàng Thôøi Thôøi gian treå Ñoàng boä leänh CAÙC THIEÁT KEÁ COÙ CAÁU TRUÙC HOAÏT ÑOÄNG TUAÀN TÖÏ
Caùc phaùt bieåu quaù trình Vuøng khai baùo quaù trình Thaønh phaàn phaùt bieåu quaù trình Thöïc hieän quaù trình Caùc phaùt bieåu tuaàn töï
LÖÏA CHOÏN KIEÁN TRUÙC CAÙC CAÂU LEÄNH CAÁU HÌNH TOÙM TAÉT
GIÔÙI THIEÄU VEÀ MOÂ HÌNH HAØNH VI DELAY QUAÙN TÍNH VAØ DELAY TRUYEÀN
Delay quaùn tính Delay truyeàn tín hieäu Moâ hình Delay quaùn tính Moâ hình Delay truyeàn
MOÂ PHOÛNG DELTA DRIVER
Taïo driver Moâ hình nhieàu driver xaáu
51
Kyõ thuaät PLD vaø ASIC
GENERIC CAÙC PHAÙT BIEÅU KHOÁI TOÙM TAÉT
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
XÖÛ LYÙ TUAÀN TÖÏ PHAÙT BIEÅU
Danh saùch nhaïy Ví duï veà quaù trình GAÙN BIEÁN KHAÙC VÔÙI GAÙN TÍN HIEÄU
Ví duï moâ hình maïch ña hôïp khoâng ñuùng Ví duï moâ hình maïch ña hôïp ñuùng
CAÙC PHAÙT BIEÅU TUAÀN TÖÏ PHAÙT BIEÅU IF PHAÙT BIEÅU CASE PHAÙT BIEÅU LOOP
Phaùt bieåu voøng laëp LOOP cô baûn Phaùt bieåu voøng laëp While – LOOP Phaùt bieåu voøng laëp FOR – LOOP Phaùt bieåu Next vaø Exit
PHAÙT BIEÅU ASSERT PHAÙT BIEÅU WAIT
CAÙC KIEÅU ÑOÁI TÖÔÏNG TRONG VHDL
KHAI BAÙO TÍN HIEÄU KHAI BAÙO BIEÁN KHAI BAÙO HAÈNG SOÁ
CAÙC KIEÅU DÖÕ LIEÄU TRONG VHDL
LOAÏI SCALAR
Kieåu soá nguyeân INTEGER Kieåu döõ lieäu ñaõ ñònh nghóa Kieåu döõ lieäu do ngöôøi duøng ñònh nghóa Kieåu döõ lieäu SUBTYPE Kieåu döõ lieäu maûng ARRAY Kieåu döõ lieäu maûng port Kieåu döõ lieäu baûng ghi record Kieåu döõ lieäu SIGNED vaø UNSIGNED Kieåu soá thöïc REAL Kieåu lieät keâ
KIEÅU VAÄT LYÙ CAÙC THUOÄC TÍNH
Thuoäc tính tín hieäu Thuoäc tính döõ lieäu scalar Thuoäc tính maûng CAÙC TOAÙN TÖÛ CÔ BAÛN TRONG VHDL
52
Kyõ thuaät PLD vaø ASIC
CAÙC TOAÙN TÖÛ LOGIC CAÙC TOAÙN TÖÛ QUAN HEÄ CAÙC TOAÙN TÖÛ SOÁ HOÏC CAÙC TOAÙN TÖÛ COÙ DAÁU CAÙC TOAÙN NHAÂN CHIA
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
CAÙC TOAÙN TÖÛ DÒCH CAÙC TOAÙN TÖÛ HOÃN HÔÏP CHÖÔNG TRÌNH CON VAØ GOÙI
CHÖÔNG TRÌNH CON Haøm Haøm chuyeån ñoåi Haøm phaân tích Thuû tuïc
GOÙI
Khai baùo goùi Khai baùo chöông trình con
CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
54
Kyõ thuaät PLD vaø ASIC
Hình vaø baûng Hình 2-1. Coång A coù 2 ngoõ vaøo. Hình 2-2. Kí hieäu cuûa mux coù 4 ngoõ vaøo. Hình 2-3. Baûng traïng thaùi cuûa mux coù 4 ngoõ vaøo. Hình 2-4. Daïng soùng coù delay quaùn tính cuûa boä ñeäm. Hình 2-5. Daïng soùng coù delay truyeàn cuûa boä ñeäm. Hình 2-6. So saùnh 2 cô caáu ñaùnh giaù. Hình 2-7. So saùnh 2 cô caáu ñaùnh giaù. Hình 2-8. Cô caáu ñaùnh giaù delay delta. Hình 2-9. Kí hieäu maïch ña hôïp vaø baûng traïng thaùi. Hình 2-10. Giaûn ñoà caùc loaïi döõ lieäu trong VHDL. Hình 2-11. Caùc kieåu maûng döõ lieäu. Baûng 2-1. Thuoäc tính tín hieäu. Baûng 2-2. Thuoäc tính döõ lieäu scalar. Baûng 2-3. Thuoäc tính maûng. Baûng 2-4. Taát caû caùc toaùn töû. Baûng 2-5. Caùc toaùn töû quan heä. Baûng 2-6. Caùc toaùn töû soá hoïc. Baûng 2-7. Caùc toaùn töû coù daáu. Baûng 2-8. Caùc toaùn töû nhaân chia. Baûng 2-9. Caùc toaùn töû dòch. Baûng 2-10. Caùc toaùn töû hoãn hôïp.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com I. SÖÏ RA ÑÔØI NGOÂN NGÖÕ VHDL
VHDL (Very high speed integrated circuit Hardware Description Language) laø moät trong caùc ngoân ngöõ moâ taû phaàn cöùng ñöôïc söû duïng roäng raõi hieän nay. VHDL laø ngoân ngöõ moâ taû phaàn cöùng cho caùc vi maïch tích hôïp coù toác ñoä cao, ñöôïc phaùt trieån duøng cho chöông trình VHSIC (Very High Speed Integrated Circuit) cuûa boä quoác phoøng Myõ.
Muïc ñích cuûa vieäc nghieân cöùu vaø phaùt trieån laø taïo ra moät ngoân ngöõ moâ phoûng phaàn cöùng chuaån vaø thoáng nhaát, cho pheùp thöû nghieäm caùc heä thoáng soá nhanh hôn, hieäu quaû hôn, vaø nhanh choùng ñöa caùc heä thoáng ñoù vaøo öùng duïng.
Thaùng 7 naêm 1983, ba coâng ty Internetic, IBM, Texas Instruments baét ñaàu nghieân cöùu. Sau
moät thôøi gian, phieân baûn ñaàu tieân cuûa ngoân ngöõ VHDL ñöôïc coâng boá vaøo thaùng 8 naêm 1985.
Vaøo naêm 1986, VHDL ñöôïc coâng nhaän nhö moät chuaån IEEE. VHDL ñaõ qua nhieàu laàn kieåm nghieäm vaø chænh söûa cho ñeán khi ñöôïc coâng nhaän nhö moät chuaån IEEE 1076 vaøo thaùng 12 naêm 1987.
VHDL ñöôïc nghieân cöùu phaùt trieån nhaèm giaûi quyeát toác ñoä phaùt trieån, caùc thay ñoåi vaø xaây döïng caùc heä thoáng ñieän töû soá. Vôùi moät ngoân ngöõ phaàn cöùng toát thì vieäc xaây döïng caùc heä thoáng ñieän töû soá coù tính linh hoaït, phöùc taïp trôû neân deã daøng hôn. Vieäc moâ taû heä thoáng soá baèng ngoân ngöõ cho pheùp xem xeùt, kieåm tra toaøn boä hoaït ñoäng cuûa heä thoáng trong moät moâ hình thoáng nhaát.
II. CAÙC THUAÄT NGÖÕ CUÛA VHDL
Caáu truùc cuûa moät chöông trình VHDL nhö sau:
Comment
package IS typedef SUBTYPE byte IS bit_vector (7 downto 0); ---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: 07:52:37 09/26/2007 -- Design Name: -- Module Name: mux - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- package END ;
51
Kyõ thuaät PLD vaø ASIC
USE work.typedef.all Use clause
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com data_path
Entity
IS (clk, rst, s_1: s0, s1: d0, d1, d2, d3: q: BOOLEAN; IN BIT; IN IN BYTE; OUT BYTE);
ENTITY PORT data_path; END IS
SIGNAL SIGNAL behavior reg, shft: sel: OF data_path BYTE; BIT_VECTOR (1 DOWNTO 0):
THEN -- async reset
x ‘00’; x ‘00’; rst Reg <= shft <=
Architecture
Process statement
WHEN b “00” => reg <= d0; WHEN b “01” => reg <= d1; WHEN b “10” => reg <= d2; WHEN b “11” => reg <= d3;
Sequential Statement
sel <= CASE sel IS END CASE; s_1 THEN shft <= shft (6 downto 0) & shft(7);
shft <= reg; IF ELSIF clk and clk’event THEN -- define a clock s1 & s0; IF ELSE clk and clk’event THEN END IF;
ARCHITECTURE BEGIN END PROCESS (CLK, RST) BEGIN END PROCESS; q shft; <= behavior;
Ñeå tìm hieåu chöông trình thì chuùng ta caàn ñònh nghóa moät soá thuaät ngöõ ñöôïc söû duïng trong
ngoân ngöõ VHDL.
Entity (thöïc theå) taát caû caùc thieát keá ñeàu ñöôïc bieåu dieãn ôû daïng caùc thuaät ngöõ thöïc theå (entity). Moät thöïc theå laø moät khoái xaây döïng cô baûn nhaát trong thieát keá. Möùc cao nhaát cuûa thöïc theå laø möùc ñænh. Neáu thieát keá coù thöù baäc thì moâ taû ôû möùc cao nhaát seõ chöùa caùc moâ taû ôû möùc thaáp hôn naèm beân trong. Nhöõng moâ taû ôû möùc thaáp hôn naøy seõ chöùa caùc thöïc theå ôû möùc thaáp hôn nöõa. Trong VHDL thì thöïc theå duøng ñeå khai baùo caùc coång input_output cuûa caùc thaønh phaàn vaø teân cuûa noù.
Architecture (kieán truùc) taát caû caùc thöïc theå coù theå ñöôïc moâ phoûng ñeàu coù moät moâ taû kieán truùc. Kieán truùc moâ taû haønh vi cuûa thöïc theå. Moät thöïc theå ñôn coù theå coù nhieàu kieán truùc. Moät kieán truùc coù theå moâ taû haønh vi (behavioral description) trong khi ñoù moät kieán truùc khaùc coù theå moâ taû caáu truùc (structural description).
52
Kyõ thuaät PLD vaø ASIC
Configuration (caáu hình) phaùt bieåu caáu hình ñöôïc söû duïng ñeå raøng buoäc moät theå hieän (instance) thaønh phaàn vôùi moät caëp “thöïc theå - kieán truùc”. Moät caáu hình coù theå ñöôïc khaûo saùt gioáng nhö moät danh saùch caùc thaønh phaàn cuûa moät thieát keá. Danh saùch caùc thaønh phaàn moâ taû haønh vi ñeå söû duïng cho moãi thöïc theå, gioáng nhö danh saùch lieät keâ caùc phaàn moâ taû söû duïng cho moãi thaønh phaàn trong thieát keá.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Package (goùi) moät goùi laø moät taäp hôïp caùc loaïi döõ lieäu ñöôïc duøng phoå bieán vaø caùc chöông trình con (subprogram) ñöôïc söû duïng trong thieát keá. Xem package nhö laø moät hoäp coâng cuï chöùa nhieàu coâng cuï ñöôïc duøng ñeå xaây döïng caùc thieát keá.
Driver (nguoàn kích) laø nguoàn kích cuûa moät tín hieäu. Neáu moät tín hieäu ñöôïc kích bôûi hai
nguoàn, thì caû hai nguoàn ñeàu ôû möùc tích cöïc, khi ñoù ta xem tín hieäu coù 2 driver.
Bus (nhoùm tín hieäu) thuaät ngöõ “bus” xem moät nhoùm caùc tín hieäu hoaëc moät phöông phaùp truyeàn thoâng ñaëc bieät ñöôïc söû duïng trong thieát keá phaàn cöùng. Trong VHDL, bus laø loaïi tín hieäu ñaëc bieät coù nhieàu nguoàn kích ôû traïng thaùi taét.
Attribute (thuoäc tính) laø döõ lieäu ñöôïc gaén cho caùc ñoái töôïng VHDL hoaëc döõ lieäu ñaõ ñònh nghóa tröôùc lieân quan ñeán caùc ñoái töôïng VHDL. Ví duï laø khaû naêng kích doøng cuûa moät maïch ñeäm hoaëc nhieät ñoä hoaït ñoäng cöïc ñaïi cuûa linh kieän.
Generic laø thuaät ngöõ cuûa VHDL duøng cho moät thoâng soá, thoâng soá naøy chuyeån thoâng tin ñeán moät thöïc theå. Thí duï, neáu moät thöïc theå laø moät moâ hình coång coù trì hoaõn caïnh leân vaø trì hoaõn caïnh xuoáng, caùc giaù trò cuûa caùc trì hoaõn leân vaø xuoáng coù theå ñöôïc chuyeån vaøo trong thöïc theå baèng caùc duøng generic.
Process (quaù trình) quaù trình laø moät ñôn vò thöïc thi cô baûn trong VHDL. Taát caû caùc hoaït ñoäng – ñöôïc thöïc hieän trong moâ phoûng cuûa moät moâ taû VHDL – thì ñöôïc chia ra thaønh moät hoaëc nhieàu quaù trình xöû lyù.
III. MOÂ TAÛ PHAÀN CÖÙNG TRONG VHDL
Caùc moâ taû VHDL chöùa nhieàu ñôn vò thieát keá sô caáp vaø nhieàu ñôn vò thieát keá thöù caáp.
• Ñôn vò thieát keá sô caáp laø thöïc theå (Entity) vaø goùi (Package).
• Ñôn vò thieát keá thöù caáp laø caáu hình (Configuration) vaø thaân goùi (Package Body).
Caùc ñôn vò thieát keá thöù caáp thì luoân coù moái lieân heä vôùi ñôn vò thieát keá sô caáp. Caùc thö vieän
chöùa nhieàu caùc ñôn vò thieát keá sô caáp vaø thöù caáp.
1. ENTITY (THÖÏC THEÅ )
Entity duøng ñeå khai baùo teân cuûa thöïc theå, caùc port cuûa thöïc theå vaø caùc thoâng tin lieân quan ñeán
thöïc theå. Taát caû caùc thieát keá ñöôïc xaây döïng duøng moät hoaëc nhieàu thöïc theå.
Ví duï 2_1: Khai baùo ñôn giaûn veà thöïc theå:
IS
ENTITY PORT mux (a, b, c, d:
s0, s1: x: BIT; IN IN BIT; OUT BIT);
END mux;
Töø khoaù ENTITY baùo cho bieát baét ñaàu moät phaùt bieåu thöïc theå.
Trong caùc moâ taû ñöôïc trình baøy trong toaøn boä taøi lieäu, caùc töø khoaù cuûa ngoân ngöõ vaø caùc loaïi döõ lieäu ñöôïc cung caáp cho goùi chuaån (STANDARD) thì ñöôïc trình baøy ôû daïng chöõ hoa. Ví duï: trong ví duï ñaõ trình baøy thì caùc töø khoaù laø ENTITY, IS, PORT, IN, INOUT, … Loaïi döõ lieäu chuaån laø BIT. Teân cuûa caùc ñoái töôïng do ngöôøi duøng ñònh nghóa ví duï nhö mux trong ví duï treân laø ôû daïng chöõ thöôøng.
53
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Teân cuûa thöïc theå laø mux. Thöïc theå coù 7 port trong caâu leänh khai baùo PORT – 6 port cho kieåu IN vaø 1 port cho kieåu OUT. 4 port döõ lieäu ngoõ vaøo (a, b, c, d) laø daïng BIT. Hai ngoõ vaøo löïa choïn maïch ña hôïp (s0, s1) cuõng thuoäc kieåu döõ lieäu BIT. Ngoõ ra cuõng laø BIT.
Thöïc theå moâ taû giao tieáp vôùi theá giôùi beân ngoaøi. Thöïc theå chæ ñònh roõ bao nhieâu port, höôùng
tín hieäu cuûa port vaø loaïi döõ lieäu cuûa port.
2. ARCHITECTURE (KIEÁN TRUÙC)
Thöïc theå moâ taû giao tieáp vôùi moâ hình VHDL.
Kieán truùc moâ taû chöùc naêng cô baûn cuûa thöïc theå vaø chöùa nhieàu phaùt bieåu moâ phoûng haønh vi
cuûa thöïc theå. Kieán truùc luoân luoân coù lieân quan ñeán thöïc theå vaø caùc moâ taû haønh vi cuûa thöïc theå.
Moät kieán truùc cuûa boä ña hôïp ôû treân coù daïng nhö sau:
IS dataflow OF mux
select: INTEGER;
ARCHITECTURE SIGNAL BEGIN Select <= 0 WHEN s0 = ‘0’ AND s1= ‘0’ ELSE 1 WHEN s0 = ‘1’ AND s1= ‘0’ ELSE 2 WHEN s0 = ‘0’ AND s1= ‘1’ ELSE 3; <= a AFTER 0.5 NS WHEN select = 0 ELSE x b AFTER 0.5 NS WHEN select = 1 ELSE c AFTER 0.5 NS WHEN select = 2 ELSE d AFTER 0.5 NS ; dataflow; END
Töø khoaù ARCHITECTURE cho bieát phaùt bieåu naøy moâ taû kieán truùc cho moät thöïc theå. Teân
cuûa kieán truùc laø dataflow. Kieán truùc cuûa thöïc theå ñang ñöôïc moâ taû ñöôïc goïi laø mux.
Lyù do cho keát noái giöõa thöïc theå vaø kieán truùc laø moät thöïc theå coù theå coù nhieàu kieán truùc moâ taû haønh vi cuûa thöïc theå. Ví duï moät kieán truùc coù theå laø moät moâ taû haønh vi vaø moät kieán truùc khaùc coù theå laø moâ taû caáu truùc.
Vuøng kyù töï naèm giöõa töø khoaù ARCHITECURE vaø töø khoaù BEGIN laø nôi khai baùo caùc phaàn töû vaø caùc tín hieäu logic cuïc boä ñeå sau naøy duøng. Trong ví duï treân bieán tín hieäu select ñöôïc khai baùo laø tín hieäu cuïc boä.
Vuøng chöùa caùc phaùt bieåu cuûa kieán truùc baét ñaàu vôùi töø khoaù BEGIN. Taát caû caùc phaùt bieåu naèm giöõa caùc caâu leänh BEGIN vaø END ñöôïc goïi laø caùc phaùt bieåu ñoàng thôøi bôûi vì taát caû caùc phaùt bieåu ñöôïc thöïc hieän cuøng moät luùc.
a. Gaùn Caùc Tín Hieäu Ñoàng Thôøi
Trong ngoân ngöõ laäp trình thoâng thöôøng nhö C hoaëc C++ thì moãi phaùt bieåu gaùn thöïc hieän moät laàn sau moät phaùt bieåu gaùn khaùc vaø theo moät thöù töï ñöôïc chæ ñònh. Thöù töï thöïc hieän ñöôïc xaùc ñònh bôûi thöù töï cuûa caùc phaùt bieåu trong file chöông trình nguoàn.
Trong kieán truùc VHDL thì khoâng coù thöù töï chæ ñònh naøo cho caùc phaùt bieåu gaùn. Thöù töï thöïc
hieän ñöôïc chæ ñònh roõ bôûi söï kieän xaûy ra treân tín hieäu maø phaùt bieåu gaùn höôùng ñeán.
54
Kyõ thuaät PLD vaø ASIC
Khaûo saùt phaùt bieåu gaùn ñaàu tieân ñöôïc trình baøy nhö sau:
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Select <= 0 WHEN s0 = ‘0’ AND s1= ‘0’ ELSE 1 WHEN s0 = ‘1’ AND s1= ‘0’ ELSE 2 WHEN s0 = ‘0’ AND s1= ‘1’ ELSE 3;
Gaùn tín hieäu ñöôïc thöïc hieän baèng kí hieäu <=. Tín hieäu select seõ ñöôïc gaùn giaù trò döïa vaøo giaù trò cuûa s0 vaø s1. Phaùt bieåu gaùn naøy ñöôïc thöïc hieän baát kyø luùc naøo khi moät hoaëc hai tín hieäu s0 vaø s1 coù thay ñoåi.
Moät phaùt bieåu gaùn tín hieäu ñöôïc xem laø nhaïy vôùi caùc thay ñoåi treân baát kyø tín hieäu naøo naèm beân phaûi cuûa kí hieäu gaùn <=. Phaùt bieåu gaùn tín hieäu cuûa ví duï treân thì nhaïy vôùi s0 vaø s1. Phaùt bieåu gaùn tín hieäu khaùc trong kieán truùc dataflow nhaïy vôùi tín hieäu löïa choïn.
Chuùng ta seõ khaûo saùt caùch hai phaùt bieåu ôû treân hoaït ñoäng thöïc söï ra sao. Giaû söû raèng chuùng ta coù ñieàu kieän oån ñònh khi s0 vaø s1 ñeàu coù giaù trò laø 0 vaø caùc tín hieäu hieän haønh a, b, c vaø d ñeàu coù giaù trò laø 0. Tín hieäu x seõ coù giaù trò laø 0 vì noù ñöôïc gaùn cho giaù trò cuûa tín hieäu a.
Baây giôø giaû söû: chuùng ta taïo ra moät söï kieän thay ñoåi treân tín hieäu a töø giaù trò 0 leân 1.
Khi söï kieän tín hieäu a xaûy ra thì phaùt bieåu gaùn ñaàu tieân khoâng ñöôïc thöïc hieän bôûi vì phaùt bieåu
naøy khoâng nhaïy vôùi söï thay ñoåi cuûa tín hieäu a vì tín hieäu a khoâng naèm beân phaûi cuûa toaùn töû.
Phaùt bieåu gaùn thöù 2 seõ ñöôïc thöïc hieän bôûi vì noù nhaïy vôùi söï kieän xaûy ra treân tín hieäu a. Khi phaùt bieåu gaùn thöù 2 ñöôïc thöïc hieän thì giaù trò môùi cuûa a seõ ñöôïc gaùn cho tín hieäu x. Ngoõ ra x baây giôø seõ thay ñoåi sang 1.
Tieáp theo chuùng ta seõ khaûo saùt tröôøng hôïp khi tín hieäu s0 thay ñoåi. Giaû söû cho s0 vaø s1 ñeàu ôû möùc 0 vaø caùc port a, b, c vaø d coù giaù trò theo thöù töï laø 0, 1, 0 vaø 1. Cho tín hieäu S0 thay ñoåi giaù trò töø 0 leân 1.
Phaùt bieåu gaùn tín hieäu ñaàu tieân nhaïy vôùi s0 neân noù seõ ñöôïc thöïc hieän.
Khi caùc phaùt bieåu ñoàng thôøi thöïc hieän, vieäc tính toaùn giaù trò bieåu thöùc seõ duøng giaù trò hieän
haønh cho taát caû caùc tín hieäu chöùa trong phaùt bieåu.
Khi phaùt bieåu ñaàu tieân thöïc hieän seõ tính giaù trò môùi ñeå ñöôïc gaùn cho select töø giaù trò hieän haønh cuûa bieåu thöùc tín hieäu naèm beân phaûi cuûa kí hieäu gaùn <=. Vieäc tính toaùn giaù trò bieåu thöùc seõ duøng giaù trò hieän haønh cho taát caû caùc tín hieäu chöùa trong phaùt bieåu.
Vôùi giaù trò cuûa s0 baèng 1 vaø s1 baèng 0 thì tín hieäu select seõ nhaän giaù trò môùi laø 1. Giaù trò môùi cuûa tín hieäu select ñöôïc xem nhö söï kieän xaûy ra treân tín hieäu select, laøm phaùt bieåu gaùn thöù 2 cuõng ñöôïc thöïc hieän theo. Phaùt bieåu gaùn thöù 2 seõ duøng giaù trò môùi cuûa tín hieäu select ñeå gaùn giaù trò cuûa port b cho ngoõ ra x vaø x seõ thay ñoåi giaù trò töø 0 leân 1.
b. Thôøi gian treå
Vieäc gaùn tín hieäu cho tín hieäu x khoâng xaûy ra ngay laäp töùc. Moãi moät giaù trò ñöôïc gaùn cho tín hieäu x ñeàu chöùa phaùt bieåu AFTER. Giaù trò cuûa x trong caùc phaùt bieåu gaùn ôû treân chæ ñöôïc nhaän giaù trò sau khoaûng thôøi gian 0,5 ns.
c. Ñoàng boä leänh
Phaùt bieåu gaùn ñaàu tieân chæ ñöôïc thöïc hieän khi caùc söï kieän xaûy ra ôû caùc port s0 vaø s1. Phaùt bieåu gaùn tín hieäu thöù 2 seõ khoâng thöïc hieän tröø khi söï kieän xaûy ra treân tín hieäu select hoaëc söï kieän xaûy ra treân caùc tín hieäu a, b, c, d.
55
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Hai phaùt bieåu gaùn tín hieäu trong kieán truùc behave hình thaønh moâ hình haønh vi (behavioral
model), hoaëc kieán truùc cho thöïc theå mux.
Kieán truùc dataflow thì khoâng coù caáu truùc.
3. CAÙC THIEÁT KEÁ COÙ CAÁU TRUÙC (STRUCTURAL DESIGNS)
Moät caùch khaùc ñeå vieát thieát keá mux laø xaây döïng caùc thaønh phaàn phuï maø chuùng thöïc hieän caùc hoaït ñoäng nhoû hôn cuûa moâ hình ñaày ñuû. Vôùi moâ hình ñôn giaûn nhaát cuûa maïch ña hôïp 4 ngoõ vaøo nhö chuùng ta ñaõ duøng laø moâ taû ôû caáp ñoä coång ñôn giaûn.
Kieán truùc ñöôïc trình baøy sau ñaây laø moâ taû caáu truùc cuûa thöïc theå mux.
IS
netlist OF mux andgate PORT(a, b, c: IN BIT; x: OUT BIT);
inverter PORT(in1: IN BIT; x: OUT BIT);
orgate
PORT(a, b, c, d: IN BIT; x: OUT BIT);
s0_inv, s1_inv, x1, x2, x3, x4: BIT;
ARCHITECTURE COMPONENT END COMPONENT; COMPONENT END COMPONENT; COMPONENT END COMPONENT; SIGNAL BEGIN U1: U2: U3: U4: U5: U6: U7: END inverter (s0, s0_inv); inverter (s1, s1_inv); andgate (a, s0_inv, s1_inv, x1); andgate (b, s0, s1_inv, x2); andgate (c, s0_inv, s1, x3); andgate (d, s0, s1, x4); orgate (x2 => b, x1 => a, x4 => d, x3 => c, x => x); netlist;
Moâ taû naøy söû duïng moät soá caùc thaønh phaàn möùc thaáp hôn ñeå moâ hình hoaù haønh vi cuûa thieát bò mux. Coù moät thaønh phaàn coång ñaûo inverter, moät thaønh phaàn coång andgate, vaø moät thaønh phaàn orgate. Moät trong caùc thaønh phaàn naøy ñöôïc khai baùo trong phaàn khai baùo kieán truùc – naèm giöõa caâu leänh kieán truùc vaø BEGIN.
Moät soá caùc tín hieäu ñöôïc duøng ñeå keát noái moät trong caùc thaønh phaàn ñeå thaønh laäp moâ taû kieán
truùc. Caùc loaïi tín hieäu naøy ñöôïc khai baùo duøng khai baùo SIGNAL.
Vuøng chöùa phaùt bieåu kieán truùc ñöôïc thieát laäp taïi vò trí ngay sau töø khoaù BEGIN. Trong ví duï
naøy coù moät soá phaùt bieåu cuûa caùc thaønh phaàn. Caùc thaønh phaàn naøy ñöôïc ñaët teân laø U1÷U7.
Phaùt bieåu U1 laø phaùt bieåu cho coång ñaûo. Phaùt bieåu naøy noái port s0 vôùi port ngoõ vaøo cuûa thaønh
phaàn coång ñaûo vaø tín hieäu s0_inv vôùi port ngoõ ra cuûa thaønh phaàn coång ñaûo.
56
Kyõ thuaät PLD vaø ASIC
Keát quaû laø port in1 cuûa coång ñaûo thì ñöôïc noái tôùi port s0 cuûa thöïc theå mux vaø port x cuûa coång ñaûo ñöôïc noái tôùi tín hieäu cuïc boä s0_inv. Trong phaùt bieåu naøy thì caùc port ñöôïc noái tôùi theo thöù töï maø chuùng xuaát hieän trong phaùt bieåu.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Chuù yù phaùt bieåu thaønh phaàn U7 – phaùt bieåu naøy duøng caùc kí hieäu nhö sau:
U7: orgate (x2 => b, x1 => a, x4 => d, x3 => c, x => x);
Phaùt bieåu naøy keát hôïp caùc teân ñeå töông thích vôùi caùc port. Ví duï port x2 cuûa coång orgate thì ñöôïc noái tôùi port b cuûa thöïc theå cuûa phaùt bieåu keát hôïp ñaàu tieân. Söï keát hôïp vaø thöù töï coù theå khoâng theo thöù töï nhöng khoâng neân thöïc hieän.
4. HOAÏT ÑOÄNG TUAÀN TÖÏ (SEQUENTIAL BEHAVIOR)
Coù moät caùch khaùc ñeå moâ taû chöùc naêng cuûa thieát bò mux trong ngoân ngöõ VHDL. Thöïc ra ngoân ngöõ VHDL coù nhieàu caùch trình baøy cho chöùc naêng vôùi keát quaû töông töï. Caùch thöù 3 ñeå moâ taû chöùc naêng cuûa mux laø söû duïng phaùt bieåu quaù trình (process) ñeå moâ taû chöùc naêng trình baøy theo thuaät toaùn. Caùch naøy ñöôïc duøng cho kieán truùc sequential nhö sau:
ARCHITECTURE sequential OF mux IS
PROCESS (a, b, c, d, s0, s1) VARIABLE sel: INTEGER; BEGIN
s0 = ‘0’ and s1 = ‘0’ THEN sel:= 0 ; s0 = ‘1’ and s1 = ‘0’ THEN sel:= 1 ; s0 = ‘0’ and s1 = ‘1’ THEN sel:= 2 ; sel:= 3 ;
IF ELSIF ELSIF ELSE END IF;
CASE sel IS x <= a ; WHEN 0 => x <= b ; WHEN 1 => WHEN 2 => x <= c ; WHEN OTHERS => x <= d ; END CASE;
END PROCESS; END sequential;
Kieán truùc naøy chæ chöùa 1 phaùt bieåu duy nhaát ñöôïc goïi laø phaùt bieåu quaù trình (process). Ñöôïc baét ñaàu vôùi haøng coù töø khoaù PROCESS vaø keát thuùc vôùi haøng coù töø khoaù END PROCESS. Taát caû caùc phaùt bieåu naèm giöõa hai haøng treân ñöôïc xem thaønh phaàn cuûa phaùt bieåu quaù trình.
a. Caùc phaùt bieåu quaù trình
Phaùt bieåu quaù trình chöùa nhieàu thaønh phaàn.
• Thaønh phaàn thöù nhaát ñöôïc goïi laø danh saùch caùc phaàn töû nhaïy.
• Thaønh phaàn thöù hai ñöôïc goïi laø thaønh phaàn khai baùo quaù trình.
• Thaønh phaàn thöù 3 laø caùc phaùt bieåu.
Trong ví duï treân thì danh saùch lieät keâ caùc tín hieäu naèm trong daáu ngoaëc sau töø khoaù PROCESS ñöôïc goïi laø danh saùch nhaïy. Danh saùch naøy lieät keâ chính xaùc nhöõng tín hieäu laøm cho phaùt bieåu quaù trình ñöôïc thöïc hieän. Trong ví duï naøy thì danh saùch chöùa caùc tín hieäu laø a, b, c, d, s0 vaø s1. Chæ coù nhöõng söï kieän xaûy ra treân caùc tín hieäu naøy laøm cho phaùt bieåu quaù trình ñöôïc thöïc hieän.
57
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com b. Vuøng khai baùo quaù trình
Phaàn khai baùo quaù trình laø vuøng naèm giöõa: sau danh saùch nhaïy vaø töø khoaù BEGIN. Trong ví duï treân phaàn khai baùo chöùa khai baùo bieán cuïc boä sel. Bieán naøy laø bieán cuïc boä chæ ñöôïc duøng ñeå tính toaùn giaù trò döïa vaøo port s0 vaø s1.
c. Thaønh phaàn phaùt bieåu quaù trình
Thaønh phaàn phaùt bieåu quaù trình baét ñaàu vôùi töø khoaù BEGIN vaø keát thuùc vôùi haøng coù töø khoaù END PROCESS. Taát caû caùc phaùt bieåu naèm trong vuøng quaù trình laø nhöõng phaùt bieåu tuaàn töï. Ñieàu naøy coù nghóa laø phaùt bieåu naøy ñöôïc thöïc hieän xong thì caâu leänh tieáp theo seõ ñöôïc thöïc hieän gioáng nhö moät ngoân ngöõ laäp trình bình thöôøng. Chuù yù: thöù töï caùc phaùt bieåu trong kieán truùc (architecture) thì khoâng caàn vì chuùng thöïc hieän ñoàng thôøi, tuy nhieân trong quaù trình (process) thì caàn phaûi theo thöù töï – thöù töï thöïc hieän trong quaù trình laø thöù töï caùc phaùt bieåu.
d. Thöïc hieän quaù trình
Chuùng ta xem caùch hoaït ñoäng quaù trình baèng caùch phaân tích hoaït ñoäng cuûa ví duï sequential trong kieán truùc theo töøng haøng phaùt bieåu. Ñeå phuø hôïp chuùng ta giaû söû s0 thay ñoåi veà 0. Bôûi vì s0 naèm trong danh saùch nhaïy cuûa phaùt bieåu quaù trình.
Moãi phaùt bieåu trong quaù trình ñöôïc thöïc hieän theo trình töï. Trong ví duï treân, phaùt bieåu if ñöôïc
thöïc hieän ñaàu tieân vaø tieáp theo laø phaùt bieåu case.
Kieåm tra thöù nhaát xem s0 coù baèng 0 hay khoâng. Phaùt bieåu naøy seõ khoâng thöïc hieän neáu s0 baèng 1 vaø s1 baèng 0. Phaùt bieåu gaùn tín hieäu theo sau phaùt bieåu kieåm tra thöù nhaát seõ khoâng ñöôïc thöïc hieän. Thay vaøo ñoù phaùt bieåu keá ñöôïc thöïc hieän. Phaùt bieåu naøy kieåm tra ñuùng traïng thaùi vaø phaùt bieåu gaùn theo sau leänh kieåm tra s0 =1 vaø s1 = 0 ñöôïc thöïc hieän. Giaù trò sel:=1.
e. Caùc phaùt bieåu tuaàn töï
Phaùt bieåu seõ thöïc hieän tuaàn töï. Khi moät phaùt bieåu kieåm tra thoaû ñieàu kieän thì phaùt bieåu ñöôïc thöïc hieän thaønh coâng vaø caùc böôùc kieåm tra khaùc seõ khoâng ñöôïc thöïc hieän. Phaùt bieåu IF ñaõ thöïc hieän xong vaø baây giôø thì ñeán phaùt bieåu case seõ ñöôïc thöïc hieän.
Phaùt bieåu case seõ caên cöù vaøo giaù trò cuûa bieán sel ñaõ ñöôïc tính toaùn tröôùc ñoù ôû caâu leänh IF vaø thöïc hieän ñuùng phaùt bieåu gaùn töông öùng vôùi giaù trò cuûa bieán sel. Trong tröôøng hôïp naøy thì giaù trò cuûa sel = 1 neân caâu leänh gaùn x<= b seõ ñöôïc thöïc hieän.
Giaù trò cuûa port b seõ ñöôïc gaùn cho port x vaø quaù trình thöïc hieän seõ chaám döùt bôûi vì khoâng coøn
phaùt bieåu naøo trong kieán truùc.
5. LÖÏA CHOÏN KIEÁN TRUÙC
Cho ñeán baây giôø 3 kieán truùc ñaõ ñöôïc duøng ñeå moâ taû cho moät thöïc theå. Kieán truùc naøo seõ ñöôïc duøng ñeå xaây döïng moâ hình cho thöïc theå thì tuyø thuoäc vaøo ñoä chính xaùc mong muoán vaø neáu thoâng tin veà caáu truùc ñöôïc yeâu caàu.
Neáu moâ hình seõ ñöôïc duøng ñeå ñieàu khieån coâng cuï layout thì kieán truùc netlist laø löïa choïn hôïp
lyù.
58
Kyõ thuaät PLD vaø ASIC
Neáu moâ hình caáu truùc khoâng ñöôïc yeâu caàu vì nhieàu lyù do thì moâ hình hieäu suaát cao ñöôïc söû duïng. Moät trong 2 phöông phaùp coøn laïi (kieán truùc dataflow vaø sequential) thì coù theå ñaït hieäu suaát cao hôn veà yeâu caàu khoâng gian boä nhôù vaø toác ñoä thöïc hieän.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Caùch ñeå löïa choïn giöõa 2 phöông phaùp naøy coù theå laøm naûy sinh moät caâu khoûi veà kieåu laäp trình. Ngöôøi xaây döïng moâ hình thích vieát chöông trình VHDL theo kieåu ñoàng thôøi hay theo kieåu trình töï?
Neáu ngöôøi xaây döïng moâ hình muoán vieát maõ VHDL kieåu ñoàng thôøi thì phaûi choïn kieåu kieán truùc dataflow, ngöôïc laïi thì choïn kieåu kieán truùc sequential. Thöôøng thì ngöôøi xaây döïng moâ hình quen vôùi kieåu laäp trình tuaàn töï nhöng kieåu ñoàng thôøi laø nhöõng coâng cuï maïnh ñeå vieát cho caùc moâ hình nhoû hieäu suaát cao.
6. CAÙC PHAÙT BIEÅU CAÁU HÌNH
Moät thöïc theå coù theå coù nhieàu hôn moät kieán truùc nhöng laøm theá naøo ñeå ngöôøi xaây döïng moâ hình choïn kieán truùc naøo ñeå söû duïng trong moâ phoûng ñaõ cho. Phaùt bieåu caáu hình saép xeáp caùc thuyeát minh thaønh phaàn cho thöïc theå. Vôùi khaû naêng maïnh cuûa caáu hình ngöôøi xaây döïng moâ hình coù theå ñöôïc löïa choïn duøng xaây döïng moâ hình cho thöïc theå taïi moãi caáp ñoä trong thieát keá.
Chuùng ta seõ xem xeùt phaùt bieåu caáu hình duøng kieán truùc lieät keâ cuûa thöïc theå mux.
Ví duï 2-2: Phaùt bieåu hình nhö sau:
IS
FOR U1, U2: Inverter USE ENTITY WORK.myinv (version1); END FOR;
FOR U3, U4, U5, U6: andgate USE ENTITY WORK.myand (version1); END FOR;
FOR U7: orgate USE ENTITY WORK.myor (version1); END FOR;
CONFIGURATION muxcon1 OF mux FOR netlist END muxcon1;
Chöùc naêng cuûa phaùt bieåu caáu hình laø dieãn taû chính xaùc kieán truùc naøo duøng cho moãi thaønh phaàn trong moâ hình. Ñieàu naøy xaûy ra ôû kieåu heä thoáng coù caáp baäc. Thöïc theå coù caáp baäc cao nhaát trong thieát keá caàn coù kieán truùc ñeå söû duïng cho caùc chæ ñònh cuõng nhö baát kyø thaønh phaàn naøo caàn ñöôïc thuyeát minh trong thieát keá.
Baét ñaàu phaùt bieåu caáu hình laø teân cuûa caáu hình muxcon1 cho thöïc theå mux. Söû duïng kieán
truùc netlist nhö laø kieán truùc cho thöïc theå caáp cao nhaát ñoù laø mux.
Ñoái vôùi 2 thaønh phaàn U1 vaø U2 cuûa coång ñaûo inverter ñöôïc thuyeát minh cho kieán truùc
netlist, söû duïng thöïc theå myinv, kieán truùc version1 töø thö vieän ñöôïc goïi laø WORK.
Ñoái vôùi caùc thaønh phaàn U3 ÷ U6 cuûa and andgate, duøng thöïc theå myand, kieán truùc version1
töø thö vieän WORK.
Ñoái vôùi thaønh phaàn U7 cuûa coång orgate söû duïng thöïc theå myor, kieán truùc version1 töø thö
vieän WORK.
Taát caû caùc thöïc theå baây giôø ñeàu coù caùc kieán truùc ñöôïc chæ ñònh cho chuùng. Thöïc theå mux coù
kieán truùc netlist vaø caùc thaønh phaàn khaùc coù kieán truùc ñöôïc ñaët teân chæ ñònh version1.
SÖÙC MAÏNH CUÛA CAÁU HÌNH
59
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Khi bieân dòch caùc thöïc theå, caùc kieán truùc vaø caáu hình ñaõ chæ ñònh tröôùc thì coù theå xaây döïng moâ hình coù theå moâ phoûng. Nhöng ñieàu gì seõ xaûy ra neáu khoâng muoán moâ phoûng ôû caáp ñoä coång? Vaø neáu muoán duøng kieán truùc BEHAVE thay theá. Söùc maïnh cuûa caáu hình cho pheùp baïn khoâng caàn bieân dòch laïi toaøn boä thieát keá maø chæ caàn bieân dòch laïi caáu hình môùi.
IS
Ví duï 2-3: Cho caáu hình nhö sau: CONFIGURATION muxcon2 OF mux FOR dataflow END FOR; END muxcon2;
Caáu hình naøy coù teân laø muxcon2 cho thöïc theå mux. Söû duïng kieán truùc dataflow cho thöïc theå caáp cao nhaát laø mux. Khi bieân dòch caáu hình naøy thì kieán truùc dataflow ñöôïc löïa choïn cho thöïc theå mux trong moâ phoûng.
Caáu hình naøy khoâng caàn thieát trong VHDL chuaån nhöng cung caáp cho ngöôøi thieát keá söï töï do ñeå chæ ñònh chính xaùc kieán truùc naøo seõ ñöôïc duøng cho thöïc theå. Kieán truùc maëc nhieân ñöôïc duøng cho thöïc theå laø kieán truùc sau cuøng ñöôïc bieân dòch cho vaøo thö vieäc laøm vieäc.
7. TOÙM TAÉT
Trong phaàn naøy ñaõ giôùi thieäu cô baûn veà VHDL vaø caùch söû duïng ngoân ngöõ ñeå xaây döïng moâ hình haønh vi cuûa thieát bò vaø thieát keá. Ví duï thöù nhaát ñaõ trình baøy caùch xaây döïng moâ hình dataflow ñôn giaûn trong VHDL ñöôïc chæ roõ. Ví duï thöù 2 trình baøy caùch moät thieát keá lôùn coù theå ñöôïc thöïc hieän töø nhöõng thieát keá nhoû hôn – trong tröôøng hôïp naøy boä ña hôïp 4 ngoõ vaøo ñaõ ñöôïc xaây döïng duøng caùc coång AND, OR, vaø INVERTER. Ví duï naøy cung caáp toång quan caáu truùc cuûa VHDL.
IV. GIÔÙI THIEÄU VEÀ MOÂ HÌNH HAØNH VI
Phaùt bieåu gaùn tín hieäu laø daïng cô baûn nhaát cuûa moâ hình haønh vi trong VHDL.
Ví duï 2-4: Phaùt bieåu gaùn tín hieäu nhö sau:
a <= b;
Phaùt bieåu naøy ñöôïc ñoïc nhö sau: “a coù giaù trò cuûa b”. Keát quaû cuûa phaùt bieåu gaùn naøy laø giaù trò hieän taïi cuûa b ñöôïc gaùn cho tín hieäu a. Phaùt bieåu gaùn naøy ñöôïc thöïc hieän baát kyø luùc naøo tín hieäu b thay ñoåi giaù trò. Tín hieäu b naèm trong danh saùch nhaïy cuûa caâu leänh naøy. Baát kyø tín hieäu naøo trong danh saùch nhaïy cuûa phaùt bieåu gaùn tín hieäu thay ñoåi giaù trò thì phaùt bieåu gaùn tín hieäu ñöôïc thöïc hieän.
Neáu keát quaû thöïc hieän coù giaù trò môùi khaùc vôùi giaù trò tröôùc ñoù thì sau moät thôøi gian treå thì tín
hieäu seõ xuaát hieän taïi tín hieäu ñích.
Neáu keát quaû thöïc hieän coù cuøng giaù trò thì seõ khoâng coù thôøi gian treå tín hieäu nhöng söï chuyeån traïng thaùi vaãn ñöôïc taïo ra. Söï chuyeån traïng thaùi luoân ñöôïc taïo ra khi moâ hình ñöôïc ñaùnh giaù nhöng chæ nhöõng tín hieäu coù giaù trò thay ñoåi môùi coù söï kieän treå.
Phaùt bieåu sau seõ giôùi thieäu veà phaùt bieåu gaùn tín hieäu sau moät thôøi gian treå:
a <= b AFTER 10 ns;
60
Kyõ thuaät PLD vaø ASIC
Phaùt bieåu naøy ñöôïc ñoïc laø “a coù giaù trò cuûa b sau thôøi gian treå 10 ns”
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Caû hai phaùt bieåu ñeàu laø caùc phaùt bieåu gaùn tín hieäu ñoàng thôøi, vaø nhaïy vôùi söï thay ñoåi giaù trò cuûa tín hieäu b. Khi b thay ñoåi giaù trò thì caùc phaùt bieåu gaùn thöïc hieän vaø giaù trò môùi ñöôïc gaùn cho giaù trò cuûa tín hieäu a.
Ví duï 2-5: Phaùt bieåu gaùn tín hieäu ñoàng thôøi cho moâ hình coång AND nhö sau: ENTITY PORT
and2 IS (a, b: c: IN BIT; OUT BIT);
and2_behav OF and2 IS
END and2; ARCHITECTURE BEGIN c <= a AND b AFTER 5 ns;
Hình 2-1. Coång A coù 2 ngoõ vaøo.
Coång AND coù 2 ngoõ vaøo a, b vaø moät ngoõ ra c nhö hình 2-1. Giaù trò cuûa tín hieäu c coù theå ñöôïc
gaùn cho giaù trò môùi khi moät hoaëc caû hai tín hieäu a vaø b thay ñoåi giaù trò.
Ñôn vò thieát keá thöïc theå moâ taû caùc port cuûa coång and2: coù 2 ngoõ vaøo a vaø b, moät ngoõ ra c. Kieán truùc and2_behav cho thöïc theå and2 chöùa moät phaùt bieåu gaùn tín hieäu ñoàng thôøi. Phaùt bieåu gaùn naøy nhaïy vôùi caû 2 tín hieäu a vaø tín hieäu b.
Giaù trò cuûa bieåu thöùc a and vôùi b ñöôïc tính toaùn tröôùc, keát quaû tính toaùn ñöôïc ñöa ñeán ngoõ ra
sau khoaûng thôøi gian treå 5 ns töø luùc tính toaùn xong.
Ví duï 2-6: trình baøy phaùt bieåu gaùn tín hieäu phöùc taïp hôn nhieàu vaø minh hoïa cho khaùi nieäm
ñoàng thôøi moät caùch chi tieát hôn.
Hình 2-2 trình baøy sô ñoà khoái cuûa boä ña hôïp 4 ngoõ vaøo vaø moâ hình haønh vi cho mux nhö sau:
Hình 2-2. Kí hieäu cuûa mux coù 4 ngoõ vaøo.
IEEE; IEEE.std_logic_1164.ALL;
IN STD_LOGIC; OUT STD_LOGIC);
LIBRARY USE ENTITY PORT END mux4 IS (I0, I1, I2, I3, a, b: q: mux4;
61
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
sel: INTEGER;
AFTER 10 ns WHEN 0 AFTER 10 ns WHEN 1 AFTER 10 ns WHEN 2 AFTER 10 ns WHEN 3 AFTER 10 ns WHEN OTHERS;
<= 0 1 2 3 4 WHEN a = ‘0’ AND b = ‘0’ ELSE WHEN a = ‘1’ AND b = ‘0’ ELSE WHEN a = ‘0’ AND b = ‘1’ ELSE WHEN a = ‘1’ AND b = ‘1’ ELSE ;
ARCHITECTURE mux4 OF mux4 IS SIGNAL BEGIN WITH sel SELECT <= I0 q I1 I2 I3 ‘X’ sel END mux4;
Thöïc theå entity cho moâ hình naøy coù 6 port ngoõ vaøo vaø 1 port ngoõ ra. 4 port ngoõ vaøo (I0, I1, I2, I3) töôïng tröng cho caùc tín hieäu seõ ñöôïc gaùn cho tín hieäu ngoõ ra q. Chæ 1 trong caùc tín hieäu ñöôïc gaùn cho tín hieäu ngoõ ra q döïa vaøo keát quaû cuûa 2 tín hieäu ngoõ vaøo khaùc laø a vaø b. Baûng söï thaät cho boä ña hôïp ñöôïc trình baøy nhö hình 2-3.
Ñeå öùng duïng chöùc naêng ñaõ moâ taû ôû treân, chuùng ta duøng phaùt bieåu gaùn tín hieäu ñieàu kieän vaø
phaùt bieåu gaùn tín hieäu coù löïa choïn.
Phaùt bieåu thöù 2 trong ví duï ñöôïc goïi laø phaùt bieåu gaùn tín hieäu coù ñieàu kieän. Phaùt bieåu naøy gaùn giaù trò cho tín hieäu ñích döïa vaøo caùc ñieàu kieän ñöôïc ñaùnh giaù cho moãi leänh. Caùc ñieàu kieän WHEN ñöôïc thöïc hieän moät laàn taïi moät thôøi ñieåm theo thöù töï tuaàn töï cho ñeán khi gaëp ñieàu kieän töông thích. Phaùt bieåu thöù 2 gaùn giaù trò cho tín hieäu ñích khi töông thích ñieàu kieän, tín hieäu ñích laø sel. Tuyø thuoäc vaøo giaù trò cuûa a vaø b thì caùc giaù trò töø 0 ñeán 4 seõ ñöôïc gaùn cho sel.
Neáu coù nhieàu ñieàu kieän cuûa moät phaùt bieåu töông thích thì phaùt bieåu ñaàu tieân maø noù töông
thích seõ ñöôïc thöïc hieän vaø caùc giaù trò cuûa phaùt bieåu töông thích coøn laïi seõ bò boû qua.
Phaùt bieåu thöù 1 ñöôïc goïi laø gaùn tín hieäu coù löïa choïn vaø löïa choïn giöõa soá löôïng caùc tuyø choïn
ñeå gaùn giaù trò ñuùng cho tín hieäu ñích – trong ví duï naøy tín hieäu ñích laø q.
B A Q
0 0 I0
0 1 I1
1 0 I2
1 1 I3
Hình 2-3. Baûng traïng thaùi cuûa mux coù 4 ngoõ vaøo.
62
Kyõ thuaät PLD vaø ASIC
Bieåu thöùc (giaù trò sel trong ví duï naøy) ñöôïc ñaùnh giaù vaø phaùt bieåu maø noù töông thích vôùi giaù trò cuûa bieåu thöùc ñöôïc gaùn giaù trò cho tín hieäu ñích. Taát caû caùc giaù trò coù theå coù cuûa bieåu thöùc phaûi coù söï löïa choïn töông thích trong caùch gaùn tín hieäu ñaõ löïa choïn.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Moãi moät tín hieäu ngoõ vaøo coù theå ñöôïc gaùn cho ngoõ ra q – tuyø thuoäc vaøo caùc giaù trò cuûa 2 ngoõ vaøo a vaø b. Neáu caùc giaù trò cuûa a vaø b khoâng xaùc ñònh thì giaù trò sau cuøng ‘X’ (khoâng xaùc ñònh) ñöôïc gaùn cho ngoõ ra q. Trong ví duï naøy, khi caùc ngoõ vaøo löïa choïn ôû giaù trò khoâng xaùc ñònh thì ngoõ ra ñöôïc gaùn cho giaù trò khoâng xaùc ñònh.
Phaùt bieåu thöù hai nhaïy vôùi caùc tín hieäu a vaø b. Baát kyø luùc naøo khi a hoaëc b thay ñoåi giaù trò, phaùt bieåu gaùn thöù hai ñöôïc thöïc hieän vaø tín hieäu sel ñöôïc caäp nhaät. Phaùt bieåu thöù 1 nhaïy vôùi tín hieäu sel. Khi tín hieäu sel thay ñoåi giaù trò thì gaùn tín hieäu tín hieäu thöù nhaát ñöôïc thöïc hieän.
Neáu ví duï naøy ñöôïc xöû lyù bôûi coâng cuï toång hôïp, thì keát quaû caáu truùc coång ñöôïc xaây döïng gioáng nhö moät boä ña hôïp 4 ñöôøng sang 1 ñöôøng. Neáu thö vieän toång hôïp chöùa boä ña hôïp 4 ñöôøng sang 1 ñöôøng thì boä ña hôïp naøy coù theå ñöôïc caáp phaùt döïa vaøo söï phöùc taïp cuûa coâng cuï toång hôïp vaø ñaët vaøo trong thieát keá.
1. DELAY QUAÙN TÍNH VAØ DELAY TRUYEÀN
Trong VHDL coù 2 loaïi delay coù theå duøng cho moâ hình haønh vi. Delay quaùn tính thì ñöôïc söû duïng phoå bieán, trong khi delay truyeàn ñöôïc söû duïng ôû nhöõng nôi maø moâ hình delay daây daãn ñöôïc yeâu caàu.
a. Delay quaùn tính:
Delay quaùn tính laø maëc nhieân trong VHDL. Neáu khoâng coù kieåu delay ñöôïc chæ ñònh thì delay quaùn tính ñöôïc söû duïng. Delay quaùn tính laø delay maëc nhieân bôûi vì trong haàu heát caùc tröôøng hôïp thì noù thöïc hieän gioáng nhö thieát bò thöïc.
Giaù trò cuûa delay quaùn tính baèng vôùi delay trong thieát bò.
Neáu baát kyø xung tín hieäu coù chu kyø vôùi thôøi gian cuûa tín hieäu ngaén hôn thôøi gian delay cuûa
thieát bò thì giaù trò tín hieäu ngoõ ra khoâng thay ñoåi.
Neáu thôøi gian cuûa tín hieäu ñöôïc duy trì ôû moät giaù trò ñaëc bieät daøi hôn thôøi gian delay cuûa thieát
bò thì delay quaùn tính seõ ñöôïc khaéc phuïc vaø thieát bò seõ thay ñoåi sang traïng thaùi môùi.
Hình 2-4 laø moät ví duï veà kí hieäu boä ñeäm raát ñôn giaûn – coù 1 ngoõ vaøo A vaø moät ngoõ ra B, daïng
soùng ñöôïc trình baøy cho tín hieäu ngoõ vaøo A vaø ngoõ ra B.
Tín hieäu A thay ñoåi töø ‘0’ sang ‘1’ taïi moác thôøi gian 10ns vaø töø ‘1’ sang ‘0’ taïi moác thôøi gian 20ns. Vôùi caùc khoaûng thôøi gian naøy cho pheùp xaây döïng moät xung hoaëc xung nhoïn coù thôøi gian nhoû hôn 10ns. Cho boä ñeäm coù thôøi gian treå laø 20ns.
Chuyeån traïng thaùi töø ‘0’ sang ‘1’ treân tín hieäu A laøm cho moâ hình boä ñeäm ñöôïc thöïc hieän vaø
theo döï kieán thì giaù trò ‘1’ xuaát hieän ôû ngoõ ra B taïi moác thôøi gian 30ns.
ÔÛ moác thôøi gian 20ns, söï kieän tieáp theo treân tín hieäu A xaûy ra (tín hieäu a xuoáng möùc ‘0’) thì moâ hình boä ñeäm döï kieán moät söï kieän môùi seõ xaûy ra treân ngoõ ra B coù giaù trò 0 taïi moác thôøi gian 40ns. Trong khi ñoù söï kieän ñaõ döï kieán ôû ngoõ ra B cho moác thôøi gian 30ns vaãn chöa xaûy ra. Söï kieän môùi ñöôïc döï ñoaùn bôûi moâ hình boä ñeäm xung ñoät vôùi söï kieän tröôùc vaø trình moâ phoûng öu tieân cho söï kieän coù moác thôøi gian 30ns.
Keát quaû cuûa vieäc öu tieân laø xung bò nuoát (maát). Lyù do xung bò nuoát laø tuyø thuoäc vaøo moâ hình delay quaùn tính, söï kieän thöù nhaát taïi moác thôøi gian 30ns chöa coù ñuû thôøi gian ñeå hoaøn thaønh delay quaùn tính cuûa tín hieäu ngoõ ra.
63
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Moâ hình thôøi gian delay quaùn tính thöôøng ñöôïc söû duïng trong taát caû caùc trình moâ phoûng. Trong haàu heát caùc tröôøng hôïp moâ hình delay quaùn tính ñuû chính xaùc cho caùc yeâu caàu cuûa ngöôøi thieát keá. Moät trong nhöõng lyù do cho vieäc môû roäng söû duïng thôøi gian delay quaùn tính laø noù ngaên chaën thôøi gian trì hoaõn cuûa xung xuyeân qua thieát bò.
Hình 2-4. Daïng soùng coù delay quaùn tính cuûa boä ñeäm.
b. Delay truyeàn tín hieäu
Delay truyeàn tín hieäu khoâng phaûi laø delay maëc nhieân cuûa VHDL maø phaûi ñöôïc chæ ñònh. Delay truyeàn töôïng tröng cho delay daây daãn, baát kyø xung naøo ñöôïc truyeàn ñeán ngoõ ra ñeàu ñöôïc delay vôùi moät giaù trò delay theo chæ ñònh. Delay truyeàn raát coù ích ñeå xaây döïng moâ hình thieát bò coù treå treân ñöôøng daây, treân daây daãn cuûa bo maïch.
Neáu chuùng ta xem maïch ñeäm ñaõ ñöôïc trình baøy ôû hình 2-4 nhöng thay theá caùc daïng soùng delay quaùn tính baèng caùc daïng soùng delay truyeàn thì chuùng ta coù keát quaû nhö hình 2-5. Cuøng daïng soùng cuûa ngoõ vaøo nhöng daïng soùng ngoõ ra B thì hoaøn toaøn khaùc. Vôùi delay truyeàn thì caùc xung nhoïn seõ xuaát hieän nhöng caùc söï kieän xeáp theo thöù töï tröôùc khi truyeàn ñi.
64
Kyõ thuaät PLD vaø ASIC
Taïi moác thôøi gian 10ns, moâ hình boä ñeäm ñöôïc thöïc hieän vaø döï kieán moät söï kieän ngoõ ra seõ leân möùc ‘1’ taïi moác thôøi gian 30ns. Taïi moác thôøi gian 20ns moâ hình boä ñeäm bò kích vaø döï ñoaùn moät giaù trò môùi seõ xuaát hieän ôû ngoõ ra taïi moác thôøi gian 40ns. Vôùi thuaät toaùn delay truyeàn thì caùc söï kieän ñöôïc ñaët theo thöù töï. Söï kieän cho moác thôøi gian 40ns ñöôïc ñaët trong danh saùch caùc söï kieän naèm sau söï kieän cuûa moác thôøi gian 30ns. Xung khoâng bò nuoát nhöng ñöôïc truyeàn nguyeân veïn sau thôøi gian delay cuûa thieát bò.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Hình 2-5. Daïng soùng coù delay truyeàn cuûa boä ñeäm.
c. Moâ hình Delay quaùn tính
Moâ hình tieáp theo trình baøy caùch vieát moät moâ hình delay quaùn tính. Gioáng nhö nhöõng moâ hình khaùc maø chuùng ta ñaõ khaûo saùt, delay maëc nhieân laø delay quaùn tính do ñoù khoâng caàn thieát phaûi chæ ñònh kieåu delay laø delay quaùn tính:
IEEE; IEEE.std_logic_1164.ALL;
IS IN
LIBRARY USE ENTITY PORT END buf (a: STD_LOGIC; b: OUT STD_LOGIC); buf;
buf OF buf IS
ARCHITECTURE BEGIN END b <= a AFTER 20 ns ; buf;
d. Moâ hình Delay truyeàn
Ví duï cho moâ hình delay truyeàn ñöôïc trình baøy nhö sau:
IEEE; IEEE.std_logic_1164.ALL;
LIBRARY USE ENTITY PORT END IS delay_line (a: STD_LOGIC; IN b: OUT STD_LOGIC); delay_line;
delay_line OF delay_line IS
ARCHITECTURE BEGIN END b <= TRANSPORT a AFTER 20 ns ; delay_line;
Gioáng nhö moâ hình delay quaùn tính chæ khaùc laø coù theâm töø khoaù TRANSPORT trong leänh gaùn tín hieäu cho tín hieäu b. Khi töø khoaù naøy toàn taïi, kieåu delay ñöôïc duøng trong phaùt bieåu laø delay truyeàn.
2. MOÂ PHOÛNG DELTA
Moâ phoûng delta ñöôïc duøng ñeå xeáp thöù töï cho nhieàu loaïi söï kieän trong moâ phoûng thôøi gian. Ñaëc bieät caùc söï kieän delay baèng 0 phaûi ñöôïc xeáp theo thöù töï ñeå taïo ra caùc keát quaû thích hôïp. Neáu caùc söï kieän delay zero khoâng theo thöù töï hôïp lyù thì keát quaû coù theå khaùc nhau giöõa caùc laàn moâ phoûng khaùc nhau. Moät ví duï cho kieåu naøy ñöôïc trình baøy ôû hình 2-6. Maïch ñieän naøy laø moät phaàn cuûa sô ñoà maïch ñoàng hoà.
65
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Maïch ñieän goàm coù moät coång ñaûo, moät coång NAND vaø moät coång AND thuùc ngoõ vaøo ñoàng hoà cuûa thaønh phaàn flip flop. Coång NAND vaø coång AND ñöôïc duøng ñeå gaùc ngoõ vaøo xung clock ñeán flip flop.
Chuùng ta seõ khaûo saùt hoaït ñoäng cuûa maïch duøng cô caáu delay delta vaø cô caáu khaùc. Baèng caùch
kieåm tra 2 cô caáu delay chuùng ta seõ hieåu roõ hôn caùch delay delta saép xeáp caùc söï kieän.
Hình 2-6. So saùnh 2 cô caáu ñaùnh giaù.
Ñeå duøng delay delta thì taát caû caùc thaønh phaàn cuûa maïch ñieän phaûi coù delay zero theo chæ ñònh. Delay cho caû 3 coång ñöôïc chæ ñònh laø zero. (caùc maïch ñieän thöïc teá thì khoâng coù ñaëc tính nhö theá).
Khi coù caïnh xuoáng xaûy ra treân tín hieäu A, ngoõ ra cuûa coång ñaûo thay ñoåi ñuùng thôøi ñieåm 0. Chuùng ta giaû söû raèng söï kieän xaûy ra taïi moác thôøi gian 10ns. Tín hieäu ra B cuûa coång ñaûo thay ñoåi ngöôïc vôùi giaù trò môùi cuûa ngoõ vaøo.
Khi giaù trò B thay ñoåi, caû hai coång AND vaø NAND ñöôïc ñaùnh giaù laïi. Trong ví duï naøy giaû söû ngoõ vaøo xung clock laø 1. Neáu coång NAND ñöôïc ñaùnh giaù tröôùc thì giaù trò môùi ôû ngoõ ra coång NAND laø ‘0’.
Khi coång AND ñöôïc ñaùnh giaù thì tín hieäu B coù giaù trò laø ‘1’ vaø tín hieäu C coù giaù trò laø ‘0’, do
ñoù coång AND döï ñoaùn keát quaû môùi laø ‘0’.
Nhöng ñieàu gì seõ xaûy ra neáu coång AND ñaùnh giaù tröôùc. ÔÛ coång AND seõ coù giaù trò ‘1’ ôû tín hieäu B vaø giaù trò ‘1’ ôû tín hieäu C (coång NAND chöa ñaùnh giaù). Ngoõ ra coång AND coù giaù trò môùi laø ‘1’.
Baây giôø coång NAND môùi ñöôïc ñaùnh giaù vaø giaù trò môùi ôû ngoõ ra laø ‘0’. Söï thay ñoåi ôû ngoõ ra NAND laøm cho coång AND ñaùnh giaù laïi laàn nöõa. Coång AND coù giaù trò cuûa B laø ‘1’ vaø giaù trò môùi cuûa tín hieäu C laø ‘0’. Ngoõ ra coång AND baây giôø seõ coù giaù trò laø ‘0’. Quaù trình naøy ñöôïc toùm taét nhö hình 2-7.
66
Kyõ thuaät PLD vaø ASIC
Caû hai tín hieäu ñeán ngoõ vaøo D. Tuy nhieân khi coång AND ñöôïc ñaùnh giaù tröôùc thì coù xung caïnh leân vôùi ñoä roäng delta xuaát hieän ôû ngoõ ra D. Caïnh leân naøy coù theå kích flip flop, tuyø thuoäc vaøo caùch moâ hình flip flop ñöôïc xaây döïng.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
AND FIRST NAND FIRST
Evaluate inverter Evaluate inverter
B <= 1 B <= 1
Evaluate AND (C = 1) Evaluate NAND
D <= 1 C <= 0
Evaluate NAND Evaluate AND
C <= 0 D <= 0
Evaluate AND
D <= 0
Hình 2-7. So saùnh 2 cô caáu ñaùnh giaù.
Troïng taâm cuûa vaán ñeà laø neáu khoâng coù cô caáu ñoàng boä delta thì keát quaû cuûa moâ phoûng coù theå tuyø thuoäc vaøo caùch caùc caáu truùc döõ lieäu moâ phoûng ñöôïc xaây döïng. Ví duï, khi bieân dòch maïch ñieän laàn thöù nhaát thì coù theå coång AND ñöôïc ñaùnh giaù tröôùc, neáu bieân dòch laïi laàn nöõa thì coù theå coång NAND ñöôïc ñaùnh giaù tröôùc – cho ra keát quaû khoâng mong muoán, moâ phoûng delta seõ ngaên chaën haønh vi naøy xaûy ra.
Cuøng moät maïch ñieän ñöôïc ñaùnh giaù duøng cô caáu delay delta VHDL seõ ñaùnh giaù nhö hình 2-8.
Time Delta
10 ns (1)
A <= 0 Evaluate inverter
(2)
B <= 1 Evaluate AND Evaluate NAND
(3)
D <= 1 C <= 0 Evaluate AND
(4) D <= 0
11 ns
Hình 2-8. Cô caáu ñaùnh giaù delay delta.
ÔÛ ñieåm thôøi gian delta ñaàu tieân cuûa 10ns, tín hieäu A nhaän giaù trò ‘0’. Giaù trò naøy laøm cho coång ñaûo ñöôïc ñaùnh giaù laïi vôùi giaù trò môùi. Tín hieäu ngoõ ra coång ñaûo B coù giaù trò laø ‘1’. Giaù trò naøy khoâng truyeàn ngay laäp töùc maø chôø cho ñeán ñieåm thôøi gian delta thöù 2.
Sau ñoù trình moâ phoûng baét ñaàu thöïc hieän ñieåm thôøi gian delta thöù 2. Tín hieäu B ñöôïc caäp nhaät giaù trò laø ‘1’ vaø coång AND vaø coång NAND ñöôïc ñaùnh giaù laïi. Caû hai coång AND vaø NAND phaûi chôø caùc giaù trò môùi ôû ñieåm thôøi gian delta thöù 3.
Khi ñieåm thôøi gian delta thöù 3 xaûy ra, tín hieäu D nhaän giaù trò laø ‘1’ vaø tín hieäu C nhaän giaù trò laø ‘0’. Do tín hieäu C cuõng thuùc coång AND, coång AND ñöôïc ñaùnh giaù laïi vaø chôø keát quaû ngoõ ra ôû ñieåm thôøi gian delta thöù 4. Cuoái cuøng ngoõ ra D baèng ‘0’.
Toùm laïi moâ phoûng delta laø löôïng thôøi gian voâ cuøng nhoû ñöôïc duøng nhö moät cô caáu ñoàng boä khi caùc söï kieän delay zero xuaát hieän. Delay delta ñöôïc duøng khi delay zero ñöôïc chæ ñònh vaø trình baøy nhö sau:
67
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com a <= b after 0 ns;
Moät tröôøng hôïp khaùc duøng delay delta laø khi delay zero ñöôïc chæ ñònh.
Ví duï 2-7: Phaùt bieåu hình nhö sau:
a <= b ;
Trong caû 2 tröôøng hôïp, tín hieäu b thay ñoåi giaù trò töø 1 söï kieän, tín hieäu a ñöôïc gaùn tín hieäu sau
khoaûng thôøi gian delay delta.
Moät moâ hình VHDL töông ñöông cuûa maïch ñieän ñöôïc trình baøy nhö hình 2-6:
BIT; IN OUT BIT);
ENTITY PORT END reg IS (a, clock: d: reg;
test OF reg IS
b,c: BIT;
-- no delay
ARCHITECTURE SIGNAL BEGIN END b <= NOT (a); c <= NOT (clock AND b); d <= c AND b; test;
3. DRIVER
VHDL coù moät phöông phaùp duy nhaát ñeå xöû lyù caùc tín hieäu coù nhieàu nguoàn kích. Caùc tín hieäu coù nhieàu nguoàn kích raát höõu ích cho moâ hình bus döõ lieäu, bus hai chieàu, … Moâ hình chính xaùc caùc loaïi maïch ñieän naøy trong VHDL yeâu caàu phaûi bieát caùc khaùi nieäm veà maïch kích (thuùc) tín hieäu. Moãi moät driver cuûa VHDL xem nhö moät tín hieäu goùp phaàn cho giaù trò toång theå cuûa moät tín hieäu.
Moät tín hieäu coù nhieàu nguoàn kích seõ coù nhieàu driver. Caùc giaù trò cuûa taát caû caùc driver ñöôïc phaân tích cuøng nhau ñeå taïo ra giaù trò duy nhaát cho tín hieäu naøy. Phöông phaùp phaân tích taát caû caùc tín hieäu goùp phaàn thaønh moät giaù trò duy nhaát laø thoâng qua haøm phaân tích. Moät haøm phaân tích laø haøm do ngöôøi thieát keá vieát, seõ ñöôïc goïi moãi khi moät driver cuûa tín hieäu thay ñoåi giaù trò.
a. Taïo driver:
Caùc driver ñöôïc taïo ra baèng caùc phaùt bieåu tín hieäu. Moät pheùp gaùn tín hieäu ñoàng thôøi beân trong moät kieán truùc taïo ra moät driver cho moät pheùp gaùn tín hieäu. Do ñoù nhieàu pheùp gaùn tín hieäu seõ taïo ra nhieàu driver cho moät tín hieäu. Haõy khaûo saùt kieán truùc sau ñaây
test OF test IS
AFTER 10ns; AFTER 10ns;
ARCHITECTURE BEGIN END a <= b a <= c test;
Tín hieäu a seõ ñöôïc kích töø hai nguoàn b vaø c. Moãi phaùt bieåu gaùn tín hieäu ñoàng thôøi seõ taïo ra
moät driver cho tín hieäu a.
68
Kyõ thuaät PLD vaø ASIC
Phaùt bieåu thöù nhaát taïo ra moät driver chöùa giaù trò cuûa tín hieäu b ñöôïc trì hoaõn 10 ns.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Phaùt bieåu thöù hai taïo ra moät driver chöùa giaù trò cuûa tín hieäu c ñöôïc trì hoaõn 10 ns.
Nhöõng ngöôøi thieát keá söû duïng VHDL khoâng muoán tuøy yù theâm vaøo caùc raøng buoäc ngoân ngöõ
ñoái vôùi haønh vi cuûa tín hieäu. Khi toång hôïp ví duï ôû treân seõ noái taét b vaø c vôùi nhau.
b. Moâ hình nhieàu driver xaáu:
Ta haõy khaûo saùt moät moâ hình thoaït nhìn coù veû ñuùng nhöng laïi khoâng thöïc hieän chöùc naêng nhö ngöôøi söû duïng döï ñònh. Moâ hình naøy söû duïng moät maïch ña hôïp 4 ñöôøng sang 1 ñöôøng ñaõ thaûo luaän:
IN STD_LOGIC; OUT STD_LOGIC);
IEEE.std_logic_1164.ALL; mux4 IS (i0, i1, i2, i3, a, b: q: mux4;
bad OF mux4 IS
USE ENTITY PORT END ARCHITECTURE BEGIN q q q q END <= i0 WHEN a = ‘0’ AND b = ‘0’ ELSE ‘0’ <= i1 WHEN a = ‘1’ AND b = ‘0’ ELSE ‘0’ <= i2 WHEN a = ‘0’ AND b = ‘1’ ELSE ‘0’ <= i3 WHEN a = ‘1’ AND b = ‘1’ ELSE ‘0’ bad;
Moâ hình naøy gaùn: i0 cho q khi a baèng ‘0’ vaø b baèng ‘0’;
i1 khi a baèng ‘1’ vaø b baèng ‘0’; …
Thoaït nhìn, moâ hình naøy coù veû hoaït ñoäng ñuùng. Tuy nhieân moãi pheùp gaùn cho tín hieäu q taïo ra
moät tín driver môùi cho tín hieäu q. Boán driver cho tín hieäu q ñöôïc taïo ra trong moâ hình naøy.
Moãi driver seõ kích giaù trò cuûa moät trong caùc ngoõ vaøo i0, i1, i2, i3 hoaëc ‘0’. Giaù trò ñöôïc kích
phuï thuoäc vaøo caùc tín hieäu a vaø b.
Neáu a baèng ‘0’ vaø b baèng ‘0’, phaùt bieåu gaùn ñaàu tieân ñaët giaù trò cuûa i0 vaø moät trong caùc driver cuûa q. Ba phaùt bieåu gaùn khaùc khoâng thoûa ñieàu kieän vaø do vaäy seõ kích giaù trò ‘0’. Nhö vaäy, ba driver seõ kích giaù trò ‘0’ vaø moät driver seõ kích giaù trò cuûa i0.
Caùc haøm phaân tích ñieån hình khoù maø döï ñoaùn keát quaû ngoõ ra q mong muoán, nhöng giaù trò thöïc cuûa noù chính laø i0. Caùch toát hôn ñeå vieát cho moâ hình naøy laø chæ xaây döïng moät maïch driver (kích) cho tín hieäu q nhö ñöôïc trình baøy sau ñaây
better OF mux4 IS
WHEN a = ‘0’ AND b = ‘0’ ELSE WHEN a = ‘1’ AND b = ‘0’ ELSE WHEN a = ‘0’ AND b = ‘1’ ELSE WHEN a = ‘1’ AND b = ‘1’ ELSE
i0 i1 i2 i3 ‘X’;
ARCHITECTURE BEGIN q END <= better;
4. GENERIC
69
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Generic laø moät cô caáu toång quaùt ñöôïc duøng ñeå chuyeån thoâng tin ñeán thöïc theå. Thoâng tin ñöôïc
chuyeån ñeán thöïc theå laø moät trong caùc kieåu ñöôïc VHDL cho pheùp.
Generic cuõng coù theå ñöôïc duøng ñeå chuyeån caùc kieåu döõ lieäu baát kyø do ngöôøi thieát keá ñònh nghóa bao goàm caùc thoâng tin nhö ñieän dung taûi, ñieän trôû, … Caùc thoâng soá toång hôïp nhö ñoä roäng ñöôøng döõ lieäu, ñoä roäng tín hieäu, … coù theå chuyeån ñöôïc döôùi daïng caùc generic.
Taát caû döõ lieäu ñöôïc chuyeån ñeán moät thöïc theå laø caùc thoâng tin roõ raøng. Caùc giaù trò döõ lieäu coù lieân quan ñeán instance ñang ñöôïc truyeàn döõ lieäu. ÔÛ phöông phaùp naøy, ngöôøi thieát keá coù theå truyeàn caùc giaù trò khaùc nhau ñeán caùc instance khaùc nhau trong thieát keá.
Döõ lieäu ñöôïc truyeàn ñeán instance laø döõ lieäu tónh. Sau khi moâ hình ñöôïc cho theâm chi tieát (lieân keát vôùi trình moâ phoûng), döõ lieäu seõ khoâng thay ñoåi trong thôøi gian moâ phoûng. Caùc generic khoâng theå ñöôïc gaùn thoâng tin cho caùc thaønh phaàn chaïy chöông trình moâ phoûng. Thoâng tin chöùa trong caùc generic ñöôïc chuyeån ñeán instance thaønh phaàn hoaëc moät khoái coù theå ñöôïc söû duïng ñeå thay ñoåi caùc keát quaû trong moâ phoûng, nhöng caùc keát quaû khoâng theå söûa ñoåi caùc generic.
Ví duï 2-8: thöïc theå coång AND coù 3 generic keát hôïp:
load_dependent OF and2 IS internal BIT;
ARCHITECTURE SIGNAL BEGIN internal c
<= a AND b; <= Internal AFTER (rise + (load*2 ns)) Internal = ‘1’ ELSE Internal AFTER (rise + (load*3 ns));
END load_dependent;
Kieán truùc naøy khai baùo moät tín hieäu cuïc boä goïi laø internal ñeå löu giaù trò cuûa bieåu thöùc a vaø b. Caùc giaù trò tính toaùn tröôùc duøng cho nhieàu instance laø moät phöông phaùp raát hieäu quaû cho vieäc xaây döïng moâ hình.
Caùc generic rise, fall vaø load chöùa caùc giaù trò ñaõ ñöôïc chuyeån vaøo bôûi phaùt bieåu cuûa instance thaønh phaàn. Ta haõy khaûo saùt moät phaàn cuûa moâ hình maø noù theå hieän caùc thaønh phaàn loaïi AND2 trong moät caáu truùc khaùc:
ENTITY
TIME; load: INTEGER); STD_LOGIC; IN OUT STD_LOGIC); GENERIC PORT END test IS (rise, fall: (ina, inb, inc, ind: Out1, out2: test;
OF test IS ARCHITECTURE COMPONENT test_arch and2 (rise, fall: TIME; load: INTEGER); GENERIC PORT(a, b: IN BIT; c: OUT BIT);
END COMPONENT; BEGIN U1: U2: END and2 GENERIC MAP (10 ns, 12 ns, 3) PORT MAP (ina, inb, out1); and2 GENERIC MAP (9 ns, 11 ns, 5) PORT MAP (inc, ind, out2); test_arch;
Phaùt bieåu kieán truùc ñaàu tieân khai baùo caùc thaønh phaàn seõ ñöôïc söû duïng trong moâ hình. Trong
70
Kyõ thuaät PLD vaø ASIC
ví duï naøy thaønh phaàn AND2 ñöôïc khai baùo.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Tieáp theo, thaân cuûa phaùt bieåu kieán truùc chöùa hai phaùt bieåu theå hieän thaønh phaàn cuûa caùc thaønh phaàn U1 vaø U2. Port a cuûa thaønh phaàn U1 ñöôïc aùnh xaï ñeán tín hieäu ina, port b ñöôïc aùnh xaï ñeán tín hieäu inb vaø port c ñöôïc aùnh xaï ñeán tín hieäu out1. Cuøng phöong phaùp nhö vaäy thaønh phaàn U2 ñöôïc aùnh xaï ñeán caùc tín hieäu inc, ind vaø out2.
Generic rise cuûa theå hieän U1 ñöôïc aùnh xaï ñeán 10ns, generic fall ñöôïc aùnh xaï ñeán 12ns vaø generic load ñöôïc aùnh xaï ñeán 3. Caùc generic cuûa thaønh phaàn U2 ñöôïc aùnh xaï ñeán caùc giaù trò 9 ns, 11ns vaø giaù trò 5.
Caùc generic cuõng coù theå coù giaù trò maëc ñònh, caùc giaù trò naøy ñöôïc ghi ñeø neáu caùc giaù trò thöïc
teá ñöôïc aùnh xaï ñeán caùc generic. Ví duï tieáp theo trình baøy hai theå hieän thaønh phaàn loaïi AND2.
Trong thaønh phaàn U1, giaù trò thöïc teá ñöôïc aùnh xaï ñeán generic vaø caùc giaù trò naøy ñöôïc duøng ñeå
ñieàu khieån haønh vi moâ phoûng neáu ñöôïc chæ ñònh roõ, ngöôïc laïi seõ phaùt sinh loãi.
IEEE; IEEE.std_logic_1164.ALL;
LIBRARY USE ENTITY
TIME; load: INTEGER); IN STD_LOGIC; OUT STD_LOGIC);
GENERIC PORT END test IS (rise, fall: (ina, inb, inc, ind: Out1, out2: test;
OF test IS
ARCHITECTURE COMPONENT
test_arch and2 (rise, fall: TIME: = 10 ns; load: INTEGER := 0);
GENERIC PORT(a, b: IN BIT; c: OUT BIT);
END COMPONENT; BEGIN U1: U2: END and2 GENERIC MAP (10 ns, 12 ns, 3) PORT MAP (ina, inb, out1); and2 PORT MAP (inc, ind, out2); test_arch;
Nhö ñaõ nhìn thaáy, caùc generic coù nhieàu caùch duøng. Vieäc söû duïng generic chæ bò giôùi haïn bôûi
söï saùng taïo cuûa ngöôøi vieát moâ hình.
5. CAÙC PHAÙT BIEÅU KHOÁI
Caùc khoái laø cô caáu töøng phaàn trong VHDL – cho pheùp ngöôøi thieát keá caùc khoái trong moâ hình. Ví duï neáu baïn thieát keá CPU thì coù theå chia ra thaønh nhieàu khoái nhö khoái ALU, khoái bank thanh ghi vaø caùc khoái khaùc.
Moãi khoái coù theå khai baùo caùc tín hieäu cuïc boä, kieåu döõ lieäu, haèng soá, … Baát kyø ñoái töôïng naøo – maø noù coù theå ñöôïc khai baùo trong phaàn khai baùo kieán truùc – thì coù theå ñöôïc khai baùo trong phaàn khai baùo khoái.
IEEE; IEEE.std_logic_1164.ALL;
Ví duï 2-9: duøng caùc phaùt bieåu khoâái: LIBRARY USE
71
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
ARRAY ( 31 downto 0 ) OF std_logic;
bit32 IS IS tw32 bit32;
IEEE; IEEE.std_logic_1164.ALL; WORK.bit32.ALL;
package TYPE END LIBRARY USE USE ENTITY PORT
IN OUT INOUT STD_LOGIC; tw32; tw32;);
END IS cpu (clk, interrupt: addr: data: cpu;
cpu_blk OF cpu IS
ibus, dbus: tw32;
qbus: tw32;
ARCHITECTURE SIGNAL BEGIN ALU: BLOCK SIGNAL -- alu behavior stataments
BEGIN END BLOCK ALU;
zbus: tw32;
BLOCK qbus: tw32;
REG8: BLOCK SIGNAL -- REG1 behavior stataments
BEGIN END BLOCK REG1; -- more REG8 stataments
REG1: SIGNAL
BEGIN END BLOCK REG8;
END cpu_blk;
Thöïc theå cpu coù khai baùo thöïc theå ngoaøi cuøng trong moâ hình (moâ hình cho ví duï naøy chöa hoaøn chænh). Thöïc theå cpu khai baùo 4 port – duøng cho giao tieáp moâ hình. Caùc port clk vaø interrupt laø caùc port ngoõ vaøo, addr laø port ngoõ ra vaø data laø port hai chieàu inout. Taát caû caùc port naøy ñöôïc nhìn thaáy ôû baát kyø khoái naøo, ñöôïc khai baùo trong kieán truùc cho thöïc theå naøy. Caùc port ngoõ vaøo coù theå ñoïc vaø caùc port ngoõ ra coù theå ñöôïc gaùn giaù trò.
Caùc tín hieäu ibus vaø dbus laø caùc tín hieäu cuïc boä ñöôïc khai baùo trong kieán truùc cpu_blk. Caùc tín hieäu naøy laø cuïc boä ñoái vôùi kieán truùc cpu_blk vaø do ñoù caùc khoái beân ngoaøi khoâng ñöôïc truy xuaát caùc tín hieäu naøy.
72
Kyõ thuaät PLD vaø ASIC
Tuy nhieân, baát kyø khoái naèm naøo beân trong kieán truùc ñoù ñeàu coù theå truy xuaát caùc tín hieäu naøy. Caùc khoái coù caáp möùc ñoä thaáp thì coù theå truy xuaát ñeán caùc tín hieäu coù caáp möùc ñoä cao hôn, nhöng
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
caùc khoái coù caáp möùc ñoä cao hôn thì khoâng theå truy xuaát ñeán caùc tín hieäu cuïc boä cuûa khoái caáp thaáp hôn.
Tín hieäu qbus ñöôïc khai baùo trong phaàn khai baùo khoái cuûa khoái ALU. Tín hieäu naøy laø tín hieäu cuïc boä cho khoái ALU vaø caùc khoái beân ngoaøi khoâng theå truy xuaát. Taát caû caùc phaùt bieåu naèm beân trong khoái ALU coù theå truy xuaát qbus, nhöng caùc phaùt bieåu beân ngoaøi khoái ALU thì khoâng theå duøng qbus.
Töông töï, tín hieäu zbus cho khoái REG8. Khoái REG1 naèm beân trong khoái REG8 coù theå truy xuaát tín hieäu zbus vaø taát caû caùc phaùt bieåu khaùc trong khoái REG8 cuõng coù theå truy xuaát tín hieäu zbus.
Trong phaàn khai baùo cuûa khoái REG1 coøn khai baùo moät tín hieäu khaùc goïi laø qbus. Tín hieäu naøy coù cuøng teân vôùi tín hieäu qbus ñöôïc khai baùo trong khoái ALU – ñieàu naøy coù gaây ra xung ñoät gì khoâng ? Ñoái vôùi chöông trình chöông trình bieân dòch thì hai tín hieäu naøy laø ñoäc laäp. Hai tín hieäu naøy ñöôïc khai baùo trong hai vuøng khaùc nhau vaø chæ coù hieäu löïc cho vuøng ñoù.
Moät tröôøng hôïp khaùc loàng vaøo nhau nhö sau:
qbus: tw32;
qbus: tw32;
BLK1: BLOCK SIGNAL BEGIN -- blk2 stataments
BLK2: BLOCK SIGNAL BEGIN END BLOCK BLK2;
-- blk1 stataments
END BLOCK BLK1;
Trong ví duï naøy, tín hieäu qbus ñöôïc khai baùo trong 2 khoái. Caáu truùc loàng vaøo nhau trong moâ
hình naøy laø moät khoái coù chöùa moät khoái khaùc.
Khoái BLK2 truy xuaát 2 tín hieäu ñöôïc goïi laø qbus: tín hieäu qbus thöù nhaát khai baùo trong BLK2 vaø tín hieäu qbus thöù 2 khai baùo trong BLK1. Khoái BLK1 laø cha cuûa khoái BLK2. Tuy nhieân, khoái BLK2 xem tín hieäu qbus naèm trong chính noù, nhöng tín hieäu qbus cuûa khoái BLK1 seõ bò ghi ñeø bôûi khai baùo cuøng teân cuûa tín hieäu khoái BLK2.
Tín hieäu qbus töø BLK1 coù theå ñöôïc nhìn thaáy beân trong khoái BLK2, neáu teân cuûa tín hieäu qbus ñöôïc boå sung theâm baèng teân cuûa khoái. Cuï theå cho ví duï ôû treân, ñeå truy xuaát tín hieäu qbus töø khoái BLK1 thì duøng BLK1.qbus.
Nhö ñaõ ñeà caäp ôû treân, caùc khoái chöùa caùc vuøng cuûa moâ hình beân trong noù. Nhöng caùc khoái laø duy nhaát bôûi vì moät khoái coù theå chöùa caùc port vaø caùc generic. Ñieàu naøy cho pheùp ngöôøi thieát keá aùnh xaï laïi caùc tín hieäu vaø caùc generic beân ngoaøi ñeán caùc tín hieäu vaø generic naèm beân trong khoái. Nhöng taïi sao ngöôøi thieát keá muoán laøm ñieàu naøy.
Dung löôïng cuûa caùc port vaø caùc generic trong moät khoái cho pheùp ngöôøi thieát keá duøng laïi caùc
khoái ñaõ vieát cho muïc ñích khaùc trong thieát keá môùi.
Giaû söû ta muoán caûi tieán thieát keá CPU vaø caàn môû roäng theâm chöùc naêng cho khoái ALU, vaø ta giaû söû raèng moät ngöôøi thieát keá khaùc coù khoái ALU môùi coù theå thöïc hieän ñöôïc caùc chöùc naêng maø ta
73
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
caàn thì vaán ñeà chæ coøn laø hieäu chænh laïi teân cuûa caùc port vaø caùc generic cho töông thích vôùi khoái môùi laø xong. Phaûi aùnh xaï caùc teân cuûa tín hieäu vaø caùc thoâng soá generic trong thieát keá ñang caûi tieán vôùi caùc port vaø caùc generic ñaõ xaây döïng cuûa khoái ALU môùi.
ARRAY ( 31 downto 0 ) OF std_logic; IS IS math tw32
math; WORK.math.ALL;
IEEE; IEEE.std_logic_1164.ALL;
Ví duï 2-10: minh hoaï cho söï caûi tieán: package TYPE FUNCTIOB tw_add(a,b; tw32) RETURN tw32; FUNCTIOB tw_sub(a,b; tw32) RETURN tw32; END USE LIBRARY USE ENTITY PORT
IN OUT IN INOUT STD_LOGIC; tw32; INTEGER; tw32);
cpu IS (clk, interrupt: addr: cont : data: cpu;
cpu_blk OF cpu IS
ibus, dbus: tw32;
OUT IN tw32; tw32; INTEGER);
qbus: tw32;
END ARCHITECTURE SIGNAL BEGIN ALU: BLOCK PORT (abus, bbus: IN D_out: ctbus: PORT MAP (abus => ibus, bbus => dbus, d_out => data, ctbus => cont); SIGNAL tw_add (abus, bbus) WHEN ctbus = 0 ELSE tw_add (abus, bbus) WHEN ctbus = 1 ELSE abus; D_out <=
BEGIN END BLOCK ALU;
END cpu_blk;
74
Kyõ thuaät PLD vaø ASIC
Veà cô baûn moâ hình naøy gioáng nhö moâ hình ñaõ trình baøy ngoaïi tröø port vaø caùc phaùt bieåu aùnh xaï port trong phaàn khai baùo khoái ALU. Phaùt bieåu port khai baùo soá löôïng ñöôïc duøng cho khoái, höôùng cuûa port vaø loaïi döõ lieäu cuûa port. Phaùt bieåu aùnh xaï port seõ aùnh xaï port môùi vôùi caùc tín hieäu hoaëc caùc port toàn taïi beân ngoaøi khoái. Port abus ñöôïc aùnh xaï cho tín hieäu cuïc boä ibus cuûa kieán truùc CPU_BLK, port bbus ñöôïc aùnh xaï cho dbus. Caùc port d_out vaø ctbus ñöôïc aùnh xaï cho caùc port beân ngoaøi cuûa thöïc theå.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
AÙnh xaï coù nghóa laø keát noái giöõa port vaø tín hieäu beân ngoaøi chaúng haïn nhö khi coù moät söï thay ñoåi giaù trò treân moät tín hieäu noái ñeán 1 port thì port seõ thay ñoåi sang giaù trò môùi. Neáu söï thay ñoåi xaûy ra trong tín hieäu ibus thì giaù trò môùi cuûa ibus ñöôïc truyeàn vaøo khoái ALU vaø port abus seõ coù giaù trò môùi. Töông töï cho taát caû caùc port.
Caùc khoái coù baûo veä
Caùc phaùt bieåu khoái coù khoái haønh vi loàng vaøo beân trong ñöôïc xem nhö nhöõng khoái coù baûo veä. Moät khoái coù baûo veä chöùa moät bieåu thöùc baûo veä – coù theå cho pheùp vaø khoâng cho pheùp caùc driver beân trong khoái.
Bieåu thöùc baûo veä laø bieåu thöùc ñaïi soá boolean: neáu baèng true thì caùc driver beân trong khoái
ñöôïc pheùp vaø neáu baèng false thì caùc driver bò caám.
Chuùng ta seõ khaûo saùt ví duï 2-11:
IEEE; IEEE.std_logic_1164.ALL;
Ví duï 2-11: coù khoái baûo veä LIBRARY USE ENTITY PORT
IN OUT STD_LOGIC; STD_LOGIC);
latch IS (d, clk: q, qb: latch;
latch_guard OF latch IS
d
q qb AFTER 5 ns; <= GUARDED <= GUARDED NOT (d) AFTER 7 ns;
END ARCHITECTURE BEGIN G1: BLOCK (clk = ‘1’) BEGIN END BLOCK G1; latch_guard; END
Moâ hình naøy minh hoïa caùch thöùc moâ hình maïch choát coù theå ñöôïc vieát duøng khoái coù baûo veä. Thöïc theå khai baùo 4 port caàn thieát cho maïch choát vaø chæ coù moät phaùt bieåu trong kieán truùc. Phaùt bieåu chính laø phaùt bieåu khoái coù baûo veä.
Phaùt bieåu khoái coù baûo veä gioáng nhö phaùt bieåu khoái bình thöôøng, ngoaïi tröø bieåu thöùc baûo veä naèm sau töø khoaù BLOCK. Bieåu thöùc baûo veä trong veä trong ví duï naøy laø (clk=’1’). Ñaây laø bieåu thöùc luaän lyù vaø traû veà keát quaû laø true khi giaù trò cuûa clk baèng ‘1’ vaø seõ coù giaù trò laø false khi clk coù giaù trò khaùc.
Khi bieåu thöùc baûo veä laø true thì taát caû driver cuûa caùc phaùt bieåu gaùn tín hieäu baûo veä ñöôïc pheùp hoaëc ñöôïc môû. Khi bieåu thöùc baûo veä laø false thì taát caû caùc driver cuûa caùc phaùt bieåu gaùn tín hieäu baûo veä bò caám hoaëc bò taét.
Coù 2 phaùt bieåu gaùn tín hieäu baûo veä trong moâ hình: phaùt bieåu thöù nhaát laø gaùn giaù trò q vaø caâu leänh gaùn coøn laïi laø gaùn giaù trò qb. Phaùt bieåu gaùn tín hieäu coù baûo veä ñöôïc nhaän ra baèng töø khoaù GUARDED naèm giöõa “<=” vaø thaønh phaàn cuûa bieåu thöùc.
75
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Khi port clk cuûa thöïc theå coù giaù trò laø ‘1’ thì bieåu thöùc baûo veä coù giaù trò laø true vaø khi giaù trò
cuûa ngoõ vaøo d seõ xuaát hieän ôû ngoõ ra q sau khoaûng thôøi gian treå 7ns.
Khi port clk coù giaù trò laø ‘0’ hoaëc baát kyø giaù trò naøo khaùc hôïp leä cuûa kieåu döõ lieäu thì ngoõ ra q vaø qb chuyeån sang taét vaø giaù trò ngoõ ra cuûa tín hieäu ñöôïc xaùc ñònh bôûi giaù trò ñöôïc gaùn cho moät giaù trò maëc ñònh bôûi haøm phaân giaûi. Khi clk khoâng baèng ‘1’ thì caùc driver ñöôïc xaây döïng cho caùc leänh gaùn tín hieäu q vaø qb trong kieán truùc seõ chuyeån sang taét. Caùc driver khoâng tham gia vaøo giaù trò toång theå cuûa tín hieäu.
Gaùn tín hieäu coù theå ñöôïc baûo veä baèng caùch duøng töø khoaù GUARDED. Tín hieäu môùi ñöôïc khai baùo hoaøn toaøn trong khoái khi khoái coù bieåu thöùc baûo veä. Tín hieäu naøy ñöôïc goïi laø GUARD. Giaù trò cuûa noù laø giaù trò cuûa bieåu thöùc baûo veä. Tín hieäu naøy coù theå ñöôïc duøng ñeå caùc xöû lyù khaùc xaûy ra.
Caùc khoái raát tieän lôïi ñeå chia nhoû thieát keá thaønh caùc khoái nhoû hôn, caùc ñôn vò deã quaûn lyù hôn. Chuùng cho pheùp ngöôøi thieát keá söï meàm deûo ñeå xaây döïng nhöõng thieát keá lôùn töø nhöõng khoái nhoû hôn vaø cung caáp phöông phaùp thuaän tieän cho ñieàu khieån caùc driver ñoái vôùi tín hieäu.
6. TOÙM TAÉT
• Caùch gaùn tín hieäu laø daïng cô baûn nhaát cuûa moâ hình haønh vi.
• Phaùt bieåu gaùn tín hieäu coù theå ñöôïc löïa choïn tuyø vaøo ñieàu kieän.
• Phaùt bieåu gaùn tín hieäu coù theå chöùa thôøi gian treå.
• VHDL chöùa trì hoaõn treå quaùn tính vaø trì hoaõn truyeàn.
• Caùc ñieåm thôøi gian moâ phoûng delta duøng ñeå caùc söï kieän hoaït ñoäng ñuùng thôøi gian.
• Caùc driver cho moät tín hieäu ñöôïc xaây döïng bôûi caùc phaùt bieåu gaùn tín hieäu.
• Generic ñöôïc duøng ñeå truyeàn döõ lieäu cho thöïc theå.
• Caùc phaùt bieåu khoái cho pheùp xaây döïng nhoùm trong cuøng moät thöïc theå.
• Caùc phaùt bieåu khoái baûo veä cho pheùp khaû naêng taét caùc driver trong moät khoái.
V. XÖÛ LYÙ TUAÀN TÖÏ
ÔÛ phaàn tröôùc chuùng ta ñaõ khaûo saùt moâ hình haønh vi duøng caùc phaùt bieåu ñoàng thôøi. Chuùng ta
ñaõ thaûo luaän caùc phaùt bieåu gaùn ñoàng thôøi cuõng nhö caùc phaùt bieåu khoái vaø theå hieän thaønh phaàn.
Trong phaàn naøy chuùng ta taäp trung cho phaùt bieåu tuaàn töï. Caùc phaùt bieåu tuaàn töï laø caùc phaùt
bieåu thöïc hieän noái tieáp nhau.
1. PHAÙT BIEÅU
Trong moät kieán truùc cuûa moät thöïc theå, taát caû caùc phaùt bieåu laø ñoàng thôøi. Vaäy thì caùc phaùt bieåu
tuaàn töï toàn taïi ôû ñaâu trong VHDL ?
Coù moät phaùt bieåu ñöôïc goïi laø phaùt bieåu quaù trình – chæ chöùa caùc phaùt bieåu tuaàn töï. Phaùt bieåu quaù trình cuõng chính laø phaùt bieåu ñoàng thôøi. Phaùt bieåu quaù trình coù theå toàn taïi trong kieán truùc vaø nhöõng vuøng xaùc ñònh trong kieán truùc – nôi chöùa caùc leänh tuaàn töï.
76
Kyõ thuaät PLD vaø ASIC
Phaùt bieåu quaù trình coù phaàn khai baùo vaø phaàn phaùt bieåu. Trong phaàn khai baùo thì caùc kieåu, caùc bieán, caùc haèng soá, caùc chöông trình con, … , coù theå ñöôïc khai baùo. Phaàn phaùt bieåu chæ chöùa caùc phaùt bieåu tuaàn töï. Caùc phaùt bieåu tuaàn töï chöùa caùc phaùt bieåu CASE, phaùt bieåu IF THEN ELSE, phaùt bieåu LOOP, …
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com a. Danh saùch nhaïy
Phaùt bieåu quaù trình coù theå coù moät danh saùch nhaïy roõ raøng. Danh saùch naøy ñònh nghóa caùc tín hieäu maø chuùng laøm cho caùc phaùt bieåu beân trong phaùt bieåu quaù trình thöïc hieän khi coù moät hoaëc nhieàu phaàn töû trong danh saùch thay ñoåi giaù trò. Danh saùch nhaïy laø danh saùch cuûa caùc tín hieäu maø chuùng seõ laøm cho quaù trình thöïc hieän.
b. Ví duï veà quaù trình
Chuùng ta haõy quan saùt ví duï 2-12 cuûa phaùt bieåu quaù trình trong kieán truùc
IEEE; IEEE.std_logic_1164.ALL;
Ví duï 2-12: LIBRARY USE ENTITY PORT
IS STD_LOGIC; IN OUT STD_LOGIC);
nand2 (a, b: c: nand2;
NOT (a AND b);
6 ns; 5 ns;
c <= temp AFTER c <= temp AFTER 6 ns;
temp := IF (temp = ‘1’ ) THEN ELSIF (temp = ‘0’ ) THEN ELSE c <= temp AFTER END IF;
END ARCHITECTURE nand2 OF nand2 IS BEGIN END PROCESS (a,b) VARIABLE temp : STD_LOGIC; BEGIN END PROCESS; and2;
Trong ví duï naøy trình baøy caùch vieát moâ hình cho moät coång NAND ñôn giaûn coù 2 ngoõ vaøo
duøng phaùt bieåu tuaàn töï.
Phaùt bieåu USE khai baùo goùi VHDL ñeå cung caáp nhöõng thoâng tin caàn thieát cho pheùp xaây döïng moâ hình cho coång NAND. Phaùt bieåu USE ñöôïc duøng ñeå cho moâ hình coù theå ñöôïc moâ phoûng vôùi trình moâ phoûng VHDL maø khoâng caàn theâm böôùc hieäu chænh naøo.
Thöïc theå khai baùo 3 port cho coång nand2. Port a vaø port b laø ngoõ vaøo vaø port c laø ngoõ ra. Teân
cuûa kieán truùc cuøng teân vôùi thöïc theå.
Kieán truùc chæ chöùa moät phaùt bieåu, moät phaùt bieåu quaù trình ñoàng thôøi.
Phaàn khai baùo quaù trình baét ñaàu taïi töø khoaù PROCESS vaø keát thuùc taïi töø khoaù BEGIN.
Phaàn phaùt bieåu quaù trình baét ñaàu taïi töø khoaù BEGIN vaø keát thuùc taïi töø khoaù END
PROCESS. Phaàn khai baùo quaù trình coù hai phaùt bieåu tuaàn töï: moät phaùt bieåu gaùn bieán:
temp := NOT (a AND b);
77
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Vaø moät phaùt bieåu IF THEN ELSE
6 ns; 5 ns;
c <= temp AFTER c <= temp AFTER 6 ns;
(temp = ‘1’ ) THEN IF ELSIF (temp = ‘0’ ) THEN ELSE c <= temp AFTER END IF;
Quaù trình chöùa danh saùch nhaïy roõ raøng vôùi 2 tín hieäu chöùa beân trong:
PROCESS (a,b)
Quaù trình ñang thöïc hieän (nhaïy) vôùi 2 tín hieäu a vaø b. Trong ví duï naøy, a vaø b laø 2 port ngoõ vaøo cuûa moâ hình. Caùc port ngoõ vaøo xaây döïng caùc tín hieäu coù theå ñöôïc duøng nhö caùc ngoõ vaøo, caùc port ngoõ ra xaây döïng caùc tín hieäu coù theå ñöôïc duøng nhö caùc ngoõ ra, caùc port inout xaây döïng caùc tín hieäu coù theå ñöôïc duøng cho caû 2 vaøo – ra.
Khi port a hoaëc b thay ñoåi giaù trò thì phaùt bieåu beân trong quaù trình ñöôïc thöïc hieän. Moãi phaùt bieåu ñöôïc thöïc hieän theo thöù töï noái tieáp baét ñaàu vôùi phaùt bieåu treân cuøng cuûa phaùt bieåu quaù trình vaø thöïc hieän töø treân xuoáng döôùi. Sau khi taát caû caùc phaùt bieåu ñaõ ñöôïc thöïc hieän moät laàn, quaù trình ñôïi cho ñeán khi coù söï thay ñoåi tín hieäu hoaëc port naèm trong danh saùch nhaïy.
2. GAÙN BIEÁN KHAÙC VÔÙI GAÙN TÍN HIEÄU
Phaùt bieåu thöù nhaát trong phaùt bieåu quaù trình laø gaùn bieán – gaùn giaù trò cho bieán temp. ÔÛ phaàn tröôùc chuùng ta ñaõ thaûo luaän veà caùch caùc tín hieäu nhaän giaù trò sau thôøi gian trì hoaõn hoaëc sau thôøi gian trì hoaõn delta. Gaùn bieán xaûy ra ngay laäp töùc khi phaùt bieåu ñöôïc thöïc hieän. Ví duï: trong moâ hình naøy, phaùt bieåu thöù nhaát phaûi gaùn giaù trò cho bieán temp ñeå phaùt bieåu thöù hai söû duïng. Gaùn bieán khoâng coù thôøi gian trì hoaõn, xaûy ra ngay laäp töùc.
Chuùng ta seõ khaûo saùt hai ví duï minh hoïa ñeå phaân bieät caùc leänh gaùn tín hieäu vaø gaùn bieán. Caû hai ví duï ñeàu laø moâ hình cuûa maïch ña hôïp 4 ñöôøng sang 1 ñöôøng. Kí hieäu vaø baûng traïng thaùi nhö hình 2-9. Moät trong 4 ngoõ vaøo ñöôïc truyeàn ñeán ngoõ ra tuyø thuoäc vaøo giaù trò cuûa A vaø B.
B A Q
0 0 I0
0 1 I1
1 0 I2
1 1 I3
Hình 2-9. Kí hieäu maïch ña hôïp vaø baûng traïng thaùi.
Moâ hình thöù nhaát laø moâ hình khoâng ñuùng vaø moâ hình thöù hai laø moâ hình ñuùng.
78
Kyõ thuaät PLD vaø ASIC
a. Ví duï moâ hình maïch ña hôïp khoâng ñuùng
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Moâ hình khoâng ñuùng cuûa boä ña hôïp coù thieáu soùt laøm cho moâ hình hoaït ñoäng khoâng ñuùng. Moâ
hình naøy ñöôïc trình baøy nhö sau:
IEEE; IEEE.std_logic_1164.ALL;
IN STD_LOGIC; OUT STD_LOGIC);
LIBRARY USE ENTITY PORT END mux IS (i0, i1, i2, i3, a, b: q: mux;
muxval: INTEGER;
(a = ‘1’ ) THEN muxval<= muxval + 1;
(b = ‘1’ ) THEN muxval<= muxval + 2;
PROCESS (i0, i1, i2, i3, a, b) BEGIN muxval <= 0; IF END IF; IF END IF;
ARCHITECTURE wrong OF mux IS SIGNAL BEGIN CASE muxval IS
WHEN 0 => q <= I0 AFTER 10 ns; WHEN 1 => q <= I1 AFTER 10 ns; WHEN 2 => q <= I2 AFTER 10 ns; WHEN 3 => q <= I3 AFTER 10 ns; WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END wrong;
Khi coù 1 trong caùc tín hieäu ngoõ vaøo naèm trong danh saùch nhaïy thay ñoåi giaù trò thì caùc phaùt
bieåu tuaàn töï ñöôïc thöïc hieän.
Phaùt bieåu quaù trình trong ví duï naøy chöùa 4 phaùt bieåu tuaàn töï.
Phaùt bieåu thöù nhaát khôûi taïo tín hieäu cuïc boä muxval vôùi giaù trò ‘0’. Caùc phaùt bieåu tuaàn töï con
coäng giaù trò cho tín hieäu tuyø thuoäc vaøo cuûa caùc tín hieäu vaøo a vaø b.
Phaùt bieåu case cuoái cuøng löïa choïn moät ngoõ vaøo ñeå truyeàn ñeán ngoõ ra tuyø thuoäc vaøo giaù trò cuûa tín hieäu muxval. Moâ hình naøy coù moät thieáu soùt nghieâm troïng vôùi phaùt bieåu: muxval <=0; laøm cho giaù trò 0 ñöôïc saép xeáp nhö moät söï kieän ñoái vôùi tín hieäu muxval. Thöïc teá thì giaù trò 0 ñöôïc saép xeáp trong moät söï kieän cho thôøi gian treå delta ñeå moâ phoûng bôûi vì khoâng coù thôøi gian trì hoaõn.
Khi phaùt bieåu thöù 2:
(a = ‘1’ ) THEN muxval <= muxval + 1;
IF END IF;
79
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
ñöôïc thöïc hieän, giaù trò cuûa tín hieäu muxval laø giaù trò ñöôïc truyeàn ôû laàn cuoái cuøng. Giaù trò môùi ñaõ saép xeáp töø phaùt bieåu thöù nhaát chöa ñöôïc truyeàn ñeán. Trong thöïc teá thì khi nhieàu pheùp gaùn cho tín hieäu xaûy ra trong cuøng phaùt bieåu quaù trình thì giaù trò gaùn sau cuøng laø giaù trò ñöôïc truyeàn.
Tín hieäu muxval coù giaù trò voâ nghóa (khoâng xaùc ñònh) khi baét ñaàu quaù trình. Giaù trò cuûa muxval khoâng thay ñoåi cho ñeán khi caùc phaùt bieåu naèm trong quaù trình ñöôïc thöïc hieän xong. Neáu tín hieäu b coù giaù trò laø ‘1’ thì sau ñoù giaù trò voâ nghóa ñöôïc coäng theâm vôùi 2.
Ví duï tieáp theo seõ chaët cheû hôn. Söï khaùc nhau giöõa 2 moâ hình cuûa 2 ví duï laø khai baùo muxval vaø pheùp gaùn cho mulval. Trong moâ hình ví duï tröôùc, muxval laø tín hieäu vaø phaùt bieåu gaùn tín hieäu ñöôïc duøng ñeå gaùn giaù trò cho muxval. Trong moâ hình ví duï naøy thì muxval laø bieán vaø pheùp gaùn bieán ñöôïc duøng ñeå gaùn giaù trò cho muxval.
b. Ví duï moâ hình maïch ña hôïp ñuùng
Trong ví duï naøy thì moâ hình khoâng ñuùng ôû treân ñöôïc vieát laïi ñeå cho thaáy caùch giaûi quyeát vaán
ñeà cuûa moâ hình khoâng ñuùng:
IEEE; IEEE.std_logic_1164.ALL;
IN STD_LOGIC; OUT STD_LOGIC);
LIBRARY USE ENTITY PORT END mux IS (i0, i1, i2, i3, a, b: q: mux;
better OF mux IS
(a = ‘1’ ) THEN muxval := muxval + 1;
(b = ‘1’ ) THEN muxval := muxval + 2;
PROCESS (i0, i1, i2, i3, a, b) VARIABLE muxval : INTEGER; BEGIN muxval := 0; IF END IF; IF END IF;
ARCHITECTURE BEGIN CASE muxval IS
WHEN 0 => q <= I0 AFTER 10 ns; WHEN 1 => q <= I1 AFTER 10 ns; WHEN 2 => q <= I2 AFTER 10 ns; WHEN 3 => q <= I3 AFTER 10 ns; WHEN OTHERS => NULL;
END CASE;
END END PROCESS; better;
80
Kyõ thuaät PLD vaø ASIC
Khi phaùt bieåu thöù nhaát muxval:=0; ñöôïc thöïc hieän thì giaù trò 0 ñöôïc ñaët vaøo cho bieán muxval ngay laëp töùc. Giaù trò khoâng ñöôïc saép xeáp vì muxval trong ví duï naøy laø bieán, khoâng phaûi laø tín hieäu. Caùc bieán töôïng tröng cho oâ nhôù löu tröõ cuïc boä khaùc vôùi tín hieäu töôïng tröng cho keát noái maïch
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
ñieän beân trong. OÂ nhôù löu tröõ cuïc boä ñöôïc caäp nhaät ngay laäp töùc vaø giaù trò môùi coù theå ñöôïc duøng sau ñoù trong moâ hình cho caùc tính toaùn sau ñoù.
Do bieán muxval ñöôïc khôûi taïo giaù trò 0 ngay laäp töùc neân hai phaùt bieåu gaùn trong quaù trình duøng giaù trò 0 nhö giaù trò khôûi taïo vaø coäng vôùi caùc con soá thích hôïp tuyø thuoäc vaøo tuyø thuoäc vaøo giaù trò cuûa tín hieäu a vaø b. Caùc phaùt bieåu gaùn naøy cuõng ñöôïc thöïc hieän ngay laäp töùc vaø do ñoù khi phaùt bieåu case ñöôïc thöïc hieän thì bieán muxval ñaõ chöùa giaù trò ñuùng. Töø giaù trò naøy tín hieäu ngoõ vaøo ñuùng coù theå ñöôïc truyeàn ñeán ngoõ ra.
3. CAÙC PHAÙT BIEÅU TUAÀN TÖÏ
Caùc phaùt bieåu tuaàn töï naèm beân trong phaùt bieåu quaù trình vaø naèm trong caùc chöông trình con.
Trong phaàn naøy chuùng ta seõ khaûo saùt caùc phaùt bieåu tuaàn töï naèm beân trong phaùt bieåu quaù trình.
Caùc phaùt bieåu tuaàn töï seõ ñöôïc trình baøy laø: IF, CASE, LOOP, EXIT, ASSERT, WAIT.
4. PHAÙT BIEÅU IF
Phaùt bieåu IF cho pheùp choïn moät trong caùc caâu leänh ñeå thöïc hieän. Keát quaû traû veà cuûa meänh ñeà ñieàu kieän laø giaù trò kieåu BOOLEAN. Döïa vaøo keát quaû traû veà cuûa meänh ñeà ñieàu kieän ñeå cho pheùp moät leänh coù ñöôïc thöïc thi hay khoâng.
Cuù phaùp cuûa phaùt bieåu IF nhö sau
if condition then sequential statements; [elsif condition then sequential statements;] [else sequential statements;] end if;
(x < 10 ) THEN a:= b; Ví duï 2-13: cho phaùt bieåu IF IF END IF;
Phaùt bieåu ñöôïc baét ñaàu baèng töø khoaù IF. Theo sau töø khoaù IF laø meänh ñeà ñieàu kieän (x < 10). Ñieàu kieän traû veà true khi x nhoû hôn 10, ngöôïc laïi thì coù giaù trò false. Khi ñieàu kieän laø true thì phaùt bieåu giöõa THEN vaø END IF ñöôïc thöïc hieän. Trong ví duï naøy thì leänh phaùt bieåu gaùn (a:=b) ñöôïc thöïc hieän baát kyø luùc naøo x nhoû hôn 10.
(day = sunday ) THEN weekend := true;
Ví duï 2-14: cho phaùt bieåu IF THEN ELSE: IF ELSIF (day = saturday ) THEN weekend := true; ELSE weekday := true; END IF;
Trong ví duï naøy coù hai bieán – weekend vaø weekday – ñöôïc thieát laäp giaù trò tuyø thuoäc vaøo giaù trò cuûa tín hieäu day. Bieán weekend ñöôïc thieát laäp laø true khi day baèng Saturday hoaëc Sunday. Ngöôïc laïi bieán weekday ñöôïc thieát laäp laø true.
Thöïc hieän phaùt bieåu IF baét ñaàu kieåm tra xem bieán day coù baèng vôùi Sunday hay khoâng.
Neáu keát quaû laø true thì phaùt bieåu keá ñöôïc thöïc hieän vaø ñieàu khieån ñöôïc chuyeån tôùi phaùt bieåu
naèm sau töø khoaù END IF.
81
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Ngöôïc laïi ñieàu khieån ñöôïc chuyeån tôùi phaàn phaùt bieåu ELSIF vaø kieåm tra day coù phaûi laø Saturday hay khoâng. Neáu bieán day laø Saturday thì phaùt bieåu keá ñöôïc thöïc hieän vaø ñieàu khieån ñöôïc chuyeån tôùi phaùt bieåu naèm sau töø khoaù END IF.
Cuoái cuøng neáu day khoâng baèng Sunday vaø Saturday thì phaàn phaùt bieåu ELSE ñöôïc thöïc hieän. Phaùt bieåu IF coù theå coù nhieàu phaàn phaùt bieåu ELSIF nhöng chæ coù duy nhaát moät laàn phaùt bieåu ELSE.
5. PHAÙT BIEÅU CASE
Phaùt bieåu CASE ñöôïc söû duïng khi giaù trò cuûa bieåu thöùc duy nhaát coù theå ñöôïc duøng ñeå löïa
choïn moät trong soá hoaït ñoäng. Cuù phaùp cho phaùt bieåu CASE nhö sau:
case expression is when choices => sequential statements; when choices => sequential statements; -- branches are allowed [ when others => sequential statements ]; end case;
Keát quaû bieåu thöùc laø soá nguyeân, hoaëc kieåu lieät keâ cuûa maûng moät chieàu chaúng haïn nhö bit_vector. Phaùt bieåu case ñaùnh giaù bieåu thöùc vaø so saùnh giaù trò cuûa bieåu thöùc vôùi moãi giaù trò cuûa caùc löïa choïn. Meänh ñeà when töông öùng vôùi löïa choïn truøng hôïp seõ ñöôïc thöïc hieän. Caùc nguyeân taéc sau phaûi nhôù:
• Khoâng coù 2 löïa choïn truøng laép (löïa choïn naøy bao phuû löïa choïn kia).
• Neáu phaùt bieåu löïa choïn “when others” khoâng hieän dieän thì taát caû giaù trò coù theå coù cuûa
bieåu thöùc phaûi bao phuû heát bôûi caùc löïa choïn.
Phaùt bieåu CASE chöùa töø khoaù CASE theo sau laø bieåu thöùc vaø töø khoaù IS. Bieåu thöùc coù giaù trò töông thích vôùi CHOICES naèm trong phaùt bieåu WHEN hoaëc töông thích vôùi phaùt bieåu WHEN OTHERS.
Neáu bieåu thöùc töông thích vôùi phaàn CHOICES cuûa caùc phaùt bieåu WHEN choices => thì sequence_of_statement theo sau seõ ñöôïc thöïc hieän. Sau khi caùc phaùt bieåu naøy ñöôïc thöïc hieän xong thì ñieàu khieån chuyeån tôùi phaùt bieåu naèm sau töø khoaù END CASE.
Ví duï 2-15: phaùt bieåu case : CASE instruction IS
=> accum <= data; => data_out <= accum; => process_IO (addr) ;
WHEN load_accum WHEN store_accum WHEN load|store WHEN OTHERS => process_error (instruction);
END CASE;
Phaùt bieåu CASE thöïc hieän phaùt bieåu töông öùng tuyø thuoäc vaøo giaù trò cuûa bieåu thöùc ngoõ vaøo. Neáu giaù trò cuûa bieåu thöùc laø moät giaù trò naèm trong caùc giaù trò ñöôïc lieät keâ trong caùc meänh ñeà WHEN thì sau ñoù phaùt bieåu theo sau meänh ñeà WHEN ñöôïc thöïc hieän. Ngöôïc laïi thì phaùt bieåu theo sau meänh ñeà OTHERS ñöôïc thöïc hieän.
Trong ví duï naøy khi giaù trò cuûa bieåu thöùc laø load_accum thì phaùt bieåu gaùn ñaàu tieân ñöôïc thöïc
82
Kyõ thuaät PLD vaø ASIC
hieän. Neáu giaù trò cuûa bieåu thöùc laø load hoaëc store thì thuû tuïc process_IO ñöôïc goïi.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Neáu giaù trò cuûa bieåu thöùc naèm ngoaøi daõy löïa choïn ñaõ cho thì sau ñoù meänh ñeà OTHERS töông thích vôùi bieåu thöùc vaø phaùt bieåu theo sau meänh ñeà OTHERS ñöôïc thöïc hieän. Seõ phaùt sinh loãi neáu khoâng coù meänh ñeà OTHERS vaø caùc löïa choïn ñaõ cho khoâng bao truøm giaù trò coù theå coù cuûa bieåu thöùc.
Ví duï 2-16 vôùi bieåu thöùc coù keát quaû traû veà phöùc taïp hôn. Phaùt bieåu CASE duøng kieåu döõ lieäu
naøy ñeå löïa choïn moät trong caùc phaùt bieåu.
IS ARRAY (0 TO 1) OF BIT;
bit_vector: vectype;
Ví duï 2-16: TYPE vectype VARIABLE … CASE bit_vector IS
WHEN “00” WHEN “01” WHEN “10” WHEN “11” => RETURN 0; => RETURN 1; => RETURN 2; => RETURN 3;
END CASE;
Ví duï naøy trình baøy moät phöông phaùp chuyeån ñoåi moät maûng bit thaønh moät soá nguyeân.
Khi hai bit cuûa bieán bit_vec coù giaù trò ‘0’ thì löïa choïn “00” töông thích vaø giaù trò traû veà laø 0.
Khi hai bit cuûa bieán bit_vec coù giaù trò ‘1’ thì löïa choïn “11” töông thích vaø giaù trò traû veà laø 3.
Phaùt bieåu CASE khoâng caàn meänh ñeà OTHERS vì taát caû caùc giaù trò cuûa bieán bit_vec ñöôïc lieät
keâ bôûi caùc löïa choïn.
6. PHAÙT BIEÅU LOOP
Phaùt bieåu LOOP ñöôïc söû duïng ñeå laäp laïi chuoãi caùc leänh tuaàn töï. Cuù phaùp cho phaùt bieåu
LOOP nhö sau:
[ loop_label :]iteration_scheme loop sequential statements [next [label] [when condition]; [exit [label] [when condition]; end loop [loop_label];
Phaùt bieåu next vaø exit laø caùc phaùt bieåu tuaàn töï chæ coù theå ñöôïc söû duïng beân trong voøng laëp.
• Phaùt bieåu next chaám döùt phaàn coøn laïi cuûa voøng laëp hieän taïi vaø sau ñoù seõ laëp laïi voøng
laëp keá.
• Phaùt bieåu exit boû qua phaàn coøn laïi cuûa phaùt bieåu, chaám döùt hoaøn toaøn voøng laëp vaø
tieáp tuïc vôùi phaùt bieåu keá sau voøng laëp vò thoaùt.
Coù 3 loaïi voøng laëp:
• Voøng laëp loop cô baûn
• Voøng laëp while … loop
• Voøng laëp for … loop
a. Phaùt bieåu voøng laëp LOOP cô baûn
83
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Voøng laëp thöïc hieän lieân tuïc cho ñeán khi baét gaëp phaùt bieåu exit hoaëc next. Cuù phaùp nhö sau:
[ loop_label :] loop sequential statements [next [label] [when condition]; [exit [label] [when condition]; end loop [ loop_label];
Voøng laëp cô baûn phaûi coù ít nhaát moät phaùt bieåu wait. Ví duï moät boä ñeám 5 bit ñeám töø 0 ñeán 31. Khi boä ñeám ñaït giaù trò 31 thì boä ñeám baét ñaàu traøn veà 0. Phaùt bieåu wait coù chöùa trong chöông trình ñeå cho voøng laëp seõ thöïc hieän moãi khi xung clock thay ñoåi töø ‘0’ sang ‘1’.
STD_LOGIC;
Ví duï 2-17: söû duïng voøng laëp cô baûn cho maïch ñeám töø 0 ñeán 31. IS ENTITY IN PORT OUT INTEGER); END count31 (CLK: Count: count31;
behav_count OF count31 IS
PROCESS
ARCHITECTURE BEGIN P_COUNT: VARIABLE intern_value : INTEGER :=0; BEGIN Count <= intern_value; LOOP
WAIT UNTIL CLK = ‘1’; intern_value := (intern_value + 1) mod 32; Count <= intern_value; END LOOP;
END END PROCESS P_COUNT; behav_count;
b. Phaùt bieåu voøng laëp While – LOOP
[ loop_label :] while condition loop
Voøng laëp while … loop ñaùnh giaù ñieàu kieän laëp daïng Boolean. Khi ñieàu kieän laø TRUE, voøng laëp thöïc hieän, ngöôïc laïi voøng laëp thöïc hieän lieân tuïc cho ñeán khi baét gaëp phaùt bieåu exit hoaëc next. Cuù phaùp nhö sau:
sequential statements [next [label] [when condition]; [exit [label] [when condition]; end loop[ loop_label ];
Ñieàu kieän laëp ñöôïc kieåm tra tröôùc moãi laàn laëp keå caû laàn laëp ñaàu tieân. Neáu ñieàu kieän laø false
thì voøng laëp chaám döùt.
c. Phaùt bieåu voøng laëp FOR – LOOP:
[ loop_label :] for identifier in range loop
Voøng laëp for loop duøng giaûn ñoà laëp soá nguyeân ñeå xaùc ñònh soá laàn laëp. Cuù phaùp nhö sau:
sequential statements [next [label] [when condition]; [exit [label] [when condition];
84
Kyõ thuaät PLD vaø ASIC
SPKT – Nguyeãn Ñình Phuù
Chöông 2. Ngoân ngöõ laäp trình VHDL end loop[ loop_label ];
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Chæ soá laëp ñöôïc khai baùo töï ñoäng bôûi chính voøng laëp do ñoù khoâng caàn khai baùo rieâng leû. Giaù trò cuûa chæ soá chæ coù theå ñöôïc ñoïc beân trong voøng laëp vaø khoâng coù hieäu löïc ôû ngoaøi voøng laëp. Khoâng theå gaùn hoaëc thay ñoåi giaù trò cuûa chæ soá laëp. Chæ soá laëp naøy ñoái ngöôïc vôùi voøng laëp while – loop khi ñieàu kieän cuûa voøng laëp while-loop coù chöùa bieán vaø ñöôïc hieäu chænh beân trong voøng laëp.
Daõy soá cuûa voøng laëp phaûi laø moät daõy soá nguyeân coù theå tính toaùn ñöôïc ôû moät trong caùc daïng
o
sau, trong moãi daïng thì integer_expression phaûi laø moät soá nguyeân:
o
integer_expression to integer_expression integer_expression downto integer_expression
d. Phaùt bieåu Next vaø Exit:
Phaùt bieåu next boû qua vieäc thöïc hieän ñeå ñeán thöïc hieän voøng laëp keá cuûa phaùt bieåu voøng laëp.
Cuù phaùp nhö sau: next [label] [when condition];
Töø khoaù when laø tuyø choïn vaø seõ ñöôïc thöïc hieän phaùt bieåu keá khi ñieàu kieän ñaùnh giaù laø true.
Phaùt bieåu exit boû qua phaàn coøn laïi cuûa phaùt bieåu, chaám döùt hoaøn toaøn voøng laëp vaø tieáp tuïc
vôùi phaùt bieåu keá sau khi voøng laëp bò thoaùt. Cuù phaùp nhö sau: exit [label] [when condition];
Töø khoaù when laø tuyø choïn vaø seõ ñöôïc thöïc hieän phaùt bieåu keá khi ñieàu kieän ñaùnh giaù laø true.
Chuù yù: söï khaùc nhau giöõa phaùt bieåu next vaø exit laø phaùt bieåu exit chaám döùt voøng laëp.
Ví duï 2-18: Minh hoaï cho voøng laëp next PROCESS (A, B) CONSTANT max_limit: INTEGER :=255; BEGIN
(done(i) = true ) THEN next;
IF ELSE done(i) = true; END IF; q(i) <= a(i) and b(i);
FOR i IN 0 TO max_limit LOOP END LOOP; PROCESS; END
Phaùt bieåu quaù trình chöùa moät phaùt bieåu voøng laëp LOOP. Phaùt bieåu LOOP laø and caùc bit cuûa maûng a vaø maûng b vaø ñaët keát quaû vaøo maûng q. Moâ taû haønh vi tieáp tuïc cho ñeán khi naøo côø trong maûng done laø false.
Neáu giaù trò cuûa côø done laø true vôùi chæ soá i thì phaùt bieåu next ñöôïc thöïc hieän. Vieäc thöïc hieän
tieáp tuïc vôùi phaùt bieåu ñaàu tieân cuûa voøng laëp vaø chæ soá i baây giôø coù giaù trò laø i + 1.
Neáu giaù trò cuûa côø done laø false thì phaùt bieåu next khoâng ñöôïc thöïc hieän vaø vieäc thöïc hieän
tieáp tuïc vôùi phaùt bieåu chöùa trong meänh ñeà ELSE cho phaùt bieåu IF.
85
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Phaùt bieåu next cho pheùp ngöôøi thieát keá khaû naêng ngöøng vieäc thöïc hieän caùc leänh cuûa voøng laëp vaø tieáp tuïc vôùi voøng laëp tieáp theo. Coù moät soá tröôøng hôïp khaùc thì caàn thoaùt khoûi voøng laëp thì khaû naêng naøy ñöôïc thöïc hieän bôûi phaùt bieåu EXIT.
Trong thôøi gian thöïc thi moät phaùt bieåu LOOP, coù theå ta caàn nhaûy ra khoûi voøng laëp. Ñieàu naøy coù theå xaûy ra do moät loãi quan troïng xuaát hieän trong thôøi gian thöïc thi moâ hình hoaëc toaøn boä vieäc xöû lyù keát thuùc sôùm.
Phaùt bieåu EXIT cuûa VHDL cho pheùp ngöôøi thieát keá thoaùt hoaëc nhaûy ra khoûi moät phaùt bieåu LOOP hieän ñang thöïc thi. Phaùt bieåu EXIT laøm cho vieäc thöïc thi döøng ôû vò trí cuûa phaùt bieåu naøy. Vieäc thöïc thi seõ tieáp tuïc ôû phaùt bieåu theo sau phaùt bieåu LOOP.
int_a: INTEGER;
Ví duï 2-19: Minh hoaï cho voøng laëp exit PROCESS (A) CONSTANT BEGIN
(int_a <0 ) THEN exit;
q(i) <= 3.14 / REAL (int_a* i); -- signal assign
IF ELSE (int_a := int_a - 1); END IF;
Int_a := a; FOR i IN 0 TO max_limit LOOP END LOOP; y <= q; PROCESS; END
Beân trong phaùt bieåu cuûa quaù trình naøy, giaù trò cuûa int_a luoân luoân ñöôïc giaû ñònh laø giaù trò döông lôùn hôn 0. Neáu giaù trò cuûa int_a aâm hoaëc baèng 0 thì sinh ra loãi vaø vieäc tính toaùn seõ khoâng ñöôïc hoaøn taát. Neáu giaù trò cuûa int_a nhoû hôn hoaëc baèng 0 thì phaùt bieåu IF laø ñuùng vaø phaùt bieåu EXIT seõ ñöôïc thöïc thi. Voøng laëp keát thuùc ngay laäp töùc vaø phaùt bieåu keá tieáp ñöôïc thöïc thi chính laø phaùt bieåu gaùn cho y sau phaùt bieåu LOOP.
Phaùt bieåu EXIT coù 3 loaïi cô baûn. Loaïi thöù nhaát yeâu caàu phaùt bieåu EXIT khoâng coù nhaõn voøng laëp hoaëc WHEN condition. Neáu caùc ñieàu kieän naøy ñuùng, phaùt bieåu EXIT seõ hoaït ñoäng nhö sau: phaùt bieåu EXIT chæ thoaùt khoûi phaùt bieåu LOOP hieän taïi. Neáu phaùt bieåu EXIT ôû beân trong moät phaùt bieåu LOOP vaø phaùt bieåu LOOP naøy ñöôïc loàng trong moät phaùt bieåu LOOP khaùc, phaùt bieåu EXIT chæ thoaùt khoûi phaùt bieåu LOOP beân trong. Vieäc thöïc thi vaãn duy trì trong phaùt bieåu LOOP beân ngoaøi. Phaùt bieåu EXIT chæ thoaùt khoûi phaùt bieåu LOOP gaàn nhaát.
-- exit the second loop only
…. Exit second_loop; …. Exit first_loop; -- exit the first loop and second loop
86
Kyõ thuaät PLD vaø ASIC
Ví duï 2-20: Minh hoaï PROCESS (a) BEGIN First_loop: FOR i IN 0 TO 100 LOOP second_loop: FOR j IN 0 TO 10 LOOP END LOOP;
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com END LOOP;
END PROCESS;
Neáu phaùt bieåu coù theâm ñieàu kieän WHEN thì phaùt bieåu EXIT chæ thoaùt khoûi voøng laëp khi ñieàu kieän laø TRUE. Phaùt bieåu keá ñöôïc thöïc hieän tuyø thuoäc vaøo ñieàu kieän cuûa phaùt bieåu EXIT coù nhaõn chæ ñònh hay khoâng.
Neáu nhaõn cuûa voøng laëp ñöôïc chæ ñònh thì phaùt bieåu keá ñöôïc thöïc hieän thì chöùa trong phaùt bieåu
LOOP chæ ñònh bôûi nhaõn voøng laëp.
Neáu khoâng coù nhaõn thì phaùt bieåu keá ñöôïc thöïc hieän thì naèm ôû voøng laëp keá beân ngoaøi.
Ví duï 2-21: cho phaùt bieåu EXIT vôùi ñieàu kieän WHEN Exit first_loop WHEN (i < 10);
Phaùt bieåu naøy keát thuùc vieäc thöïc hieän cuûa voøng laëp coù nhaõn laø first_loop khi bieåu thöùc i <
10.
Phaùt bieåu EXIT cung caáp moät phöông phaùp deã daøng vaø nhanh choùng ñeå thoaùt khoûi phaùt bieåu
LOOP khi toaøn boä coâng vieäc xöû lyù keát thuùc hoaëc moät loãi hay caûnh baùo xaûy ra.
7. PHAÙT BIEÅU ASSERT
Phaùt bieåu ASSERT laø phaùt bieåu raát höõu ích ñeå baùo caùo chuoãi vaên baûn ñeán ngöôøi thieát keá. Phaùt bieåu ASSERT kieåm tra giaù trò cuûa moät bieåu thöùc logic xem ñuùng hay sai. Neáu giaù trò laø ñuùng, phaùt bieåu naøy khoâng laøm gì caû. Neáu giaù trò laø sai, phaùt bieåu ASSERT xuaát moät chuoãi daïng vaên baûn ñöôïc chæ ñònh bôûi ngöôøi söû duïng ñeán ngoõ ra chuaån cuûa thieát bò ñaàu cuoái.
Ngöôøi thieát keá cuõng coù theå chæ ra möùc ñoä nghieâm troïng ñeå xuaát chuoãi daïng vaên baûn. Theo trình töï taêng daàn cuûa möùc ñoä nghieâm troïng ta coù 4 möùc: chuù yù, caûnh baùo, loãi vaø thaát baïi. Möùc ñoä nghieâm troïng cung caáp cho ngöôøi thieát keá khaû naêng phaân loaïi thoâng ñieäp thaønh caùc loaïi thích hôïp.
Phaùt bieåu ASSERT ñöôïc söû duïng chuû yeáu ñeå quaûn lyù khi vieát moâ hình, khoâng coù phaàn cöùng
naøo ñöôïc xaây döïng.
Cuù phaùp:
assert_statement ::=
ASSERT condition
[REPORT expression];
Töø khoùa ASSERT ñöôïc theo bôûi moät bieåu thöùc coù giaù trò logic ñöôïc goïi laø moät ñieàu kieän (condition). Ñieàu kieän naøy xaùc ñònh bieåu thöùc daïng vaên baûn ñöôïc pheùp xuaát ra hay khoâng bôûi phaùt bieåu REPORT. Neáu sai, bieåu thöùc daïng vaên baûn ñöôïc xuaát, coøn neáu ñuùng, bieåu thöùc daïng vaên baûn khoâng ñöôïc xuaát.
Chuùng ta khaûo saùt ví duï thöïc teá cho phaùt bieåu ASSERT, ví duï naøy thöïc hieän vieäc kieåm tra thieát laäp döõ lieäu giöõa hai tín hieäu ñieàu khieån flip flop D. Haàu heát caùc flip flop yeâu caàu döõ lieäu ngoõ vaøo din phaûi ôû giaù trò oån ñònh vôùi moät khoaûng thôøi gian xaùc ñònh tröôùc khi coù caïnh xung clock xuaát hieän. Thôøi gian naøy ñöôïc goïi laø thôøi gian thieát laäp vaø ñaûm baûo raèng döõ lieäu vaøo din seõ ñöôïc choát vaøo beân trong flip flop. Ví duï 2-22 veà phaùt bieåu ASSERT taïo ra thoâng baùo loãi cho ngöôøi thieát keá bieát neáu thôøi gian thieát laäp khoâng ñuû hay bò vi phaïm.
Ví duï 2-22: PROCESS (clk, din)
87
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
VARIABLE last_d_change: VARIABLE last_d_value : VARIABLE last_clk_value: TIME :=0 ns; STD_LOGIC :=’X’; STD_LOGIC :=’X’;
BEGIN IF
(last_d_value /= din) last_d_change : = NOW; last_d_value : = din; THEN -- /= is not equal
END IF; IF
(last_clk_value /= clk) last_clk_value: = clk; IF THEN THEN
(clk= ‘1’) ASSERT (NOW – last_d_change >= 20ns) REPORT “setup violation” SEVERITY WARNING;
END IF;
END END IF; PROCESS;
Quaù trình duøng 3 bieán cuïc boä ñeå ghi laïi thôøi gian vaø giaù trò sau cuøng cuûa tín hieäu din cuõng nhö giaù trò cuûa tín hieäu clk. Do löu tröõ giaù trò sau cuøng cuûa clk vaø din neân chuùng ta coù theå xaùc ñònh xem tín hieäu coù thay ñoåi giaù trò hay khoâng.
Baèng caùch ghi laïi thôøi gian sau cuøng maø tín hieäu din thay ñoåi neân chuùng ta coù theå ño ñöôïc thôøi gian hieän taïi so vôùi laàn chuyeån traïng thaùi sau cuøng cuûa din, töø ñoù chuùng ta seõ bieát ñöôïc thôøi gian thieát laäp coù bò vi phaïm hay khoâng.
Böôùc thöù nhaát trong quaù trình laø kieåm tra xem tín hieäu din coù thay ñoåi hay khoâng. Neáu coù thay ñoåi thì thôøi gian cuûa chuyeån ñoåi ñöôïc löu laïi duøng haøm NOW. Haøm naøy traû veà thôøi gian moâ phoûng hieän taïi. Töông töï, giaù trò sau cuøng cuûa din cuõng ñöôïc löu tröõ cho vieäc kieåm tra sau naøy.
Böôùc tieáp theo laø kieåm tra xem tín hieäu clk coù chuyeån traïng thaùi hay khoâng. Neáu bieán last_clk_value khoâng baèng vôùi giaù trò hieän taïi cuûa clk thì seõ coù söï chuyeån traïng thaùi xaûy ra. Neáu tín hieäu clk laø ‘1’ thì xem nhö ñaõ coù caïnh leân cuûa xung clk.
Khi coù caïnh leân cuûa xung clk thì chuùng ta caàn kieåm tra xem thôøi gian thieát laäp coù bò vi phaïm
hay khoâng. Neáu laàn chuyeån sau cuøng cuûa tín hieäu d nhoû hôn 20 ns thì bieåu thöùc:
NOW – last_d_change
Traû veà giaù trò nhoû hôn 20ns. Phaùt bieåu ASSERT bò kích vaø gôûi ra thoâng tin thôøi gian thieát laäp
bò vi phaïm caûnh baùo ñeán ngöôøi thieát keá.
Neáu laàn chuyeån traïng thaùi sau cuøng treân tín hieäu d xaûy ra daøi hôn 20 ns thì bieåu thöùc treân seõ
traû veà keát quaû vôùi giaù trò lôùn hôn 20 ns vaø phaùt bieåu ASSERT khoâng bò kích.
8. PHAÙT BIEÅU WAIT
Phaùt bieåu WAIT cung caáp cho ngöôøi thieát keá khaû naêng döøng taïm thôøi vieäc thöïc thi tuaàn töï cuûa moät quaù trình hoaëc moät chöông trình con. Caùc ñieàu kieän ñeå tieáp tuïc vieäc thöïc thi quaù trình hoaëc chöông trình con taïm döøng coù theå ñöôïc thöïc hieän baèng moät trong 3 caùch nhö sau:
• WAIT ON (chôø) caùc thay ñoåi tín hieäu.
88
Kyõ thuaät PLD vaø ASIC
• WAIT UNTIL (chôø cho ñeán khi) moät bieåu thöùc laø ñuùng.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com • WAIT FOR (chôø trong) moät khoaûng thôøi gian cuï theå.
Caùc phaùt bieåu WAIT coù theå ñöôïc söû duïng cho moät soá muïc ñích khaùc nhau. Hieän nay leänh WAIT ñöôïc duïng phoå bieán nhaát laø duøng ñeå chæ ra caùc ngoõ vaøo xung clock cho caùc coâng cuï toång hôïp. Phaùt bieåu WAIT chæ ñònh xung clock cho phaùt bieåu quaù trình ñöôïc ñoïc bôûi caùc coâng cuï toång hôïp nhaèm taïo ra maïch logic tuaàn töï chaúng haïn nhö caùc thanh ghi vaø caùc flip flop.
Caùc coâng duïng khaùc laø trì hoaõn vieäc thöïc thi quaù trình trong moät khoaûng thôøi gian hoaëc hieäu
chænh danh saùch nhaïy cuûa moät quaù trình.
Chuùng ta khaûo saùt phaùt bieåu quaù trình söû duïng phaùt bieåu WAIT ñöôïc duøng ñeå taïo möùc logic
tuaàn töï:
PROCESS (clock, d) BEGIN WAIT UNTIL clock = ‘1’ AND clock’EVENT;
q <= d;
END PROCESS;
Quaù trình naøy duøng ñeå phaùt hieän xung clock caïnh leân cuûa flip flop. Thuoäc tính ’EVENT ñi cuøng vôùi xung clock laø true khi ngoõ vaøo xung clock coù thay ñoåi. Toå hôïp cuûa 2 ñieàu kieän laø xung clock coù giaù trò ‘1’ vaø xung clock coù thay ñoåi neân coù theå xem nhö xung clock vöøa xuaát hieän xung caïnh leân. Keát quaû cuûa quaù trình naøy laø ñôïi hoaëc chôø phaùt bieåu WAIT cho ñeán khi xuaát hieän xung clock caïnh leân vaø giaù trò cuûa d ñöôïc gaùn cho ngoõ ra q.
Theâm chöùc naêng reset ñoàng boä cho ví duï treân nhö sau:
q <= d;
PROCESS (clock, d) BEGIN END WAIT UNTIL clock = ‘1’ AND clock’EVENT; IF (reset = ‘1’) THEN q <= ‘0’; ELSE END IF; PROCESS;
Trong ví duï treân thì khi coù xung clock thì tín hieäu reset ñöôïc kieåm tra tröôùc: neáu tín hieäu
reset tích cöïc thì gaùn giaù trò ‘0’ cho ngoõ ra q, ngöôïc laïi thì gaùn tín hieäu d.
Chöùc naêng reset khoâng ñoàng boä cuõng ñöôïc thöïc hieän nhö sau:
(reset = ‘1’) THEN q <= ‘0’;
PROCESS (clock, d) BEGIN
IF ELSE clock’EVENT AND clock = ‘1’ THEN q <= d; END IF; WAIT ON reset, clock; PROCESS; END
Quaù trình naøy chöùa phaùt bieåu WAIT ON seõ laøm cho quaù trình ngöøng thöïc hieän cho ñeán khi coù moät trong hai söï kieän reset hoaëc xung clock thay ñoåi. Sau ñoù phaùt bieåu IF ñöôïc thöïc hieän vaø neáu tín hieäu reset laø tích cöïc thì flip flop bò reset baát ñoàng boä, ngöôïc laïi xung clock ñöôïc kieåm tra ñeå phaùt hieän caïnh leân vaø neáu ñuùng thì seõ chuyeån traïng thaùi ngoõ vaøo d cho ngoõ ra q.
89
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Phaùt bieåu WAIT cuõng coù theå ñöôïc söû duïng ñeå ñieàu khieån caùc tín hieäu cuûa quaù trình hay
chöông trình con nhaïy vôùi baát kyø ñieåm naøo trong khi thöïc hieän chöông trình.
Ví duï 2-23: PROCESS BEGIN
WAIT ON a; WAIT ON b; PROCESS; END
a. Phaùt bieåu WAIT ON signal
Ví duï veà phaùt bieåu naøy ñaõ ñöôïc trình baøy ôû treân, phaùt bieåu WAIT ON chæ ñònh moät danh saùch moät hoaëc nhieàu tín hieäu maø phaùt bieåu WAIT seõ ñôïi chôø söï thay ñoåi. Neáu coù tín hieäu naøo thay ñoåi thì vieäc thöïc hieän seõ ñöôïc tieáp tuïc vôùi phaùt bieåu naèm sau phaùt bieåu WAIT.
Ví duï 2-24:
WAIT ON a, b;
Khi moät trong hai söï kieän xaûy ra cho a hoaëc b thì quaù trình seõ tieáp tuïc vôùi phaùt bieåu tieáp theo
phaùt bieåu WAIT.
b. Phaùt bieåu WAIT UNTIL expression
Meänh ñeà WAIT UNTIL boolean_expression seõ ngöøng quaù trình thöïc hieän cho ñeán khi keát quaû traû veà cuûa bieåu thöùc laø true. Phaùt bieåu naøy thieát laäp moät danh saùch nhaïy caùc tín hieäu ñöôïc duøng trong bieåu thöùc. Khi baát kyø tín hieäu naøo trong bieåu thöùc thay ñoåi thì bieåu thöùc ñöôïc ñaùnh giaù. Bieåu thöùc traû veà keát quaû kieåu Boolean: khi keát quaû laø true thì quaù trình thöïc hieän seõ tieáp tuïc vôùi phaùt bieåu theo sau leänh WAIT. Ngöôïc laïi thì quaù trình seõ tieáp tuïc ngöøng.
Ví duï 2-25: WAIT UNTIL ((x*10) < 100);
Trong ví duï naøy thì khi x lôùn hôn hay baèng 10 thì quaù trình tieáp tuïc ngöøng vaø chæ thöïc hieän
leänh tieáp theo khi x nhoû hôn 10.
c. Phaùt bieåu WAIT FOR time_expression
Meänh ñeà WAIT FOR time_expression seõ ngöøng quaù trình thöïc hieän trong moät khoaûng thôøi gian ñöôïc chæ ñònh bôûi bieåu thöùc thôøi gian. Sau khi thôøi gian ñöôïc chæ ñònh trong bieåu thöùc ñaõ heát thì quaù trình tieáp tuïc vôùi phaùt bieåu naèm sau leänh WAIT.
Ví duï 2-26:
WAIT FOR 10 ns; WAIT FOR (a * (b * c));
Phaùt bieåu thöù nhaát thì bieåu thöùc chæ ñôn giaûn laø haèng soá.
Phaùt bieåu thöù hai thì bieåu thöùc thôøi gian laø moät bieåu thöùc phaûi ñöôïc tính toaùn tröôùc vaø traû veà laø giaù trò thôøi gian. Sau khi giaù trò naøy ñaõ ñöôïc tính toaùn thì phaùt bieåu WAIT seõ duøng giaù trò thôøi gian naøy laøm thôøi gian ñôïi.
d. Phaùt bieåu WAIT vôùi nhieàu söï kieän
90
Kyõ thuaät PLD vaø ASIC
Phaùt bieåu WAIT vôùi nhieàu ñieàu kieän vôùi ví duï 2-27 nhö sau:
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Ví duï 2-27: WAIT ON nmi, interrupt UNTIL ((nmi = true) or (interrupt = true) ) FOR 5 usec;
Phaùt bieåu naøy ñôïi moät söï kieän treân caùc tín hieäu nmi vaø interrupt vaø chæ tieáp tuïc neáu interrupt hoaëc nmi laø true hoaëc cho ñeán heát thôøi gian 5μs. Chæ khi moät hoaëc nhieàu ñieàu kieän treân laø true thì quaù trình thöïc hieän môùi tieáp tuïc. Haõy xem ví duï 2-28:
Ví duï 2-28: WAIT UNTIL (interrupt = true ) OR (old_clk = ‘1’);
Phaûi chaéc chaén coù ít nhaát moät giaù trò trong bieåu thöùc chöùa tín hieäu – ñieàu naøy laø caàn thieát ñeå
ñaûm baûo phaùt bieåu WAIT khoâng phaûi chôø ñôïi maõi.
Neáu caû hai interrupt vaø old_clk ñeàu laø bieán thì phaûi bieåu WAIT khoâng phaûi ñaùnh giaù laïi khi hai bieán naøy thay ñoåi giaù trò. Chæ caàn 1 tín hieäu thay ñoåi seõ laøm cho phaùt bieåu WAIT hoaëc caùc phaùt bieåu gaùn tín hieäu ñoàng thôøi ñaùnh giaù laïi.
VI. CAÙC KIEÅU ÑOÁI TÖÔÏNG TRONG VHDL
Caùc ñoái töôïng cuûa VHDL chöùa moät trong caùc kieåu sau:
• Signal: töôïng tröng cho caùc daây daãn keát noái beân trong duøng ñeå keát noái caùc port cuûa
caùc thaønh phaàn vôùi nhau.
• Variable: ñöôïc duøng nhö moät oâ nhôù cuïc boä ñeå löu döõ lieäu taïm thôøi chæ nhìn thaáy ñöôïc
beân trong quaù trình.
• Constant: laø khai baùo haèng soá.
1. KHAI BAÙO TÍN HIEÄU (SIGNAL):
Kieåu tín hieäu ñöôïc söû duïng ñeå keát noái caùc thöïc theå laïi vôùi nhau ñeå taïo ra moät module. Signal
laø phöông thöùc truyeàn caùc tín hieäu ñoäng giöõa caùc thöïc theå vôùi nhau.
Kieåu signal ñöôïc khai baùo nhö sau
SIGNAL signal_name: signal_type[:=initial_value];
Theo sau töø khoaù SIGNAL laø moät hoaëc nhieàu teân tín hieäu. Vôùi moãi teân tín hieäu seõ taïo ra moät signal môùi. Phaân bieät teân vôùi loaïi tín hieäu baèng daáu ‘:’. Loaïi tín hieäu chæ ñònh loaïi döõ lieäu cuûa thoâng tin chöùa trong tín hieäu. Cuoái cuøng thì tín hieäu coù theå chöùa moät giaù trò baét ñaàu (giaù trò khôûi gaùn) ñeå cho giaù trò tín hieäu coù theå ñöôïc khôûi ñoäng.
Caùc tín hieäu coù theå ñöôïc khai baùo trong phaàn khai baùo cuûa thöïc theå, trong kieán truùc vaø trong
khai baùo goùi. Caùc tín hieäu trong khai baùo goùi ñöôïc xem nhö caùc tín hieäu toaøn cuïc.
IN STD_LOGIC; OUT STD_LOGIC); mux IS (i0, i1, i2, i3, a, b: q: mux;
Ví duï 2-29: veà khai baùo tín hieäu nhö sau: IEEE; LIBRARY USE IEEE.std_logic_1164.ALL; ENTITY PORT END PACKAGE sigdecl IS bus_type TYPE IS ARRAY (0 to 7) OF std_logic;
91
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
std_logic := ‘1’; std_logic := ‘0’; vcc: ground: magic_function (a: IN bus_type) RETURN bus_type; SIGNAL SIGNAL FUNCTION sigdecl; END
2. KHAI BAÙO BIEÁN (VARIABLE):
Caùc bieán soá duøng trong VHDL khoâng taïo ra baát kyø phaàn cöùng naøo, caùc bieán löu tröõ giaù trò taïm
thôøi cuûa caùc tín hieäu. Kieåu bieán ñöôïc khai baùo nhö sau:
VARIABLE variable_name : variable_type[:=value];
Theo sau töø khoaù variable laø moät hoaëc nhieàu teân bieán. Caùc teân bieán caùch nhau baèng daáu ‘;’.
Moãi teân bieán seõ taïo ra moät bieán môùi. Variable_type seõ xaùc ñònh kieåu döõ lieäu cho bieán.
IEEE; IEEE.std_logic_1164.ALL;
std_logic; OUT std_logic); and5 IS (a, b, c, d, e: IN q: and5; Ví duï 2-30: LIBRARY USE ENTITY PORT END
and5 OF and5 IS
ARCHITECTURE BEGIN STD_LOGIC; time;
state = ‘1’
PROCESS (a, b, c, d, e) VARIABLE state: VARIABLE delay : BEGIN state := a AND b AND c AND d AND e;
IF THEN delay:= 4 ns; ELSIF state = ‘0’ THEN delay := 3 ns ELSE delay := 4 ns END IF; delay <= state AFTER delay;
END END PROCESS ; and5;
Ví duï naøy laø kieán truùc cho coång AND coù 5 ngoõ vaøo. Coù 2 bieán ñöôïc khai baùo laø bieán state vaø bieán delay, bieán state ñöôïc söû duïng ñeå caát giöõ giaù trò taïm thôøi caùc ngoõ vaøo cuûa coång AND, delay ñöôïc söû duïng ñeå löu giaù trò thôøi gian treå. Caû hai döõ lieäu naøy khoâng theå laø döõ lieäu tónh bôûi vì giaù trò cuûa chuùng phuï thuoäc vaøo giaù trò cuûa caùc ngoõ vaøo a, b, c, d, e. Caùc tín hieäu coù theå ñöôïc duøng ñeå löu tröõ döõ lieäu nhöng khoâng ñöôïc duøng bôûi vì caùc lyù do sau:
• Caùc bieán thöôøng hieäu quaû hôn cho pheùp gaùn tín hieäu bôûi vì noù xaûy ra ngay laäp töùc,
trong khi tín hieäu thì phaûi chôø saép xeáp.
• Caùc bieán chieám ít boä nhôù hôn trong khi caùc tín hieäu caàn nhieàu thoâng tin ñeå cho pheùp
saép xeáp vaø caùc thuoäc tính tín hieäu.
• Duøng tín hieäu phaûi yeâu caàu phaùt bieåu WAIT ñeå ñoàng boä pheùp gaùn tín hieäu cho moãi laàn
92
Kyõ thuaät PLD vaø ASIC
thöïc hieän khi söû duïng.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Khi baát kyø tín hieäu a, b, c, d, hoaëc e thay ñoåi thì quaù trình thöïc hieän. Bieán state ñöôïc gaùn cho haøm AND cuûa taát caû caùc ngoõ vaøo. Böôùc tieáp theo thì döïa vaøo giaù trò cuûa bieán state maø bieán delay ñöôïc gaùn giaù trò thôøi gian treå. Döïa vaøo giaù trò thôøi gian ñaõ ñöôïc gaùn cho bieán delay, tín hieäu ngoõ ra q seõ coù giaù trò cuûa bieán state.
3. KHAI BAÙO HAÈNG SOÁ :
Haèng soá giöõ moät giaù trò khoâng ñoåi trong quaù trình thieát keá. Haèng soá ñöôïc khai baùo nhö sau
CONSTANT constant_name :type_name[:=value];
Caùc teân haèng caùch nhau baèng daáu ‘;’. Caùc giaù trò cuûa haèng laø tuyø yù, kieåu haèng coù quy ñònh
gioáng kieåu tín hieäu.
Haèng coù theå söû duïng trong toaøn thöïc theå neáu haèng ñöôïc khai baùo trong khoái khai baùo cuûa thöïc theå, hoaëc coù theå ñöôïc söû duïng trong toaøn package neáu noù ñöôïc khai baùo trong ñoaïn khai baùo cuûa package.
Ví duï 2-31: CONSTANT PI : REAL := 3.1414;
VII. CAÙC KIEÅU DÖÕ LIEÄU TRONG VHDL
Taát caû caùc ñoái töôïng ñaõ trình baøy laø tín hieäu, bieán vaø haèng soá coù theå khai baùo duøng caùc kieåu döõ lieäu. Ngoân ngöõ VHDL chöùa raát nhieàu kieåu döõ lieäu duøng ñeå xaây döïng cho caùc ñoái töôïng töø ñôn giaûn ñeán phöùc taïp.
Ñeå ñònh nghóa moät loaïi döõ lieäu môùi thì phaûi khai baùo loaïi döõ lieäu. Khai baùo loaïi döõ lieäu ñònh nghóa teân cuûa loaïi döõ lieäu vaø taàm vöïc hay giôùi haïn cuûa döõ lieäu. Caùc khai baùo döõ lieäu ñöôïc pheùp khai baùo trong phaàn khai baùo goùi, phaàn khai baùo thöïc theå, phaàn khai baùo kieán truùc, phaàn khai baùo chöông trình con vaø phaàn khai baùo quaù trình.
Hình 2-10 trình baøy caùc kieåu döõ lieäu coù söû duïng trong ngoân ngöõ VHDL. Boán loaïi döõ lieäu lôùn
laø loaïi scalar, loaïi ña hôïp (composite), loaïi access vaø loaïi file.
• Loaïi scalar chöùa caùc loaïi döõ lieäu ñôn giaûn nhö soá thöïc vaø soá nguyeân.
• Loaïi ña hôïp bao goàm maûng vaø baûn ghi.
• Loaïi access töông ñöông vôùi con troû trong caùc ngoân ngöõ laäp trình thoâng thöôøng.
• Loaïi file cho ngöôøi thieát keá khaû naêng khai baùo ñoái töôïng file vôùi caùc loaïi file ñöôïc
ñònh nghóa bôûi ngöôøi thieát keá.
93
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Hình 2-10. Giaûn ñoà caùc loaïi döõ lieäu trong VHDL.
1. LOAÏI SCALAR
Loaïi döõ lieäu scalar bao goàm caùc döõ lieäu nhö sau:
• Kieåu soá nguyeân.
• Kieåu soá thöïc.
• Kieåu ñeám, lieät keâ ñöôïc.
• Kieåu döõ lieäu vaät lyù.
a. Kieåu soá nguyeân INTEGER
Kieåu soá nguyeân gioáng nhö kieåu soá nguyeân cuûa toaùn hoïc. Taát caû caùc haøm toaùn hoïc ñaõ xaùc ñònh
nhö haøm coäng, tröø, nhaân vaø chia ñeàu coù theå aùp duïng cho kieåu döõ lieäu naøy.
Trong ngoân ngöõ VHDL khoâng coù chæ ñònh giôùi haïn soá nguyeân cöïc ñaïi nhöng coù chæ ñònh giôùi haïn cöïc tieåu cuûa soá nguyeân töø “-2,147, 483,647 ñeán 12,147,483,647”. Giôùi haïn cöïc tieåu ñöôïc chæ ñònh bôûi goùi chuaån chöùa trong thö vieän chuaån.
Caùc ví duï veà caùc giaù trò soá nguyeân nhö sau:
test OF test IS
Ví duï 2-32: ARCHITECTURE BEGIN INTEGER; int type;
PROCESS (X) VARIABLE a: VARIABLE b: BEGIN a := 1; a := -1; a := 1.0; -- ok 1 -- ok 2 -- error 3
94
Kyõ thuaät PLD vaø ASIC
END PROCESS
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com END test;
Hai phaùt bieåu thöù 1 vaø 2 laø caùc pheùp gaùn soá nguyeân. Phaùt bieåu thöù 3 laø pheùp cho bieán soá nguyeân laø moät soá khoâng phaûi soá nguyeân, khi bieân dòch thì phaùt bieåu naøy coù theå sinh ra loãi. Baát kyø con soá naøo coù daáu chaám ñöôïc xem laø soá thöïc.
b. Kieåu döõ lieäu ñaõ ñònh nghóa
VHDL chöùa nhieàu loaïi döõ lieäu ñaõ ñöôïc ñònh nghóa, ñaëc bieät laø caùc chuaån IEEE 1076 vaø IEEE 1164. Ñaëc bieät hôn nöõa chaúng haïn nhö ñònh nghóa caùc loaïi döõ lieäu coù theå ñöôïc tìm thaáy trong thö vieän vaø trong goùi.
• Goùi chuaån standard (package standard) cuûa thö vieän std: xaùc ñònh caùc kieåu döõ lieäu
BIT, BOOLEAN, INTEGER vaø REAL.
• Goùi std_logic_1164 cuûa thö vieän IEEE: ñònh nghóa caùc kieåu döõ lieäu STD_LOGIC vaø
STD_ULOGIC.
• Goùi std_logic_arith cuûa thö vieän IEEE: ñònh nghóa caùc kieåu döõ lieäu SIGNED vaø STD_ULOGIC, cuøng vôùi nhieàu haøm chuyeån ñoåi döõ lieäu nhö conv_integer (p), conv_unsigned(p,b), conv_signed(p,b) vaø conv_std_vector(p,b).
• Goùi std_logic_signed vaø std_logic_unsigned cuûa thö vieän IEEE: chöùa caùc haøm cho pheùp hoaït ñoäng vôùi caùc döõ lieäu STD_LOGIC_VECTOR ñöôïc thöïc hieän khi döõ lieäu loaïi SIGNED hoaëc UNSIGNED.
Taát caû caùc döõ lieäu ñaõ ñònh nghóa (naèm trong caùc goùi hoaëc thö vieän ôû treân) ñöôïc moâ taû nhö
sau:
BIT (and BIT_VECTOR): coù 2 möùc logic laø ‘0’ vaø ‘1’.
Ví duï 2-33: khai baùo caùc tín hieäu daïng BIT vaø BIT_VECTOR
SIGNAL x: BIT; -- x ñöôïc khai baùo laø moät tín hieäu bit
SIGNAL y: BIT_VECTOR (3 DOWNTO 0); -- y laø moät vector 4 bit vôùi bit beân traùi laø MSB.
SIGNAL w: BIT_VECTOR (0 TO 7); -- w laø moät vector 8 bit vôùi bit beân phaûi laø MSB.
Döïa vaøo caùc tín hieäu ôû treân thì caùc phaùt bieåu gaùn sau laø hôïp leä:
x <= ‘1’; -- x ñöôïc gaùn vôùi giaù trò laø 1.
Chuù yù kí hieäu daáu nhaùy ñôn chæ ñöôïc duøng cho 1 bit ñôn.
y <= “0111”; -- y ñöôïc gaùn tín hieäu 4 bit coù giaù trò laø “0111” vôùi bit MSB laø bit ‘0’.
Chuù yù kí hieäu daáu nhaùy keùp ñöôïc duøng cho vector.
w <= “01110001”; -- w ñöôïc gaùn tín hieäu 8 bit coù giaù trò laø “01110001” vôùi bit MSB laø bit
‘1’.
STD_LOGIC vaø STD_LOGIC_VECTOR: coù 8 giaù trò logic ñöôïc giôùi thieäu trong chuaån
IEEE 1164 chuaån:
‘X’ coù nghóa laø chöa xaùc ñònh
‘0’ coù nghóa laø möùc thaáp
‘1’ coù nghóa laø möùc cao
‘Z’ traïng thaùi toång trôû cao
‘W’ yeáu chöa xaùc ñònh
‘L’ yeáu thaáp
95
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com ‘H’ yeáu cao
‘-’ baát chaáp
Ví duï 2-34: khai baùo caùc tín hieäu daïng STD_LOGIC vaø STD_LOGIC_VECTOR
SIGNAL x: STD_LOGIC -- x ñöôïc khai baùo laø tín hieäu bit kieåu STD_LOGIC.
SIGNAL y: STD_LOGIC_VECTOR (3 DOWNTO 0):= “0001”;
-- y ñöôïc khai baùo laø moät vector 4 bit vôùi bit beân traùi laø MSB vaø giaù trò khôûi taïo laø “0001”.
Chuù yù kí hieäu toaùn töû “:=” ñöôïc duøng ñeå thieát laäp giaù trò khôûi gaùn.
STD_ULOGIC vaø STD_ULOGIC_VECTOR: coù 9 giaù trò logic ñöôïc giôùi thieäu trong chuaån IEEE 1164 chuaån laø (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘). Kí hieäu ‘U’ töôïng tröng cho “unresolve” – khoâng quyeát ñoaùn.
• Kieåu BOOLEAN: coù 2 giaù trò laø TRUE vaø FALSE.
• Kieåu soá nguyeân INTEGER: laø soá nguyeân 32 bit töø -2,147,483,657 ñeán +2,147, 483,
647.
• Kieåu soá nguyeân döông NATURAL: töø 0 ñeán +2,147, 483, 647.
• Kieåu soá thöïc REAL: töø -1.0E38 ñeán +1.0E38. Khoâng ñöôïc toång hôïp.
• Kieåu caùc con soá vaät lyù: ñöôïc duøng cho caùc ñaïi löôïng vaät lyù nhö thôøi gian, ñieän aùp, …
duøng cho moâ phoûng. Khoâng ñöôïc toång hôïp.
• Kieåu SIGNED vaø UNSIGNED: kieåu döõ lieäu ñaõ ñònh nghóa trong goùi std_logic_arith
cuûa thö vieän IEEE.
Ví duï 2-35: veà caùc leänh gaùn bit, vector, caùc kieåu heä thoáng soá:
x0 <= ‘0’; -- coù theå xem x laø bit, std_logic hoaëc std_ulogic coù giaù trò laø ‘0’.
x1 <= “00011111”; -- coù theå xem laø bit_vector, std_logic_vector, std_ulogic, signed hoaëc
unsigned.
x2 <= “0001_1111”; -- daáu gaïch cho pheùp ñeå deã nhìn.
x3 <= “101111”; -- töôïng tröng cho soá nhò phaân coù giaù trò thaäp phaân laø 47.
x4 <= B“101111”; -- töôïng tröng cho soá nhò phaân coù giaù trò thaäp phaân laø 47.
x5 <= O“57”; -- töôïng tröng cho baùt phaân coù giaù trò thaäp phaân laø 47.
x6 <= X“2F”; -- töôïng tröng cho soá thaäp luïc phaân coù giaù trò thaäp phaân laø 47.
n<= 1200”; -- soá nguyeân.
m<= 1_200”; -- soá nguyeân cho pheùp taùch ra ñeå deã nhìn.
IF ready THEN … -- ready kieåu boolean ñöôïc thöïc hieän neáu ready baèng true.
y <= 1.2E-5; -- soá thöïc, nhöng khoâng toång hôïp.
q <= d AFTER 10 ns; -- vaät lyù nhöng khoâng toång hôïp.
Ví duï 2-36: veà caùc khai baùo hôïp leä vaø khoâng hôïp leä vôùi caùc loaïi döõ lieäu khaùc nhau:
SIGNAL a: BIT;
SIGNAL b: BIT_VECTOR (7 DOWNTO 0);
SIGNAL c: STD_LOGIC;
SIGNAL d: STD_LOGIC_VECTOR (7 DOWNTO 0);
96
Kyõ thuaät PLD vaø ASIC
SIGNAL e: INTEGER RANGE 0 TO 255;
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com a <= b(5); -- pheùp gaùn bit thöù 5 cuûa b cho a laø hôïp leä vì cuøng döõ lieäu BIT.
b(0) <= a; -- pheùp gaùn a cho bit thöù 0 cuûa b laø hôïp leä vì cuøng döõ lieäu BIT.
<= d(5); -- pheùp gaùn bit thöù 5 cuûa d cho c laø hôïp leä vì cuøng döõ lieäu
c STD_LOGIC.
d(0) <= c; -- pheùp gaùn naøy laø hôïp leä vì cuøng kieåu döõ lieäu STD_LOGIC.
<= c; -- pheùp gaùn naøy khoâng hôïp leä vì khaùc kieåu döõ lieäu BIT vaø
a STD_LOGIC.
b <= d; -- khoâng hôïp leä vì khaùc kieåu BIT_VECTOR vaø
STD_LOGIC_VECTOR.
e <= b; -- khoâng hôïp leä vì khaùc kieåu INTEGER vaø BIT_VECTOR.
e <= d; -- khoâng hôïp leä vì khaùc kieåu INTEGER vaø STD_LOGIC_VECTOR.
c. Kieåu döõ lieäu do ngöôøi duøng ñònh nghóa
VHDL cho pheùp ngöôøi duøng ñònh nghóa caùc loaïi döõ lieäu rieâng. Hai loaïi döõ lieäu do ngöôøi duøng
ñònh nghóa ñöôïc trình baøy laø kieåu soá nguyeân INTEGER vaø kieåu lieät keâ.
Kieåu döõ lieäu soá nguyeân do ngöôøi duøng ñònh nghóa:
TYPE integer IS RANGE - 2147483647 TO 2147483647;
TYPE natural IS RANGE 0 TO 2147483647;
TYPE my_integer IS RANGE - 32 TO 32;
TYPE student_grade IS RANGE 0 TO 100;
TYPE color IS (red, green, blue, white);
Kieåu döõ lieäu lieät keâ do ngöôøi duøng ñònh nghóa:
TYPE bit IS (‘0’, ‘1’);
TYPE my_logic IS (‘0’, ‘1’, ‘Z’);
d. Kieåu döõ lieäu SUBTYPE
SUBTYPE laø kieåu döõ lieäu eùp kieåu. Lyù do chính ñeå duøng kieåu subtype toát hôn laø do caùc pheùp toaùn giöõa caùc döõ lieäu khaùc nhau khoâng ñöôïc pheùp thöïc hieän maø chuùng chæ cho pheùp thöïc hieän kieåu döõ subtype vôùi caùc kieåu döõ lieäu cô baûn khaùc.
Ví duï 2-37: cho caùc kieåu subtype cho caùc kieåu döõ lieäu ñaõ ñònh nghóa ôû treân:
SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER’HIGH;
SUBTYPE my_logic IS STD_LOGIC RANGE ‘0’ TO ‘Z’;
-- Goïi laïi STD_LOGIC = (‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘) nhöng my_logic = (‘0’, ‘1’,
‘Z’).
SUBTYPE my_color IS color RANGE red TO blue;
-- Goïi laïi color = (red, green, blue, white) nhöng my_color = (red, green,blue).
SUBTYPE small_integer IS INTEGER RANGE -32 TO 32;
Ví duï 2-38: veà caùc pheùp toaùn hôïp leä vaø khoâng hôïp leä vôùi caùc kieåu döõ lieäu vaø subtype:
SUBTYPE my_logic IS STD_LOGIC RANGE ‘0’ TO ‘1’;
SIGNAL a: BIT;
97
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com SIGNAL b: STD_ LOGIC;
SIGNAL c: my_logic ;
b <= a; -- Khoâng hôïp leä vì khaùc kieåu döõ lieäu BIT vaø STD_LOGIC.
b <= c; -- Hôïp leä vì cuøng döõ lieäu cô baûn STD_LOGIC.
e. Kieåu döõ lieäu maûng ARRAY
Array laø taäp hôïp caùc ñoái töôïng cuøng moät kieåu döõ lieäu, coù theå laø maûng 1 chieàu (1D), maûng 2 chieàu (2D) hoaëc maûng 1 chieàu × 1 chieàu (1D × 1D). Caùc maûng coù theå coù nhieàu chieàu hôn nöõa nhöng chuùng khoâng ñöôïc toång hôïp. Hình 2-11 minh hoaï caáu truùc cuûa maûng döõ lieäu. Hình (a) laø giaù trò ñôn (scalar), hình (b) laø maûng 1 chieàu (1D), hình (c) laø maûng caùc vector (1D ×1D) vaø hình (d) laø maûng scalar (2D).
Hình 2-11. Caùc kieåu maûng döõ lieäu.
Caùc loaïi döõ lieäu coù theå toång hôïp ñaõ ñònh nghóa cho caùc kieåu maûng ôû treân laø
• Döõ lieäu Scalar: BIT, STD_LOGIC, STD_ULOGIC vaø BOOLAEN.
• Caùc Vector: BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR,
INTEGER, SIGNED vaø UNSIGNED.
Cuù phaùp chæ ñònh cho moät kieåu döõ lieäu maûng môùi nhö sau:
TYPE type_name IS ARRAY (specification) OF data_type;
Ñeå söû duïng kieåu döõ lieäu maûng môùi naøy thì khai baùo tín hieäu nhö sau:
SIGNAL signal_name: type_name [:=initial_value];
Trong cuù phaùp ôû treân tín hieäu SIGNAL ñöôïc khai baùo. Tuy nhieân cuõng coù theå laø CONSTANT
hoaëc VARIABLE. Chuù yù tuyø choïn giaù trò khôûi gaùn chæ ñöôïc duøng cho moâ phoûng.
Ví duï 2-39: veà maûng 1D×1D:
Chuùng ta muoán xaây döïng moät maûng chöùa 4 vector, moãi vector chöùa 8 bit – ñaây laø maûng 1D×1D. Chuùng ta goïi moãi vector laø moät haøng vaø moät maûng ñaày ñuû laø moät ma traän. Caùch khai baùo nhö sau:
TYPE row IS ARRAY (7 DONWTO 0) OF STD_LOGIC; -- 1D array
TYPE matrix IS ARRAY (0 TO 3) OF row; -- 1D×1D array
SIGNAL x: matrix; -- 1D×1D signal
Ví duï veà khai baùo maûng kieåu khaùc:
TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
Ví duï veà khôûi gaùn cho maûng:
98
Kyõ thuaät PLD vaø ASIC
… := “0001”; -- gaùn cho maûng 1D
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com … := (‘0’, ‘0’, ‘0’, ‘1’); -- gaùn cho maûng 1D
… := ((‘0’, ‘1’, ‘1’, ‘1’), (‘1’, ‘1’, ‘1’, ‘0’)); -- gaùn cho maûng 1D×1D hoaëc 2D
Ví duï 2-40: veà caùc pheùp gaùn hôïp leä vaø khoâng hôïp leä cuûa maûng:
Cho caùc maûng ñöôïc khai baùo nhö sau:
TYPE row IS ARRAY (7 DONWTO 0) OF STD_LOGIC; -- 1D array
TYPE array1 IS ARRAY (0 TO 3) OF row; -- 1D×1D array
array2 IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR (7 DOWNTO 0); --
TYPE 1D×1D array
TYPE array3 IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;-- 2D array
SIGNAL x: row;
SIGNAL y: array1;
SIGNAL v: array2;
SIGNAL w: array3;
Caùc pheùp gaùn bit nhö sau:
x(0) <= y(1) (2); -- gaùn bit thöù 2 cuûa vector y1 cho x(0).
x(1) <= v(2) (1); -- gaùn bit thöù 1 cuûa vector v2 cho x(1).
x(2) <= w(2,1); -- gaùn bit thöù 1 cuûa vector w2 cho x(2).
y(1) (1) <= x(6);
y(2) (0) <= v(0) (0);
Caùc pheùp gaùn vector nhö sau:
x <= y(0) ; -- hôïp leä vì cuøng kieåu döõ lieäu row.
-- khoâng hôïp leä vì khoâng töông thích kieåu döõ lieäu row×
x <= v(1) ; STD_LOGIC_VECTOR.
-- khoâng hôïp leä vì khoâng töông thích kieåu döõ lieäu row×
x <= w(2) ; STD_LOGIC_VECTOR.
x <= w(2, 2 downto 0); -- khoâng hôïp leä vì khoâng töông thích kieåu döõ lieäu.
v(0) <= w(2, 2 downto 0); -- khoâng hôïp leä vì khoâng töông thích kieåu döõ lieäu.
v(0) <= w(2) ; -- khoâng hôïp leä vì khoâng töông thích kieåu döõ lieäu.
y(1) <= v(3) ; -- khoâng hôïp leä vì khoâng töông thích kieåu döõ lieäu.
y(1) (7 downto 3) <= x(4 downto 0); -- hôïp leä vì cuøng kieåu vaø kích thöôùc döõ lieäu.
v(1) (7 downto 3) <= v(2) ( 4 downto 0); -- hôïp leä vì cuøng kieåu vaø kích thöôùc döõ lieäu.
w(1, 5 downto 1) <= v(2) ( 4 downto 0); -- khoâng hôïp leä vì khoâng cuøng kieåu.
f. Kieåu döõ lieäu maûng port
Khoâng coù caùc kieåu döõ lieäu ñaõ ñònh nghóa nhieàu hôn 1 chieàu. Tuy nhieân trong chæ ñònh khai baùo PORT ngoõ vaøo hoaëc ra cuûa maïch ñieän naèm trong entity, chuùng ta coù theå chæ ñònh caùc port
99
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
gioáng nhö caùc maûng vector. Do kieåu khai baùo TYPE khoâng ñöôïc pheùp khai baùo trong thöïc theå entity neân giaûi phaùp ñeå khai baùo caùc kieåu döõ lieäu do ngöôøi duøng ñònh nghóa trong PACKAGE, sau ñoù coù theå duøng cho toaøn thieát keá.
Ví duï 2-41:
-- khai baùo goùi package--
IEEE; IEEE.std_logic_1164.ALL;
IS
LIBRARY USE PACKAGE my_data_type TYPE vector_array IS ARRAY ( NATURAL RANGE <>) OF std_logic_vector (7
downto 0); END my_data_type;
-- khai baùo döõ lieäu duøng cho chöông trình --
LIBRARY USE IEEE; IEEE.std_logic_1164.ALL;
USE WORK.my_data_type.ALL; -- goùi do ngöôøi duøng ñònh nghóa
ENTITY PORT
IS IN vector_array (0 to 3); );
END mux (inp: …: mux;
g. Kieåu döõ lieäu baûng ghi record
Record gioáng nhö maûng nhöng chæ khaùc laø chuùng chöùa nhieàu ñoái töôïng döõ lieäu khaùc nhau.
Ví duï 2-42: trình baøy nhö sau: TYPE birthday IS RECORD
Day: INTEGER RANGE 1 to 31; month: month_name;
END RECORD;
h. Kieåu döõ lieäu SIGNED vaø UNSIGNED
Laø caùc döõ lieäu ñaõ ñònh nghóa trong goùi std_logic_arith cuûa thö vieän IEEE. Cuù phaùp khai baùo
nhö sau:
(7 downto 0);
Ví duï 2-43: SIGNAL SIGNAL x: y: SIGNED UNSIGNED (0 to 3);
Giaù trò cuûa soá khoâng daáu thì khoâng ñöôïc nhoû hôn 0. Ví duï “0101” töôïng tröng cho soá thaäp phaân 5, “1101” töôïng tröng cho soá thaäp phaân 13. Neáu soá coù daáu ñöôïc söû duïng thì coù giaù trò caû aâm vaø döông ôû daïng buø 2. Ví duï “0101” töôïng tröng cho soá thaäp phaân 5, coøn “1101” töôïng tröng cho soá thaäp phaân -3.
Ñeå söû duïng caùc kieåu döõ lieäu SIGNED vaø UNSIGNED thì goùi std_logic_arith cuûa thö vieän
IEEE phaûi ñöôïc khai baùo.
100
Kyõ thuaät PLD vaø ASIC
Ví duï 2-44: caùc pheùp toaùn hôïp leä vaø khoâng hôïp leä vôùi caùc döõ lieäu coù daáu vaø khoâng daáu: LIBRARY USE IEEE; IEEE.std_logic_1164.ALL;
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com USE IEEE.std_logic_arith.ALL; -- goùi döõ lieäu khai baùo theâm
… SIGNAL SIGNAL SIGNAL a: IN b: IN x: OUT SIGNED SIGNED SIGNED (7 downto 0); (7 downto 0); (7 downto 0);
…
v <= a + b ; -- hôïp leä vì cuøng kieåu döõ lieäu toaùn hoïc.
w <= a AND b ; -- khoâng hôïp leä vì khoâng töông thích pheùp vôùi pheùp toaùn logic.
Ví duï 2-45: caùc pheùp toaùn hôïp leä vaø khoâng hôïp leä vôùi döõ lieäu STD_LOGIC_VECTOR: LIBRARY USE IEEE; IEEE.std_logic_1164.ALL;
… SIGNAL SIGNAL SIGNAL a: IN b: IN x: OUT STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_VECTOR (7 downto 0); (7 downto 0); (7 downto 0);
…
v <= a + b ; -- khoâng hôïp leä vì kieåu döõ lieäu logic.
w <= a AND b ; -- hôïp leä vì pheùp toaùn logic söû duïng kieåu logic.
Maëc duø bò caám ôû treân nhöng coù moät caùch raát ñôn giaûn cho pheùp döõ lieäu kieåu STD_LOGIC_VECTOR tham gia tröïc tieáp vaøo caùc pheùp toaùn soá hoïc. Thö vieän IEEE cung caáp 2 goùi döõ lieäu STD_LOGIC_SIGNED vaø STD_LOGIC_UNSIGNED cho pheùp caùc pheùp toaùn treân caùc döõ lieäu STD_LOGIC_VECTOR coù theå ñöôïc thöïc hieän gioáng nhö caùc döõ lieäu loaïi SIGNED vaø UNSIGNED theo thöù töï.
Ví duï 2-46: caùc pheùp toaùn vôùi döõ lieäu STD_LOGIC_VECTOR: LIBRARY USE IEEE; IEEE.std_logic_1164.ALL;
IEEE.std_logic_unsigned.ALL; USE -- khai baùo theâm .
a: IN b: IN x: OUT STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_VECTOR (7 downto 0); (7 downto 0); (7 downto 0); … SIGNAL SIGNAL SIGNAL
…
v <= a + b ; -- hôïp leä
w <= a AND b ; -- hôïp leä
i. Kieåu soá thöïc REAL
Kieåu soá thöïc ñöôïc duøng ñeå khai baùo caùc ñoái töôïng söû duïng soá thöïc. Giôùi haïn cöïc tieåu cuûa soá thöïc cuõng ñöôïc chæ ñònh bôûi goùi chuaån trong thö vieän chuaån vaø naèm trong khoaûng töø “-1.0E +38 ñeán +1.0E + 38”.
Ví duï 2-47: veà caùc giaù trò soá thöïc nhö sau: test ARCHITECTURE test OF IS
101
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com a: REAL; SIGNAL BEGIN
a <= 1.0; a <= 1; a <= -1.0E10; a <= 1.5E-20; a <= 5.3 ns; -- ok 1 -- error 2 -- ok 3 -- ok 4 -- error 5
END test;
Haøng 1 trình baøy caùch gaùn soá thöïc cho tín hieäu loaïi REAL. Taát caû caùc con soá thöïc ñeàu coù daáu
chaám ñeå phaân bieät vôùi soá nguyeân.
Haøng thöù 2 seõ phaùt sinh loãi vì gaùn soá nguyeân cho bieán kieåu soá thöïc.
Haøng thöù 3 gaùn moät soá thöïc raát lôùn vaø haøng thöù 4 gaùn moät soá thöïc raát nhoû.
Haøng thöù 5 seõ phaùt sinh loãi vì khoâng theå gaùn thôøi gian cho tín hieäu soá thöïc.
j. Kieåu lieät keâ
Kieåu lieät keâ laø moät coâng cuï hoã trôï ñaéc löïc cho quaù trình thieát keá baèng ngoân ngöõ VHDL.
Ngöôøi thieát keá coù theå duøng caùc loaïi döõ lieäu lieät keâ ñaïi dieän chính xaùc cho caùc giaù trò chính xaùc ñöôïc yeâu caàu cho pheùp toaùn chæ ñònh. Taát caû caùc giaù trò cuûa kieåu döõ lieäu lieät keâ do ngöôøi duøng ñònh nghóa. Caùc giaù trò naøy coù theå laø teân hoaëc caùc haèng soá ñaëc tính ñôn, ví duï cho teân laø x, abc, … haèng soá ñaëc tính ñôn laø ‘X’, ‘1’ vaø ‘0’.
Loaïi döõ lieäu lieät keâ cho heä thoáng coù 4 giaù trò moâ phoûng nhö sau:
TYPE fourval IS (‘X’, ‘0’, ‘1’, ‘Z’);
Moät öùng duïng coù duøng kieåu lieät keâ laø minh hoaï cho taát caû caùc leänh cuûa vi xöû lyù. Ví duï 2-48
kieåu lieät keâ cho moät vi xöû lyù ñôn giaûn nhö sau:
Ví duï 2-48:
TYPE instruction IS (add, sub, lda, ldb, sta, stb, outa, xfr);
Vaø moâ hình cho heä thoáng vi xöû lyù:
PACKAGE instr IS (add, sub, lda, ldb, sta, stb, outa, xfr); TYPE IS instruction instr; END
IS
IN IN INOUT instruction; INTEGER; INTEGER); mp (instr: addr: data: mp;
IS
USE work.instr.ALL; ENTITY PORT END ARCHITECTURE mp OF mp BEGIN PROCESS (instr) IS ARRAY (0 to 255 ) OF INTEGER;
102
Kyõ thuaät PLD vaø ASIC
TYPE regtype VARIABLE a, b: INTEGER; VARIABLE reg: regtype; BEGIN
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com CASE instr IS
WHEN lda => WHEN ldb => WHEN add => WHEN sub => WHEN sta => WHEN out => WHEN xfr => a:= data; b:= data; a:= a + b; a:= a - b; reg(addr) := b; data<= a ; a:= b ; -- load a accumulator -- load b accumulator -- add accumulator -- subtract accumulator -- put b accu in reg array -- output a accumulator -- transfer b to a END CASE; END PROCESS ; END mp;
Moâ hình nhaän moät chuoãi leänh (instr), moät ñòa chæ (addr) vaø moät chuoãi döõ lieäu (data). Döïa vaøo giaù trò cuûa instr ñöôïc lieät keâ maø leänh töông öùng ñöôïc thöïc hieän. Phaùt bieåu CASE ñöôïc duøng ñeå löïa choïn leänh ñeå thöïc hieän. Phaùt bieåu ñöôïc thöïc hieän vaø sau ñoù quaù trình seõ ñôïi cho ñeán leänh keá.
2. KIEÅU VAÄT LYÙ:
Kieåu vaät lyù ñöôïc söû duïng ñeå moâ taû caùc ñaïi löôïng vaät lyù nhö: khoaûng caùch, doøng ñieän, thôøi
gian … Ví duï 2-49 veà kieåu döõ lieäu vaät lyù veà doøng ñieän nhö sau:
Ví duï 2-49:
RANGE 0 TO 1000000000; IS
-- nano amps -- micro amps
TYPE current UNITS na; ua = 1000 na; ma = 1000 ua; -- mili amps a = 1000 ma; -- amps
END UNITS;
Vieäc xaùc ñònh kieåu döõ lieäu ñöôïc baét ñaàu vôùi caâu leänh khai baùo teân kieåu vaø vuøng cuûa kieåu (0 to 1000000000), caùc khai baùo ñöôïc thöïc hieän trong ñoaïn UNITS. Trong ví duï treân ñôn vò chính cuûa UNITS laø na. Sau khi ñôn vò chính cuûa UNITS ñöôïc khai baùo caùc ñôn theå khaùc seõ ñöôïc xaùc ñònh.
Kieåu vaät lyù ñaõ ñöôïc ñònh nghóa: trong VHDL coù kieåu vaät lyù ñaõ ñöôïc ñònh nghóa laø thôøi gian
nhö sau:
-- femtosecond -- picosecond -- nanosecond -- microsecond
TYPE TIME IS UNITS fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 ns; -- milisecond sec = 1000 ms; -- second -- minute min = 60 sec; -- hour hr = 60 min;
END UNITS;
3. CAÙC THUOÄC TÍNH:
103
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
VHDL hoå trôï 5 loaïi thuoäc tính. Caùc thuoäc tính ñaõ ñònh nghóa luoân ñöôïc aùp duïng tieáp ñaàu ngöõ nhö teân cuûa tín hieäu, teân cuûa bieán hoaëc kieåu. Caùc thuoäc tính ñöôïc duøng ñeå traû veà nhieàu loaïi thoâng tin khaùc nhau nhö tín hieäu, bieán hoaëc kieåu. Caùc thoâng tin chöùa daáu phaåy (’) theo sau laø teân cuûa thuoäc tính.
a. Thuoäc tính tín hieäu
Baûng sau ñaây lieät keâ caùc thuoäc tính cuûa tín hieäu:
Chöùc naêng
Thuoäc tính signal_name’event
Traû veà giaù trò Boolean laø True neáu coù söï kieän treân tín hieäu xaûy ra, ngöôïc laïi thì traû veà giaù trò false.
signal_name’active
Traû veà giaù trò Boolean laø True neáu coù tích cöïc (gaùn) treân tín hieäu xaûy ra, ngöôïc laïi thì traû veà giaù trò false.
signal_name’transaction
Traû veà tín hieäu kieåu “bit” laät traïng thaùi (0 sang 1 hoaëc 1 sang 0) moãi laàn coù chuyeån traïng thaùi treân tín hieäu.
signal_name’last_event
Traû veà giaù trò khoaûng thôøi gian töø khi xaûy ra söï kieän sau cuøng treân tín hieäu.
signal_name’last_active
Traû veà giaù trò khoaûng thôøi gian töø khi xaûy ra möùc tích cöïc treân tín hieäu.
signal_name’last_value
Cung caáp giaù trò cuûa tín hieäu tröôùc khi söï kieän sau cuøng xaûy ra treân tín hieäu.
signal_name’delayed(T)
Cung caáp tín hieäu treå ñi T laàn so vôùi tín hieäu goác. T laø tuyø choïn, maëc nhieân T = 0.
signal_name’stable(T)
Traû veà giaù trò Boolean, laø true neáu khoâng coù söï kieän xaûy ra treân tín hieäu trong khoaûng thôøi gian T, ngöôïc laïi thì traû veà giaù trò false. T laø tuyø choïn, maëc nhieân T = 0.
signal_name’quiet(T)
Traû veà giaù trò Boolean, laø true neáu khoâng coù söï thay ñoåi xaûy ra treân tín hieäu trong khoaûng thôøi gian T, ngöôïc laïi laø false. T laø tuyø choïn vaø maëc nhieân T = 0.
Baûng 2-1. Thuoäc tính tín hieäu.
Ví duï 2-50: veà caùc thuoäc tính: if (CLOCK’event and CLOCK= ‘1’) then …
Bieåu thöùc naøy kieåm tra söï xuaát hieän cuûa xung clock caïnh leân. Ñeå tìm khoaûng thôøi gian töø khi
coù xung clock caïnh leân sau cuøng thì duøng thuoäc tính sau:
CLOCK’last_event
b. Thuoäc tính döõ lieäu scalar
Moät vaøi thuoäc tính kieåu döõ lieäu scalar ñöôïc hoã trôï nhö baûng sau:
Giaù trò
Thuoäc tính scalar_type’left
Traû veà giaù trò ñaàu tieân hoaëc giaù trò taän cuøng beân traùi cuûa kieåu döõ lieäu scalar trong kieåu ñaõ ñònh nghóa.
scalar_type’right
104
Kyõ thuaät PLD vaø ASIC
Traû veà giaù trò sau cuøng hoaëc giaù trò taän cuøng beân phaûi cuûa kieåu döõ lieäu scalar trong kieåu ñaõ ñònh nghóa.
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com scalar_type’low
Traû veà giaù trò thaáp nhaát cuûa kieåu döõ lieäu scalar trong kieåu ñaõ ñònh nghóa.
scalar_type’high
Traû veà giaù trò cao nhaát cuûa kieåu döõ lieäu scalar trong kieåu ñaõ ñònh nghóa
scalar_type’ascending Laø true neáu T laø daõy taêng ngöôïc laïi thì false.
scalar_type’value(s) Traû veà giaù trò cuûa T ñöôïc töôïng tröng bôûi s (string value).
Baûng 2-2. Thuoäc tính döõ lieäu scalar.
Ví duï 2-51: veà caùc thuoäc tính: Type conductance is range 1E-6 to 1E3 Units mho; End units conductance; Type my_index is range 3 to 15; Type my_levels is (low, high, dontcare, highZ);
conductance’right conductance’high conductance’low my_index’left my_index’value(5) my_levels’left my_levels’low my_levels’high my_levels’value(dontcare) traû veà 1E3 1E3 1E-6 3 “5” low low highZ “dontcare”
c. Thuoäc tính maûng
Baèng caùch duøng caùc thuoäc tính maûng seõ traû veà giaù trò chæ soá töông öùng vôùi daõy cuûa maûng.
Caùc thuoäc tính ñöôïc xaây döïng nhö sau:
Thuoäc tính Traû veà
MATRIX’left(N) MATRIX’right(N) MATRIX’high(N) MATRIX’low(N) MATRIX’length(N) MATRIX’range(N) MATRIX’reverse_range(N) MATRIX’ascending(N)
Chæ soá phaàn töû taän cuøng beân traùi Chæ soá phaàn töû taän cuøng beân phaûi Giôùi haïn treân Giôùi haïn döôùi Soá löôïng caùc phaàn töû Daõy Daõy baûo veä Traû veà giaù trò true neáu chæ soá theo thöù töï taêng, ngöôïc laïi thì baèng false.
Baûng 2-3. Thuoäc tính maûng.
Con soá N naèm trong daáu ngoaëc ñöôïc xem nhö chieàu cuûa maûng. Ñoái vôùi maûng 1 chieàu thì coù theå boû nhöng ñoái vôùi maûng 2 chieàu thì phaûi duøng con soá N ñeå chæ roõ. Caùc ví duï veà thuoäc tính maûng nhö sau:
Ví duï 2-52: veà caùc thuoäc tính: Type myarr8x4 is range (8 downto 1, 0 to 3) of boolean;
105
Kyõ thuaät PLD vaø ASIC
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Type myarr1 is range (-2 to 4) of integer;
traû veà: -2 4 4 4 downto -2
MYARR1’left MYARR1’right MYARR1’high MYARR1’reverse_range MYARR8x4’left(1) MYARR8x4’left(2) MYARR8x4’right(2) MYARR8x4’high(1) MYARR8x4’low(1) MYARR8x4’ascending(1) 8 0 3 8 1 False
VIII. CAÙC TOAÙN TÖÛ CÔ BAÛN TRONG VHDL
VHDL hoå trôï 7 loaïi toaùn töû khaùc nhau ñeå xöû lyù caùc tín hieäu, bieán vaø haèng soá. Caùc loaïi toaùn töû
ñöôïc lieät keâ nhö sau:
1
Toaùn logic
Thöù töï Loaïi
or
and
nand nor
xor
xnor
2
Toaùn töû quan heä
/=
=
<
<=
>
>=
3
Toaùn töû dòch
srl
sll
sla
sra
rol
ror
4
Toaùn töû soá hoïc
=
+
&
5
-
Toaùn töû khoâng xaùc ñònh +
6
Toaùn töû nhaân chia
/
*
mod
rem
7
Toaùn töû hoãn hôïp
**
abs not
Baûng 2-4. Taát caû caùc toaùn töû.
Thöù töï öu tieân cao nhaát cho toaùn töû thöù 7, tieáp theo laø thöù 6 vaø thaáp nhaát laø toaùn töû thöù 1. Tröø tröôøng hôïp daáu ngoaëc ñöôïc söû duïng thì toaùn töû coù thöù töï öu tieân cao nhaát seõ ñöôïc thöïc hieän tröôùc. Neáu caùc toaùn töû cuøng thöù töï öu tieân thì caùc toaùn töû seõ ñöôïc thöïc hieän töø traùi sang phaûi cuûa bieåu thöùc.
Ví duï 2-53: Cho caùc döõ lieäu nhö sau: X (=‘010’), Y(=‘10’), and Z (=‘10101’) ñeàu thuoäc
kieåu std_ulogic_vectors.
not X & Y xor Z rol 1 thì seõ töông ñöông vôùi ((not X) & Y) xor (Z rol 1) = ((101) & 10) xor (01011) =(10110) xor
(01011) = 11101.
1. CAÙC TOAÙN TÖÛ LOGIC:
106
Kyõ thuaät PLD vaø ASIC
Toaùn töû logic (And, Or, Nand, Nor, Xor vaø Xnor) ñöôïc duøng cho caùc loaïi döõ lieäu “bit”, “boolean”, “std_logic”, “std_ulogic” vaø caùc vector. Caùc toaùn töû naøy ñöôïc duøng ñeå xaùc ñònh bieåu thöùc logic Boolean hoaëc thöïc hieän caùc pheùp toaùn bit vôùi bit treân moät maûng bit. Keát quaû cuøng kieåu
Chöông 2. Ngoân ngöõ laäp trình VHDL
SPKT – Nguyeãn Ñình Phuù
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
döõ lieäu nhö caùc taùc toá (Bit hoaëc Boolean). Caùc toaùn töû naøy coù theå ñöôïc aùp duïng cho caùc tín hieäu, caùc bieán vaø caùc haèng soá.
Chuù yù: caùc toaùn töû nand vaø nor khoâng theå keát hôïp. Phaûi söû duïng daáu ngoaëc ñeå chia caùc toaùn
X nand Y nand Z seõ phaùt sinh loãi vaø phaûi vieát nhö sau (X nand Y) nand Z.
töû nand vaø nor ñeå khoâng phaùt sinh loãi khi bieân dòch:
2. CAÙC TOAÙN TÖÛ QUAN HEÄ:
Toaùn töû quan heä kieåm tra caùc giaù trò quan heä cuûa 2 loaïi döõ lieäu scalar vaø cho keát quaû laø kieåu
Boolean true hoaëc false.
Toaùn töû Moâ taû Kieåu toaùn töû Kieåu keát quaû
= Boolean Baèng Baát kyø
/= Boolean Khoâng baèng Baát kyø
< Nhoû hôn Kieåu scalar hoaëc maûng rôøi raïc Boolean
<= Nhoû hôn hoaëc baèng Kieåu scalar hoaëc maûng rôøi raïc Boolean
> Lôùn hôn Kieåu scalar hoaëc maûng rôøi raïc Boolean
>= Lôùn hôn hoaëc baèng Kieåu scalar hoaëc maûng rôøi raïc Boolean
Baûng 2-5. Caùc toaùn töû quan heä.
Toaùn töû quan heä kieåm tra caùc giaù trò quan heä cuûa 2 loaïi döõ lieäu scalar vaø cho keát quaû laø kieåu
Boolean true hoaëc false.
Chuù yù: kí hieäu “<=” (nhoû hôn hay baèng) gioáng nhö kí hieäu cuûa pheùp gaùn giaù trò cho tín hieäu.
Ví duï 2-54: veà caùc thuoäc tính:
boolean; Variable STS :
integer:= 24; Constant A :
integer:= 32; Constant B_count:
integer:= 14; Constant C :
STS <= (A < B_count); -- gaùn giaù trò “true” cho STS
STS <= ((A >= B_count) or (A>C)); -- gaùn giaù trò “true” cho STS
STS <= (std_logic(‘1’,’0’,’1’) Type new_std_logic is (‘0’, ‘1’, ‘Z’, ‘-’); Variable A1 : new_std_logic := ‘1’; Variable A2 : new_std_logic := ‘Z’; STS <= (A1 < A2); -- gaùn giaù trò “true” cho STS vì ‘1’ naèm beân traùi cuûa ‘Z’ 3. CAÙC TOAÙN SOÁ HOÏC: Toaùn töû soá hoïc ñöôïc duøng ñeå thöïc hieän caùc pheùp toaùn coäng vaø tröø treân caùc taùc toá cuûa baát kì
kieåu döõ lieäu naøo. Toaùn töû & ñöôïc duøng ñeå noái hai vector taïo thaønh 1 vector daøi hôn. Ñeå duøng caùc
toaùn töû soá hoïc thì phaûi khai baùo caùc thö vieän std_logic_unsigned.all hoaëc std_logic_arith package
vaøo thö vieän std_logic_1164 package. Toaùn töû Moâ taû Taùc toá beân traùi Taùc toá beân phaûi Keát quaû Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Pheùp coäng Kieåu soá Gioáng taùc toá beân traùi Cuøng kieåu + Pheùp tröø Kieåu soá Gioáng taùc toá beân traùi Cuøng kieåu - Noái daøi Kieåu maûng hoaëc phaàn töû Gioáng taùc toá beân traùi Cuøng kieåu maûng & Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Baûng 2-6. Caùc toaùn töû soá hoïc. :std_logic_vector (15 downto 0);
:std_logic_vector (2 downto 0);
:std_logic; Ví duï 2-55: cho caùc tín hieäu
signal MYBUS
signal STATUS
signal RW, CS1, CS2
signal MDATA :std_logic_vector ( 0 to 9);
Thöïc hieän: MYBUS <= STATUS & RW & CS1 & SC2 & MDATA; MYARRAY (15 downto 0) <= “1111_1111” & MDATA (2 to 9);
NEWWORD <= “VHDL” & “93”; 4. CAÙC TOAÙN TÖÛ COÙ DAÁU: Toaùn töû “+” vaø “-” ñöôïc duøng ñeå chæ ñònh daáu cuûa döõ lieäu soá Toaùn töû Moâ taû Kieåu döõ lieäu taùc toá Kieåu döõ lieäu keát quaû + Soá döông Baát kyø döõ lieäu soá naøo Cuøng kieåu - Soá aâm Baát kyø döõ lieäu soá naøo Cuøng kieåu 108 Kyõ thuaät PLD vaø ASIC Baûng 2-7. Caùc toaùn töû coù daáu. Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 5. CAÙC TOAÙN TÖÛ NHAÂN CHIA: Toaùn töû nhaân ñöôïc duøng ñeå thöïc hieän caùc haøm toaùn hoïc treân caùc kieåu döõ lieäu soá nguyeân hoaëc kieåu daáu chaám ñoäng. Moâ taû Kieåu döõ lieäu tt traùi Kieåu döõ lieäu tt phaûi Kieåu KQ kieåu integer vaø DCÑ Cuøng kieåu Cuøng kieåu Nhaân * kieåu vaät lyù Kieåu soá nguyeân hoaëc thöïc Cuøng kieåu tt traùi kieåu soá nguyeân hoaëc thöïc Kieåu vaät lyù Cuøng kieåu tt
phaûi Chia Cuøng kieåu / Soá nguyeân hoaëc daáu chaám
ñoäng Soá nguyeân hoaëc daáu chaám
ñoäng Soá nguyeân hoaëc soá thöïc Cuøng kieåu tt traùi Kieåu vaät lyù Cuøng kieåu Soá nguyeân Kieåu vaät lyù Cuøng kieåu Kieåu soá nguyeân Taùc
toá Chia
nguyeân Cuøng kieåu Remainder Kieåu soá nguyeân Baûng 2-8. Caùc toaùn töû nhaân chia. keát quaû baèng -3 keát quaû baèng –1 (7 – 4*2 = -1). Ví duï 2-56: cho caùc tín hieäu
11 rem 4 keát quaû baèng 3
(-11) rem 4
9 mod 4 keát quaû baèng 1
7 mod (-4) 6. CAÙC TOAÙN TÖÛ DÒCH: Toaùn töû thöïc hieän dòch chuyeån töøng bit hoaëc xoay töøng bit treân döõ lieäu maûng 1 chieàu cuûa caùc phaàn töû kieåu döõ lieäu bit hoaëc std_logic hoaëc Boolean. Toaùn töû Moâ taû Kieåu döõ lieäu taùc toá Dòch sang traùi – laép ñaày baèng caùc bit 0. (Shift
left logical) Maûng 1 chieàu vôùi caùc phaàn töû maûng kieåu bit
hoaëc Boolean; Right: integer Gioáng nhö treân Dòch sang phaûi – laép ñaày baèng caùc bit 0.
(Shift right logical) Gioáng nhö treân Dòch sang traùi laép ñaày baèng bit taän cuøng beân
phaûi. (Shift left arithmetic) Gioáng nhö treân Dòch sang phaûi laép ñaày baèng bit taän cuøng beân
traùi. (Shift right arithmetic) Gioáng nhö treân Xoay voøng troøn sang traùi (Rotate left
circular) Gioáng nhö treân Xoay voøng troøn sang phaûi (Rotate right
circular) Baûng 2-9. Caùc toaùn töû dòch. Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Toaùn töû naèm beân traùi toaùn töû vaø soá laàn dòch naèm beân phaûi toaùn töû – xem ví duï 2-57: Ví duï 2-57: Cho variable NUM1 :bit_vector := “10010110”; NUM1 srl 2;
NUM1 = “00100101”. Thöïc hieän
Keát quaû
Khi soá laàn dòch laø soá aâm thì hoaït ñoäng dòch xaûy ra theo chieàu ngöôïc laïi, dòch traùi seõ trôû thaønh :bit_vector := “10010110”; dòch phaûi.
Ví duï 2-58: Cho variable NUM1
NUM1 srl –2 seõ töông ñöông vôùi NUM1 sll 2 vaø cho keát quaû laø “01011000”.
Ví duï 2-59: Cho variable A: bit_vector := “101001”; A sll 2 results in
A srl 2 results in
A sla 2 results in
A sra 2 results in
A rol 2 results in
A ror 2 results in “100100”
“001010”
“100111”
“111010”
“100110”
“011010” 7. CAÙC TOAÙN HOÃN HÔÏP: Toaùn töû hoãn hôïp goàm toaùn töû trò tuyeät ñoái vaø toaùn töû soá muõ coù theå aùp duïng cho caùc kieåu döõ lieäu soá. Toaùn töû not seõ cho cuøng giaù trò nhöng ngöôïc daáu. ** Haøm muõ Soá nguyeân Soá nguyeân Gioáng döõ lieäu beân traùi Daáu chaám Soá nguyeân Gioáng döõ lieäu beân traùi Haøm trò tuyeät ñoái Kieåu soá Cuøng kieåu Haøm phuû ñònh Kieåu bit hoaëc Boolean Cuøng kieåu Baûng 2-10. Caùc toaùn töû hoãn hôïp. IX. CHÖÔNG TRÌNH CON VAØ GOÙI 1. CHÖÔNG TRÌNH CON: Chöông trình con bao goàm caùc thuû tuïc vaø caùc haøm. Thuû tuïc coù theå traû veà nhieàu hôn 1 ñoái soá,
coøn haøm thì chæ traû veà 1 ñoái soá. Trong moät haøm thì taát caû caùc thoâng soá ñeàu laø thoâng soá ngoõ vaøo,
trong thuû tuïc coù theå laø thoâng soá ngoõ vaøo, thoâng soá ngoõ ra vaø coù theå laø so vaøo ra. Coù hai kieåu cho haøm vaø thuû tuïc: thuû vaø haøm ñoàng thôøi, thuû tuïc vaø haøm tuaàn töï. Haøm vaø thuû
tuïc ñoàng thôøi chæ toàn taïi naèm beân ngoaøi phaùt bieåu quaù trình hoaëc moät chöông trình con; haøm vaø thuû
tuïc tuaàn töï chæ toàn taïi trong phaùt bieåu quaù trình hoaëc trong 1 chöông trình con khaùc. 110 Kyõ thuaät PLD vaø ASIC Taát caû caùc phaùt bieåu naèm beân trong moät chöông trình con laø tuaàn töï. Caùc phaùt bieåu gioáng
nhau toàn taïi trong moät phaùt bieåu quaù trình thì coù theå ñöôïc duøng trong moät chöông trình con bao
goàm caû phaùt bieåu WAIT. Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com a. Haøm - FUNCTION: Ví duï 2-60 laø moät haøm, haøm naøy nhaän vaøo moät maûng coù kieåu STD_LOGIC vaø traû veà moät giaù
trò soá nguyeân. Giaù trò soá nguyeân naøy bieåu dieãn giaù trò soá hoïc cuûa taát caû caùc bit ñöôïc xöû lyù döôùi daïng
soá nhò phaân: IEEE;
IEEE.std_logic_1164.ALL; Ví duï 2-60: caùch vieát haøm
LIBRARY
USE
PACKAGE num_type IS TYPE log8 IS ARRAY (0 TO 7) OF std_logic; -- line 1 num_type; END IS
IN
OUT log8;
-- line 2
INTEGER); -- line 3 convert
(I1:
O1:
convert; behave OF convert IS -- line 4
-- line 5
-- line 6 USE work.num_type.ALL;
ENTITY
PORT
END
ARCHITECTURE
FUNCTION vector_to_int(S:log8)
RETURN INTEGER is
VARIABLE result: INTEGER := 0
BEGIN For i IN 0 TO 7 LOOP
result := result * 2;
IF S(i) = ‘1’ THEN -- line 7
-- line 8
-- line 9
-- line 10 result := result + 1; END IF ; END LOOP;
RETURN result ; -- line 11 O1 <= vector_to_int (I1); END vector_to_int;
BEGIN
END behave; Doøng 1 khai baùo kieåu maûng ñöôïc söû duïng cho toaøn boä chöông trình. Caùc doøng 2 vaø 3 khai baùo caùc port ngoõ vaøo, ngoõ ra cuûa thöïc theå convert vaø caùc kieåu döõ lieäu. Caùc doøng töø 4 ñeán 11 moâ taû moät haøm ñöôïc khai baùo trong mieàn khai baùo cuûa kieán truùc
behave. Baèng caùch khai baùo haøm trong mieàn khai baùo cuûa kieán truùc, haøm naøy seõ ñöôïc söû duïng baát
kyø mieàn naøo cuûa kieán truùc. Caùc doøng 4 vaø 5 khai baùo teân cuûa haøm, caùc ñoái soá cuûa haøm vaø kieåu maø haøm traû veà. ÔÛ doøng 6 moät bieán cuïc boä cuûa haøm ñöôïc khai baùo. Caùc haøm coù caùc mieàn khai baùo raát gioáng
vôùi caùc phaùt bieåu quaù trình. Caùc bieán, caùc haèng vaø caùc kieåu coù theå ñöôïc khai baùo nhöng tín hieäu thì
khoâng. Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Caùc doøng töø 7 ñeán 10 khai baùo moät phaùt bieåu voøng laëp cho moãi giaù trò trong maûng. Giaûi thuaät
cô baûn cuûa haøm naøy laø dòch vaø coäng vôùi moãi vò trí bit trong maûng. Ñaàu tieân keát quaû ñöôïc dòch (töùc
laø nhaân 2) vaø tieáp theo laø vò trí bit laø 1 thì giaù trò 1 ñöôïc coäng vaøo keát quaû. ÔÛ cuoái phaùt bieåu voøng laëp, bieán result seõ chöùa giaù trò nguyeân cuûa maûng ñöôïc chuyeån vaøo. Giaù
trò cuûa haøm ñöôïc chuyeån ngöôïc veà thoâng qua phaùt bieåu RETURN. Trong ví duï treân thì phaùt bieåu
RETURN ñöôïc trình baøy ôû doøng 11. Cuoái cuøng, doøng 12 trình baøy caùch thöùc moät haøm ñöôïc goïi. Teân cuûa haøm ñöôïc theo sau bôûi
caùc ñoái soá cuûa haøm ôû trong hai ngoaëc ñôn. Haøm seõ luoân luoân traû veà moät giaù trò, do vaäy quaù trình
goïi, phaùt bieåu ñoàng thôøi, … phaûi coù moät vò trí ñeå haøm coù theå traû veà giaù trò naøy. Trong ví duï naøy, ngoõ
ra cuûa haøm ñöôïc gaùn cho moät port ngoõ ra. Caùc thoâng soá cuûa haøm laø döõ lieäu nhaäp. Khoâng coù pheùp gaùn naøo ñöôïc thöïc hieän cho baát kyø
thoâng soá naøo cuûa haøm. Trong ví duï treân caùc thoâng soá thuoäc loaïi haèng soá do khoâng coù loaïi roõ raøng
ñöôïc chæ ñònh vaø maëc ñònh laø haèng. Caùc ñoái soá ñöôïc xöû lyù nhö theå chuùng laø caùc haèng ñöôïc khai baùo
trong mieàn khai baùo cuûa haøm. Loaïi thoâng soá cuûa haøm coù theå laø thoâng soá tín hieäu. Vôùi moät thoâng soá tín hieäu, caùc thuoäc tính
cuûa tín hieäu ñöôïc chuyeån vaøo trong haøm vaø saün saøng ñöôïc söû duïng. Ngoaïi leä ñoái vôùi phaùt bieåu
thuoäc tính ‘STABLE, ‘QUIET, ‘TRANSACTION, vaø ‘DELAYED seõ taïo ra caùc tín hieäu ñaëc bieät. Moät ví duï 2-61 cho thaáy moät haøm chöùa caùc thoâng soá tín hieäu nhö sau: IS IEEE;
IEEE.std_logic_1164.ALL;
dff
(d, clk:
q: IN
OUT std_logic;
std_logic); Ví duï 2-61:
LIBRARY
USE
ENTITY
PORT
FUNCTION resing_edge (SINGAL S : std_logic) -- line 1
-- line 2 RETURN BOOLEAN IS
BEGIN IF (S’EVENT) AND (S=‘1’) AND
(S’LAST_VALUE = ‘0’) THEN -- line 3
-- line 4
-- line 5
-- line 6 RETURN TRUE;
ELSE RETURN FALSE;
END IF; END resing_edge; dff; behave OF dff IS END
ARCHITECTURE 112 Kyõ thuaät PLD vaø ASIC BEGIN PROCESS (CLK)
BEGIN IF rising_edge(clk) THEN q <= d; -- line 7
-- line 8 Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com END IF; END PROCESS; END behave; Ví duï naøy cung caáp phöông phaùp phaùt hieän caïnh leân cho moâ hình flip flop D. Haøm khai baùo trong phaàn khai baùo thöïc theå vaø do vaäy coù theå söû duïng cho baát kyø kieán truùc naøo cuûa thöïc theå naøy. Caùc doøng 1 vaø 2 cho thaáy khai baùo haøm. Chæ coù moät thoâng soá (S) cho haøm vaø thoâng soá naøy thuoäc loaïi tín hieäu. Caùc doøng 3 vaø 4 laø moät phaùt bieåu IF, phaùt bieåu naøy xaùc ñònh coù phaûi tín hieäu vöøa thay ñoåi hay
khoâng, coù phaûi giaù trò hieän taïi laø ‘1’ hay khoâng vaø coù phaûi giaù trò tröôùc ñoù laø ‘0’ hay khoâng. Neáu taát
caû caùc ñieàu kieän naøy laø ñuùng, phaùt bieåu IF seõ traû veà giaù trò ñuùng (true), coù nghóa laø moät caïnh taêng
ñaõ ñöôïc phaùt hieän treân tín hieäu. Neáu moät ñieàu kieän naøo ñoù trong caùc ñieàu kieän naøy khoâng ñuùng,
giaù trò ñöôïc traû veà seõ laø sai (false), nhö ñöôïc trình baøy ôû doøng 6. Doøng 7 goïi haøm söû duïng tín hieäu ñöôïc taïo ra bôûi port clk cuûa thöïc theå dff. Neáu coù moät caïnh taêng treân tín hieäu clk, giaù trò cuûa d ñöôïc chuyeån ñeán ngoõ ra q. Coâng duïng phoå bieán nhaát cuûa haøm laø traû veà moät giaù trò trong moät bieåu thöùc, tuy nhieân coøn coù
hai coâng duïng nöõa coù saün trong VHDL. Coâng duïng ñaàu tieân laø haøm chuyeån ñoåi (conversion
function) vaø coâng duïng thöù hai laø haøm phaân tích (resolution function). Caùc haøm chuyeån ñoåi ñöôïc söû
duïng ñeå chuyeån ñoåi töø kieåu naøy sang kieåu khaùc. Caùc haøm phaân tích ñöôïc söû duïng ñeå phaân tích vieäc
tranh chaáp bus treân moät tín hieäu coù nhieàu nguoàn kích (multiply-driven signal). b. Haøm chuyeån ñoåi: Caùc haøm chuyeån ñoåi ñöôïc söû duïng ñeå chuyeån ñoåi moät ñoái töôïng coù kieåu naøy thaønh ñoái töôïng
coù kieåu khaùc. Caùc haøm chuyeån ñoåi ñöôïc söû duïng trong caùc phaùt bieåu theå hieän thaønh phaàn ñeå cho
pheùp vieäc aùnh xaï caùc tín hieäu vaø port coù caùc kieåu khaùc nhau. Loaïi tình huoáng naøy thöôøng phaùt sinh
khi moät ngöôøi thieát keá muoán söû duïng moät thöïc theå töø moät thieát keá khaùc. Giaû ñònh raèng ngöôøi thieát keá A ñang söû duïng kieåu döõ lieäu coù 4 giaù trò nhö sau: TYPE fourval IS (X, L, H, Z); Ngöôøi thieát keá B ñang söû duïng kieåu döõ lieäu cuõng chöùa 4 giaù trò nhöng caùc ñònh danh giaù trò laïi khaùc, nhö ñöôïc trình baøy sau ñaây TYPE fourvalue IS (‘X’, ‘0’, ‘1’, ‘Z’); Caû hai kieåu naøy ñeàu coù theå ñöôïc söû duïng ñeå bieåu dieãn caùc traïng thaùi cuûa moät heä thoáng giaù trò
4-traïng thaùi cho moät moâ hình cuûa VHDL. Neáu ngöôøi thieát keá A muoán söû duïng moät moâ hình töø
ngöôøi thieát keá B, nhöng ngöôøi thieát keá B ñaõ söû duïng caùc giaù trò töø kieåu fuorvalue laøm caùc port giao
dieän cuûa moâ hình, ngöôøi thieát keá A khoâng theå söû duïng moâ hình naøy maø khoâng chuyeån ñoåi kieåu cuûa
caùc port thaønh caùc giaù trò ñöôïc söû duïng bôûi ngöôøi thieát keá B. Vaán ñeà naøy coù theå giaûi quyeát ñöôïc
thoâng qua vieäc söû duïng caùc haøm chuyeån ñoåi. Tröôùc tieân ta haõy vieát haøm chuyeån ñoåi giaù trò giöõa hai heä thoáng. Caùc giaù trò töø heä thoáng thöù nhaát bieåu dieãn caùc traïng thaùi phaân bieät: X – giaù trò chöa bieát. L – giaù trò logic 0. H – giaù trò logic 1. Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Z – giaù trò toång trôû cao. Caùc giaù trò töø heä thoáng thöù hai bieåu dieãn caùc traïng thaùi: ‘X’ – giaù trò chöa bieát. ‘0’ – giaù trò logic 0. ‘1’ – giaù trò logic 1. ‘Z’ – giaù trò toång trôû cao. Töø moâ taû treân cuûa hai heä thoáng giaù trò ta coù moät ví duï veà haøm chuyeån ñoåi nhö sau: Ví duï 2-62:
FUNCTION convert4val (S : fourval) RETURN fourvalue IS BEGIN
CASE S IS WHEN X => RETURN ‘X’;
WHEN L => RETURN ‘0’;
WHEN H => RETURN ‘1’;
WHEN Z => RETURN ‘Z’; END CASE ; END convert4val; Haøm naøy seõ nhaän moät giaù trò coù kieåu fourval vaø traû veà moät giaù trò coù kieåu fourvalue. Ví duï sau ñaây cho thaáy nôi maø haøm coù theå ñöôïc söû duïng: Ví duï 2-63:
PACKAGE my_std IS
(X, L, H, Z) ;
(‘X’, ‘L’, ‘H’, ‘Z’) ;
ARRAY (0 TO 3) OF fourval; IS
IS
IS my_std; WORK.my_std.ALL;
IS
reg
IN
( a
clr: IN
clk: IN
q: OUT fvector4;
fourval;
fourval;
fvector4); TYPE fourval
TYPE fourvalue
TYPE fvector4
END
USE
ENTITY
PORT FUNCTION convert4val (S : fourval) RETURN fourvalue IS BEGIN CASE S IS 114 Kyõ thuaät PLD vaø ASIC WHEN X => RETURN ‘X’;
WHEN L => RETURN ‘0’; Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com WHEN H => RETURN ‘1’;
WHEN Z => RETURN ‘Z’; END CASE ; END convert4val; FUNCTION convert4value (S : fourvalue) RETURN fourval IS
BEGIN CASE S IS WHEN ‘X’ => RETURN X;
WHEN ‘0’ => RETURN 0;
WHEN ‘1’ => RETURN 1;
WHEN ‘Z’ => RETURN Z; END CASE ;
END convert4value; END reg; ARCHITECTURE
COMPONENT structure OF reg IS
dff PORT ( d, clk, clr:
q: OUT IN fourvalue;
fourvalue;); END COMPONENT;
BEGIN U1: dff PORT MAP ( convert4val(a(0)), convert4val(clk),
convert4val(clr),
convert4value(q) => q(0)); U2: dff PORT MAP ( convert4val(a(1)), convert4val(clk),
convert4val(clr),
convert4value(q) => q(1)); U3: dff PORT MAP ( convert4val(a(2)), convert4val(clk),
convert4val(clr),
convert4value(q) => q(2));
U4: dff PORT MAP ( convert4val(a(3)), convert4val(clk),
convert4val(clr),
convert4value(q) => q(3)); END structure; Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Ví duï naøy laø moät thanh ghi 4 bit ñöôïc xaây döïng baèng caùc flip flop. Kieåu ñöôïc söû duïng trong
khai baùo thöïc theå cho thanh ghi laø moät vector kieåu fourval. Tuy nhieân caùc flip flop ñöôïc theå hieän coù
caùc port coù kieåu fourvalue. Moät loãi khoâng töông thích kieåu seõ ñöôïc taïo ra neáu caùc port cuûa thöïc theå
thanh ghi ñöôïc aùnh xaï tröïc tieáp ñeán caùc port thaønh phaàn. Do vaäy moät haøm chuyeån ñoåi ñöôïc caàn
ñeán ñeå chuyeån ñoåi hai heä thoáng giaù trò. Neáu caùc port ñeàu ôû cheá ñoä IN thì chæ moät chuyeån ñoåi ñöôïc caàn ñeán ñeå aùnh xaï töø kieåu cuûa
thöïc theå chöùa ñeán kieåu cuûa thöïc theå ñöôïc chöùa. Trong ví duï naøy, neáu caùc port ñeàu ôû cheá ñoä ngoõ
vaøo thì chæ coù haøm convert4value ñöôïc yeâu caàu. Neáu thaønh phaàn cuõng coù caùc port ngoõ ra, caùc giaù trò ngoõ ra cuûa thöïc theå ñöôïc chöùa caàn ñöôïc
chuyeån ñoåi traû veà kieåu cuûa thöïc theå chöùa. Trong ví duï naøy port q cuûa thaønh phaàn dff laø moät port
ngoõ ra. Kieåu cuûa caùc giaù trò ngoõ ra. Kieåu cuûa caùc giaù trò ngoõ ra seõ laø fourvalue. Caùc giaù trò naøy
khoâng theå ñöôïc aùnh xaï ñeán caùc port kieåu fourval. Haøm convert4value seõ chuyeån ñoåi töø kieåu
fourvalue thaønh kieåu fourval. AÙp duïng haøm naøy treân caùc port ngoõ ra seõ cho pheùp aùnh xaï port xaûy
ra. Coù 4 theå hieän thaønh phaàn söû duïng caùc haøm chuyeån ñoåi naøy: caùc thaønh phaàn töø U1 ñeán U4.
Löu yù raèng caùc port ngoõ vaøo söû duïng haøm chuyeån ñoåi convert4val trong khi caùc port ngoõ ra söû duïng
haøm chuyeån ñoåi convert4value. Duøng daïng keát hôïp ñaët naøy cuûa aùnh xaï cho theå hieän thaønh phaàn U1 nhö sau: U1: dff PORT MAP ( d => convert4val(a(0)),
clk => convert4val(clk),
clr => convert4val(clk),
convert4value(p) => p(0)); Caùc haøm chuyeån ñoåi giaûi phoùng ngöôøi thieát keá khoûi vieäc taïo ra nhieàu tín hieäu hoaëc bieán taïm
thôøi ñeå theå hieän vieäc chuyeån ñoåi. Ví duï 2-64 trình baøy moät phöông phaùp khaùc ñeå thöïc hieän caùc
haøm chuyeån ñoåi: Ví duï 2-64:
Temp1
Temp2
Temp3 <=
<=
<= convert4val(a(0));
convert4val(clk));
convert4val(clr); U1: dff PORT MAP ( d => temp1,
clk => temp2,
clr => temp3,
q => temp4);, q(0) <= convert4value(temp4); Phöông phaùp naøy daøi doøng, yeâu caàu moät bieán taïm trung gian cho moãi port cuûa thaønh phaàn ñöôïc aùnh xaï. Phöông phaùp ít ñöôïc löïa choïn. 116 Kyõ thuaät PLD vaø ASIC Neáu moät port ôû cheá ñoä INOUT, caùc haøm chuyeån ñoåi khoâng theå thöïc hieän ñöôïc vôùi kyù hieäu vò
trí. Caùc port phaûi söû duïng keát hôïp ñaët teân do hai haøm chuyeån ñoåi phaûi ñöôïc keát hôïp vôùi port Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com INOUT. Moät haøm chuyeån ñoåi seõ ñöôïc söû duïng cho phaàn ngoõ vaøo cuûa port INOUT vaø moät haøm
khaùc seõ ñöôïc söû duïng cho phaàn ngoõ ra cuûa port nhaäp/xuaát. Trong ví duï sau ñaây, linh kieän truyeàn hai chieàu ñöôïc chöùa trong thöïc theå coù teân laø trans2: Ví duï 2-64: PACKAGE my_pack
IS
IS
IS IS
(Z0, Z1, ZX, R0, R1, RX, F0, F1, FX) ;
ARRAY (0 TO 1) OF (nineval) ;
(X, L, H, Z); TYPE nineval
TYPE nvector2
TYPE fourstate FUNCTION convert4state (a : fourstate) RETURN nineval;
FUNCTION convert9val(a : nineval) RETURN fourstate; END my_pack;
PACKAGE body my_pack IS
FUNCTION convert4state (a : fourstate) RETURN nineval IS;
BEGIN CASE a IS WHEN X => RETURN FX;
WHEN L => RETURN F0;
WHEN H => RETURN F1;
WHEN Z => RETURN ZX; END CASE ;
END convert4state; FUNCTION convert9val (a : nineval) RETURN fourstate IS;
BEGIN CASE a IS WHEN Z0 => RETURN Z;
WHEN Z1 => RETURN Z;
WHEN ZX => RETURN Z;
WHEN R0 => RETURN L;
WHEN R1 => RETURN H;
WHEN RX => RETURN X;
WHEN F0 => RETURN L;
WHEN F1 => RETURN H;
WHEN FX => RETURN X; END CASE ; END convert9val; WORK.my_pack.ALL;
trans2
( a, b:
enable: IS
INOUT
IN nvector2;
nineval); END my_pack;
USE
ENTITY
PORT
END
trans2;
ARCHITECTURE
COMPONENT struct OF trans2 IS
trans PORT INOUT
OUT fourstate;
fourstate); ( x1, x2:
En:
END COMPONENT; Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com BEGIN U1: trans PORT MAP ( convert4state(x1) => convert9val(a(0)) ,
( convert4state(x2) => convert9val(b(0)) , en => convert9val(enable)); U2: trans PORT MAP ( convert4state(x1) => convert4state(a(1)) ,
( convert4state(x2) => convert4state(b(1)) , en => convert9val(enable)); END struct; Moãi thaønh phaàn laø moät linh kieän truyeàn hai chieàu coù teân laø trans. Linh kieän trans chöùa 3 port:
caùc port x1 vaø x2 laø caùc port vaøo-ra coøn port en laø port ngoõ vaøo. Khi port en coù giaù trò H thì x1 ñöôïc
chuyeån ñeán x2 vaø khi port en coù giaù trò L, x2 ñöôïc chuyeån ñeán x1. Caùc thaønh phaàn trans söû duïng kieåu fourstate laøm kieåu cuûa caùc port trong khi thöïc theå chöùa söû
duïng kieåu nineval. Caùc haøm chuyeån ñoåi ñöôïc yeâu caàu ñeå cho pheùp theå hieän cuûa caùc thaønh phaàn
trans trong kieán truùc struct cuûa thöïc theå trans2. Phaùt bieåu theå hieän thaønh phaàn ñaàu tieân cho thaønh phaàn trans coù nhaõn laø U1 trình baøy caùch
thöùc maø caùc haøm chuyeån ñoåi ñöôïc söû duïng cho caùc port vaøo-ra. AÙnh xaï port ñaàu tieân seõ aùnh xaï
port x1 ñeán a(0). Port a(0) coù kieåu nineval do ñoù tín hieäu ñöôïc taïo bôûi port naøy coù kieåu nineval. Khi tín hieäu naøy ñöôïc aùnh xaï ñeán port x1 cuûa thaønh phaàn trans, tín hieäu naøy phaûi ñöôïc
chuyeån ñoåi thaønh fourstate. Haøm chuyeån ñoåi convert9val phaûi ñöôïc goïi ñeå hoaøn taát vieäc chuyeån
ñoåi. Khi döõ lieäu ñöôïc chuyeån ra ñeán port x1 ñoái vôùi phaàn xuaát cuûa port vaøo-ra, haøm chuyeån ñoåi
convert4state phaûi ñöôïc goïi. Khi x1 thay ñoåi, haøm convert4state ñöôïc goïi ñeå chuyeån ñoåi giaù trò fourstate thaønh giaù trò
nineval tröôùc khi ñöôïc chuyeån ñeán thöïc theå chöùa trans2. Ngöôïc laïi khi port a(0) thay ñoåi, haøm
convert9val ñöôïc goïi ñeå chuyeån ñoåi giaù trò nineval thaønh giaù trò fourstate, giaù trò naøy coù theå ñöôïc söû
duïng beân trong moâ hình strans. Caùc haøm chuyeån ñoåi ñöôïc söû duïng ñeå chuyeån ñoåi moät giaù trò cuûa moät kieåu naøy thaønh moät giaù
trò cuûa kieåu khaùc. Caùc haøm naøy coù theå ñöôïc goïi moät caùch roõ raøng nhö laø moät phaàn cuûa vieäc thöïc thi
hoaëc khoâng roõ raøng töø moät aùnh xaï trong moät theå hieän thaønh phaàn. c. Haøm phaân tích: Haøm phaân tích ñöôïc söû duïng ñeå traû veà giaù trò cuûa moät tín hieäu khi tín hieäu ñöôïc kích bôûi
nhieàu driver. Seõ khoâng hôïp leä trong VHDL khi coù moät tín hieäu vôùi nhieàu driver maø khoâng coù haøm
phaân tích gaùn cho tín hieäu ñoù. Moät haøm phaân tích ñöôïc goïi moãi khi moät driver cuûa tín hieäu coù moät
söï kieän xaûy ra. Haøm phaân tích seõ ñöôïc thöïc thi vaø seõ traû veà moät giaù trò duy nhaát trong taát caû caùc giaù
trò cuûa caùc driver; giaù trò naøy seõ laø giaù trò môùi cuûa tín hieäu. Trong caùc trình moâ phoûng ñieån hình, caùc haøm phaân tích ñöôïc caøi ñaët saün hoaëc coá ñònh. Vôùi
VHDL ngöôøi thieát keá coù khaû naêng ñònh nghóa baát kyø loaïi haøm phaân tích naøo mong muoán, wired-or,
wired-and, giaù trò trung bình tín hieäu, … 118 Kyõ thuaät PLD vaø ASIC Moät haøm phaân tích coù moät ngoõ vaøo ñoái soá duy nhaát vaø traû veà moät giaù trò duy nhaát. Ñoái soá ngoõ
vaøo duy nhaát naøy bao goàm moät daõi raøng buoäc caùc giaù trò cuûa driver cuûa tín hieäu maø haøm phaân tích
ñöôïc gaùn. Neáu tín hieäu coù hai driver, daûi khoâng raøng buoäc seõ coù hai phaàn töû; neáu tín hieäu coù ba
driver, daûi khoâng raøng buoäc seõ coù ba phaàn töû. Haøm phaân tích seõ xem xeùt caùc giaù trò cuûa taát caû caùc
driver vaø traû veà moät giaù trò duy nhaát goïi laø giaù trò phaân tích (resolved value) cuûa tín hieäu. Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Ta haõy khaûo saùt moät haøm phaân tích ñoái vôùi kieåu fourval ñaõ ñöôïc söû duïng trong caùc ví duï haøm chuyeån ñoåi. Khai bao kieåu cho fourval nhö sau: TYPE fourval IS (X, L, H, Z); 4 giaù trò phaân bieät ñöôïc khai baùo bieåu dieãn taát caû caùc giaù trò coù theå coù maø tín hieäu coù theå
chöùa. Giaù trò L bieåu dieãn logic 0, giaù trò H logic 1, giaù trò Z bieåu dieãn ñieàu kieän toång trôû cao, giaù trò
X bieåu dieãn ñieàu kieän chöa bieát, trong ñoù giaù trò coù theå bieåu dieãn logic 0 hoaëc logic 1 (nghóa laø tuøy
ñònh) nhöng ta khoâng chaéc laø giaù trò naøo. Caùc ñieàu kieän naøy coù theå xaûy ra khi hai driver ñang kích
moät tín hieäu – moät driver kích vôùi logic H vaø driver kia kích vôùi logic L. Lieät keâ vaøo theo thöù töï ñoä maïnh, vôùi yeáu nhaát ôû treân cuøng, caùc giaù trò naøy nhö sau. Z – yeáu nhaát – H, L vaø X coù theå ghi ñeø. H, L – trung bình – chæ coù X coù theå ghi ñeø. X – maïnh nhaát – khoâng bò ghi ñeø. Baèng caùch söû duïng thoâng tin naøy, moät baûng giaù trò coù hai ngoõ vaøo coù theå ñöôïc phaùt trieån nhö ñöôïc trình baøy ôû baûng döôùi. Baûng 2-11 cho giaù trò ngoõ ra coù 2 ngoõ vaøo Z L H X Z Z L H X L L L X X H H X H X Baûng 2-11. X X X X X Baûng giaù trò naøy duøng cho caùc giaù trò hai ngoõ vaøo, ta coù theå môû roäng nhieàu ngoõ vaøo hôn baèng
caùch aùp duïng lieân tieáp baûng naøy cho hai giaù trò ôû moät thôøi ñieåm. Ñieàu naøy coù theå thöïc hieän ñöôïc do
baûng naøy coù tính giao hoaùn vaø keát hôïp. Moät L vaø moät Z hoaëc moät Z vaø moät L seõ cuøng cho keát quaû. Moät (L, Z) vôùi H seõ cho keát quaû gioáng nhö moät (H, Z) vôùi moät L. Caùc nguyeân taéc naøy raát quan troïng do thöù töï caùc giaù trò cuûa driver beân trong ñoái soá ngoõ vaøo
cuûa haøm phaân tích laø khoâng ñònh tröôùc theo quan ñieåm cuûa ngöôøi thieát keá. Baát kyø phuï thuoäc naøo
treân thöù töï ñeàu coù theå gaây ra keát quaû khoâng ñònh tröôùc töø haøm phaân tích. Baèng caùch söû duïng taát caû caùc thoâng tin naøy, moät ngöôøi thieát keá coù theå vieát moät haøm phaân tích
cho kieåu naøy. Haøm phaân tích seõ duy trì ñoä maïnh cao nhaát trong chöøng möïc thaáy ñöôïc vaø so saùnh
giaù trò naøy vôùi giaù trò môùi, moät phaàn töû duy nhaát ôû moät thôøi ñieåm cho ñeán khi taát caû caùc giaù trò ñeàu
ñaõ ñöôïc söû duïng heát. Giaûi thuaät naøy seõ traû veà giaù trò coù ñoä maïnh cao nhaát. Döôùi ñaây laø moät ví duï
cho moät haøm phaân tích nhö vaäy. Ví duï 2-65: PACKAGE fourpack TYPE fourval
TYPE fourval_vector IS
IS
IS (X, L, H, Z) ;
ARRAY (nineval RANGE <>) OF fourval; FUNCTION resolve (s : fourval_vector) RETURN fourval; Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com END fourpack; PACKAGE BODY fourpack IS
FUNCTION resolve (s : fourval_vector) RETURN fourval IS VARIABLE result : fourval := Z; BEGIN FOR i IN s’RANGE LOOP CASE result IS WHEN Z =>
CASE s(i) IS
WHEN H => result := H;
WHEN L => result := L;
WHEN X => result := X;
WHEN OTHERS => NULL; END CASE ; WHEN L =>
CASE s(i) IS
WHEN H => result := X;
WHEN X => result := X;
WHEN OTHERS => NULL; END CASE ; WHEN H =>
CASE s(i) IS
WHEN L => result := X;
WHEN X => result := X;
WHEN OTHERS => NULL; END CASE ; WHEN X => result := X; END CASE ; END LOOP ;
RETURN result ; END resolve ; END fourpack ; Ñoái soá ngoõ vaøo laø moät maûng khoâng raøng buoäc coù kieåu neàn cuûa driver laø fourval. Haøm phaân
tích seõ khaûo saùt taát caû caùc giaù trò cuûa caùc driver ñöôïc chuyeån vaøo ñoái soá s, moät giaù trò ôû moät thôøi
ñieåm, roài traû veà giaù trò duy nhaát coù kieåu fourval ñeå ñöôïc ñònh thôøi nhö laø giaù trò cuûa tín hieäu. Bieán result ñöôïc khôûi ñoäng baèng giaù trò Z cho tröôøng hôïp khoâng coù driver naøo ñoái vôùi tín
hieäu. Trong tröôøng hôïp naøy voøng laëp seõ khoâng bao giôø ñöôïc thöïc thi vaø giaù trò cuûa result ñöôïc traû
veà seõ laø giaù trò khôûi ñoäng. Ñaây cuõng laø moät yù hay neáu ta khôûi ñoäng giaù trò cuûa result baèng giaù trò
yeáu nhaát cuûa heä thoáng giaù trò ñeå cho pheùp ghi ñeø bôûi caùc giaù trò maïnh hôn. Neáu coù moät driver ñöôïc tieán haønh, voøng laëp seõ ñöôïc thöïc thi moät laàn cho moãi giaù trò cuûa
driver ñöôïc chuyeån vaøo ñoái soá s. Moãi giaù trò cuûa driver ñöôïc so saùnh vôùi giaù trò hieän taïi ñöôïc löu
trong bieán result. Neáu giaù trò môùi maïnh hôn theo qui luaät ñaõ ñöôïc neâu ôû treân, giaù trò cuûa result seõ
ñöôïc caäp nhaät baèng giaù trò môùi. 120 Kyõ thuaät PLD vaø ASIC d. Thuû tuïc : Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Thuû tuïc coù theå coù nhieàu thoâng soá ngoõ vaøo, ra vaø vaøo-ra. Goïi thuû tuïc ñöôïc xem nhö moät phaùt
bieåu rieâng, haøm thöôøng toàn taïi nhö moät phaàn cuûa bieåu thöùc. Trong haàu heát caùc tröôøng hôïp söû duïng
thuû tuïc chæ khi coù nhieàu hôn 1 giaù trò ñöôïc traû veà. Thuû tuïc coù nhöõng quy ñònh veà cuù phaùp gioáng nhö haøm. Phaàn khai baùo thuû tuïc baét ñaàu vôùi töø
khoaù PROCEDURE, tieáp theo laø teân cuûa thuû tuïc vaø sau ñoù laø danh saùch caùc ñoái soá. Söï khaùc nhau
giöõa haøm vaø thuû tuïc laø danh saùch caùc ñoái soá cuûa thuû tuïc gioáng nhö coù höôùng keát hôïp vôùi moãi thoâng
soá, coøn danh saùch cuûa haøm thì khoâng coù. Trong thuû tuïc, coù nhieàu ñoái soá coù theå ôû kieåu IN, OUT
hoaëc INOUT, trong haøm thì taát caû caùc ñoái soá ôû kieåu IN. Ví duï 2-66 veà caùch söû duïng thuû tuïc: LIBRARY IEEE;
IEEE.std_logic_1164.ALL; Ví duï 2-66:
USE
USE
PROCEDURE vector_to_int (z : IN std_logic_vector; x_flag: OUT BOOLEAN, q : INOUT INTEGER) IS BEGIN Q := 0;
X_flag := false;
FOR I IN z’RANGE LOOP
Q := q * 2; IF z(i) = ‘1’ THEN q := q + 1;
ELSIF z(i) /= F0 THEN x_flag := true;
END IF; END LOOP ; END vector_to_int ; Haønh vi cuûa thuû tuïc laø chuyeån ñoåi ñoái soá ngoõ vaøo z töø maûng kieåu soá nguyeân. Tuy nhieân neáu
maûng ngoõ vaøo coù giaù trò chöa xaùc ñònh thì giaù trò soá nguyeân khoâng theå ñöôïc taïo ra töø maûng. Khi
ñieàu kieän naøy xaûy ra thì ñoái soá x_flag ñöôïc thieát laäp ôû giaù trò true ñeå xaùc ñònh giaù trò soá nguyeân ngoõ
ra laø khoâng xaùc ñònh. Thuû tuïc ñöôïc yeâu caàu ñeå ñieàu khieån haønh vi naøy bôûi vì coù nhieàu keát quaû traû
veà. Chuùng ta haõy kieåm tra keát quaû töø thuû tuïc vôùi maûng giaù trò ngoõ vaøo nhö sau: ‘0’ ‘0’ ‘1’ ‘1’ Böôùc thöù nhaát thuû tuïc seõ khôûi ñoäng caùc giaù trò ngoõ ra vôùi caùc ñieàu kieän ñaõ bieát, trong tröôøng
hôïp ñoái soá ngoõ vaøo daøi baèng 0 ñöôïc truyeàn vaøo. Ñoái soá ngoõ ra x_flag ñöôïc khôûi taïo ôû traïng thaùi
false vaø tieáp tuïc ôû traïng thaùi false cho ñeán khi chöùng minh traïng thaùi ngöôïc laïi. Phaùt bieåu voøng laëp xuyeân qua vector ngoõ vaøo z vaø tieáp tuïc coäng moãi giaù trò cuûa vector cho ñeán khi taát caû caùc giaù trò ñaõ ñöôïc coäng. Neáu giaù trò laø ‘1’ thì sau ñoù noù ñöôïc coäng vaøo keát quaû. Neáu giaù trò laø ‘0’ thì khoâng coäng. Neáu baát kyø giaù trò naøo ñöôïc tìm thaáy trong vector thì keát quaû x_flag ñöôïc thieát laäp laø true xaùc
ñònh raèng ñieàu kieän chöa bieát ñaõ ñöôïc tìm thaáy ôû moät trong caùc ngoõ vaøo. (Chuù yù thoâng soá q ñaõ
ñöôïc ñònh nghóa nhö thoâng soá vao-ra, ñieàu naøy laø caàn thieát bôûi vì giaù trò ñöôïc ñoïc trong thuû tuïc). Thuû tuïc khoâng coù thoâng soá Ví duï 2-67 trình baøy moät thuû tuïc coù 1 ñoái soá vao-ra thuoäc daïng baûn ghi. Baûn ghi chöùa moät
maûng 8 soá nguyeân cuøng vôùi tröôøng soá ñöôïc duøng ñeå löu giaù trò trung bình cuûa taát caû caùc soá nguyeân.
Thuû tuïc tính toaùn giaù trò trung bình cuûa caùc giaù trò soá nguyeân, ghi giaù trò trung bình trong vuøng
tröôøng trung bình cuûa baûn ghi vaø trôû veà vôùi baûn ghi ñaõ caäp nhaät: Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Ví duï 2-67:
PACKAGE IS
IS
IS ARRAY (0 TO 7) OF INTEGER; intpack
TYPE bus_stat_vec
TYPE bus_stat_t
RECORD bus_val: bus_stat_vec;
average_val: INTEGER; END RECORD; PROCEDURE bus_average (x : INOUT bus_stat_t); intpack; END PACKAGE BODY intpack IS PROCEDURE bus_average (x : INOUT bus_stat_t) IS VARIABLE total : INTEGER := 0; BEGIN FOR i IN 0 TO 7 LOOP total := total + x.bus_val(i); END LOOP ; x.average_val := total / 8 ; END bus_average ; END intpack ;
PROCESS (mem_update) VARIABLE bus_statistics : bus_stat_t;
BEGIN bus_statistics.bus_val := (50, 40, 30, 35, 45, 55, 65, 85);
bus_average(bus_statistics);
average <= bus_statistics.average_val; END PROCESS ; Phaùt bieåu ñaàu tieân laø gaùn bieán. Phaùt bieåu thöù hai laø goïi thuû tuïc bus_average ñeå thöïc hieän tính
toaùn giaù trò trung bình. Ñeå baét ñaàu, ñoái soá cho thuû tuïc bus_average laø moät giaù trò ngoõ vaøo nhöng sau
khi thuû tuïc thöïc hieän xong thì ñoái soá trôû thaønh giaù trò ngoõ ra – coù theå ñöôïc söû duïng beân trong cho
vieäc goïi xöû lyù. Giaù trò ngoõ ra töø thuû tuïc ñöôïc gaùn cho tín hieäu ngoõ ra naèm ôû haøng cuoái cuøng cuûa quaù
trình. 2. GOÙI: Muïc ñích quan cô baûn cuûa goùi laø goùi goïn caùc phaàn töû coù theå duøng chung, bao goàm hai hay
nhieàu ñôn vò thieát keá. Goùi laø mieàn löu tröõ chung ñöôïc söû duïng ñeå löu tröõ döõ lieäu duøng chung giöõa
moät soá thöïc theå. Vieäc khai baùo döõ lieäu beân trong moät goùi cho pheùp döõ lieäu ñöôïc tham chieáu bôûi caùc
thöïc theå khaùc. Moät goùi goàm coù hai phaàn: phaàn khai baùo goùi vaø phaàn thaân cuûa goùi. Khai baùo goùi ñònh nghóa
giao dieän cho goùi vôùi cuøng phöông phaùp maø moät thöïc theå ñònh nghóa giao dieän cho moät moâ hình.
Thaân cuûa goùi chæ ra haønh vi thöïc söï cuûa goùi theo cuøng phöông phaùp maø phaùt bieåu kieán truùc thöïc
hieän ñoái vôùi moät moâ hình. a. Khai baùo goùi: Phaàn khai baùo goùi coù theå chöùa caùc khai baùo sau: – Khai baùo chöông trình con. 122 Kyõ thuaät PLD vaø ASIC – Khai baùo kieåu, kieåu con. Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com – Khai baùo haèng, haèng trì hoaõn (deferred constant). – Khai baùo tín hieäu, taïo ra moät tín hieäu toaøn cuïc. – Khai baùo taäp tin. – Khai baùo bí danh (teân khaùc). – Khai baùo thaønh phaàn. – Khai baùo thuoäc tính, thuoäc tính do ngöôøi söû duïng ñònh nghóa. – Ñaëc taû thuoäc tính. – Ñaëc taû khoâng keát noái. – Meänh ñeà USE. Taát caû caùc muïc ñöôïc khai baùo trong phaàn khai baùo goùi ñöôïc nhìn thaáy ôû baát kyø ñôn vò thieát keá
naøo söû duïng goùi naøy baèng meänh ñeà USE. Giao dieän cuûa moät goùi chöùa baát kyø chöông trình con naøo
hoaëc caùc haèng trì hoaõn ñöôïc khai baùo trong phaàn khai baùo goùi. Caùc khai baùo chöông trình con vaø
haèng trì hoaõn phaûi coù moät thaân chöông trình con töông öùng vaø giaù trò haèng trì hoaõn töông öùng trong
thaân cuûa goùi. Haèng trì hoaõn: Caùc haèng trì hoaõn laø caùc haèng coù teân vaø kieåu ñöôïc khai baùo trong phaàn khai
baùo goùi nhöng coù giaù trò thöïc söï ñöôïc chæ ñònh trong phaàn thaân cuûa goùi. Ví duï 2-68 veà haèng trì hoaõn
trong khai baùo goùi nhö sau: Ví duï 2-68: PACKAGE tpack IS CONSTANT timing_mode: t_mode; END tpack; Ví duï treân trình baøy moät haèng trì hoaõn coù teân laø timing_mode ñöôïc ñònh nghóa coù kieåu t_mode. Giaù trò thöïc söï cuûa haèng naøy seõ ñöôïc chæ ra khi thaân cuûa goùi ñöôïc dòch. b. Khai baùo chöông trình con: Moät muïc khaùc taïo thaønh giao dieän cho goùi laø khai baùo chöông trình con. Khai baùo chöông
trình con cho pheùp ngöôøi thieát keá chæ ñònh giao dieän cuûa moät chöông trình con taùch bieät khoûi thaân
chöông trình con. Chöùc naêng naøy cho pheùp baát kyø ngöôøi thieát keá naøo söû duïng chöông trình con ñeå
baét ñaàu hoaëc tieáp tuïc vieäc thieát keá, trong khi ñoù ñaëc taû giao dieän cuûa caùc chöông trình con ñöôïc
trình baøy chi tieát. Chöùc naêng naøy cuõng cung caáp cho nhaø thieát keá thaân caùc chöông trình con söï töï do
thay ñoåi caùc hoaït ñoäng beân trong cuûa caùc chöông trình con maø khoâng aûnh höôûng ñeán baát kyø thieát
keá naøo söû duïng chöông trình con ñoù. Ví duï 2-69 khai baùo chöông trình con nhö sau: Ví duï 2-69:
PACKAGE cluspack
IS
IS
IS IS
(Z0, Z1, ZX, R0, R1, RX, F0, F1, FX);
ARRAY (0 TO 15) OF nineval;
ARRAY (natural range <>) OF t_cluster; TYPE nineval
TYPE t_cluster
TYPE t_clus_vec
FUNCTION resolve_cluster (s : t_clus_vec) RETURN t_cluster;
SUSTYPE t_wclus IS resolve_cluster t_cluster;
CONSTANT undriven: t_wclus; END cluspack; Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Khai baùo chöông trình con cho resolve_cluster chæ ñònh teân cuûa chöông trình con, caùc ñoái soá
baát kyø cuûa chöông trình con, caùc kieåu vaø caùc loaïi cuûa caùc ñoái soá vaø traû veà kieåu neáu chöông trình
con laø moät haøm. Khai baùo naøy coù theå ñöôïc söû duïng ñeå bieân dòch baát kyø moâ hình naøo döï ñònh söû
duïng chöông trình con maø chöa coù thaân chöông trình con thöïc söï ñöôïc chæ ñònh. Thaân chöông trình
con phaûi hieän höõu tröôùc khi trình moâ phoûng ñöôïc xaây döïng. Thaân cuûa goùi: Muïc ñích chính cuûa thaân cuûa goùi laø ñònh nghóa caùc giaù trò cho caùc haèng trì hoaõn
vaø chæ ñònh caùc thaân chöông trình con cho baát kyø khai baùo chöông trình con naøo töø khai baùo goùi.
Tuy nhieân thaân goùi cuõng coù theå chöùa caùc khai baùo sau: – Khai baùo chöông trình con. – Thaân chöông trình con. – Khai baùo kieåu, kieåu con. – Khai baùo haèng, khai baùo naøy ñieàn vaøo giaù trò cuûa haèng trì hoaõn. – Khai baùo taäp tin. – Khai baùo bí danh. – Meänh ñeà USE. Taát caû caùc khai baùo trong thaân cuûa goùi – ngoaïi tröø khai baùo haèng maø chuùng chæ ñònh giaù trò
cuûa haèng trì hoaõn vaø khai baùo thaân chöông trình con – laø cuïc boä ñoái vôùi thaân cuûa goùi. Chuùng ta haõy
khaûo saùt thaân cuûa goùi cho khai baùo goùi ñaõ ñöôïc ñeà caäp ôû phaàn tröôùc. Ví duï 2-70:
PACKAGE BODY cluspack (ZX, ZX, ZX, ZX,
ZX, ZX, ZX, ZX,
ZX, ZX, ZX, ZX,
ZX, ZX, ZX, ZX,); IS
CONSTANT undriven: t_wclus:=
FUNCTION resolve_cluster (s : t_clus_vec) RETURN t_cluster IS VARIABLE result : t_cluster;
VARIABLE driver_count : integer; BEGIN undriven; IF S’LENGTH = 0 THEN RETURN
END IF;
FOR i IN S’RANGE LOOP IF S(i) /= undriven THEN driver_count := driver_count + 1; IF driver_count = 1 THEN result := s(i); result := undriven; ELSE
ASSERT FALSE
REPORT “multiple drivers detected”
SEVERITY ERROR; END IF; 124 Kyõ thuaät PLD vaø ASIC END IF;
END LOOP ;
RETURN result;
END resolve_cluster ; END cluspack; Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Phaùt bieåu thaân cuûa goùi töông töï nhö khai baùo goùi ngoaïi tröø töø khoùa BODY theo sau
PACKAGE. Tuy nhieân caùc noäi dung cuûa hai ñôn vò thieát keá naøy raát khaùc nhau. Thaân goùi cho ví duï
naøy chæ chöùa hai muïc: giaù trò haèng trì hoaõn cuûa haèng trì hoaõn undriven vaø thaân chöông trình con
cuûa chöông trình con resolve_cluster. Ta haõy löu yù ñeán caùch thöùc maø ñaëc taû giaù trò haèng trì hoaõn
töông thích vôùi khai baùo haèng trì hoaõn trong khai baùo goùi vaø thaân chöông trình con töông thích vôùi
khai baùo chöông trình con trong khai baùo goùi. Thaân chöông trình con phaûi töông thích chính xaùc vôùi
khai baùo chöông trình con veà soá thoâng soá, kieåu cuûa caùc thoâng soá vaø kieåu traû veà. Thaân cuûa goùi cuõng coù theå chöùa caùc khai baùo cuïc boä chæ ñöôïc söû duïng beân trong thaân cuûa goùi
ñeå xaây döïng caùc thaân chöông trình con khaùc hoaëc caùc giaù trò haèng trì hoaõn. Caùc khai baùo naøy
khoâng ñöôïc nhìn thaáy töø beân ngoaøi thaân cuûa goùi nhöng coù theå raát coù ích beân trong thaân goùi. Ví duï
2-71 veà moät goùi hoaøn chænh söû duïng tính chaát naøy nhö sau: IEEE;
IEEE.std_logic_1164.ALL; Ví duï 2-71:
LIBRARY
USE
PACKAGE math IS TYPE st16 IS
FUNCTION add(a, b :
FUNCTION sub(a, b : ARRAY (0 TO 15) OF std_logic;
IN st16) RETURN st16;
IN st16) RETURN st16; END math; PACKAGE BODY math IS FUNCTION vect_to_int (s : st16) RETURN INTEGER IS VARIABLE result : INTEGER:=0; BEGIN FOR i IN 0 TO 7 LOOP result := result +1; result := result * 2;
IF S(i) = ‘1’ THEN
END IF;
END LOOP ;
RETURN result; END vect_to_int ; FUNCTION in_to_st16 (s : INTEGER) RETURN st16 IS VARIABLE result : st16;
VARIABLE digit: INTEGER := 2**15;
VARIABLE local : INTEGER; BEGIN Local:= s;
FOR i IN 15 DOWNTO 0 LOOP IF local/digit >= 1 THEN result(i) := ‘1’; Local:= Local - digit; ELSE result(i) := ‘0’;
END IF;
digit := digit /2; END LOOP ;
RETURN result; END in_to_st16 ; FUNCTION add (a,b : IN st16) RETURN st16 IS VARIABLE result : INTEGER; Kyõ thuaät PLD vaø ASIC Chöông 2. Ngoân ngöõ laäp trình VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com BEGIN Result := vect_to_int(a) + vect_to_int(b) ;
RETURN int_to_st16 (result); END add; FUNCTION sub (a,b : IN st16) RETURN st16 IS VARIABLE result : INTEGER; BEGIN Result := vect_to_int(a) - vect_to_int(b) ;
RETURN int_to_st16 (result); END sub; END math; Khai baùo goùi ôû treân laø moät khai baùo kieåu st16 vaø hai haøm add vaø sub hoaït ñoäng theo kieåu neâu
treân. Thaân goùi coù chöùa thaân caùc haøm cho caùc khai baùo haøm add vaø sub vaø cuõng chöùa hai haøm chæ
ñöôïc söû duïng trong thaân cuûa goùi ñoù laø caùc haøm naøy laø int_to_st16 vaø vec_to_int. Caùc haøm naøy
khoâng ñöôïc thaáy töø beân ngoaøi thaân cuûa goùi. Ñeå laøm cho caùc haøm naøy coù theå nhìn thaáy ñöôïc, moät
khai baùo haøm caàn phaûi theâm vaøo phaàn khai baùo goùi cho moãi haøm. Caùc haøm vec_to_int vaø int_to_st16 phaûi ñöôïc khai baùo tröôùc haøm add ñeå dòch chöông trình cho ñuùng. Taát caû caùc haøm phaûi ñöôïc khai baùo tröôùc khi chuùng ñöôïc söû duïng. X. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP Caâu 2-1. Haõy phaân bieät söï khaùc nhau giöõa bieán vaø tín hieäu? Caâu 2-2. Haõy phaân bieät söï khaùc nhau giöõ khai baùo BIT vaø STD_LOGIC ? Caâu 2-3. Haõy phaân bieät söï khaùc nhau giöõ khai baùo BIT vaø BIT_VECTOR? Caâu 2-4. Haõy phaân bieät söï khaùc nhau giöõ khai baùo BIT vaø STD_LOGIC ? 126 Kyõ thuaät PLD vaø ASIC Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com GIÔÙI THIEÄU
THIEÁT KEÁ MAÏCH GIAÛI MAÕ – MAÏCH MAÕ HOAÙ THIEÁT KEÁ MAÏCH GIAÛI MAÕ
THIEÁT KEÁ MAÏCH MAÕ HOAÙ
THIEÁT KEÁ MAÏCH GIAÛI MAÕ LED 7 ÑOAÏN LOAÏI ANODE CHUNG
THIEÁT KEÁ MAÏCH ÑA HÔÏP – MAÏCH GIAÛI ÑA HÔÏP THIEÁT KEÁ MAÏCH ÑA HÔÏP
THIEÁT KEÁ MAÏCH GIAÛI ÑA HÔÏP CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP SPKT – Nguyeãn Ñình Phuù Chöông 3. Thieát Keá maïch logic toå hôïp
CAÙC HÌNH VEÕ
Hình 3-1. Sô ñoà khoái maïch GM 2 - 4.
Hình 3-2. Sô ñoà khoái maïch GM 3 - 8.
Hình 3-3. Sô ñoà khoái maïch MH 4 - 2.
Hình 3-4. Sô ñoà khoái maïch GM led 7 ñoaïn loaïi anode chung.
Hình 3-5. Sô ñoà khoái maïch ÑH 4 vaøo.
Hình 3-6. Sô ñoà khoái maïch GÑH 4 ra.
CAÙC BAÛNG
Baûng 3-1. BTT maïch GM 2 - 4.
Baûng 3-2. BTT maïch GM 3 - 8.
Baûng 3-3. BTT maïch MH 4 - 2.
Baûng 3-4. BTT maïch GM led 7 ñoaïn anode chung.
Baûng 3-5. BTT maïch ña hôïp 4 ngoõ vaøo.
Baûng 3-6. BTT maïch GÑH 4 ra. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com I. GIÔÙI THIEÄU: Trong phaàn naøy seõ thieát keá caùc maïch logic toå hôïp duøng ngoân ngöõ VHDL vaø söû duïng thieát bò laäp trình. Caùc maïch logic toå hôïp bao goàm maïch giaûi maõ n ñöôøng sang m ñöôøng, maïch maõ hoaù m
ñöôøng sang n ñöôøng, maïch doàn keânh vaø maïch phaân keânh, maïch giaûi maõ led 7 ñoaïn loaïi anode
chung vaø cathode chung. Caùc thieát bò laäp trình coù theå duøng CPLD XC9572, XC 95144, Coolrunner XC2C256. II. THIEÁT KEÁ MAÏCH GIAÛI MAÕ – MAÏCH MAÕ HOAÙ 1. THIEÁT KEÁ MAÏCH GIAÛI MAÕ: Baøi 3-1: Thieát keá maïch giaûi maõ 2 ñöôøng sang 4 ñöôøng vôùi ngoõ ra tích cöïc möùc cao: DECODE I0 I1 Q0
Q1
Q2
Q3 2 to 4 Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 3-1. Sô ñoà khoái maïch GM 2 - 4. Ngoõ ra Ngoõ vaøo
I1
0
0
1
1 I0 Q3 Q2 Q1 Q0
1
0
0
0
0
1
0
1
0
0
0
1 0
0
0
1 0
1
0
0 Böôùc 2: Laäp baûng traïng thaùi: Baûng 3-1. BTT maïch GM 2 - 4. Böôùc 3: Vieát chöông trình: Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Baøi 3-2: Thieát keá maïch giaûi maõ 3 ñöôøng sang 8 ñöôøng vôùi ngoõ ra tích cöïc möùc thaáp vaø 1 ngoõ cho pheùp E: DECODE I0 I1 I2 E Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7 3 to 8 Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 3-2. Sô ñoà khoái maïch GM 3 - 8. Ngoõ ra E
0
1
1
1
1
1
1
1
1 Böôùc 2: Laäp baûng traïng thaùi: 1
1
1
1
0
1
1
1
1 1
1
1
0
1
1
1
1
1 1
1
1
1
1
1
0
1
1 1
1
1
1
1
1
1
0
1 1
1
0
1
1
1
1
1
1 1
1
1
1
1
1
1
1
0 Böôùc 3: Vieát chöông trình: Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity giaima_38 is Port ( I : in STD_LOGIC_VECTOR (2 downto 0); Q : out STD_LOGIC_VECTOR (7 downto 0); E : in STD_LOGIC); end giaima_38; architecture Behavioral of giaima_38 is BEGIN PROCESS (I,E) BEGIN IF E = '0' THEN Q <= "11111111"; ELSE CASE I IS WHEN "000" => Q <= "11111110"; WHEN "001" => Q <= "11111101"; WHEN "010" => Q <= "11111011"; WHEN "011" => Q <= "11110111"; WHEN "100" => Q <= "11101111"; WHEN "101" => Q <= "11011111"; WHEN "110" => Q <= "10111111"; WHEN "111" => Q <= "01111111"; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS; end Behavioral; 2. THIEÁT KEÁ MAÏCH MAÕ HOAÙ Baøi 3-3: Thieát keá maïch maõ hoaù 4 ñöôøng sang 2 ñöôøng vôùi ngoõ vaøo tích cöïc möùc cao. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Hình 3-3. Sô ñoà khoái maïch MH 4 - 2. Ngoõ vaøo Ngoõ ra
I0 Q1 Q0
I3 I2 I1
0
1 0
0 0
0
1
0
0
0
0
1
0
1
0
1 0 0
1
1
1 0 0 0 Böôùc 2: Laäp baûng traïng thaùi: Baûng 3-3. BTT maïch MH 4 - 2. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mahoa42 is Port ( I : in STD_LOGIC_VECTOR (3 downto 0); Q : out STD_LOGIC_VECTOR (1 downto 0)); end mahoa42; architecture Behavioral of mahoa42 is begin PROCESS(I) BEGIN CASE I IS WHEN "0001" => Q <= "00"; WHEN "0010" => Q <= "01"; WHEN "0100" => Q <= "10"; WHEN "1000" => Q <= "11"; WHEN OTHERS => NULL; END CASE; END PROCESS; end Behavioral; 3. THIEÁT KEÁ MAÏCH GIAÛI MAÕ LED 7 ÑOAÏN LOAÏI ANODE CHUNG Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Baøi 3-4: Thieát keá maïch giaûi maõ led 7 ñoaïn loaïi anode chung Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 3-4. Sô ñoà khoái maïch GM led 7 ñoaïn loaïi anode chung. Soá
tp I3 Ngoõ vaøo
I1
I2 I0 Soá
hex e c b a Ngoõ ra
d g f 0
1
0
0
1
0
0
1
0
0
1
1
1
1
1
1 40
79
24
30
19
22
02
78
00
10
7F
7F
7F
7F
7F
7F 0
0
1
0
0
0
0
0
0
0
1
1
1
1
1
1 0
0
0
0
0
1
1
0
0
0
1
1
1
1
1
1 0
1
0
0
1
0
0
0
0
0
1
1
1
1
1
1 0
1
2
3
4
5
6
7
8
9
taét
taét
taét
taét
taét
taét 0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1 0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1 0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1 0
1
0
1
0
1
0
1
1
1
0
1
0
1
0
1 1
1
0
0
0
0
0
1
0
0
1
1
1
1
1
1 0
1
1
1
0
0
0
1
0
0
1
1
1
1
1
1 0
1
0
1
1
1
0
1
0
1
1
1
1
1
1
1 Böôùc 2: Laäp baûng traïng thaùi: Baûng 3-4. BTT maïch GM led 7 ñoaïn anode chung. Böôùc 3: Vieát chöông trình: Ñeå ñôn giaûn neân trong chöông trình thì ngoõ ra ñöôïc ñaët teân theo daïng vector vaø teân laø Y. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity giaima7doan is Port ( I : in STD_LOGIC_VECTOR (3 downto 0); Y : out STD_LOGIC_VECTOR (6 downto 0)); end giaima7doan; Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com architecture Behavioral of giaima7doan is begin PROCESS (I) BEGIN CASE I IS when "0000" => Y <= "1000000"; -- so 0 when "0001" => Y <= "1111001"; -- so 1 when "0010" => Y <= "0100100"; -- so 2 when "0011" => Y <= "0110000"; -- so 3 when "0100" => Y <= "0011001"; -- so 4 when "0101" => Y <= "0010010"; -- so 5 when "0110" => Y <= "0000010"; -- so 6 when "0111" => Y <= "1111000"; -- so 7 when "1000" => Y <= "0000000"; -- so 8 when "1001" => Y <= "0010000"; -- so 9 when others => Y <= "1111111"; -- tat END CASE; END PROCESS; end Behavioral; III. THIEÁT KEÁ MAÏCH ÑA HÔÏP – MAÏCH GIAÛI ÑA HÔÏP 1. THIEÁT KEÁ MAÏCH ÑA HÔÏP: Baøi 3-5: Thieát keá maïch ña hôïp 4 ngoõ vaøo, 1 ngoõ ra, 2 ngoõ löïa choïn. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 3-5. Sô ñoà khoái maïch ÑH 4 vaøo. Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Böôùc 2: Laäp baûng traïng thaùi: Ngoõ vaøo
S1 S0 I3 I2 I1
x x x
0 0
0
x X
1
1 0 X
1
1 Ngoõ ra
Q
I0
I1
I2
I3 I0
I0
I1 X
I2 x X
I3 x x X
Baûng 3-5. BTT maïch ña hôïp 4 ngoõ vaøo. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity GMA is Port ( I : in STD_LOGIC_VECTOR (3 downto 0); S : in STD_LOGIC_VECTOR (1 downto 0); Q : out STD_LOGIC); end GMA; architecture Behavioral of GMA is begin PROCESS(I,S) BEGIN CASE S IS WHEN "00" => Q <= I(0); WHEN "01" => Q <= I(1); WHEN "10" => Q <= I(2); WHEN "11" => Q <= I(3); WHEN OTHERS => NULL; END CASE; END PROCESS; end Behavioral; 2. THIEÁT KEÁ MAÏCH GIAÛI ÑA HÔÏP Baøi 3-6: Thieát keá maïch giaûi ña hôïp 1 ngoõ vaøo, 4 ngoõ ra, 2 ngoõ löïa choïn. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Hình 3-6. Sô ñoà khoái maïch GÑH 4 ra. Ngoõ ra Ngoõ vaøo
I S1 S0 Y3 Y2 Y1 Y0
I 0 0
1
I 0
0
I 1
1
I 1 I
0
0
I
0 0
0 0 0
0
I
0 0
0
0
I Böôùc 2: Laäp baûng traïng thaùi: Baûng 3-6. BTT maïch GÑH 4 ra. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity GDH is Port ( I : in STD_LOGIC; S : in STD_LOGIC_VECTOR (1 downto 0); Q : out STD_LOGIC_VECTOR (3 downto 0)); end GDH; architecture Behavioral of GDH is begin PROCESS(I,S) BEGIN CASE S IS WHEN "00" => Q(0) <= I; WHEN "01" => Q(1) <= I; WHEN "10" => Q(2) <= I; WHEN "11" => Q(3) <= I; WHEN OTHERS => NULL; END CASE; Kyõ thuaät PLD vaø ASIC Chöông 3. Thieát Keá maïch logic toå hôïp SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com END PROCESS; end Behavioral; IV. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP Baøi taäp 3-1: Thieát keá maïch giaûi maõ 2 ñöôøng sang 4 ñöôøng vôùi ngoõ ra tích cöïc möùc thaáp vaø coù moät tín hieäu cho pheùp E tích cöïc möùc cao. Baøi taäp 3-2: Thieát keá maïch giaûi maõ 2 ñöôøng sang 4 ñöôøng vôùi ngoõ ra tích cöïc möùc thaáp vaø coù moät tín hieäu cho pheùp E1 tích cöïc möùc cao, vaø moät tín hieäu cho pheùp E2 tích cöïc möùc thaáp. Baøi taäp 3-3: Thieát keá maïch giaûi maõ beân trong coù 4 maïch giaûi maõ 2 ñöôøng sang 4 ñöôøng vôùi ngoõ ra tích cöïc möùc thaáp. Baøi taäp 3-4: Thieát keá maïch giaûi maõ 3 ñöôøng sang 8 ñöôøng vôùi ngoõ ra tích cöïc möùc thaáp vaø coù moät tín hieäu cho pheùp E1 tích cöïc möùc cao, vaø moät tín hieäu cho pheùp E2 tích cöïc möùc thaáp. Baøi taäp 3-5: Thieát keá maïch maõ hoaù 8 ñöôøng sang 3 ñöôøng vôùi caùc ngoõ vaøo tích cöïc möùc thaáp. Baøi taäp 3-6: Thieát keá maïch maõ hoaù 8 ñöôøng sang 3 ñöôøng vôùi caùc ngoõ vaøo tích cöïc möùc cao. Baøi taäp 3-7: Thieát keá maïch giaûi maõ led 7 ñoaïn loaïi cathode chung. Baøi taäp 3-8: Thieát keá maïch giaûi maõ led 7 ñoaïn loaïi gioáng nhö IC 74247. Baøi taäp 3-9: Thieát keá maïch giaûi maõ led 7 ñoaïn loaïi gioáng nhö IC 4511. Baøi taäp 3-10: Thieát keá maïch ña hôïp 8 ngoõ vaøo, 1 ngoõ ra vaø 3 ngoõ löïa choïn. Baøi taäp 3-11: Thieát keá maïch ña hôïp 16 ngoõ vaøo, 1 ngoõ ra vaø 4 ngoõ löïa choïn. Baøi taäp 3-12: Thieát keá maïch giaûi ña hôïp 1 ngoõ vaøo, 8 ngoõ ra vaø 3 ngoõ löïa choïn. Baøi taäp 3-13: Thieát keá maïch giaûi ña hôïp 1 ngoõ vaøo, 16 ngoõ ra vaø 4 ngoõ löïa choïn. Baøi taäp 3-14: Thieát keá maïch giaûi ña hôïp gioáng nhö IC 74151. Baøi taäp 3-15: Thieát keá maïch so saùnh 2 soá 8 bit A vaø B vaø coù 3 led hieån thò LEDLH,
LEDBA, LEDNH. Neáu A>B thì LEDLH saùng, neáu A=B thì LEDBA saùng, neáu A
Baøi taäp 3-16: Thieát keá maïch chuyeån ñoåi soá nhò phaân 8 bit thaønh soá BCD. Baøi taäp 3-17: Thieát keá maïch chuyeån ñoåi soá 2 soá BCD thaønh soá nhò phaân. Baøi taäp 3-18: Thieát keá maïch kieåm tra chaün leû cuûa moät soá nhò phaân 8 bit, neáu laø soá chaün thì ñeøn chaün saùng, neáu laø soá leû thì ñeøn leû saùng. Kyõ thuaät PLD vaø ASIC Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com GIÔÙI THIEÄU
THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP THIEÁT KEÁ FLIP FLOP JK
THIEÁT KEÁ FLIP FLOP D COÙ ENABLE THIEÁT KEÁ THANH GHI DÒCH
THIEÁT KEÁ THANH GHI DÒCH 4 BIT
THIEÁT KEÁ THANH GHI DÒCH 8 BIT
THIEÁT KEÁ MAÏCH ÑEÁM JOHNSON 8 BIT
THIEÁT KEÁ MAÏCH ÑEÁM VOØNG 8 BIT
THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN THIEÁT KEÁ MAÏCH ÑEÁM THIEÁT KEÁ MAÏCH ÑEÁM NHÒ PHAÂN 4 BIT – ÑEÁM LEÂN
THIEÁT KEÁ MAÏCH BCD – ÑEÁM LEÂN
THIEÁT KEÁ MAÏCH ÑEÁM BCD VAØ GIAÛI MAÕ HIEÅN THÒ LED 7 ÑOAÏN
THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 00 ÑEÁN 59 – HIEÅN THÒ TREÂN 2 LED 7 ÑOAÏN
THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 000 ÑEÁN 999 – HIEÅN THÒ TREÂN 3 LED 7 ÑOAÏN CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Hình 4-1. Sô ñoà khoái FLIP FLIP JK.
Hình 4-2. Sô ñoà khoái FLIP FLIP D coù enable.
Hình 4-3. Sô ñoà khoái thanh ghi 4 bit.
Hình 4-4. Sô ñoà khoái thanh ghi 4 bit, naïp song song.
Hình 4-5. Sô ñoà khoái thanh ghi 8 bit.
Hình 4-6. Sô ñoà khoái maïch ñeám voøng Johnson 8 bit.
Hình 4-7. Sô ñoà khoái maïch ñeám voøng 8 bit.
Hình 4-8. Sô ñoà khoái maïch ñieàu khieån 8 led saùng taét daàn.
Hình 4-9. Sô ñoà khoái maïch ñeám nhò phaân 4 bit.
Hình 4-10. Sô ñoà khoái maïch ñeám BCD.
Hình 4-11. Sô ñoà khoái maïch ñeám BCD coù giaûi maõ 7 ñoaïn anode chung.
Hình 4-12. Sô ñoà khoái maïch ñeám töø 00 ñeán 59 coù hieån thò.
Hình 4-13. Sô ñoà khoái maïch ñeám töø 000 ñeán 999.
Baûng 4-1. BTT FLIP FLIP JK.
Baûng 4-2. BTT FLIP FLIP D coù enable.
Baûng 4-3. BTT maïch thanh ghi dòch 4 bit.
Baûng 4-4. BTT maïch thanh ghi dòch 4 bit, naïp song song.
Baûng 4-5. BTT thanh ghi dòch 8 bit.
Baûng 4-6. BTT maïch ñeám JOHNSON 8 bit.
Baûng 4-7. BTT maïch maïch ñeám voøng 8bit.
Baûng 4-8. BTT maïch ñieàu khieån 8 led saùng taét daàn.
Baûng 4-9. BTT maïch ñeám nhò phaân 4 bit.
Baûng 4-10. BTT maïch ñeám BCD.
Baûng 4-11. BTT maïch ñeám BCD coù giaûi maõ 7 ñoaïn. Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com I. GIÔÙI THIEÄU: Trong phaàn naøy seõ thieát keá caùc maïch flip flop, thanh ghi vaø maïch ñeám duøng ngoân ngöõ VHDL vaø söû duïng thieát bò laäp trình. Caùc maïch flip flop bao goàm flip flop JK, flip flop T, flip flop D. Thanh ghi dòch bao goàm thanh ghi dòch noái tieáp sang noái tieáp, noái tieáp sang song song, maïch ñeám voøng, maïch ñeám JohnSon. Maïch ñeám nhò phaân, maïch ñeám leân ñeám xuoáng, maïch ñeám BCD, maïch ñeám ñaët tröôùc soá ñeám, maïch ñeám coù giaûi maõ sang led 7 ñoaïn, maïch ñeám giaây, ñeám phuùt giaây,… Caùc thieát bò laäp trình coù theå duøng CPLD XC9572, XC 95144, Coolrunner XC2C256. II. THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP 1. THIEÁT KEÁ FLIP FLOP JK: Baøi 4-1: Thieát keá flip flop JK goàm coù caùc ngoõ vaøo J, K, CLK, PRE, CLR vaø caùc ngoõ ra goàm Q vaø Q : Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-1. Sô ñoà khoái FF JK. NGOÕ RA Q
1
1
0
Q0
Q0
0
1 QD
1
0
1
QD0
QD0
1
0 NGOÕ VAØO
Pre CLR CLK J K
X X X
0
X X X
0
X X X
1
0 X X
1
↓
0 0
1
↓
0 1
1
↓
1 0
1
↓
1
1 0
1
0
1
1
1
1
1 1 NOT Q0 NOT QD0 Böôùc 2: Baûng traïng thaùi: Baûng 4-1. BTT FF JK. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ffjk is Port ( J : in STD_LOGIC; K : in STD_LOGIC; CLK : in STD_LOGIC; PRE : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC; QD : out STD_LOGIC); end ffjk; architecture Behav_ffjk of ffjk is SIGNAL QT,QDT: STD_LOGIC; SIGNAL JK : STD_LOGIC_VECTOR(1 DOWNTO 0); begin PROCESS(J,K,CLK,PRE,CLR) BEGIN IF (PRE='0') AND (CLR='0') THEN QT <='1'; QDT <='1'; IF (PRE='0') AND (CLR='1') THEN QT <='1'; QDT <='0'; ELSIF (PRE='1') AND (CLR='0') THEN QT <='0'; QDT <='1'; ELSIF (PRE='1') AND (CLR='1') THEN IF CLK='0' AND CLK'EVENT THEN JK <=J & K; CASE T IS WHEN "11" => QT <=NOT QT; QDT <=NOT QDT; WHEN "10" => QT <='1'; QDT <='0'; WHEN "01" => QT <='0'; QDT <='1'; WHEN OTHERS => NULL; END CASE; END IF; END IF; END PROCESS; Q <= QT; QD <= QDT; end Behav_ffjk; 2. THIEÁT KEÁ FLIP FLOP D COÙ ENABLE: Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-2. Sô ñoà khoái FF D coù enable. 0
1 NGOÕ VAØO NGOÕ RA
E clk D Q QD
x Q0 QD0
0
x
0 0 Q0 QD0
1
↓ 0
1
1
↓
1
0
1
Baûng 4-2. BTT FF D coù enable. Böôùc 2: Baûng traïng thaùi: Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ff_de is Port ( D : in STD_LOGIC; E : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC; QD : out STD_LOGIC); end ff_de; architecture Behavioral of ff_de is SIGNAL QT: STD_LOGIC; begin PROCESS(D,E,CLK) BEGIN IF E='1' THEN IF CLK='0' AND CLK'EVENT THEN QT <= D; END IF; END IF; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Q <= QT; QD <= NOT QT; END PROCESS; end Behavioral; III. THIEÁT KEÁ THANH GHI DÒCH 1. THIEÁT KEÁ THANH GHI DÒCH 4 BIT: Baøi 4-3: Thieát keá thanh ghi dòch 4 bit vaøo noái tieáp ra noái tieáp. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-3. Sô ñoà khoái thanh ghi 4 bit. NGOÕ RA Ghi chuù Reset 0 0 0 NGOÕ VAØO
clr clk D Q3 Q2 Q1 Q0
x
0
0
x Q30 Q20 Q10 Q00 Khoâng coù xung clk
1
1 d Dòch döõ lieäu vaøo x
0
↑ d Q20 Q10 Q00 Böôùc 2: Laäp baûng traïng thaùi: Baûng 4-3. BTT thanh ghi 4 bit. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity reg4b is Port ( D : in STD_LOGIC; CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end reg4b; architecture Behavioral of reg4b is begin process(D,CLK,CLR) variable QT: std_logic_vector(3 downto 0); Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com begin if CLR ='0' then QT :="0000"; elsif CLK='1' and CLK'event then QT(3 downto 0) := QT(2 downto 0) & D; end if; Q <= QT; end process; end Behavioral; Baøi 4-4: Thieát keá thanh ghi dòch 4 bit vaøo noái tieáp, song song, ra noái tieáp song song. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-4. Sô ñoà khoái thanh ghi 4 bit, naïp song song, noái tieáp. Böôùc 2: Laäp baûng traïng thaùi: NGOÕ VAØO NGOÕ RA Ghi chuù CLR CLK D PL P3 P2 P1 P0 Q3 Q2 Q1 Q0
x x x 0
0
P3 P2 0
P1 0 Reset
P0 Load x Q30 Q20 Q10 Q00 Khoâng coù xung clk x
x
0
↑ 0
1
1
1 x x
x
x 0 P3 P2 P1 P0
x
d x
x x
x 1
1 d Dòch döõ lieäu vaøo x
x X Q20 Q10 Q00
Baûng 4-4. BTT maïch thanh ghi dòch 4 bit, naïp song song, noái tieáp. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity tghi4b_ntss is Port ( D : in STD_LOGIC; CLR : in STD_LOGIC; CLK : in STD_LOGIC; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com P : in STD_LOGIC_VECTOR (3 downto 0); Q : out STD_LOGIC_VECTOR (3 downto 0); PL : in STD_LOGIC); end tghi4b_ntss; architecture Behavioral of tghi4b_ntss is begin PROCESS(D,CLR,CLK,P,LOAD) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR='0' THEN QT:= "0000"; ELSIF PL='0' THEN QT:= P; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT(2 DOWNTO 0) & D; END IF; Q <= QT; END PROCESS; end Behavioral; 2. THIEÁT KEÁ THANH GHI DÒCH 8 BIT: Baøi 4-5: Thieát keá thanh ghi dòch 8 bit vaøo noái tieáp, ra noái tieáp song song. D CLK CLR Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7 Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-5. Sô ñoà khoái thanh ghi 8 bit. Böôùc 2: Laäp baûng traïng thaùi: NGOÕ RA Ghi chuù Reset 0 0 0 0 0 0 0 NGOÕ VAØO
clr clk D Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0
0
1
1 d Dòch döõ lieäu vaøo x x
0 x Q7O Q6O Q5O Q4O Q3O Q2O Q1O Q0O Khoâng coù xung clk
↑ d Q6O Q5O Q4O Q3O Q2O Q1O Q0O Baûng 4-5. BTT thanh ghi dòch 8 bit. Böôùc 3: Vieát chöông trình: Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TGHI8BIT is Port ( CLK : in STD_LOGIC; CLR,D : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end TGHI8BIT; architecture Behavioral of TGHI8BIT is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); begin PROCESS (CLK,CLR) BEGIN IF CLR = '0' THEN QT <= "00000000"; ELSIF CLK='1' AND CLK'EVENT THEN QT <= QT(6 DOWNTO 0) & D; END IF; END PROCESS; Q <= QT; end Behavioral; 3. THIEÁT KEÁ MAÏCH ÑEÁM JOHNSON 8 BIT: Baøi 4-6: Thieát keá maïch ñeám voøng JONHSON 8 bit. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-6. Sô ñoà khoái maïch ñeám voøng Johnson 8 bit. Chuù yù: D ñaõ ñöôïc keát noái vôùi ngoõ ra 7Q vaø naèm beân trong maïch ñieän. Böôùc 2: Laäp baûng traïng thaùi: Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù NGOÕ RA 0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0 0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0 0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0 0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0 0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0 0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0 NGOÕ VAØO
clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
clr
0
0
X
0
↑
1
0
1
↑
1
0
1
↑
1
0
1
↑
1
0
1
↑
1
1
1
↑
1
1
1
↑
1
1
1
↑
1
1
1
↑
0
1
1
↑
0
1
1
↑
0
1
1
↑
0
1
1
↑
0
0
1
↑
0
0
1
↑
0
0
1
↑
1
0
0
Baûng 4-6. BTT maïch ñeám JOHNSON 8 bit. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity johnson8bit is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end johnson8bit; architecture Behavioral of johnson8bit is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); SIGNAL D : STD_LOGIC; begin PROCESS (CLK,CLR) BEGIN IF CLR = '1' THEN QT <= "00000000"; ELSIF CLK='1' AND CLK'EVENT THEN D <= NOT QT(7); Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com QT <= QT(6 DOWNTO 0) & D; END IF; END PROCESS; Q <= QT; end Behavioral; 4. THIEÁT KEÁ MAÏCH ÑEÁM VOØNG 8 BIT: Baøi 4-7: Thieát keá maïch ñeám voøng 8 bit. CLK
CLR D Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7 8 BIT RING COUNTER Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-7. Sô ñoà khoái maïch ñeám voøng 8 bit. Böôùc 2: Laäp baûng traïng thaùi: NGOÕ RA NGOÕ VAØO
clr
0
1
1
1
1
1
1
1 clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
1
0
X
↑
0
0
↑
0
0
↑
0
0
↑
0
1
↑
0
0
↑
0
0
↑
0
0 0
0
0
0
0
0
0
1 0
0
0
1
0
0
0
0 0
0
1
0
0
0
0
0 0
0
0
0
0
0
1
0 0
0
0
0
0
1
0
0 0
1
0
0
0
0
0
0
Baûng 4-7. BTT maïch ñeám voøng 8bit. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ringcounter8 is Port ( CLK : in STD_LOGIC; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com CLR Q : out STD_LOGIC_VECTOR(7 downto 0)); end ringcounter8; architecture Behavioral of ringcounter8 is SIGNAL QT: STD_LOGIC_VECTOR(7 downto 0):=”00000001”; begin PROCESS (CLK,CLR) BEGIN IF CLR = '0' THEN QT <="00000001"; ELSIF CLK='1' AND CLK'EVENT THEN QT <= QT(6 DOWNTO 0) & QT(7); END IF; END PROCESS; Q <= QT; end Behavioral; Chuù yù: Chöông trình sau söû duïng bieán thay vì tín hieäu nhö caùc chöông trình treân: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ringcounter8 is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end ringcounter8; architecture Behavioral of ringcounter8 is begin PROCESS (CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR (7 downto 0); BEGIN IF CLR = '0' THEN QT:="00000001"; ELSIF CLK='0' AND CLK'EVENT THEN QT := QT(6 DOWNTO 0) & QT(7); END IF; Q <= QT; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com END PROCESS; end Behavioral; 5. THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN: Baøi 4-8: Thieát keá maïch ñieàu khieån 8 led saùng daàn, taét daàn töø traùi sang phaûi vaø töø phaûi sang traùi theo xung clock. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-8. Sô ñoà khoái maïch ñieàu khieån 8 led saùng taét daàn. NGOÕ RA clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 THAÄP PHAÂN
X
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑ NGOÕ VAØO
clr
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
0 0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1 0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1 0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1 0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
1
0 0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
1
1
1
1
1
1
1
1 0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
1
1 0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1 Böôùc 2: Laäp baûng traïng thaùi: Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù ↑
↑
↑
↑
↑
↑ 27
28
29
30
31
32 0
0
0
0
0
0 0
0
0
0
0
0 1
0
0
0
0
0 1
1
0
0
0
0 1
1
1
0
0
0 1
1
1
1
0
0 1
1
1
1
1
0 1
1
1
1
1
1
Baûng 4-8. BTT maïch ñieàu khieån 8 led saùng taét daàn. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
0
0
0
0
0
0 Caùc traïng thaùi saùng daàn taét daàn töø phaûi sang traùi caàn 16 xung clock vaø traïng thaùi ngöôïc laïi cuõng caàn 16 xung clock. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity sangtatdan_tppt is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end sangtatdan_tppt; architecture Behavioral of sangtatdan_tppt is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); begin PROCESS(CLK,CLR) VARIABLE DEM: INTEGER RANGE 0 TO 32; BEGIN IF CLR ='1' THEN QT <= "00000000"; ELSIF CLK='1' AND CLK'EVENT THEN IF DEM <16 THEN QT <= QT(6 DOWNTO 0) & NOT QT(7); DEM:= DEM +1; ELSE QT <= NOT QT(0) & QT(7 DOWNTO 1); DEM:= DEM +1; END IF; IF DEM = 32 THEN DEM:=0; END IF; END IF; END PROCESS; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Q <= QT; end Behavioral; Trong chöông trình bieán DEM coù chöùc naêng laøm bieán ñeám ñeå thöïc hieän laàn löôït caùc traïng thaùi. IV. THIEÁT KEÁ MAÏCH ÑEÁM 1. THIEÁT KEÁ MAÏCH ÑEÁM NHÒ PHAÂN 4 BIT – ÑEÁM LEÂN Baøi 4-9: Thieát keá maïch ñeám nhò phaân 4 bit. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-9. Sô ñoà khoái maïch ñeám nhò phaân 4 bit. NGOÕ RA ↑
↑ NGOÕ VAØO
clr
0
1
1
1
…
1
1 Ghi chuù
Reset
.. .. 0
0
1
1
1
0 0
0
0
0
.
1
0 clk Q3 Q2 Q1 Q0
0
0
x
↑
1
0
↑
0
0
↑
1
0
1
1
0
0
Baûng 4-9. BTT maïch ñeám nhò phaân 4 bit. Böôùc 2: Laäp baûng traïng thaùi: Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity cout_4bit is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end cout_4bit; architecture Behavioral of cout_4bit is begin Kyõ thuaät PLD vaø ASIC SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; END IF; Q <= QT; END PROCESS; end Behavioral; 2. THIEÁT KEÁ MAÏCH ÑEÁM BCD – ÑEÁM LEÂN: Baøi 4-10: Thieát keá maïch ñeám bcd. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-10. Sô ñoà khoái maïch ñeám BCD. NGOÕ RA Ghi chuù 0
0
0
0
0
0
0
0
1
1
0 0
0
1
1
0
0
1
1
0
0
0 NGOÕ VAØO
clr
clk Q3 Q2 Q1 Q0
0
0
0
x
↑
1
1
0
↑
1
0
0
↑
1
1
0
↑
1
0
1
↑
1
1
1
↑
1
0
1
↑
1
1
1
↑
1
0
0
↑
1
1
0
↑
1
0
0
Baûng 4-10. BTT maïch ñeám BCD. Böôùc 2: Laäp baûng traïng thaùi: Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com use IEEE.STD_LOGIC_UNSIGNED.ALL; entity bcdcounter is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end bcdcounter; architecture Behavioral of bcdcounter is begin PROCESS(CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; IF QT = "1010" THEN QT := “0000” ; END IF; END IF; Q <= QT; END PROCESS; end Behavioral; 3. THIEÁT KEÁ MAÏCH ÑEÁM BCD VAØ GIAÛI MAÕ HIEÅN THÒ LED 7 ÑOAÏN Baøi 4-11: Thieát keá maïch ñeám bcd hieån thò treân led 7 ñoaïn. I0 Q0 Q1 I1 CLK CLR Q2 I2 Q3 a
b
c
d
e
f
g I3 LED SEGMENT
DECODE BCD
COUNTER Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-11. Sô ñoà khoái maïch ñeám BCD coù giaûi maõ 7 ñoaïn anode chung. Böôùc 2: Laäp baûng traïng thaùi: e d c b a hex NGOÕ VAØO
tp clr clk Q3 Q2 Q1 Q0 dp g f x
↑ 1
1 0
1 0
1 0
1 1
1 0
0 0
0 0 0
1
1 0
0 0
0 0
0 0 C0
1
F9 0
1 Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL ↑
↑
↑
↑
↑
↑
↑
↑ 1
1
1
1
1
1
1
1 0
0
0
0
0
1
0
0 1
1
0
0
0
1
0
0 0
1
1
1
0
1
0
1 0
0
1
0
0
1
0
0 1
0
0
0
0
0
0
0 0
0
0
1
1
0
0
0 2
3
4
5
6
7
8
9 1
1
1
1
1
1
1
1 0
0
0
0
0
0
1
1 0
0
1
1
1
1
0
0 1
1
0
0
1
1
0
0 0
1
0
1
0
1
0
1 SPKT – Nguyeãn Ñình Phuù
0 A4
0 B0
1 99
0 92
0 82
0
F8
0 80
0 90 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Baûng 4-11. BTT maïch ñeám BCD coù giaûi maõ 7 ñoaïn. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity count_bcd_gma is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0); L7D : out STD_LOGIC_VECTOR (6 downto 0)); end count_bcd_gma; architecture Behavioral of count_bcd_gma is begin PROCESS (CLR,CLK) VARIABLE QTAM: STD_LOGIC_VECTOR (3 downto 0); VARIABLE YTAM: STD_LOGIC_VECTOR (6 downto 0); BEGIN IF CLR='0' THEN QTAM :="0000"; ELSIF CLK='1' AND CLK'EVENT THEN QTAM:= QTAM +1; IF QTAM = "1010" THEN QTAM:="0000"; END IF; END IF; CASE QTAM IS when "0000" => YTAM := x"C0"; -- so 0 when "0001" => YTAM := x"F9"; -- so 1 when "0010" => YTAM := x"A4"; -- so 2 when "0011" => YTAM := x"B0"; -- so 3 when "0100" => YTAM := x"99"; -- so 4 Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com when "0101" => YTAM := x"92"; -- so 5 when "0110" => YTAM := x"82"; -- so 6 when "0111" => YTAM := x"F8"; -- so 7 when "1000" => YTAM := x"80"; -- so 8 when "1001" => YTAM := x"90"; -- so 9 when others => YTAM := x"FF"; -- tat END CASE; Q <= QTAM; L7D <= YTAM; END PROCESS; end Behavioral; 4. THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 00 ÑEÁN 59 – HIEÅN THÒ TREÂN 2 LED 7 ÑOAÏN Baøi 4-12: Thieát keá maïch ñeám bcd töø 00 ñeán 59 hieån thò treân 2 led 7 ñoaïn keát noái theo phöông
phaùp queùt. Söû duïng nguoàn xung clock coù taàn soá 1,8432MHz treân boä thí nghieäm duøng ñeå queùt vaø
laøm xung taêng giaù trò ñeám. Vcc anod0 CLK OSC
1,8432MHz anod1 CLR a
b
c
d
e
f
g Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-12. Sô ñoà khoái maïch ñeám töø 00 ñeán 59 coù hieån thò. Böôùc 2: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity DEM0099 is Port ( CLR : in std_logic; CLK : in std_logic; anod : out std_logic_vector(3 downto 0); Kyõ thuaät PLD vaø ASIC SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com QB : out std_logic_vector( 7 downto 0); ma7d : out std_logic_vector( 7 downto 0)); end DEM0099; architecture Behavioral of DEM0099 is signal F: std_logic_vector(18 downto 0); signal mabl: std_logic_vector(7 downto 0); signal mabh: std_logic_vector(7 downto 0); function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is variable z1: std_logic_vector(7 downto 0); begin case x1 is when "0000" => z1 := "11000000"; -- so 0 when "0001" => z1 := "11111001"; -- so 1 when "0010" => z1 := "10100100"; -- so 2 when "0011" => z1 := "10110000"; -- so 3 when "0100" => z1 := "10011001"; -- so 4 when "0101" => z1 := "10010010"; -- so 5 when "0110" => z1 := "10000010"; -- so 6 when "0111" => z1 := "11111000"; -- so 7 when "1000" => z1 := "10000000"; -- so 8 when "1001" => z1 := "10010000"; -- so 9 when others =>z1 := "11111111"; -- so end case; return z1; end giai_ma; begin process (CLR,CLK,F,mabl,mabh) variable bcd1: std_logic_vector(3 downto 0); variable bcd2: std_logic_vector(3 downto 0); begin Kyõ thuaät PLD vaø ASIC SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com if CLR = '1' then bcd1:="0000"; bcd2:="0000"; F <= "0000000000000000000"; elsif RISING_EDGE(CLK) then F <= F + 1; if F = "1111111111111111111" then bcd1:=bcd1+1; if bcd1 = "1010" then bcd1:="0000"; bcd2:= bcd2+1; if bcd2 = "0110" then bcd2:="0000"; end if; end if; nd if; end if; QB <= bcd2 & bcd1 ; -- hien thi 8 led don mabh <= giai_ma(bcd2); mabl <= giai_ma(bcd1); case F (10 downto 9)is when "00" => ma7d <= mabh; anod <="0010"; when "10" => ma7d <= mabl; anod <="0001"; when others => null; end case; END PROCESS; end Behavioral; 5. THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 000 ÑEÁN 999 – HIEÅN THÒ TREÂN 3 LED 7 ÑOAÏN Baøi 4-13: Thieát keá maïch ñeám bcd töø 000 ñeán 999 hieån thò treân 3 led 7 ñoaïn keát noái theo phöông phaùp bình thöôøng. Söû duïng nguoàn xung clock tuyø yù. ab c d e f g ab c d e f g ab c d e f g Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-13. Sô ñoà khoái maïch ñeám töø 000 ñeán 999. Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Böôùc 2: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity DEM_999000 is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; QDVI : out STD_LOGIC_VECTOR (6 downto 0); QCHU : out STD_LOGIC_VECTOR (6 downto 0); QTRA : out STD_LOGIC_VECTOR (6 downto 0)); end DEM_999000; architecture Behavioral of DEM_999000 is signal GMA_DVI: std_logic_vector(7 downto 0); signal GMA_CHU: std_logic_vector(7 downto 0); signal GMA_TRM: std_logic_vector(7 downto 0); function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is variable z1: std_logic_vector(6 downto 0); begin case x1 is when "0000" => z1 := "1000000"; -- so 0 when "0001" => z1 := "1111001"; -- so 1 when "0010" => z1 := "0100100"; -- so 2 when "0011" => z1 := "0110000"; -- so 3 when "0100" => z1 := "0011001"; -- so 4 when "0101" => z1 := "0010010"; -- so 5 when "0110" => z1 := "0000010"; -- so 6 when "0111" => z1 := "1111000"; -- so 7 when "1000" => z1 := "0000000"; -- so 8 when "1001" => z1 := "0010000"; -- so 9 when others =>z1 := "1111111"; -- TATLED end case; Kyõ thuaät PLD vaø ASIC SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com return z1; end giai_ma; begin process (CLR,CLK) variable BCD_DVI: std_logic_vector(3 downto 0); variable BCD_CHU: std_logic_vector(3 downto 0); variable BCD_TRA: std_logic_vector(3 downto 0); begin if CLR = '1' then BCD_DVI:="0000"; BCD_CHU:="0000"; BCD_TRA:="0000"; Elsif CLK= '1' and CLK'event then BCD_DVI:=BCD_DVI+1; if BCD_DVI= "1010" then BCD_DVI:="0000"; BCD_CHU:= BCD_CHU+1; if BCD_CHU= "1010" then BCD_CHU:="0000"; BCD_TRA:= BCD_TRA+1; if BCD_TRA= "1010" then BCD_TRA:="0000"; end if; end if; end if; end if; QDVI <= giai_ma(BCD_DVI); QCHU <= giai_ma(BCD_CHU); QTRA <= giai_ma(BCD_TRA); END PROCESS; end Behavioral; V. CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP Baøi taäp 4-1: Thieát keá flip flop RS. Baøi taäp 4-2: Thieát keá maïch choát D. Baøi taäp 4-3: Thieát keá flip flop D. Kyõ thuaät PLD vaø ASIC Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Baøi taäp 4-4: Thieát keá flip flop T. Baøi taäp 4-5: Thieát keá 4 flip flop D goàm 4 ngoõ vaøo D, 4 ngoõ ra Q vaø 4 ngoõ ra QD, duøng chung 1 CLK. Baøi taäp 4-6: Thieát keá 8 flip flop T goàm 8 ngoõ vaøo T, 8 ngoõ ra Q vaø 8 ngoõ ra QD, duøng chung CLK. Baøi taäp 4-7: Thieát keá thanh ghi dòch gioáng nhö IC 74164. Baøi taäp 4-8: Thieát keá thanh ghi dòch gioáng nhö IC 47194. Baøi taäp 4-9: Thieát keá maïch ñieàu khieån ñeøn giao thoâng vôùi xanh_1, vaøng_1, Ñoû_1, xanh_2, vaøng_2, ñoû_2. Cho xanh saùng 15 giaây, vaøng saùng 5 giaây vaø ñoû saùng 20 giaây. Baøi taäp 4-10: Thieát keá maïch ñieàu khieån ñeøn 8 led ñôn vôùi yeâu caàu nhö sau: ñieåm saùng chaïy töø phaûi sang traùi vaø töø traùi sang phaûi theo xung clock vaø coù 1 chaân cho pheùp E tích cöïc möùc 0. Baøi taäp 4-11: Thieát keá maïch coù chöùc naêng gioáng nhö IC 4017. Baøi taäp 4-12: Thieát keá maïch coù chöùc naêng gioáng nhö IC 4017 nhöng goàm coù 20 ngoõ ra. Baøi taäp 4-13: Thieát keá maïch coù chöùc naêng gioáng nhö IC 4017 nhöng goàm 2 con: moät con ñeám haøng ñôn vò vaø moät con ñeám haøng chuïc. Baøi taäp 4-14: Thieát keá maïch ñeám nhò phaân 4 bit – ñeám xuoáng. Baøi taäp 4-15: Thieát keá maïch ñeám nhò phaân 4 bit – ñeám leân, ñeám xuoáng ñöôïc ñieàu khieån baèng tín hieäu UD (UD = 0 thì ñeám leân, UD = 1 thì ñeám xuoáng), coù moät tín hieäu CLK, moät tín hieäu CLR. Baøi taäp 4-16: Thieát keá maïch ñeám nhò phaân 4 bit – ñeám leân, ñeám xuoáng ñöôïc ñieàu khieån baèng
tín hieäu UD (UD = 0 thì ñeám leân, UD = 1 thì ñeám xuoáng), coù moät tín hieäu CLK, moät tín hieäu CLR.
Coù theâm chöùc naêng ñaët tröôùc soá ñeám nhö IC 74193. Baøi taäp 4-17: Thieát keá maïch ñeám nhò phaân 4 bit – ñeám leân, ñeám xuoáng ñöôïc ñieàu khieån baèng
tín hieäu UD (UD = 0 thì ñeám leân, UD = 1 thì ñeám xuoáng), coù moät tín hieäu CLK, moät tín hieäu CLR,
coù giaûi maõ hieån thò ra 1 led 7 ñoaïn töø 0 ñeán F töông öùng vôùi soá thaäp luïc phaân. Baøi taäp 4-18: Thieát keá maïch ñeám BCD – ñeám leân, ñeám xuoáng ñöôïc ñieàu khieån baèng tín hieäu
UD (UD = 0 thì ñeám leân, UD = 1 thì ñeám xuoáng), coù moät tín hieäu CLK, moät tín hieäu CLR, coù giaûi
maõ hieån thò ra 1 led 7 ñoaïn. Baøi taäp 4-19: Thieát keá maïch ñeám BCD töø 00 ñeán 99 – ñeám leân, ñeám xuoáng ñöôïc ñieàu khieån
baèng tín hieäu UD (UD = 0 thì ñeám leân, UD = 1 thì ñeám xuoáng), coù moät tín hieäu CLK, moät tín hieäu
CLR, coù giaûi maõ hieån thò ra 2 led 7 ñoaïn – khoâng duøng queùt. Baøi taäp 4-20: Thieát keá maïch ñeám BCD töø 000 ñeán 999 – ñeám leân, ñeám xuoáng ñöôïc ñieàu
khieån baèng tín hieäu UD (UD = 0 thì ñeám leân, UD = 1 thì ñeám xuoáng), coù moät tín hieäu CLK, moät tín
hieäu CLR, coù giaûi maõ hieån thò ra 3 led 7 ñoaïn – duøng queùt. Baøi taäp 4-21: Thieát keá maïch goàm coù 3 led 7 ñoaïn, baøn phím goàm 10 phím soá töø “0” ñeán “9”.
Ban ñaàu thì 3 led hieån thò soá “000”, khi nhaán phím naøo thì phím ñoù ñöôïc dòch vaøo töø beân phaûi.
(gioáng nhö maùy tính calculator). Baøi taäp 4-22: Thieát keá maïch ñònh thôøi: goàm coù 2 led 7 ñoaïn ñeå hieån thò soá giaây töø 00 ñeán 99,
baøn phím goàm 10 phím soá töø “0” ñeán “0” vaøà phím chöùc naêng nhö “clear”, “enter”, “test”, moät ngoõ
ra ñieàu khieån relay. Ban ñaàu thì 2 led hieån thò soá “00”, khi nhaán phím naøo thì phím ñoù ñöôïc dòch Kyõ thuaät PLD vaø ASIC SPKT – Nguyeãn Ñình Phuù Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL
vaøo töø beân phaûi. Sau khi nhaán xong thì nhaán “enter” quaù trình ñeám xuoáng seõ baét ñaàu cho ñeán khi
giaù trò ñeám baèng 00 thì relay seõ taùc ñoäng. Heä thoáng ngöøng. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Kyõ thuaät PLD vaø ASIC TAØI LIEÄU THAM KHAÛO [1]. “Digital Fundamental Experiments and Concepts with CPLDs” , Thomson
Delmar Learning_Chartrand, 2004 [2]. Mivhael.Dciletti, “ Starter’”, Pearson– Pretice Hall, 2004. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com [4]. William Kleitz, “Digital Electronics with VHDL Quartus II version”, Pearson– Pretice Hall, 2004. [5]. Jong Ching Chuen, Chang Chip Hong, “Digital System Design Principle
and Practices”, Pearson Prentice Hall, 2007. [3]. Wayne Wolf, “FPGA based System design ”, Prentice Hall, 2004107
mod
rem
sll
srl
sla
sra
rol
ror
109
Toaùn töû Moâ taû
Döõ lieäu beân traùi Döõ lieäu beân phaûi Döõ lieäu keát quaû
abs
not
111
113
115
117
119
121
123
125
end
Chöông 3
THIEÁT KEÁ MAÏCH LOGIC TOÅ HÔÏP BAÈNG
VHDL
128
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity giaima_24 is
Port ( I : in STD_LOGIC_VECTOR (1 downto 0);
Q : out STD_LOGIC_VECTOR (3 downto 0));
end giaima_24;
architecture Behavioral of giaima_24 is
129
begin
PROCESS (I)
BEGIN
CASE I IS
WHEN "00" => Q <= "0001";
WHEN "01" => Q <= "0010";
WHEN "10" => Q <= "0100";
WHEN "11" => Q <= "1000";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
I0 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
1
1
×
0
1
0
1
1
1
1
1
0
1
1
1
1
0
0
1
1
1
1
1
0
1
1
1
Ngoõ vaøo
I1
I2
×
×
0
0
0
0
1
0
1
0
0
1
0
1
1
1
1
1
Baûng 3-2. BTT maïch GM 3 - 8.
130
131
132
133
134
135
136
end
137
Chöông 4
CAÙC FLIP FLOP, THANH GHI, BOÄ ÑEÁM
TRONG VHDL
142
143
144
SPKT – Nguyeãn Ñình Phuù
Baøi 4-2: Thieát keá flip flop D goàm coù caùc ngoõ vaøo D, CLK, Enable vaø ngoõ ra goàm Q vaø Q :
145
146
147
148
149
150
151
: in STD_LOGIC;
152
153
154
155
Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL
PROCESS(CLK,CLR)
156
NGOÕ RA
157
158
159
Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL
160
Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL
161
162
Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL
163
164
end
165