SlideShare a Scribd company logo
1 of 63
Download to read offline
‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬
Verilog
ٝ‫كفح‬2‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫مطالب‬ ‫فهرست‬
‫مقدمه‬................................................................................................................................................................................3
1)‫سبک‬‫طراح‬‫ی‬....................................................................................................................................................................4
2)‫سطوح‬‫طراح‬‫ی‬‫در‬‫زبان‬Verilog.............................................................................................................................................7
3)‫متد‬‫طراح‬‫ی‬‫از‬‫باال‬‫به‬‫پا‬‫یی‬‫ه‬.....................................................................................................................................................8
4)‫تعار‬‫ی‬‫ف‬‫اول‬‫ی‬‫ه‬....................................................................................................................................................................12
5)‫قواعد‬‫دستور‬‫ی‬‫و‬‫پا‬‫ی‬‫ه‬‫ا‬‫ی‬‫زبان‬Verilog....................................................................................................................................13
6)‫مدل‬‫ساز‬‫ی‬‫در‬‫سطح‬‫گ‬‫ی‬‫ت‬....................................................................................................................................................26
7)‫مدل‬‫ساز‬‫ی‬‫سطح‬‫ثبات‬‫ی‬(‫جر‬‫ی‬‫ان‬‫داده‬‫ها‬)...................................................................................................................................32
8)‫عبارات‬،‫عملگر‬‫ها‬‫و‬‫عملوود‬‫ها‬...............................................................................................................................................34
9)‫مدل‬‫ساز‬‫ی‬‫رفتار‬‫ی‬‫در‬Verilog.............................................................................................................................................44
14)‫طراح‬‫ی‬‫مدار‬‫در‬‫سطح‬‫رفتار‬‫ی‬...............................................................................................................................................45
11)‫مثال‬‫ها‬........................................................................................................................................................................48
12)‫تمار‬‫ی‬‫ه‬.........................................................................................................................................................................63
ٝ‫كفح‬3 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫مقدمه‬
Verilog‫ٔی‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫اص‬ ‫یىی‬‫یه‬ ‫زٛػي‬ .‫تاؿذ‬‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬‫یا‬ ٚ ٝ‫حافظ‬ ، ‫فالج‬ ‫فّیح‬ ‫ٔا٘ٙذ‬ َ‫دیدیسا‬ ٓ‫ػیؼس‬ ‫یه‬ ‫سفساس‬ ٖ‫زٛا‬ ‫ٔی‬
.‫ٕ٘ٛد‬ ‫زٛكیف‬ ‫سا‬ ... ٚ ٜ‫خشداص٘ذ‬ٜ‫اػسفاد‬ ‫تا‬‫دیدیساِی‬ ٓ‫ػیؼس‬ ‫یه‬ ‫یا‬ ٚ ‫فالج‬ ‫فّیح‬ ‫یه‬ ‫ٔا٘ٙذ‬ ٜ‫ػاد‬ ‫دیدیساِی‬ ٓ‫ػیؼس‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬ ‫افضاسی‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ٗ‫ای‬ ‫اص‬
ٕ٘ ‫زٛكیف‬ ‫صیش‬ ‫ًشاحی‬ ‫ػٌٛح‬ ‫دس‬ ‫سا‬ ‫خٛد‬ ‫افضاس‬ ‫ػخر‬ ‫زٛا٘یذ‬ ‫ٔی‬ ‫ؿٕا‬ ٖ‫صتا‬ ٗ‫ای‬ ‫زٛػي‬ .‫ٕ٘ٛد‬ ‫زٛكیف‬ ‫ػٌحی‬ ‫ٞش‬ ‫دس‬ ‫سا‬ ‫ٔیىشٚوٙسشِش‬ ‫یه‬ ‫٘ظیش‬ ٝ‫خیـشفس‬: ‫اییذ‬
‫د‬ ٚ‫س‬ ‫خیؾ‬ ٝ‫و‬ ‫ای‬ ٝ‫وساتچ‬‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬ ‫اسیذ‬Verilog‫وأدیٛزش‬ ،‫تشق‬ ‫ٞای‬ ٝ‫سؿس‬ ٖ‫دا٘ـدٛیا‬ ٝ‫وساتچ‬ ٗ‫ای‬ ‫خاف‬ ٖ‫ٔخاًثا‬ .‫تاؿذ‬ ‫ٔی‬–، ‫افضاس‬ ‫ػخر‬
– ‫خضؿىی‬ ‫ٟٔٙذػی‬.‫تاؿذ‬ ‫ٔی‬ َ‫دیدیسا‬ ‫ٔذاساذ‬ ٝ‫ت‬ ‫ٔٙذ‬ ٝ‫ػالل‬ ‫افشاد‬ ‫دیٍش‬ ٚ ‫اِىسشیه‬ ٛ‫تی‬ٌٔ ُٔ‫وا‬ ٟٓ‫ف‬ ‫تشای‬ ٝ‫و‬ ‫تفشٔایٙذ‬ ‫دلر‬ ‫تایذ‬ ‫وساب‬ ٗ‫ای‬ ٖ‫خٛا٘ٙذٌا‬ٗ‫ای‬ ٖٚ‫دس‬ ‫اِة‬
.‫تاؿٙذ‬ ٜ‫ٌزسا٘ذ‬ ‫سا‬ ‫ٌٔٙمی‬ ‫ٔذاساذ‬ ‫دسع‬ ‫یا‬ ٚ ٝ‫داؿس‬ َ‫دیدیسا‬ ‫ٔذاساذ‬ ‫تا‬ ‫خٛتی‬ ‫آؿٙایی‬ ‫تایؼر‬ ‫ٔی‬ ٝ‫وساتچ‬
‫اص‬ ٜ‫ؿذ‬ ٖ‫آ‬ ‫تش‬ ‫ػؼی‬ ٗ‫ٕٞچٙی‬ .‫وشد‬ ٜ‫اؿاس‬ ‫آٔٛصؿی‬ ‫ٌّٔة‬ ‫ٞش‬ ‫اص‬ ‫تؼذ‬ ‫ٔسٙٛع‬ ُ‫ٔؼائ‬ ٚ ‫ٞا‬ َ‫ٔثا‬ ٖ‫ؿذ‬ ‫ٌٔشح‬ ٝ‫ت‬ ٖ‫زٛا‬ ‫ٔی‬ ‫آٔٛص‬ ‫خٛد‬ ٗ‫ای‬ ‫ٞای‬ ‫ٚیظٌی‬ ‫اص‬‫واستشد‬ ٝ‫و‬ ‫ٌٔاِثی‬
Verilog ‫دس‬ ‫زش‬ ٝ‫خیـشفس‬ ُ‫ٔؼائ‬ ‫فشاٌیشی‬ ‫خٟر‬ ٖ‫زٛا‬ ‫ٔی‬ ُ‫زٕای‬ ‫كٛسذ‬ ‫دس‬ ٖ‫خٛا٘ٙذٌا‬ .‫ؿٛد‬ ‫٘ظش‬ ‫كشف‬ ‫داس٘ذ‬ ‫وٕسشی‬‫وساب‬ ٝ‫ت‬Verilog HDL – A Guide to Digital
Design.‫ٕ٘ایٙذ‬ ٝ‫ٔشاخؼ‬‫ٞای‬ ‫وساب‬ ‫اص‬ ٝ‫وساتچ‬ ٗ‫ای‬ ‫ٌٔاِة‬Verilog HDL – A Guide to Digital Designٝ‫٘ٛؿس‬Samir Palnitkar‫آٔٛصؿی‬ ٜٚ‫خض‬ ،Verilog‫ػؼیذ‬ ٝ‫٘ٛؿس‬
‫آٔٛصؿی‬ ٜٚ‫خض‬ ، ‫كفشی‬Verilogٝ‫٘ٛؿس‬Deepak Kumar Tala.‫اػر‬ ٜ‫ؿذ‬ ٗ‫زذٚی‬ ٚ ‫آٚسی‬ ‫خٕغ‬ ... ٚ
ٝ‫كفح‬4‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
1)‫طراحی‬ ‫سبک‬
ٖ‫صتا‬ ‫خضئیاذ‬ ٝ‫ت‬ ٝ‫ایٙى‬ ‫اص‬ ُ‫لث‬Verilog.ٓ‫وٙی‬ ‫كحثر‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫زٛػي‬ ‫ًشاحی‬ ‫ػثه‬ ٜ‫دستاس‬ ‫وٕی‬ ‫زا‬ ‫اػر‬ ‫٘یاص‬ ‫اتسذا‬ ،ٓ‫خشداصی‬ ٝ‫ت‬ٖ‫صتا‬
Verilog‫خای‬ ٝ‫ت‬ ‫تاال‬ ‫اص‬ ‫ًشاحی‬ ٖ‫أىا‬ ٖ‫ًشاحا‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٔا٘ٙذ‬‫دٞذ‬ ‫ٔی‬ ‫سا‬ ‫تاال‬ ٝ‫ت‬ ٗ‫خایی‬ ‫اص‬ ٚ ٗ‫ی‬ٚ ‫ٔضایا‬ ‫داسای‬ ‫ٞا‬ ‫ٔسذ‬ ٗ‫ای‬ ‫اص‬ ‫ٞشیه‬ ،
.‫ؿٛد‬ ‫ٔی‬ ٜ‫اؿاس‬ ٖ‫آ‬ ٝ‫ت‬ ٝ‫و‬ ‫تاؿٙذ‬ ‫ٔی‬ ‫ٔؼایثی‬
‫سبک‬‫طراحی‬‫باال‬ ِ‫ب‬ ‫پاییي‬ ‫از‬1
‫ٔذاس‬ ‫ًشاحی‬ ‫دس‬ ‫ػٙسی‬ ‫ٔسذ‬ ‫یه‬ ‫تاال‬ ٝ‫ت‬ ٗ‫خایی‬ ‫ًشاحی‬ ‫ٔسذ‬‫ٔسذ‬ ٗ‫ای‬ ‫دس‬ .‫تاؿذ‬ ‫ٔی‬ َ‫دیدیسا‬ ‫ٞای‬‫ٌیر‬ ‫ػٌح‬ ‫یؼٙی‬ ‫ػٌح‬ ٗ‫زشی‬ ٗ‫خایی‬ ‫اص‬ َ‫دیدیسا‬ ‫افضاس‬ ‫ػخر‬
‫خذیذ‬ ‫ٞای‬ ‫افضاس‬ ‫ػخر‬ ‫خیچیذٌی‬ ‫افضایؾ‬ ‫تا‬ .‫ؿذ‬ ‫خٛاٞذ‬ ٝ‫اهاف‬ ٖ‫آ‬ ‫خیچیذٌی‬ ٝ‫ت‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫افضاس‬ ‫ػخر‬ ٝ‫ت‬ ٖ‫سػیذ‬ ‫زا‬ ّٝ‫ٔشح‬ ‫ٞش‬ ‫دس‬ ٚ ‫ؿٛد‬ ‫ٔی‬ ‫ًشاحی‬ٜ‫خیاد‬
‫خٛاٞذ‬ ٗ‫ٕٔى‬ ‫٘ا‬ ٚ ‫ػخر‬ ‫تؼیاس‬ ‫ٔسذ‬ ٗ‫ای‬ ‫زٛػي‬ ‫ػاصی‬.‫ؿذ‬
ُ‫ؿى‬1.‫تاال‬ ٝ‫ت‬ ٗ‫خایی‬ ‫ًشاحی‬ ‫ٔسذ‬
1
Bottom to Up Design Methodology
ٝ‫كفح‬5 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫پاییي‬ ِ‫ب‬ ‫باال‬ ‫از‬ ‫طراحی‬ ‫سبک‬1
‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫ٔخسّف‬ ‫ٞای‬ ‫تخؾ‬ ‫ًشاح‬ ‫ٔسذ‬ ٗ‫ای‬ ‫دس‬ ،‫تاؿذ‬ ‫ٔی‬ ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫اص‬ ‫ًشاحی‬ ‫ٔسذ‬ ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫زٛكیف‬ ٚ ‫ًشاحی‬ ‫دس‬ ‫ٔسذ‬ ٗ‫زشی‬ َٚ‫ٔسذا‬‫سا‬
‫ٔخسّف‬ ‫ٞای‬ ‫تخؾ‬ ‫ًشاحی‬ ‫زغییش‬ ،ٝ‫اِٚی‬ ‫ٞای‬ ‫زؼر‬ ‫لاتّیر‬ ٝ‫ت‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ٔسذ‬ ٗ‫ای‬ ‫ٞای‬ ‫ٔضیر‬ ‫اص‬ .‫وٙذ‬ ‫ٔی‬ ‫ًشاحی‬ ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫اص‬ ٚ ٝ٘‫خذاٌا‬ ‫تلٛسذ‬‫تذ‬‫ایداد‬ ٖٚ
ٝ‫و‬ ‫تاؿذ‬ ‫ٔی‬ ‫ػیؼسٕی‬ ‫دیذ‬ ٚ ‫اًالػاذ‬ ‫٘یاصٔٙذ‬ ‫ٔسذ‬ ٗ‫ای‬ ُٔ‫وا‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫ػٛم‬ ‫دس‬ .‫وشد‬ ٜ‫اؿاس‬ ... ٚ ٗ‫سٚزی‬ ‫ًشاحی‬ ، ‫ٞا‬ ‫تخؾ‬ ‫دیٍش‬ ‫دس‬ ‫زغییشاذ‬‫تا‬ ٝ‫ٔمایؼ‬ ‫دس‬
‫ػ‬ ‫ًشاحی‬ ‫خٟر‬ ‫ٔسذ‬ ٚ‫د‬ ‫ٞش‬ ‫زشویة‬ ‫اص‬ ‫خٛد‬ ‫ٞای‬ ‫ًشاحی‬ ‫دس‬ ‫افضاس‬ ‫ػخر‬ ٖ‫ًشاحا‬ ‫تیـسش‬ ُ‫دِی‬ ٗ‫ٕٞی‬ ٝ‫ت‬ ،‫تاؿذ‬ ‫ٔی‬ ‫زش‬ ُ‫ٔـى‬ ُ‫لث‬ ‫ٔسذ‬َ‫دیدیسا‬ ‫ٞای‬ ٓ‫یؼس‬
ٜ‫اػسفاد‬‫وٙٙذ‬ ‫ٔی‬.
ُ‫ؿى‬2.ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫ًشاحی‬ ‫ٔسذ‬
1
Top Down Design Methodology
ٝ‫كفح‬6‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
ُ‫ؿى‬3.ٔ‫یه‬ ‫ًشاحی‬ ُ‫شاح‬ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫سٚؽ‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬
‫ٞای‬ ‫ٚیظٌی‬ ٖ‫وشد‬ ‫ٔـخق‬
‫افضاس‬ ‫ػخر‬
Design Specification
‫تاال‬ ‫ػٌح‬ ‫ًشاحی‬
High Level Design
ٗ‫خایی‬ ‫ػٌح‬ ‫ًشاحی‬
Low Level Design
‫ثثازی‬ ‫ًشاحی‬
RTL Design
‫ػّٕىشد‬ ‫تشػی‬
Functional
Verfication
‫ٌٔٙمی‬ ‫زفؼیش‬
Logic Synthesis
‫ٌیر‬ ‫ػٌح‬ ‫ػاصی‬ ٝ‫ؿثی‬
Gate Level
Simulation
‫وـی‬ ٓ‫ػی‬ ٚ ‫ٌضاسی‬ ‫خای‬
Place & Route
‫ػاصی‬ ٜ‫خیاد‬
Implementation
ٝ‫كفح‬7 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
2)‫زبان‬ ‫در‬ ‫طراحی‬ ‫سطوح‬Verilog
٘‫خـسیثا‬ ‫افضاس‬ ‫ػخر‬ ‫ًشاحی‬ ٚ ‫زٛكیف‬ ‫خٟر‬ ‫ٔخسّفی‬ ‫ػٌٛح‬ ‫اص‬ ٖ‫صتا‬ ٗ‫ای‬‫ػ‬ .‫وٙذ‬ ‫ٔی‬ ‫ی‬‫سفساسی‬ ‫ػٌح‬ ‫اص‬ ‫ػثاسزٙذ‬ ٟٓٔ ‫ػٌح‬ ٝ‫ثثازی‬ َ‫ا٘سما‬ ‫ػٌح‬ ،.‫ٌیر‬ ‫ػٌح‬ ٚ
‫گیت‬ ‫تَصیف‬ ‫سطح‬1
‫افضاس‬ ‫ػخر‬ ،‫ًشاحی‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ً‫ا‬ٕ‫ٔؼسمی‬َ‫ػیٍٙا‬ ‫تا‬ ٓ‫ٔؼسمی‬ ‫تلٛسذ‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ٔی‬ ‫زٛكیف‬ ‫آٟ٘ا‬ ٖ‫ٔیا‬ ‫ازلاالذ‬ ٚ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬ ‫زٛػي‬2
‫ٞای‬
‫ػ‬ ‫زٛػي‬ ‫افضاس‬ ‫ػخر‬ ‫ٔؼٕٛال‬ ٚ ‫اػر‬ ‫ٔـىّی‬ ‫تؼیاس‬ ‫واس‬ ٜ‫خیچیذ‬ ٚ ‫تضسي‬ ‫ٞای‬ ‫ٔذاس‬ ‫تشای‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ ‫ًشاحی‬ .ٓ‫داسی‬ ‫ػشٚواس‬ ‫داخّی‬ ٚ ‫خشٚخی‬ ،‫ٚسٚدی‬‫ٌٛح‬
‫ػٙسض‬ ‫ٞای‬ ‫اتضاس‬ ‫زٛػي‬ ٚ ‫ًشاحی‬ ‫تاالزش‬3
.‫ؿذ‬ ‫خٛاٞذ‬ ُ‫زثذی‬ ‫ٌیر‬ ‫ػٌح‬ ٝ‫ت‬
‫ثباتی‬ ‫اًتقال‬ ‫تَصیف‬ ‫سطح‬4
) ‫ّا‬ ُ‫داد‬ ‫جریاى‬ (
‫د‬ ‫ٔذاس‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ٖ‫ٕٞضٔا‬ ‫تشای‬ ‫ًشاحی‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ٔی‬ ‫ًشاحی‬ ‫یىذیٍش‬ ٗ‫تی‬ ‫ٞا‬ ٜ‫داد‬ َ‫ا٘سما‬ ٚ ‫ثثازی‬ ‫ٞای‬ ‫ػّٕیاذ‬ ٚ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تا‬ ‫یدیساِی‬
.‫ؿٛد‬ ‫ٔی‬ ‫احؼاع‬ ‫ٚهٛح‬ ٝ‫ت‬ ‫ػاػر‬ َ‫ػیٍٙا‬ ‫یه‬ ٝ‫ت‬ ‫ًشاح‬ ‫ٔخسّف‬ ‫ٞای‬ ‫تخؾ‬ ‫ػاصی‬
‫رفتاری‬ ‫تَصیف‬ ‫سطح‬5
‫ٞای‬ ٓ‫اٍِٛسیس‬ ‫تشحؼة‬ ‫افضاس‬ ‫ػخر‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ٖ‫ٕٞضٔا‬ٔ ‫ًشاحی‬‫ٞش‬ .‫تاؿذ‬ ‫ٕ٘ی‬ ‫ًشح‬ ‫افضاسی‬ ‫ػخر‬ ‫خضئیاذ‬ ‫زٛكیف‬ ٝ‫ت‬ ‫٘یاصی‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ی‬
ٓ‫اٍِٛسیس‬‫زشزیثی‬ ‫تلٛسذ‬ ‫زٟٙایی‬ ٝ‫ت‬‫ػخر‬ ‫سفساس‬ ‫ٞا‬ ٓ‫اٍِٛسیس‬ ٗ‫ای‬ ٝ‫ٔدٕٛػ‬ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ‫اخشا‬ ‫دیٍشی‬ ‫اص‬ ‫خغ‬ ‫یىی‬ ‫دػسٛساذ‬ ٝ‫و‬ ‫تٌٛسی‬ ‫ؿٛد‬ ‫ٔی‬ ٖ‫تیا‬
‫دس‬ ‫اكّی‬ ‫اتضاس‬ ‫اص‬ ‫ٞا‬ ‫تّٛن‬ ٚ ‫ٞا‬ ‫زؼه‬ ،‫زٛاتغ‬ .‫وٙذ‬ ‫ٔی‬ ‫زٛكیف‬ ‫سا‬ ‫افضاس‬.‫تاؿٙذ‬ ‫ٔی‬ ‫ًشاحی‬ ‫ػٌح‬ ٗ‫ای‬
1
Gate Level Modeling
2
Signal
3
Synthesis
4
Register Transfer Level
5
Behavioral Modeling
ٝ‫كفح‬8‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
3)‫پاییه‬ ‫به‬ ‫باال‬ ‫از‬ ‫طراحی‬ ‫متد‬
: ‫اػر‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫ؿشح‬ ‫صیش‬ ‫دس‬ ‫ٔسذ‬ ٗ‫ای‬ ‫زٛػي‬ ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫ًشاحی‬ ُ‫ٔشاح‬
‫افضاس‬ ‫ػخر‬ ‫ٞای‬ ‫ٚیظٌی‬ ٖ‫وشد‬ ‫ٔـخق‬(Design Specification)
ٛ‫تل‬ ‫خشداصؿی‬ ‫ػّٕیاذ‬ ٚ ‫خشٚخی‬ ٚ ‫ٞا‬ ‫ٚسٚدی‬ ‫٘ٛع‬ ُ‫لثی‬ ‫اص‬ ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫وّی‬ ‫ٞای‬ ‫ٚیظٌی‬ ّٝ‫ٔشح‬ ‫دس‬.‫ؿٛد‬ ‫ٔی‬ ‫تشػی‬ ‫وّی‬ ‫سذ‬
‫تاال‬ ‫ػٌح‬ ‫ًشاحی‬(High Level Design)
‫ٞای‬ ‫تّٛن‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫ٞای‬ ‫خشٚخی‬ ٝ‫ت‬ ‫دػسیاتی‬ ‫تشای‬ ٚ ‫ٌیش٘ذ‬ ‫ٔی‬ ‫لشاس‬ ‫تشػی‬ ‫ٔٛسد‬ ‫دلیك‬ ‫تٌٛس‬ ‫افضاس‬ ‫ػخر‬ ‫ٞای‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬
.‫وشد‬ ٓ‫خٛاٞی‬ ٝ‫زؼثی‬ ‫سا‬ ‫ٔخسّفی‬‫ٔی‬ ‫تّٛن‬ ‫سا‬ ‫وٛچىسش‬ ‫ٞای‬ ‫ٚاحذ‬ ٗ‫ای‬ .‫تاؿذ‬ ‫ٔی‬ ‫زش‬ ‫وٛچه‬ ‫ٞای‬ ‫ٚاحذ‬ ٝ‫ت‬ ‫وّی‬ ‫ًشاحی‬ ‫یه‬ ٖ‫ؿىا٘ذ‬ ‫دسٚالغ‬ ‫ایٙىاس‬
.ٓ‫٘أی‬َ‫ٔثا‬ ‫تشای‬‫تّٛن‬ ، ٓ‫وٙی‬ ‫ًشاحی‬ ‫اتسذایی‬ ٜ‫خشداص٘ذ‬ ‫یه‬ ٓ‫خٛاٞی‬ ‫ٔی‬
،ٝ‫حافظ‬ ‫ٚاحذ‬ ،‫ٔشوضی‬ ‫خشداصؽ‬ ‫ٚاحذ‬ ‫اص‬ ‫ػثاسزٙذ‬ ٜ‫خشداص٘ذ‬ ٗ‫ای‬ ‫اكّی‬ ‫ٞای‬
‫ثثاذ‬‫ٞا‬ٙ‫و‬ ‫ٚاحذ‬ ٚ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ،.‫تاؿٙذ‬ ‫ٔی‬ َ‫سش‬
ُ‫ؿى‬4.‫تاال‬ ‫ػٌح‬ ‫ًشاحی‬ ‫یه‬ ‫اص‬ ‫ای‬ ٕٝ٘ٛ٘
ٝ‫كفح‬9 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
ٗ‫خایی‬ ‫ػٌح‬ ‫ًشاحی‬(Low Level Design)
.‫وٙذ‬ ‫ٔی‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫سا‬ ‫تّٛن‬ ‫دٞذ‬ ْ‫ا٘دا‬ ‫تایؼر‬ ‫ٔی‬ ‫تّٛن‬ ‫ٞش‬ ٝ‫و‬ ‫خشداصؿی‬ ‫٘ٛع‬ ٚ ‫تّٛن‬ ‫ٞش‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ‫اػاع‬ ‫تش‬ ‫ًشاح‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬
‫زٛػي‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬ ‫ػاصی‬ ٜ‫خیاد‬‫ٞا‬ ‫ثثاذ‬‫ٔا‬ ،‫ٞا‬ ‫دیىٛدس‬ ،.‫ؿٛد‬ ‫ٔی‬ ْ‫ا٘دا‬ ... ٚ ‫ٞا‬ ٜ‫ؿٕاس٘ذ‬ ،‫ٞا‬ ‫خّىؼش‬ ‫ِسی‬
ُ‫ؿى‬5.ٗ‫خایی‬ ‫ػٌح‬ ‫ًشاحی‬ ‫یه‬ ‫اص‬ ‫ای‬ ٕٝ٘ٛ٘
‫ثثازی‬ ‫ًشاحی‬(RTL Design)
‫ٞای‬ ‫وذ‬ ٝ‫ت‬ ُ‫لث‬ ّٝ‫ٔشح‬ ‫ًشاحی‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬Verilogّٝ‫ٔشح‬ ‫ٞای‬ ‫ًشح‬ ٗ‫ای‬ ُ‫زثذی‬ .‫ؿٛد‬ ‫ٔی‬ ُ‫زثذی‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫یا‬ ٚ
ٔ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬ ٝ‫ت‬ ُ‫لث‬.‫خزیشد‬ ‫كٛسذ‬ ٖ‫صتا‬ ٖ‫آ‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ٗ‫لٛا٘ی‬ ٚ ‫چٟاسچٛب‬ ‫دس‬ ‫تایؼر‬ ‫ی‬
‫ػّٕىشد‬ ‫تشػی‬(Functional Verification)
.‫تاؿذ‬ ‫ٔی‬ ٜ‫ؿذ‬ ‫ًشاحی‬ ‫افضاس‬ ‫ػخر‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫تشای‬ ‫ػّٕیازی‬ ُٔ‫ؿا‬ ّٝ‫ٔشح‬ ٗ‫ای‬‫افضاس‬ ‫ػخر‬ ‫كحیح‬ ‫واسوشد‬ ‫اص‬ ٖ‫إًیٙا‬ ‫ٔٙظٛس‬ ٝ‫ت‬ ‫ػاصی‬ ٝ‫ؿثی‬
‫ٞای‬ ‫افضاس‬ ْ‫٘ش‬ ‫اص‬ ‫تایؼر‬ ‫ٔی‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬ .‫ٌیشد‬ ‫ٔی‬ ‫كٛسذ‬‫ػاصی‬ ٝ‫ؿثی‬‫زٛكیف‬ ٖ‫صتا‬‫افضاسی‬ ‫ػخر‬‫یه‬ ‫تایؼر‬ ‫ٔی‬ ٗ‫ٕٞچٙی‬ .‫ٕ٘ٛد‬ ٜ‫اػسفاد‬
ٝ‫كفح‬10‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫خذیذ‬ ‫افضاس‬ ‫ػخر‬ ٗ‫ای‬ ٝ‫ت‬ . ٓ‫تاؿی‬ ٜ‫وشد‬ ‫ًشاحی‬ ُ‫لث‬ ‫اص‬ ٜ‫ؿذ‬ ‫ًشاحی‬ ‫افضاس‬ ‫ػخر‬ ‫زؼر‬ ‫تشای‬ ٝ٘‫خذاٌا‬ ‫افضاس‬ ‫ػخر‬Testbenchٗ‫ای‬ .‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬
.‫داسد‬ ٜ‫ػٟذ‬ ‫تش‬ ‫سا‬ ٜ‫ؿذ‬ ‫ًشاحی‬ ‫افضاس‬ ‫ػخر‬ ‫خشٚخی‬ ‫ٞای‬ َ‫ػیٍٙا‬ ‫ػٙدؾ‬ ٚ ‫ٚسٚدی‬ ‫ٞای‬ َ‫ػیٍٙا‬ ‫زِٛیذ‬ ٝ‫ٚظیف‬ ‫ػخر‬
ُ‫ؿى‬6.ٜ‫ؿٕاس٘ذ‬ ‫یه‬ ‫زؼر‬ ‫خٟر‬ ‫زؼر‬ ‫افضاس‬ ‫ػخر‬
‫زفؼی‬‫ش‬‫ٌٔٙمی‬‫یا‬‫ػٙسض‬(Logic Synthesis)
ٙ‫زى‬ ‫٘ٛع‬ ُ‫لثی‬ ‫اص‬ ‫ٚسٚدی‬ ‫اًالػاذ‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تا‬ ‫ػٙسض‬ ‫اتضاس‬ .‫تاؿذ‬ ‫ٔی‬ ‫افضاسی‬ ْ‫٘ش‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫دس‬ ُ‫وأدای‬ ٝ‫ٔـات‬ ‫ػّٕیاذ‬ ‫ػٙسض‬‫ِٛٛطی‬
‫ٞای‬ ‫وذ‬ ‫خشداصؽ‬ ٝ‫ت‬ ْ‫الذا‬ ‫اًالػازی‬ ‫تا٘ه‬ ٚ ‫ٞا‬ ‫خشٚخی‬ ٚ ‫ٞا‬ ‫ٚسٚدی‬ ٝ‫٘مـ‬ ،‫ٔملذ‬ ‫افضاس‬ ‫ػخر‬RTLٕ٘ ‫ٔی‬ٝ‫٘مـ‬ ٝ‫ت‬ ُ‫زثذی‬ ‫سا‬ ‫آٟ٘ا‬ ‫ا٘سٟا‬ ‫دس‬ ٚ ‫ایذ‬
‫ٞای‬ ‫تخؾ‬ ‫ٕٞضٔا٘ی‬ ‫اص‬ ٖ‫إًیٙا‬ ‫خٟر‬ ٜ‫ؿذ‬ ‫ػٙسض‬ ‫ٔذاس‬ ‫آ٘اِیض‬ ٝ‫ت‬ ْ‫الذا‬ ‫ػٙسض‬ ‫ػّٕیاذ‬ ْ‫ا٘دا‬ ‫اص‬ ‫خغ‬ ٗ‫ٕٞچٙی‬ ‫ػٙسض‬ ‫اتضاس‬ .‫وشد‬ ‫خٛاٞذ‬ ‫ٌیر‬ ‫ػٌح‬
ٔ ‫ٞای‬ ‫زاخیش‬ ‫ػٙسض‬ ‫ػّٕیاذ‬ ‫دس‬ ٝ‫و‬ ‫اػر‬ ‫روش‬ ُ‫لات‬ ( ‫ٕ٘ایذ‬ ‫ٔی‬ ‫صٔا٘ی‬ ‫ٔـىالذ‬ ٖ‫٘یأذ‬ ‫تٛخٛد‬ ٚ ‫یىذیٍش‬ ‫تا‬ ‫ٔخسّف‬‫ٚالؼی‬ ‫ٞای‬ ‫افضاس‬ ‫ػخر‬ ‫دس‬ ‫ٛخٛد‬
) ‫ؿٛد‬ ‫ٕ٘ی‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫دس‬.‫آٟ٘اػر‬ ٖ‫ٔیا‬ ‫ازلاالذ‬ ٚ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬ ‫تیاٍ٘ش‬ ٝ‫و‬ ‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬ ‫ِیؼر‬ ‫٘ر‬ ‫ػٙسض‬ ‫اتضاس‬ ‫خشٚخی‬ ٝ‫ت‬ .
ٝ‫كفح‬11 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫ؿثی‬ٝ‫ٌیر‬ ‫ػٌح‬ ‫ػاصی‬(Gate Level Simulation)
‫كح‬ ‫ػّٕىشد‬ ٚ ٜ‫ؿذ‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫ػٙسض‬ ‫اتضاس‬ ‫زٛػي‬ ٜ‫ؿذ‬ ‫زِٛیذ‬ ‫ِیؼر‬ ‫٘ر‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬. ‫ٌشفر‬ ‫خٛاٞذ‬ ‫لشاس‬ ‫تشػی‬ ‫ٔٛسد‬ ٖ‫آ‬ ‫یح‬
ُ‫ؿى‬7.‫ٌٛیٙذ‬ ‫ٔی‬ ‫ػٙسض‬ ٖ‫آ‬ ٝ‫ت‬ ٝ‫و‬ ‫ٌیر‬ ‫ػٌح‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬ ُ‫زثذی‬ ‫فشایٙذ‬
‫خای‬‫ٌزا‬‫وـی‬ ٓ‫ػی‬ ٚ ‫سی‬(Place & Route)
‫ٔی‬ ‫لثّی‬ ُ‫ٔشاح‬ ‫دس‬ ٜ‫ؿذ‬ ‫زِٛیذ‬ ‫ِیؼر‬ ‫٘ر‬ ‫تا‬ ‫ٌٔاتك‬ ‫ٔدسٕغ‬ ‫ٔذاس‬ ‫ًشاحی‬ ٝ‫ت‬ ‫ٔشتٛى‬ ‫دسٚالغ‬ ّٝ‫ٔشح‬ ٗ‫ای‬.‫تاؿذ‬
ٝ‫كفح‬12‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
4)‫اولیه‬ ‫تعاریف‬
‫هاجَل‬1
ٜ‫چاس‬ ٜ‫خیچیذ‬ ‫٘ؼثسا‬ ‫ٞای‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫تشای‬‫ای‬ٞ ‫تخؾ‬ ٗ‫ای‬ ،ٓ‫٘ذاسی‬ ‫زش‬ ‫وٛچه‬ ‫ٞای‬ ‫تخؾ‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ٝ‫زدضی‬ ‫خض‬.ٓ‫٘أی‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫یه‬ ‫سا‬ ‫وٛچه‬ ‫ای‬
ٖ‫صتا‬ ‫دس‬Verilog( ‫ٌشا‬ ‫ؿی‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫ٔا٘ٙذ‬ ٖ‫زٛا‬ ‫ٔی‬Java , C++ , C# …‫ٔشازثی‬ ّٝ‫ػّؼ‬ ‫ػاخساس‬ )2
‫ٞا‬ َٛ‫ٔاخ‬ ‫اص‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ّٝ‫تٛػی‬ ‫سا‬
.‫وشد‬ ‫ػاصی‬ ٜ‫خیاد‬
.‫وٙذ‬ ‫ٔی‬ ٖ‫خٟٙا‬ ‫سا‬ ٖ‫آ‬ ٖٚ‫دس‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫أا‬ ‫وٙذ‬ ‫ٔی‬ ٓٞ‫فشا‬ ‫سا‬ ‫تاالزش‬ ‫ٞای‬ َٛ‫ٔاخ‬ ‫٘یاص‬ ‫ٔٛسد‬ ‫ػّٕىشد‬ َٛ‫ٔاخ‬
ًَِ‫ًو‬3
‫اػ‬ َٛ‫ٔاخ‬ ٗ‫ای‬ ‫اص‬ ٝ‫و‬ ‫ٍٞٙأی‬ ،‫ٔیىٙذ‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫سا‬ ‫ٚالؼی‬ ‫ػٙلش‬ ‫یه‬ ‫اص‬ ‫اٍِٛیی‬ َٛ‫ٔاخ‬ ‫یه‬‫ؿٛد‬ ‫ٔی‬ ٜ‫سفاد‬
Verilogٗ‫ای‬ ‫اص‬ ٕٝ٘ٛ٘ ‫یه‬ٍِٛ‫ا‬‫سا‬‫ؿٕا‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫ٞای‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ٚ ‫ػاخر‬ ‫خٛاٞذ‬ ‫خٛدواس‬ ‫تلٛسذ‬
‫یه‬ ‫ؿٕا‬ َ‫ٔثا‬ ‫تشای‬ .‫تاؿذ‬ ‫ٔی‬ ‫اكّی‬ َٛ‫ٔاخ‬ ‫اص‬ ‫ودی‬ ‫یه‬ ‫دسٚالغ‬ ٕٝ٘ٛ٘ ٗ‫ای‬ .‫وشد‬ ‫خٛاٞذ‬ ُ‫ٔسل‬ ٖ‫آ‬ ٝ‫ت‬ ‫سا‬
‫ثثاذ‬ َٛ‫ٔاخ‬8‫تخ‬ ‫دس‬ َٛ‫ٔاخ‬ ٗ‫ای‬ ‫اص‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ‫تا‬ ٚ ‫ٔیىٙیذ‬ ‫ًشاحی‬ ‫تیسی‬‫ثثاذ‬ ٗ‫چٙذی‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ؾ‬
‫واس‬ ٗ‫ای‬ ٝ‫ت‬ .‫وشد‬ ‫خٛاٞیذ‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫سا‬ ‫٘ٛع‬ ٗ‫ٕٞی‬ ‫اص‬ ‫دیٍش‬Instantiation‫سا‬ ‫ػٙلش‬ ٗ‫ای‬ ٚ ‫ػاصی‬ ٕٝ٘ٛ٘ ‫یا‬
Instance.‫٘أٙذ‬ ‫ٔی‬ ٕٝ٘ٛ٘ ‫یا‬
ُ‫ؿى‬8.ٖ‫آ‬ ٖٚ‫دس‬ ‫ٞای‬ َٛ‫ٔاخ‬ ٚ َٛ‫ٔاخ‬ ‫یه‬ ‫اص‬ ‫ٕ٘ایی‬
1
Module
2
Hierarchy Structure
3
Instance
ٝ‫كفح‬13 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
5)‫قواعد‬‫زبان‬ ‫ای‬ ‫پایه‬ ‫و‬ ‫دستوری‬Verilog
ٖ‫صتا‬ ‫دػسٛس‬ ٚ ‫لٛاػذ‬Verilogٖ‫صتا‬ ٝ‫ت‬ ‫صیادی‬ ‫ؿثاٞر‬Cٖ‫صتا‬ .‫داسد‬Verilog‫دس‬ ‫اخسلاكی‬ ‫حشٚف‬ ‫زٕأی‬ .‫تاؿذ‬ ‫ٔی‬ ‫حؼاع‬ ‫تضسي‬ ٚ ‫وٛچه‬ ‫حشٚف‬ ٝ‫ت‬ ‫٘ؼثر‬
ٖ‫صتا‬ ‫ٔا٘ٙذ‬ ٖ‫صتا‬ ٗ‫ای‬C.‫ؿٛ٘ذ‬ ‫ٔی‬ ٝ‫٘ٛؿس‬ ‫وٛچه‬ ‫حشف‬ ‫تا‬‫دس‬Verilog‫ٔا٘ٙذ‬ ٓٞCٜ‫داد‬ ٚ ‫(دػسٛس‬ ٗ‫زٛو‬ ‫ٞش‬ ‫اص‬ ‫خغ‬‫ػالٔر‬ ‫اص‬ ‫تایؼر‬ ‫ٔی‬ );(Semi colleen)
.‫ٕ٘ٛد‬ ٜ‫اػسفاد‬
‫خالی‬ ِ‫فاصل‬
ٖ‫صتا‬ ‫دس‬Verilog‫یا‬ ٚ ٝ‫سؿس‬ ‫یه‬ ٖٚ‫دس‬ ّٝ‫فاك‬ ٝ‫و‬ ‫ٔٛاسدی‬ ‫دس‬ ‫فمي‬ .‫ؿٛد‬ ‫ٕ٘ی‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫دس‬ ‫ػٙسض‬ ‫اتضاس‬ ‫زٛػي‬ ‫ػٙسض‬ ْ‫ٍٞٙا‬ ‫دس‬ ‫خاِی‬ ّٝ‫فاك‬ٜ‫وٙٙذ‬ ‫خذا‬ ٖ‫ػٙٛا‬ ٝ‫ت‬
‫تاؿذ‬ ٜ‫ؿذ‬ ٜ‫اػسفاد‬ )‫ٞا‬ ٜ‫داد‬ ٚ ‫(دػسٛساذ‬ ‫ٞا‬ ٗ‫زٛو‬‫وشوسش‬ .‫ؿذ‬ ‫خٛاٞذ‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫دس‬ ‫دس‬‫د‬ ‫خاِی‬ ّٝ‫فاك‬ ٖ‫ػٙٛا‬ ٝ‫ت‬ ‫صیش‬ ‫ٞای‬: ‫ؿذ‬ ‫خٛاٞٙذ‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫س‬
Blank Space ( s ) , Tab ( t ) , Carriage return ( r ), New line (n)
‫تَضیح‬‫ات‬
ٖ‫صتا‬ ‫دس‬ ‫٘ٛیؼی‬ ‫زٛهیح‬ ٜٛ‫٘ح‬Verilogٖ‫صتا‬ ٝ‫ت‬ ٝ‫ٔـات‬ ‫وأال‬C. ‫تاؿذ‬ ‫ٔی‬
‫خٌی‬ ‫زه‬ ‫زٛهیح‬ : // Comments
‫واسوسش‬ ( ‫خذیذ‬ ‫خي‬ ‫یه‬ ‫ؿشٚع‬ ‫یه‬ ‫تا‬ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ‫ؿشٚع‬ // ‫ػالٔر‬ ‫تا‬ ‫خٌی‬ ‫زه‬ ‫زٛهیحاذ‬Carriage Return.‫یاتٙذ‬ ‫ٔی‬ ًٕٝ‫خا‬ )
‫خٌی‬ ‫چٙذ‬ ‫زٛهیح‬ : /* Multi Line Comments */
‫تا‬ ‫خٌی‬ ‫چٙذ‬ ‫زٛهیحاذ‬/*‫تا‬ ٚ ‫ؿشٚع‬*/.‫تاؿذ‬ ‫خي‬ ٗ‫چٙذی‬ ‫داسای‬ ‫زٛا٘ذ‬ ‫ٔی‬ ‫زٛهیحاذ‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛ٘ذ‬ ‫ٔی‬ ْ‫زٕا‬
ٝ‫كفح‬14‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬1:‫ا‬ ‫دس‬َ‫ٔثا‬ ٗ‫ی‬‫زٛهیح‬ ٜٛ‫٘ح‬ ‫تا‬‫ٌزا‬ٖ‫صتا‬ ‫لٛاػذ‬ ‫اص‬ ‫اػر‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ‫صسد‬ ٝٙ‫صٔی‬ ‫خغ‬ ‫تا‬ ٝ‫و‬ ‫ػثاسزی‬ ،‫ؿٛد‬ ‫ٔی‬ ‫آؿٙا‬ ٜ‫اؿسثا‬ ٚ ‫كحیح‬ ‫سی‬Verilog
.‫وٙذ‬ ‫ٕ٘ی‬ ‫خیشٚی‬
ٌ ‫زٛهیح‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ز‬.‫ؿذ‬ ‫خٛاٞیذ‬ ‫آؿٙا‬ ‫خٌی‬ ‫چٙذ‬ ‫اسی‬
/* 1-bit adder , Example of Multi Line
Comment In Verilog
The Comment Starts with /* And End With next Token You see */
module adder(
a, b,
ci, sum, // Verilog will Ignore White Spaces
co // So You Can Define All of Your Variables in One Or In Separated Lines
);
// The next line represent Wrong Single Line
Commenting, this line will generate Verilog Syntax Error During Synthesis.
// Input Ports
input a; input b;
input ci;
// Output Ports
output sum; output co;
// Data Types
wire a; // After a token like C you must put
wire b; wire ci; wire sum; wire co;
‫اص‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫زشویثی‬ ‫تلٛسذ‬ ٚ ٝ٘‫خذاٌا‬ ‫خٌٛى‬ ‫دس‬ ‫یا‬ ٚ ٓٞ ‫خـر‬ ‫تلٛسذ‬ ٚ ‫خي‬ ‫یه‬ ‫دس‬ ‫سا‬ ‫ٞا‬ ‫ٔسغیش‬ ‫زٕأی‬ ٖ‫زٛا‬ ‫ٔی‬ ،‫ؿٛد‬ ‫ٔی‬ ٜ‫دیذ‬ ٝ‫و‬ ‫ٕٞاٌ٘ٛس‬ٖ‫صتا‬ ‫٘ظش‬
Verilogٗ‫ای‬‫دس‬ ٝ‫و‬ ‫ٞایی‬ ‫ٔسغیش‬ ‫اػر‬ ‫تٟسش‬ ‫ٚاحذ‬ ‫اٍِٛی‬ ‫یه‬ ‫اص‬ ‫خیشٚی‬ ‫تشای‬ ‫أا‬ .‫٘ذاس٘ذ‬ ٓٞ ‫تا‬ ‫فشلی‬ ‫ٞیچ‬ ٚ‫د‬‫ٔسغیش‬ ْ‫زٕا‬ ‫ٔثال‬ ( ‫ٌیش٘ذ‬ ‫ٔی‬ ‫لشاس‬ ‫تٙذی‬ ٝ‫دػس‬ ‫یه‬
.‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫خي‬ ‫یه‬ ‫دس‬ ‫سا‬ ) ... ٚ ‫ثثازی‬ ‫ٞای‬ ‫ٔسغیش‬ ْ‫زٕا‬ ‫ٚیا‬ ، ‫ٚسٚدی‬ ‫ٞای‬
ٝ‫كفح‬15 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫ّا‬ ُ‫ٍاش‬ ‫کلید‬1
‫در‬Verilog
‫دس‬Verilog( ‫ٞا‬ ٜ‫ٚاط‬ ‫وّیذ‬ ‫زٕأی‬Keywords)‫تاؿٙذ‬ ‫ٔی‬ ‫وٛچه‬ ‫حشٚف‬ ‫تلٛسذ‬ٝ‫و‬ ‫آ٘دایی‬ ‫اص‬ ،Verilog‫اػر‬ ‫تضسي‬ ٚ ‫وٛچه‬ ‫حشٚف‬ ٝ‫ت‬ ‫حؼاع‬ ٖ‫صتا‬ ‫یه‬
.‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ... ٚ ‫ٞا‬ ْ‫٘ا‬ ، ‫ٞا‬ ‫ٔسغیش‬ ٖ‫تیا‬ ‫تشای‬ ‫تضسي‬ ‫حشٚف‬ ‫تلٛسذ‬ ‫ٞا‬ ٜ‫ٚاط‬ ‫وّیذ‬ ‫اص‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ِزا‬
ٖ‫صتا‬ ٗ‫ای‬ ‫دس‬ ‫اخسلاسی‬ ‫ٞای‬ ْ‫٘ا‬ ٝ‫ت‬Unique Name‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬.
‫بود‬ ‫بسرگ‬ ‫حروف‬ ‫صورت‬ ‫در‬ ‫حتی‬ ‫ها‬ ‫واشه‬ ‫کلید‬ ‫از‬ ‫شود‬ ‫می‬ ‫توصیه‬ : ‫نکته‬‫ن‬‫عنوا‬ ‫به‬‫ن‬Unique Name. ‫نکنید‬ ‫استفاده‬
َ‫ٔثا‬2:ٖ‫صتا‬ ‫ٞای‬ ٜ‫ٚاط‬ ‫وّیذ‬ ‫ا٘ذ‬ ٜ‫ؿذ‬ ٝ‫٘ٛؿس‬ ‫آتی‬ ً٘‫س‬ ٝ‫ت‬ ٝ‫و‬ ‫وّٕازی‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬Verilog‫تاؿٙذ‬ ‫ٔی‬.ً٘‫س‬ ‫ٔـىی‬ ‫وّٕاذ‬ ‫أا‬Unique Name‫ٔی‬
.‫تاؿٙذ‬
Reg // a Verilog Keyword
Output // a Verilog Keyword
Reg // a Unique Name ( Not Keyword )
REG // a Unique Name ( Not Keyword )
‫ّا‬ ‫هعرف‬2
‫در‬Verilog
( ‫ٔؼشف‬ ٖ‫صتا‬ ٗ‫ای‬ ‫دس‬ ‫اؿیا‬ ‫ٞای‬ ْ‫٘ا‬ ٝ‫ت‬Identifier‫ٞا‬ ‫ثثاذ‬ ْ‫٘ا‬ ،‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬ )ٚ.‫ٞؼسٙذ‬ ‫٘ٛع‬ ٗ‫ای‬ ‫اص‬ ‫ٍٕٞی‬ ‫ٞا‬ َٛ‫ٔاخ‬
‫ػالٔر‬ ‫یا‬ ٚ ) ‫ٞا‬ ٝ٘‫٘ـا‬ ٚ ‫اػذاد‬ ٝ٘ ٚ ‫اِفثا‬ ‫حشٚف‬ ‫فمي‬ ‫وٙیذ‬ ٝ‫زٛخ‬ ( ‫اِفثا‬ ‫حشٚف‬ ‫اص‬ ‫یىی‬ ‫تا‬ ‫تایؼر‬ ‫ٔی‬ ‫ٞا‬ ‫ٔؼشف‬_(Underscore)‫ؿشٚع‬
.‫ؿٛ٘ذ‬
( ‫اػذاد‬ ، ) ‫تضسي‬ ٚ ‫وٛچه‬ ( ‫اِفثا‬ ‫حشٚف‬ ‫حاٚی‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫ٞا‬ ‫ٔؼشف‬0‫زا‬9( ‫دالس‬ ‫ػالٔر‬ ٚ )$.‫تاؿٙذ‬ )
1
Keyword
2
Identifier
ٝ‫كفح‬16‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬3:ٔ ‫كحیح‬ ‫ٌزاسی‬ ْ‫٘ا‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ٚ ‫تاؿٙذ‬ ‫ٕ٘ی‬ ‫كحیح‬ ‫ا٘ذ‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ً٘‫س‬ ‫صسد‬ ٝٙ‫صٔی‬ ‫خغ‬ ‫تا‬ ٝ‫و‬ ‫ٞایی‬ ‫ٔؼشف‬ ، ‫دیذ‬ ٓ‫خٛاٞی‬ ‫سا‬ ‫ٞا‬ ‫ؼشف‬
ٖ‫صتا‬ ‫لٛاػذ‬Verilog.‫وٙٙذ‬ ‫ٕ٘ی‬ ‫سػایر‬ ‫سا‬
// Valid Identifiers
clock_input counterEnable Carray$Output
i386 A _TempRegister
// Wrong Identifiers
$i386 2ndClockSource Colck#2
ٖ‫صتا‬ ‫دس‬Verilog‫تلٛسذ‬ ‫سا‬ ‫ٞا‬ ‫ٔؼشف‬ ٖ‫زٛا‬ ‫ٔی‬ ٗ‫چٙی‬ ٓٞEscapedْ‫٘ا‬ ‫خٟر‬ ‫چاج‬ ُ‫لات‬ ‫ٞای‬ ‫وشوسش‬ ٕٝٞ ‫اص‬ ‫زٛا٘یذ‬ ‫ٔی‬ ‫ؿٕا‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬ ،‫ٕ٘ٛد‬ ‫زؼشیف‬
‫اِفثا‬ ‫حشٚف‬ ‫زٕأی‬ ‫اص‬ ‫ػثاسزٙذ‬ ‫ٞا‬ ‫وشوسش‬ ٗ‫ای‬ .‫وٙیذ‬ ٜ‫اػسفاد‬ ‫ٔؼشف‬ ‫ٌزاسی‬‫اٍّ٘یؼی‬َ‫ٍٞضدػیٕا‬ ‫وذ‬ ‫اص‬ ‫اػىی‬ ‫ٞای‬ ‫وشوسش‬ ( ‫ٞا‬ ٝ٘‫٘ـا‬ ٚ ‫اػذاد‬ ،0x21‫زا‬0x7E.)
ّ‫اػ‬ ‫ته‬ ‫وشوسش‬ ‫تا‬ ‫ٔؼشف‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬( ‫ؾ‬‫ٔؼشف‬ ‫ؿشٚع‬ ‫وشوسش‬ ‫دیٍش‬ ‫ػثاسزی‬ ٝ‫ت‬ .‫داسد‬ ٝٔ‫ادا‬ ‫ؿٛد‬ ٜ‫ٔـاٞذ‬ ّٝ‫فاك‬ ٗ‫اِٚی‬ ٝ‫و‬ ‫صٔا٘ی‬ ‫زا‬ ٚ ٜ‫ؿذ‬ ‫ؿشٚع‬ )
.‫تاؿذ‬ ‫ٔی‬ ّٝ‫فاك‬ ٖ‫آ‬ ْ‫ازٕا‬ ‫وشوسش‬ ٚ ‫اػّؾ‬ ‫ته‬
َ‫ٔثا‬4:.‫تاؿٙذ‬ ‫ٔی‬ ‫كحیح‬ ‫صیش‬ ‫ٞای‬ ‫ٔؼشف‬ ‫زٕأی‬
// Valid Identifiers
486_up Q! 1,2,3 reset* clock22 !Enable
‫اعداد‬‫صحیح‬‫در‬Verilog
ٖ‫صتا‬ ‫دس‬Verilog‫دس‬ ‫ٔٙفی‬ ‫اػذاد‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫تایٙشی‬ ‫یا‬ ٚ َ‫اٚوسا‬ ، َ‫دػیٕا‬ ‫ٍٞض‬ ، َ‫دػیٕا‬ ‫ٞای‬ ‫فشٔر‬ ٝ‫ت‬ ‫سا‬ ‫اػذاد‬ ٖ‫زٛا‬ ‫ٔی‬Verilogٕٓ‫ٔس‬ ‫تلٛسذ‬2‫زؼشیف‬
‫ػالٔر‬ ‫اص‬ ٖ‫زٛا‬ ‫ٔی‬ ‫اػذاد‬ ‫زؼشیف‬ ‫دس‬ .‫ؿذ‬ ‫خٛاٞٙذ‬_(Under Score)،‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ‫اػذاد‬ ‫ػاصی‬ ‫خذا‬ ‫تشای‬Verilogٛ‫تل‬‫اػذاد‬ ‫اص‬ ‫سا‬ ‫ػالٔر‬ ٗ‫ای‬ ‫خٛدواس‬ ‫سذ‬
.) ‫وشد‬ ٜ‫اػسفاد‬ ‫ػذد‬ ‫اتسذای‬ ‫دس‬ ٖ‫زٛا‬ ‫ٕ٘ی‬ ‫ػالٔر‬ ٗ‫ای‬ ‫اص‬ ٝ‫و‬ ‫داؿر‬ ‫زٛج‬ ‫تایذ‬ ( .‫وٙذ‬ ‫ٔی‬ ‫حزف‬
ٝ‫كفح‬17 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
Verilog: ‫وٙذ‬ ‫ٔی‬ ٓٞ‫فشا‬ ‫سا‬ ‫صیش‬ ‫ٞای‬ ‫كٛسذ‬ ٝ‫ت‬ ‫اػذاد‬ ‫زؼشیف‬ ٖ‫أىا‬
‫خیـفشم‬ ‫كٛسذ‬ ٝ‫ت‬ ٜ‫ا٘ذاص‬ ‫تی‬ ‫اػذاد‬ ( ٜ‫ا٘ذاص‬ ‫تی‬ ٚ ٜ‫ا٘ذاص‬ ‫داسای‬ ‫اػذاد‬32‫ٔی‬ ‫زؼشیف‬ ‫تیسی‬.) ‫ؿٛ٘ذ‬
‫ٍٞض‬ ْ‫اسلا‬ ، ‫ؿٛ٘ذ‬ ‫ٔی‬ ٜ‫داد‬ ‫ٕ٘ایؾ‬ ‫وٛچه‬ ‫حشف‬ ‫تا‬ ‫ٔثٙا‬ ‫(٘ـاٍ٘ش‬ .َ‫دػیٕا‬ ‫ٍٞض‬ ٚ َ‫دػیٕا‬ ، َ‫اٚوسا‬ ، ‫تایٙشی‬ ‫٘ظیش‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ٔثٙا‬ ‫دس‬ ‫اػذاد‬
).‫ؿٛ٘ذ‬ ‫ٔی‬ ٜ‫داد‬ ‫ٕ٘ایؾ‬ ‫وٛچه‬ ٚ ‫تضسي‬ ‫حشٚف‬ ‫تا‬
‫دس‬ ‫اػذاد‬ ‫وّی‬ ‫فشٔر‬Verilog: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬
<Size>'<Radix><Value>
ٜ‫ا٘ذاص‬=Size‫ٔثٙا‬ ،=Radix‫ٔمذاس‬ ،=Value
ٜ‫تٛد‬ ‫ٔداص‬ ‫اػذاد‬ ‫ٔمذاس‬ ٚ ‫ٔثٙا‬ ، ٜ‫ا٘ذاص‬ ‫ٞای‬ ‫٘ـاٍ٘ش‬ ٗ‫تی‬ ّٝ‫فاك‬ ٖ‫افضٚد‬Verilog.‫وٙذ‬ ‫ٔی‬ ‫حزف‬ ‫سا‬ ‫ٞا‬ ّٝ‫فاك‬ ٗ‫ای‬ ‫خٛدواس‬ ‫تٌٛس‬
َ‫ٔثا‬5:.‫ؿذ‬ ‫خٛاٞیذ‬ ‫آؿٙا‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ٕ٘ایؾ‬ ‫ا٘ٛاع‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬
‫نوایش‬ ‫نحوه‬‫والعی‬ ‫شده‬ ‫ذخیره‬ ‫همدار‬‫توضیحات‬
110000000000000000000000000000000unsized 32 bits
8'hAA10101010sized hex
6'b10_0011100011sized binary
'hF11110000000000000000000000000000unsized 32 bit hex
8'F1111100018bit sized hex
16'FF F0111111111111000016bit with separated digits
16'FF_F0111111111111000016bit with separated digits
ٝ‫كفح‬18‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫دس‬Verilog.‫یاتذ‬ ‫ٔی‬ ٝٔ‫ادا‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ٜ‫ا٘ذاص‬ ٝ‫زٛخ‬ ‫تا‬ ٚ ‫ؿشٚع‬ ‫ساػر‬ ‫ػٕر‬ ‫اص‬ ‫اػذاد‬
.‫ٌشد٘ذ‬ ‫ٔی‬ ‫حزف‬ ‫چح‬ ‫ػٕر‬ ٝ‫اهاف‬ ‫ٔمادیش‬ ، ‫تاؿذ‬ ‫ٔمذاس‬ ‫اص‬ ‫وٛچىسش‬ ٜ‫ا٘ذاص‬ ‫اٌش‬
ٗ‫آخشی‬ ‫اٌش‬ .‫ؿذ‬ ‫خٛاٞٙذ‬ ‫خش‬ ٜ‫ؿذ‬ ٜ‫خٛا٘ذ‬ ‫چح‬ ‫ػٕر‬ ‫تیر‬ ٗ‫آخشی‬ ٝ‫ت‬ ٝ‫زٛخ‬ ‫تا‬ ‫چح‬ ‫ػٕر‬ ٜ‫ٔا٘ذ‬ ‫تالی‬ ‫ٔمادیش‬ ، ‫تاؿذ‬ ‫ٔمذاس‬ ‫اص‬ ‫تضسٌسش‬ ٜ‫ا٘ذاص‬ ‫اٌش‬
‫تیر‬0‫یا‬ ٚ1‫تا‬ ‫تاؿذ‬0‫تیر‬ ٗ‫اخشی‬ ‫اٌش‬ ،Z‫یا‬ ٚX‫تا‬ ‫زشزیة‬ ٝ‫ت‬ ‫تاؿذ‬ZٚX.‫ؿذ‬ ‫خٛاٞذ‬ ‫خش‬
َ‫ٔثا‬6:
‫نوایش‬ ‫نحوه‬‫والعی‬ ‫شده‬ ‫ذخیره‬ ‫همدار‬‫توضیحات‬
6'hCA001010Truncated , not 11001010
6'hA001010Filled with two 0 on left
16'bZZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z ZFiled with 16 Z
8'bxX X X X X X X XFilled with 8 X
‫در‬ ‫حقیقی‬ ‫اعداد‬Verilog
ٖ‫صتا‬Verilog.‫تاؿذ‬ ‫ٔی‬ ‫داسا‬ ‫سا‬ ‫ثاتر‬ ٚ ‫ٔسغیش‬ ‫تلٛسذ‬ ‫حمیمی‬ ‫اػذاد‬ ‫اص‬ ‫خـسیثا٘ی‬ ‫لاتّیر‬Verilogُ‫لات‬ ‫كحیح‬ ‫ػذد‬ ٝ‫ت‬ ٚ ٜ‫وشد‬ ‫سٚ٘ذ‬ ‫سا‬ ‫اػذاد‬ ٗ‫ای‬ ‫خٛدواس‬ ‫ًٛس‬ ٝ‫ت‬
ُٔ‫ؿا‬ ‫زٛا٘ٙذ‬ ‫ٕ٘ی‬ ‫حمیك‬ ‫اػذاد‬ .‫وٙذ‬ ‫ٔی‬ ُ‫زثذی‬ ٝ‫حافظ‬ ‫دس‬ ‫ػاصی‬ ٜ‫رخیش‬Z‫یا‬X‫ز‬ ‫ػّٕی‬ ‫یا‬ ٚ َ‫دػیٕا‬ ‫ٕ٘ایؾ‬ ‫تا‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫حمیمی‬ ‫اػذاد‬ .‫تاؿٙذ‬.‫ؿٛ٘ذ‬ ‫ؼشیف‬
<Value>.<Value>
<Mantissa>E<Exponent>
Mantissa = ‫اػـاسی‬ ٓ‫سل‬ ، Exponent = ٖ‫زٛا‬
ٝ‫كفح‬19 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬7:.‫تاؿٙذ‬ ‫ٔی‬ ‫حمیمی‬ ‫اػذاد‬ ‫كحیح‬ ‫ٕ٘ایؾ‬ ٜٛ‫٘ح‬ ‫ٍٕٞی‬ ‫صیش‬ ‫ٞای‬ ‫ػثاسذ‬
// Valid Real Numbers
1.2 0.6 3.142673 3.6E8 2.7461E6
‫در‬ ‫عالهت‬ ‫بی‬ ٍ ‫دار‬ ‫عالهت‬ ‫اعداد‬Verilog
‫دس‬Verilog‫ػالٔر‬ ٝ‫و‬ ‫ػذدی‬ ‫ٞش‬ .ٓ‫وٙی‬ ‫ٔـخق‬ ‫سا‬ ‫اػذاد‬ ٖ‫٘ثٛد‬ ‫یا‬ ٚ ٖ‫تٛد‬ ‫داس‬ ‫ػالٔر‬ ٓ‫زٛا٘ی‬ ‫ٕ٘ی‬ ‫دیٍش‬ ‫ٞای‬ ٖ‫صتا‬ ‫ٔا٘ٙذ‬–‫دس‬ ٚ ‫ٔٙفی‬ ‫ؿٛد‬ ٜ‫آٚسد‬ ٖ‫آ‬ ‫اص‬ ُ‫لث‬
.‫تٛد‬ ‫خٛاٞذ‬ ‫ٔثثر‬ ‫كٛسذ‬ ٗ‫ای‬ ‫غیش‬Verilog.‫وٙذ‬ ‫ٔی‬ ٜ‫رخیش‬ ٚ‫د‬ ٕٓ‫ٔس‬ ‫تلٛسذ‬ ‫سا‬ ‫ٔٙفی‬ ‫اػذاد‬
‫پَرت‬1
‫در‬ ‫ّا‬Verilog
ٔ ‫اسزثاى‬ ‫اتضاس‬ ‫ٚالغ‬ ‫دس‬ ‫ٞا‬ ‫خٛسذ‬َٛ‫ٔاخ‬ ْ‫زٕا‬ .‫تاؿذ‬ ‫خشٚخی‬ ‫زؼذادی‬ ٚ ‫ٚسٚدی‬ ‫زؼذادی‬ ‫داسای‬ ‫زٛا٘ذ‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫ٞش‬ .‫تاؿٙذ‬ ‫ٔی‬ ‫یىذیٍش‬ ٚ ٖٚ‫تیش‬ ‫د٘یای‬ ‫تا‬ ‫ٞا‬ َٛ‫اخ‬
.‫تاؿٙذ‬ ‫خٛسذ‬ ‫داسای‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ) ‫ٔشازة‬ ّٝ‫ػّؼ‬ ‫دس‬ َٛ‫ٔاخ‬ ٗ‫تاالزشی‬ ( ‫ٔادس‬ َٛ‫ٔاخ‬ ‫تدض‬ ‫ٞا‬
ٕٛ٘ ‫زؼشیف‬ ‫ٚسٚدی/خشٚخی‬ ‫یا‬ ٚ ‫خشٚخی‬ ، ‫ٚسٚدی‬ ‫تلٛسذ‬ ٖ‫زٛا‬ ‫ٔی‬ ‫سا‬ ‫ٞا‬ ‫خٛسذ‬: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬ ‫خٛسذ‬ ‫زؼشیف‬ ‫وّی‬ ‫لاِة‬ .‫د‬
input [range_vals:range_var] list_of_identifiers;
output [range_vals:range_var] list_of_identifiers;
inout [range_vals:range_var] list_of_identifiers;
ٖ‫صتا‬ ‫دس‬ ‫سٚؽ‬ ٚ‫د‬ ٖٚ‫تیش‬ ‫د٘یای‬ ‫تا‬ ‫ٞا‬ ‫خٛسذ‬ ‫اسزثاى‬ ‫تشای‬Verilog: ‫داسد‬ ‫ٚخٛد‬‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ٚ ‫زشزیثی‬ ‫سٚؽ‬
ٜ‫آٚسد‬ ‫خٛسذ‬ ‫زؼشیف‬ ‫دس‬ ٝ‫و‬ ‫زشزیثی‬ ٖ‫ٕٞا‬ ٝ‫ت‬ ‫دلیما‬ ‫سا‬ ‫ٞا‬ ‫خٛسذ‬ ٝ‫ت‬ َ‫ازلا‬ ‫ٞای‬ ‫ٔسغیش‬ ‫تایؼر‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫اص‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫زشزیثی‬ ‫سٚؽ‬ ‫دس‬‫اػر‬ ٜ‫ؿذ‬
‫س‬ ٖ‫آ‬ ‫خای‬ ‫اػر‬ ‫وافی‬ ‫٘ثاؿذ‬ ُ‫ٔسل‬ ‫خایی‬ ٝ‫ت‬ ‫خشٚخی‬ ‫خٛسذ‬ ‫یه‬ ٓ‫تخٛاٞی‬ ‫اٌش‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬ .ٓ‫تیاٚسی‬.ٓ‫تٍزاسی‬ ‫خاِی‬ ‫ا‬
1
Port
ٝ‫كفح‬20‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
ٞ ‫خٛسذ‬ ٚ ‫ٞا‬ َٛ‫ٔاخ‬ ‫زؼذاد‬ ٝ‫و‬ ‫صٔا٘ی‬ ‫ٔؼٕٛال‬ . ٓ‫ٕ٘ایی‬ ‫ٔی‬ ٜ‫اػسفاد‬ ‫اػر‬ ٜ‫ؿذ‬ ٜ‫آٚسد‬ َٛ‫ٔاخ‬ ‫زؼشیف‬ ‫دس‬ ٝ‫و‬ ‫ٞا‬ ‫خٛسذ‬ ‫اػأی‬ ‫اص‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ‫دس‬‫افضایؾ‬ ‫آٟ٘ا‬ ‫ای‬
‫ت‬ ‫خشٚخی‬ ‫خٛسذ‬ ‫یه‬ ٓ‫تخٛاٞی‬ ‫اٌش‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ٔی‬ ٜ‫اػسفاد‬ ‫ؿٛد‬ ‫ٔی‬ ‫دؿٛاس‬ ‫آٟ٘ا‬ ‫زشزیة‬ ٖ‫ػدشد‬ ‫تخاًش‬ ٚ ‫یاتذ‬ ‫ٔی‬ٖ‫آ‬ ْ‫٘ا‬ ‫اػر‬ ‫وافی‬ ‫٘ثاؿذ‬ ُ‫ٔسل‬ ‫خایی‬ ٝ
.ٓ‫٘یاٚسی‬ ‫سا‬
: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ‫اص‬ ٜ‫اػسفاد‬ ‫لاِة‬
.port_name( external_signal_name)
َ‫ٔثا‬8:‫دس‬ . ‫اػر‬ ٜ‫ؿذ‬ ٜ‫آٚسد‬ ‫ٞا‬ ‫خٛسذ‬ ‫زؼشیف‬ ‫حاِر‬ ‫چٙذ‬ َ‫ٔثا‬ ٗ‫ای‬ َٚ‫ا‬ ‫تخؾ‬ ‫دس‬ٚ‫د‬‫سٚؽ‬ ٚ‫د‬ ْٚ‫د‬ ‫تخؾ‬.‫اػر‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫ٕ٘ایؾ‬ ‫دٞی‬ ‫اسزثاى‬‫خٕغ‬
ٜ‫وٙٙذ‬‫ٞای‬1‫زا‬6(adder1‫زا‬adder6َٛ‫ٔاخ‬ ‫اص‬ ٕٝ٘ٛ٘ ‫یه‬ ‫ٍٕٞی‬ )adder‫ٞای‬ ‫خٛسذ‬ ‫فمي‬ ُ‫لث‬ ‫كفحاذ‬ ‫دس‬ ( ‫تاؿٙذ‬ ‫ٔی‬ ٓ‫تٛدی‬ ٜ‫وشد‬ ‫زؼشیف‬ ‫لثال‬ ٝ‫و‬
.) ٖ‫آ‬ ‫داخّی‬ ‫اخضای‬ ٝ٘ ‫ا٘ذ‬ ٜ‫ؿذ‬ ‫زؼشیف‬ َٛ‫ٔاخ‬ ٗ‫ای‬
‫ٞای‬ ٜ‫وٙٙذ‬ ‫خٕغ‬1ٚ4،2ٚ5،3ٚ6‫یىؼا٘ی‬ ‫ٞای‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ‫داسای‬‫ٞؼسٙذ‬‫آٟ٘ا‬ ‫فشق‬ ‫زٟٙا‬ ،‫آٟ٘اػر‬ ‫اسزثاى‬ ‫سٚؽ‬ ‫دس‬.‫ٞای‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫دس‬1‫زا‬3‫اص‬
‫ٞای‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫دس‬ ٚ ‫زشزیثی‬ ‫سٚؽ‬4‫زا‬6.‫اػر‬ ٜ‫ؿذ‬ ٜ‫اػسفاد‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ‫اص‬
input clk; // Clock input
input [15:0] data_in; // 16bit Data input bus
output [7:0] data_out; // 8bit Data output bus
inout [15:0] data_bus // 16bit Bi-Directional data bus
adder1 adder( data_a, data_b, carry_i, summation, carry_o);
adder2 adder( data_a, data_b, carry_i, summation);
adder3 adder( data_a, data_b, carry_i, , carry_o);
adder4 adder( .a(data_a), .b(data_b), .sum(summation), .ci(carry_i), .co(carry_o));
adder5 adder( .a(data_a), .b(data_b), .sum(summation), .ci(carry_i));
adder6 adder( .a(data_a), .b(data_b), .ci(carry_i), .co(carry_o));
ٝ‫كفح‬21 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫در‬ ‫ّا‬ ُ‫داد‬ ‫اًَاع‬Verilog
‫دس‬ ٟٓٔ ٜ‫داد‬ ‫٘ٛع‬ ٚ‫د‬Verilog‫اص‬ ‫ػثاسزٙذ‬NetٚRegister.ٜ‫داد‬Net‫ٕ٘ایاٍ٘ش‬.‫اػر‬ ‫ٔخسّف‬ ‫ٞای‬ ‫لؼٕر‬ ٖ‫ٔیا‬ ‫ای‬ ٝ‫خای‬ ‫اسزثاى‬ٜ‫داد‬Register‫یه‬ ‫ٕ٘ایاٍ٘ش‬
‫تشداسی‬ ‫یا‬ ٚ ‫زىی‬ ‫تلٛسذ‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫فٛق‬ ‫ٞای‬ ٜ‫داد‬ ‫اص‬ ‫یه‬ ‫ٞش‬ .‫اػر‬ ‫اًالػاذ‬ ‫ػاصی‬ ٜ‫رخیش‬ ‫تشای‬ ‫ٔسغیش‬1
.‫ؿٛ٘ذ‬ ‫زؼشیف‬
( ‫٘ر‬Net).‫ٞؼسٙذ‬ ‫ٔذاساذ‬ ٖ‫ٔیا‬ ‫ٚالؼی‬ ‫ازلاالذ‬ ‫ٚالغ‬ ‫دس‬ ‫ٞا‬‫٘ر‬‫دس‬ ‫ٞا‬Verilogٜ‫ٚاط‬ ‫وّیذ‬ ‫زٛػي‬wireٖ‫آ‬ ‫خیـفشم‬ ‫ٔمذاس‬ ٚ ‫ؿٛد‬ ‫ٔی‬ ‫زؼشیف‬Z.‫تاؿذ‬ ‫ٔی‬
‫دس‬Verilog‫ٞش‬ ‫تشای‬ ‫ٔمذاس‬ ‫چٟاس‬ ‫ٔدٕٛػا‬‫٘ر‬: ‫اص‬ ‫ػثاسزٙذ‬ ‫ٔمذاس‬ ‫چٟاس‬ ٗ‫ای‬ ، ‫داسد‬ ‫ٚخٛد‬
‫همدار‬‫توضیح‬
0‫ٌٔٙمی‬ ‫ػٌح‬0‫٘ادسػر‬ ‫ؿشى‬ ،
1‫ٌٔٙمی‬ ‫ػٌح‬1‫دسػر‬ ‫ؿشى‬ ،
X‫ٔـخق‬ ‫٘ا‬ ‫ٔمذاس‬
Z) ‫ؿٙاٚس‬ ( ‫تاال‬ ‫أدذا٘غ‬ ‫حاِر‬
( ‫ثثاذ‬Register)‫دس‬ ‫٘یض‬ ‫ٞا‬Verilogٜ‫ٚاط‬ ‫وّیذ‬ ‫زٛػي‬reg.‫ؿٛ٘ذ‬ ‫ٔی‬ ‫زؼشیف‬
‫دس‬ ‫ؿٛد‬ ٜ‫داد‬ ‫آٟ٘ا‬ ٝ‫ت‬ ‫خذیذی‬ ‫ٔمذاس‬ ٝ‫و‬ ‫صٔا٘ی‬ ‫زا‬ ‫سا‬ ‫اػر‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫آٟ٘ا‬ ٝ‫ت‬ ٝ‫و‬ ‫ٔمذاسی‬ ٗ‫آخشی‬ ‫ٞا‬ ‫ثثاذ‬‫خٛد‬.‫وٙٙذ‬ ‫ٔی‬ ‫داسی‬ ٍٝ٘
( ٝ‫حافظ‬ ٖ‫آ‬ ٝ‫ت‬ ‫كٛسذ‬ ٗ‫ای‬ ‫دس‬ ٝ‫و‬ ‫آٚسد‬ ‫تٛخٛد‬ ‫سا‬ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ ٝ‫آسای‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬Memory).‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬
‫ٞای‬ ‫تّٛن‬ ‫دس‬ ‫ٔسغیش‬ ٖ‫ػٙٛا‬ ٝ‫ت‬ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ٝ‫یافس‬ ‫ػاخر‬(Procedural.‫ؿٛد‬ ‫ٔی‬ ٜ‫اػسفاد‬ )
1
Vector
ٝ‫كفح‬22‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫تّٛن‬ ‫یه‬ ٝ‫ت‬ ‫سا‬ ‫ٔمذاس‬ ‫حاٚی‬ َ‫ػیٍٙا‬ ‫یه‬ ‫تخٛاٞیذ‬ ‫اٌش‬ٝ‫یافس‬ ‫ػاخر‬‫اػس‬ ‫ثثاذ‬ ‫اص‬ ‫تایذ‬ ‫دٞیذ‬ َ‫ا٘سما‬.‫وٙیذ‬ ٜ‫فاد‬
‫دس‬ ‫اكّی‬ ‫ثثاذ‬ ‫٘ٛع‬ ‫چٟاس‬Verilog: ‫اص‬ ‫ػثاسزٙذ‬
‫ثبات‬ ‫نوع‬‫توضیح‬
reg‫ػالٔر‬ ٖٚ‫تذ‬ ‫ٔسغیش‬
integer‫داس‬‫ػالٔر‬ ‫ٔسغیش‬32‫تیسی‬
time‫كحیح‬ ‫ػذد‬64‫تیسی‬
real‫ٔواػف‬ ‫دلر‬ ‫تا‬ ‫ؿٙاٚس‬ ‫ٕٔیض‬ ‫ٔسغیش‬
‫ّا‬ ِ‫رضت‬1
‫در‬Verilog
‫ػالٔر‬ ٚ‫د‬ ٖٚ‫دس‬ ٝ‫و‬ ‫تاؿذ‬ ‫ٔی‬ ‫ٞا‬ ‫واساوسش‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ٝ‫سؿس‬ ‫یه‬"(double quotation‫دس‬ ‫داؿر‬ ٝ‫زٛخ‬ ‫تایذ‬ .‫ا٘ذ‬ ٝ‫ٌشفس‬ ‫لشاس‬ )Verilog‫تلٛسذ‬ ‫ٞا‬ ٝ‫سؿس‬
‫دس‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫خٌی‬ ‫چٙذ‬ ‫تلٛسذ‬ ‫سا‬ ‫آٟ٘ا‬ ٖ‫زٛا‬ ‫ٕ٘ی‬ ٚ ‫تاؿٙذ‬ ‫ٔی‬ ‫خٌی‬ ‫زه‬Verilog‫وشوسش‬‫تلٛسذ‬ ‫ٞا‬8‫تیر‬( ‫اػىی‬ ‫تلٛسذ‬ ٚASCII‫زؼشیف‬ )‫ٔی‬‫ؿٛ٘ذ‬.
‫دس‬Verilog‫خالف‬ ‫تش‬C( ‫ا٘سٟایی‬ ‫وشوسش‬ ٝ‫ت‬ ‫٘یاصی‬Termination Character.‫تاؿذ‬ ‫ٕ٘ی‬ ٝ‫سؿس‬ ‫ا٘سٟای‬ ‫ٕ٘ایؾ‬ ‫تشای‬ )‫دس‬ ‫ٞا‬ ٝ‫سؿس‬Verilog‫ثثاذ‬ ‫یه‬ ‫دس‬
.‫تاؿذ‬ ‫تضسي‬ ‫ٚسٚدی‬ ٝ‫سؿس‬ ٜ‫ا٘ذاص‬ ٝ‫ت‬ ‫تایذ‬ ‫ثثاذ‬ ًَٛ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ٜ‫رخیش‬‫یه‬ ٝ‫و‬ ‫صٔا٘ی‬ٝ‫سؿس‬ ‫ثثاذ‬‫دس‬Verilog،‫تاؿذ‬ ٖ‫آ‬ ‫تا‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫ٔمذاس‬ ‫تضسٌسش‬Verilog
.‫وشد‬ ‫خٛاٞذ‬ ‫خش‬ ‫كفش‬ ‫تا‬ ‫سا‬ ‫اهافی‬ ‫چح‬ ‫ػٕر‬ ‫ٞای‬ ‫تیر‬ ‫خٛدواس‬ ‫تٌٛس‬‫دس‬ ‫خاف‬ ‫ٞای‬ ‫وشوسش‬Verilog( ‫اػّؾ‬ ‫ته‬ ‫خیـٛ٘ذ‬ ‫تا‬ ٖ‫زٛا‬ ‫ٔی‬ ‫سا‬‫اص‬ ‫تشخی‬ ، ‫ٕ٘ٛد‬ ‫زؼشیف‬ )
: ‫اص‬ ‫ػثاسزٙذ‬ ‫ٞا‬ ‫وشوسش‬ ٗ‫ای‬
1
Strings
ٝ‫كفح‬23 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫کرکتر‬ ‫نوایش‬‫توضیح‬
n‫خذیذ‬ ‫خي‬ ‫وشوسش‬
t‫وشوسش‬‫زة‬
‫اػّؾ‬ ‫ته‬ ‫وشوسش‬
"ٗ‫وٛزیـ‬ ُ‫دت‬ ‫وشوسش‬
%‫دسكذ‬ ‫وشوسش‬
ِ‫آرای‬1
‫ّا‬Verilog
‫دس‬Verilog‫دس‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ٞا‬ ‫تشداس‬ ‫یا‬ ٚ ‫ٞا‬ ٜ‫داد‬ ‫اص‬ ‫ای‬ ٝ‫آسای‬ ،ٖ‫زٛا‬ ‫ٔی‬Verilog.‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫تؼذی‬ ‫چٙذ‬ ‫ٞای‬ ٝ‫آسای‬ ٖ‫زٛا‬ ‫ٕ٘ی‬ ‫افضاسی‬ ْ‫٘ش‬ ‫ٞای‬ ٖ‫صتا‬ ‫خالف‬ ‫تش‬
‫ٔی‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ٝ‫آسای‬ ‫زؼشیف‬ ‫وّی‬ ‫فشٔر‬: ‫تاؿذ‬
<array_type> <array_name> [ #first_element : #last_element ]
‫زؼذا‬ ‫تشداس‬ ‫أا‬ ‫وٙذ‬ ‫داسی‬ ٍٝ٘ ‫خٛد‬ ‫دس‬ ‫سا‬ ‫ٔخسّف‬ ‫ٞای‬ ًَٛ ‫تا‬ ‫ػٙاكش‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ‫زٛا٘ذ‬ ‫ٔی‬ ٝ‫آسای‬ ‫یه‬ ٝ‫و‬ ‫اػر‬ ٗ‫ای‬ ‫دس‬ ‫تشداس‬ ٚ ٝ‫آسای‬ ‫زفاٚذ‬‫یه‬ ‫اص‬ ‫ٔـخلی‬ ‫د‬
.‫اػر‬ ‫ػٙلش‬
ِ‫حافظ‬2
‫در‬ ‫ّا‬Verilog
‫دس‬Verilogٝ‫حافظ‬‫دس‬ ٝ‫حافظ‬ ‫یه‬ ‫زؼشیف‬ ‫وّی‬ ‫فشٔر‬ .‫ؿٛ٘ذ‬ ‫ٔی‬ ‫زؼشیف‬ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ ‫ای‬ ٝ‫آسای‬ ‫تلٛسذ‬ ‫ٞا‬Verilog: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬
reg [ #word_size : 0 ] array_name [0:array_size]
َ‫ٔثا‬9:‫ٔی‬ ‫آؿٙا‬ ٝ‫حافظ‬ ٚ ٝ‫سؿس‬ ، ‫آٟ٘ا‬ ‫تشداسی‬ ‫حاِر‬ ٚ ‫كحیح‬ ٚ ‫حمیمی‬ ‫ٞای‬ ‫ٔسغیش‬ ، ‫تشداسی‬ ‫ٞای‬ ‫ثثاذ‬ ٚ ‫ٞا‬ ‫٘ر‬ ، ‫ٞا‬ ‫ثثاذ‬ ‫زؼشیف‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬
ٚ ‫زؼشیف‬ ‫اص‬ ‫خغ‬ ٝ‫سؿس‬ ٝ‫و‬ ‫تاؿیذ‬ ٝ‫داؿس‬ ٝ‫زٛخ‬ . ‫ؿٛیذ‬‫تّٛن‬ ‫یه‬ ٖٚ‫دس‬ٝ‫یافس‬ ‫ػاخر‬‫ٔمذاس‬.‫ؿٛد‬ ‫ٔی‬ ‫دٞی‬
1
Array
2
Memory
ٝ‫كفح‬24‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
reg register; // Declaring a one bit Register
wire [15:0] Databus; // a 16 nets Representing a 16bit bus
reg [31:0] AddressReg; // a 32 bit Register
integer Counter; // Integer Data Declaration
real Real_Data; // Real Data Declaration
integer Output_Data[15:0]; // Array of 16 integers
reg membit[0:1023]; // 1K x 1bit memory
reg [7:0] membyte[0:1023]; // 1K x 8bit memory
reg [8*17:0] version ; // Declare a register variable that is 18 bytes
initial
version = " version 1.0"; // Filling String inside initial procedural block
‫در‬ ‫ّا‬ ‫هاجَل‬Verilog
‫دس‬ ‫ٞا‬ َٛ‫ٔاخ‬ ‫تا‬Verilog‫ٔی‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ َٛ‫ٔاخ‬ ‫زؼشیف‬ ‫وّی‬ ‫لاِة‬ .ٓ‫خشداصی‬ ‫ٔی‬ ٖ‫آ‬ ‫ٞای‬ ‫ٚیظٌی‬ ٚ َٛ‫ٔاخ‬ ‫زؼشیف‬ ٜٛ‫٘ح‬ ٝ‫ت‬ ‫تخؾ‬ ٗ‫ای‬ ‫دس‬ ، ٓ‫ؿذی‬ ‫آؿٙا‬ ‫لثال‬
: ‫تاؿذ‬
module module_name ( port list );
port declarations (if ports present)
parameters (optional)
Declaration of wires, regs and other variables
Data flow statement (assign)
Instantiation of lower level module
always and initial blocks, all behavioral
statements go in these blocks
tasks and functions
end module
ٝ‫كفح‬25 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫در‬ ‫ّا‬ ‫پَرت‬ ‫اتصال‬ ‫قَاًیي‬Verilog
: ‫داؿر‬ ٝ‫زٛخ‬ ‫٘ىازی‬ ٝ‫ت‬ ‫تایذ‬ ‫خاسج‬ ٖ‫خٟا‬ ٝ‫ت‬ َٛ‫ٔاخ‬ ‫یه‬ ‫ٞای‬ ‫خٛسذ‬ َ‫ازلا‬ ْ‫ٍٞٙا‬ ٝ‫ت‬
‫٘ٛع‬ ‫اص‬ ‫تایذ‬ َٛ‫ٔاخ‬ ‫ٚسٚدی‬ ‫ٞای‬ ‫خٛسذ‬net‫٘ٛع‬ ‫اص‬ ‫ٞایی‬ ‫ٔسغیش‬ ٝ‫ت‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫ٞا‬ ‫خٛسذ‬ ٗ‫ای‬ ٚ ‫تاؿٙذ‬reg‫یا‬ ٚnet‫خ‬ ٖ‫خٟا‬ ‫دس‬.‫ؿٛ٘ذ‬ ُ‫ٔسل‬ ‫اسج‬
‫٘ٛع‬ ‫اص‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫خشٚخی‬ ‫ٞای‬ ‫خٛسذ‬reg‫یا‬ ٚnet‫٘ٛع‬ ‫اص‬ ‫ٞایی‬ ‫ٔسغیش‬ ٝ‫ت‬ ‫تایذ‬ ‫خٛسزٟا‬ ٗ‫ای‬ ٚ ‫تاؿٙذ‬net.‫ؿٛ٘ذ‬ ُ‫ٔسل‬ ‫خاسج‬ ٖ‫خٟا‬ ‫دس‬
‫٘ٛع‬ ‫اص‬ ‫تایذ‬ َٛ‫ٔاخ‬ ٝ‫ػٛی‬ ٚ‫د‬ ‫ٞای‬ ‫خٛسذ‬net‫٘ٛع‬ ‫اص‬ ‫ٞایی‬ ‫ٔسغیش‬ ٝ‫ت‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫خٛسزٟا‬ ٗ‫ای‬ ٚ ، ‫تاؿٙذ‬reg‫یا‬ ٚnet‫خاسج‬ ٖ‫خٟا‬ ‫دس‬.‫ؿٛ٘ذ‬ ُ‫ٔسل‬
‫تاؿٙذ‬ ‫ٌٔٙثك‬ ًَٛ ‫٘ظش‬ ‫اص‬ ‫تایذ‬ ‫آٟ٘ا‬ ٝ‫ت‬ ُ‫ٔسل‬ ‫خاسخی‬ ‫ٞای‬ ‫ٔسغیش‬ ٚ َٛ‫ٔاخ‬ ‫خٛسزٟای‬
‫پردازش‬ ‫پیص‬1
‫در‬Verilog
‫دس‬Verilog.‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ‫آٟ٘ا‬ ‫اص‬ ‫٘یاص‬ ‫كٛسذ‬ ‫دس‬ ٚ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫سا‬ ‫خشداصؽ‬ ‫خیؾ‬ ‫ٞای‬ ‫خاسأسش‬ ٖ‫زٛا‬ ‫ٔی‬ ‫دیٍش‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫زٕأی‬ ‫ٔا٘ٙذ‬ ‫٘یض‬‫اص‬ ‫یىی‬
‫خشوا‬‫دس‬ ‫خشداصؿی‬ ‫خیؾ‬ ‫دػسٛساذ‬ ٗ‫زشی‬ ‫ستش‬Verilog‫دػسٛس‬define‫زؼشیف‬ ْ‫٘ا‬ ‫یه‬ ‫تا‬ ‫سا‬ ... ، ‫ؿشى‬ ، ‫دػسٛس‬ ، ‫ٔمذاس‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬ ‫دػسٛس‬ ٗ‫ای‬ ‫زٛػي‬ .‫تاؿذ‬ ‫ٔی‬
‫دػسٛس‬ ‫اص‬ ٜ‫اػسفاد‬ ‫وّی‬ ‫لاِة‬ .‫وشد‬ ٜ‫اػسفاد‬ ‫ٞا‬ ‫وذ‬ ‫دس‬ ْ‫٘ا‬ ٖ‫آ‬ ‫اص‬ ‫فمي‬ ‫خغ‬ ٖ‫آ‬ ‫اص‬ ٚ ‫ٕ٘ٛد‬define:‫اػر‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬
`define <Definition-Name> <Definition-Statement>
‫ػالٔر‬ ٜ‫ٕٞشا‬ ٝ‫ت‬ ‫سا‬ ٖ‫آ‬ ْ‫٘ا‬ ‫اػر‬ ‫وافی‬ ‫فمي‬ ‫ٞا‬ ‫وذ‬ ‫دس‬ ‫زؼشیف‬ ٗ‫ای‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تشای‬`: ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ .‫تیاٚسیذ‬
`<Definition-Name>
.‫وشد‬ ٓ‫خٛاٞی‬ ٜ‫اػسفاد‬ ‫دفؼاذ‬ ٝ‫ت‬ ٝ‫وساتچ‬ ‫آخش‬ ‫ٞای‬ َ‫ٔثا‬ ‫دس‬ ‫دػسٛس‬ ٗ‫ای‬ ‫اص‬
1
Preprocessing
ٝ‫كفح‬26‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
6)‫گیت‬ ‫سطح‬ ‫در‬ ‫سازی‬ ‫مدل‬
‫ٔذاس‬ ‫ٌیر‬ ‫ػٌح‬ ‫ػاصی‬ َ‫ٔذ‬ ‫دس‬.ٓ‫وٙی‬ ‫ٔی‬ ٖ‫تیا‬ ‫ا٘ذ‬ ٜ‫ؿذ‬ ُ‫ٔسل‬ ‫یىذیٍش‬ ٝ‫ت‬ ٝ‫و‬ ٝ‫خای‬ ‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ‫تلٛسذ‬ ‫سا‬Verilog‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٔا٘ٙذ‬ ٓٞ
‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬ ‫داسای‬ ‫خٛد‬ ٖٚ‫دس‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬1
َ‫ا٘سما‬ ‫خٌٛى‬ ،2
‫ػٛییچ‬ ٚ3
‫دس‬ ‫٘ذسذ‬ ٝ‫ت‬ ‫اؿیا‬ ٗ‫ای‬ ‫اص‬ ‫ػٙسض‬ ‫ٞای‬ ‫اتضاس‬ ‫ٚخٛد‬ ٝ‫ت‬ ٝ‫زٛخ‬ ‫تا‬ ‫أا‬ ‫تاؿذ‬ ‫ٔی‬ ‫ٞا‬
‫ا‬ ‫ٞا‬ ‫ًشاحی‬.‫ؿٛد‬ ‫ٔی‬ ٜ‫ػسفاد‬‫تشای‬‫اتسذا‬ ‫ؿشٚع‬‫دس‬ ٝ‫و‬ ‫ای‬ ٝ‫خای‬ ‫ٞای‬ ‫ٌیر‬ ‫ا٘ٛاع‬ ‫تایذ‬Verilogٓ‫وٙی‬ ‫ٔؼشفی‬ ‫سا‬ ‫داس٘ذ‬ ‫ٚخٛد‬.
‫دس‬Verilog‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ػثاسزٙذ‬ ‫ٞا‬ ‫ٌیر‬ ٗ‫ای‬ ، ‫داسد‬ ‫ٚخٛد‬ ‫اكّی‬ ‫ای‬ ٝ‫خای‬ ‫ٌیر‬ ‫ؿؾ‬AND،NAND،OR،NOR،XORٚXNOR‫ٞا‬ ‫ٌیر‬ ٗ‫ای‬ ‫ٍٕٞی‬ .
‫دٞٙذ‬ ‫ٔی‬ ُ‫زـىی‬ ‫سا‬ ‫ٌیر‬ ‫ٞای‬ ‫ٚسٚدی‬ ‫تؼذی‬ ‫ٞای‬ ‫خٛسذ‬ ٚ ٖ‫آ‬ ‫خشٚخی‬ ‫ٌیر‬ ‫ٞش‬ ‫خٛسذ‬ ٗ‫اِٚی‬ .‫تاؿٙذ‬ ‫ٔی‬ ‫خشٚخی‬ ‫یه‬ ٚ ‫ٚسٚدی‬ ‫چٙذ‬ ‫داسای‬‫ٔی‬ ‫زشزیة‬ ٗ‫تذی‬
‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ٚسٚدی‬ ‫زؼذاد‬ ‫تا‬ ‫ٞایی‬ ‫ٌیر‬ ٖ‫زٛا‬.
6‫ٚاسٍٚ٘ش‬ ‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ػثاسزٙذ‬ ‫اكّی‬ ‫ا٘سماِی‬ ‫ٌیر‬4
‫تافش‬ ،5
‫تا‬ ،ٝ‫ػ‬ ‫فش‬6
ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬ ٚ ٗ‫خایی‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬ ، ‫تاال‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫تافش‬ ،ٗ‫خایی‬ َ‫فؼا‬ ٝ‫حاِس‬
.‫تاال‬ َ‫فؼا‬ ٝ‫حاِس‬ٜ‫دِخٛا‬ ‫ٞای‬ ‫خشٚخی‬ ‫زؼذاد‬ ‫تا‬ ‫ٞایی‬ ‫ٌیر‬ ٖ‫زٛا‬ ‫ٔی‬ ‫زشزیة‬ ٗ‫تذی‬ ، ‫ٞؼسٙذ‬ ‫خشٚخی‬ ‫ٞا‬ ‫خٛسذ‬ ‫دیٍش‬ ٚ ‫ٚسٚدی‬ ٝ‫حاِس‬ ٚ‫د‬ ‫ٞای‬ ‫ٌیر‬ ‫آخش‬ ‫خٛسذ‬
ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٞای‬ ‫ٌیر‬ ‫دس‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬.‫تاؿذ‬ ‫ٔی‬ َ‫وٙسش‬ ‫خٛسذ‬ ْٛ‫ػ‬ ‫خٛسذ‬ ٚ ‫ٚسٚدی‬ ْٚ‫د‬ ‫خٛسذ‬ ، ‫خشٚخی‬ َٚ‫ا‬ ‫خٛسذ‬
1
Logic Gates
2
Transmission Gates
3
Switch
4
Inverter
5
Buffer
6
Tri State Buffer
ٝ‫كفح‬27 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫گیت‬ ‫نام‬‫نواد‬‫واشه‬ ‫کلید‬‫گیت‬ ‫نام‬‫نواد‬‫واشه‬ ‫کلید‬
‫ٌیر‬AND‫تا‬N‫ٚسٚدی‬and‫ٌیر‬NOR‫تا‬N‫ٚسٚدی‬nor
‫ٌیر‬NAND‫تا‬N‫ٚسٚدی‬nand‫ٌیر‬XOR‫تا‬N‫ٚسٚدی‬xor
‫ٌیر‬OR‫تا‬N‫ٚسٚدی‬or‫ٌیر‬XNOR‫تا‬N‫ٚسٚدی‬xnor
‫ٌیر‬NOT‫تا‬N‫خشٚخی‬not‫ٌیر‬‫تافش‬‫تا‬N‫خشٚخی‬buf
ٗ‫خایی‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬notif0‫پایین‬ ‫فعال‬ ‫حالته‬ ‫سه‬ ‫بافر‬bufif0
‫تاال‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬notif1‫باال‬ ‫فعال‬ ‫حالته‬ ‫سه‬ ‫بافر‬bufif1
‫زؼشیف‬ ‫تا‬ ‫ػدغ‬ ،‫آٚسد‬ ‫دس‬ ٝ‫خای‬ ‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ‫تلٛسذ‬ ‫آ٘شا‬ ‫تایذ‬ ‫اتسذا‬ ‫ٌیر‬ ‫ػٌح‬ ‫دس‬ ‫ٔذاس‬ ‫ًشاحی‬ ‫تشای‬netٝ‫ت‬ ‫سا‬ ٝ‫خای‬ ‫ٌیسٟای‬ ٗ‫ای‬ ‫٘یاص‬ ‫ٔٛسد‬ ‫ٞای‬
‫یا‬ ‫تٙذی‬ ٓ‫ػی‬ ‫اكٌالحا‬ ‫واس‬ ٗ‫ای‬ ٝ‫ت‬ .‫ٕ٘ٛد‬ ُ‫ٔسل‬ ‫یىذیٍش‬Wiring.‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬
ٝ‫كفح‬28‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬10:‫ٌیر‬ ٚ‫د‬ ٜ‫اػسفاد‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬NAND‫ٌیر‬ ‫یه‬AND‫ٔی‬.ٓ‫ػاصی‬
module and_from_nand(X, Y, F);
input X, Y;
output F;
wire W;
nand U1(X, Y, W);
nand U2(W, W, F);
endmodule
َٛ‫ٔاخ‬ ٗ‫ای‬ ‫دس‬XٚYٚ ‫ٚسٚدی‬F.‫تاؿذ‬ ‫ٔی‬ ‫خشٚخی‬
َ‫ٔثا‬11:‫فالج‬ ‫فّیح‬ ‫یه‬ ‫ػاخر‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫دی‬ ‫٘ٛع‬.ٓ‫ؿٛی‬ ‫ٔی‬ ‫آؿٙا‬
module dff(Q, Q_BAR, D, CLK);
output Q,Q_BAR;
input D, CLK;
nand U1(X, D, CLK);
nand U2(Y, X, CLK);
nand U3(Q, Q_BAR, X);
nand U4(Q_BAR, Q, Y);
endmodule
َٛ‫ٔاخ‬ ٗ‫ای‬ ‫دس‬DٚCLK‫ٚسٚدی‬،QٚQ_BAR.‫تاؿٙذ‬ ‫ٔی‬ ‫خشٚخی‬
‫ٌیر‬ ‫وٙیذ‬ ٝ‫زٛخ‬nand.‫تاؿٙذ‬ ‫ٔی‬ ‫ٚسٚدی‬ ‫ٞا‬ ٖ‫آسٌٛٔا‬ ‫دیٍش‬ ٚ ‫خشٚخی‬ ٖ‫آسٌٛٔا‬ ٗ‫اِٚی‬ ‫كٛسذ‬ ٗ‫ای‬ ‫دس‬ .‫تاؿذ‬ ‫ٚسٚدی‬ ‫ٔسٙاٞی‬ ‫٘ا‬ ‫زؼذاد‬ ‫داسای‬ ‫زٛا٘ذ‬ ‫ٔی‬
ٝ‫كفح‬29 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬12:‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫ػاخر‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬1
.ٓ‫ؿٛی‬ ‫ٔی‬ ‫آؿٙا‬
module mux4_to_1 ( out, i0, i1, i2, i3, s1, s0 );
output out;
input i0, i1, i2, i3, s1, s0;
// Internal wire declaration
wire s0n, s1n, y0, y1, y2, y2;
// Gate instantiations
not ( s1n, s1 );
not ( s0n, s0 );
and ( y0, i0, s1n, s0n );
and ( y1, i1, s1n, s0 );
and ( y2, i2, s1 , s1n );
and ( y3, i3, s1 , s0 );
or ( out, y0, y1, y2, y3 );
endmodule
ُ‫ؿى‬9.‫ٕ٘ٛادس‬‫یه‬ ٝ‫ت‬ ‫چٟاس‬ ‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫ٌٔٙمی‬
1
Multiplexer
ٝ‫كفح‬30‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬13:ُٔ‫وا‬ ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬4.‫وشد‬ ٓ‫خٛاٞی‬ ‫تشػی‬ ‫سا‬ ‫تیر‬
ُٔ‫وا‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫چٟاس‬ ٝ‫ت‬ ‫تیر‬ ‫چٟاس‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ ‫ػاخر‬ ‫تشای‬1‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ‫٘مّی‬ ‫تیر‬ ‫تا‬ ‫تیسی‬‫ٕ٘ٛداس‬ ٝ‫و‬ ٓ‫٘یاصٔٙذی‬‫وذ‬ ٚVerilog‫سا‬ ٖ‫آ‬
.‫تیٙیذ‬ ‫ٔی‬ ٝٔ‫ادا‬ ‫دس‬.‫اػر‬ ٜ‫ؿذ‬ ٜ‫اػسفاد‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫داخّی‬ ‫ٔذاس‬ ‫زٛكیف‬ ‫تشای‬ ‫ٌیر‬ ‫زٛكیف‬ ‫ػٌح‬ ‫اص‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬
ُ‫ؿى‬10.ُٔ‫وا‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ ‫ٌٔٙمی‬ ‫ٕ٘ٛداس‬
module fulladd(sum, c_out, a, b, c_in);
output sum, c_out;
input a, b, c_in;
wire s1, c1, c2;
xor (s1, a, b);
and (c1, a, b);
xor(sum, s1, c_in);
and(c2, s1, c_in);
or(c_out, c2, c1);
endmodule
ٝ‫كفح‬31 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
.ٓ‫وٙی‬ ُ‫ٔسل‬ ٓٞ ٝ‫ت‬ ‫صیش‬ ‫ًشیك‬ ٝ‫ت‬ ‫سا‬ ‫ٞا‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ٗ‫ای‬ ‫اص‬ ‫ػذد‬ ‫چٟاس‬ ‫تایؼر‬ ‫ٔی‬ ‫تؼذ‬ ّٝ‫ٔشح‬ ‫دس‬
ُ‫ؿى‬11.‫یه‬ ‫ٕ٘ٛداس‬ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫چٟاس‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تا‬ ‫چٟاستیسی‬ ٜ‫وٙٙذ‬ ‫خٕغ‬1‫تیر‬
module fulladder4(sum, c_out, a, b, c_in);
output [3:0] sum;
output c_out;
input [3:0] a,b;
input c_in;
wire c1, c2, c3;
// Making Four Instances of fulladder which defined before
fulladd fa0(sum[0], c1, a[0], b[0], c_in);
fulladd fa0(sum[1], c2, a[1], b[1], c1);
fulladd fa0(sum[2], c3, a[2], b[2], c2);
fulladd fa0(sum[3], c_out, a[3], b[3], c3);
endmodule
‫وذ‬ ‫دس‬ ٝ‫و‬ ‫ٕٞاٌ٘ٛس‬Verilogٚ ٓ‫وشدی‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ٓ‫تٛدی‬ ٜ‫وشد‬ ‫ًشاحی‬ ُ‫لث‬ ‫تخؾ‬ ‫دس‬ ٝ‫و‬ ‫تیر‬ ‫زه‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫اص‬ ‫تاس‬ ‫چٟاس‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ ‫ؿٛد‬ ‫ٔی‬ ٜ‫ٔـاٞذ‬
.ٓ‫ٕ٘ٛدی‬ ‫ًشاحی‬ ‫سا‬ ‫تیر‬ ‫چٟاس‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ ٖ‫آ‬ ‫زٛػي‬
ٝ‫كفح‬32‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
7)‫مدل‬‫ها‬ ‫داده‬ ‫جریان‬ ( ‫ثباتی‬ ‫سطح‬ ‫سازی‬)
‫خشدا‬ ٚ ‫ٞا‬ ‫ثثاذ‬ ٗ‫تی‬ ‫اًالػاذ‬ َ‫ا٘سما‬ ٜٛ‫٘ح‬ ٝ‫ت‬ ‫ثثازی‬ ‫ػاصی‬ َ‫ٔذ‬ ‫دس‬ٜ‫داد‬ ٖ‫خشیا‬ ‫ػٌح‬ ‫دس‬ ‫ػاصی‬ َ‫ٔذ‬ ‫چٍٍٛ٘ی‬ ٝ‫ت‬ ‫لؼٕر‬ ٗ‫ای‬ ‫دس‬ .ٓ‫دٞی‬ ‫ٔی‬ ‫إٞیر‬ ‫اًالػاذ‬ ‫صی‬
ٖ‫صتا‬ ‫دس‬Verilog.ٓ‫خشداصی‬ ‫ٔی‬ ٖ‫آ‬ ‫ٔضایای‬ ٚ
‫هداٍم‬ ‫دّی‬ ‫هقداری‬1
‫یه‬ ‫سٚی‬ ‫سا‬ ‫ٔمذاس‬ ٝ‫ی‬ ٖ‫زٛا‬ ‫ٔی‬ ‫دػسٛس‬ ٗ‫ای‬ ‫زٛػي‬Net‫اص‬ ‫یىی‬ ٜ‫ٞشٌا‬ ٚ ٜ‫تٛد‬ ‫اخشا‬ َ‫حا‬ ‫دس‬ ٜ‫ٕٞٛاس‬ ‫دػسٛس‬ ٗ‫ای‬ .‫داد‬ ‫لشاس‬‫ػّٕٛ٘ذ‬‫ٔمذاس‬ ‫وٙذ‬ ‫زغییش‬ ‫ٞای‬Netٓٞ
: ‫اػر‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ‫دػسٛس‬ ٗ‫ای‬ ‫اص‬ ٜ‫اػسفاد‬ ‫وّی‬ ‫لاِة‬ .‫وشد‬ ‫خٛاٞذ‬ ‫زغییش‬ ) ‫زاخیش‬ ‫تا‬ ‫یا‬ ٚ ( ٖ‫آ‬ ‫تا‬ ٜ‫ٕٞشا‬
assign <delay> Assignment-Lists;
‫٘ٛع‬ ‫اص‬ ‫تشداس‬ ‫یه‬ ‫یا‬ ‫ٔسغیش‬ ‫یه‬ ‫تایذ‬ ‫دػسٛس‬ ٗ‫ای‬ ‫چح‬ ‫ػٕر‬net.‫تاؿذ‬ ‫٘ٛع‬ ٚ‫د‬ ٗ‫ای‬ ‫اص‬ ‫اِحالی‬ ‫یا‬ ٚ
‫هدا‬ ‫دّی‬ ‫هقدار‬‫ضوٌی‬ ‫ٍم‬2
‫خٙغ‬ ‫اص‬ ‫سا‬ ‫ٔسغیش‬ ‫یه‬ ٝ‫ایٙى‬ ‫خای‬ ٝ‫ت‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬Net‫دػسٛس‬ ‫زٛػي‬ ‫ػدغ‬ ٚ ٓ‫وٙی‬ ‫زؼشیف‬assign‫سا‬ ُٕ‫ػ‬ ٗ‫ای‬ ٓ‫زٛا٘ی‬ ‫ٔی‬ ،ٓ‫دٞی‬ ‫لشاس‬ ٖ‫آ‬ ‫سٚی‬ ‫سا‬ ‫ٔمذاس‬ ‫یه‬
‫زؼشیف‬ ْ‫ٍٞٙا‬ ‫دس‬Net.ٓ‫دٞی‬ ْ‫ا٘دا‬
1
Continuous Assignment
2
Implicit Continuous Assignment
ٝ‫كفح‬33 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬14:.‫وشد‬ ‫خٛاٞیذ‬ ٜ‫ٔـاٞذ‬ ‫سا‬ ‫هٕٙی‬ ْٚ‫ٔذا‬ ٚ ْٚ‫ٔذا‬ ‫تلٛسذ‬ ‫دٞی‬ ‫ٔمذاس‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬
module mymodule_continuous_assignment( out, i1, i2 );
output out;
input i1,i2;
assign out = i1 & i2; // Continuous Assignment
endmodule
module mymodule_implicit_continuous_assignment( out, i1, i2 );
output out;
input i1,i2;
wire out = i1 & i2; // Implicit Continuous Assignment
endmodule
‫ّا‬ ‫تاخیر‬1
‫ػاصی‬ ٝ‫ؿثی‬ ‫٘سایح‬ ٖ‫ؿذ‬ ‫زش‬ ‫ٚالؼی‬ ‫ٔٙظٛس‬ ٝ‫ت‬‫دس‬ ٖ‫زٛا‬ ‫ٔی‬Verilog‫زاخیش‬ ‫اص‬ ‫٘اؿی‬ ٝ‫و‬ ‫ٞای‬ ‫زاخیش‬‫ا٘سـاس‬‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬2
ٝ‫زٛخ‬ ‫تایذ‬ .‫وشد‬ ٍ‫ِحا‬ ‫سا‬ ‫تاؿٙذ‬ ‫ٔی‬
.‫داؿر‬ ‫٘خٛاٞٙذ‬ ‫اثشی‬ ‫ٚالؼیر‬ ٚ ‫ػٙسض‬ ‫دس‬ ٚ ‫ٌزاس٘ذ‬ ‫ٔی‬ ‫زاثیش‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫٘سایح‬ ‫دس‬ ‫فمي‬ ‫زاخیشاذ‬ ٗ‫ای‬ ‫داؿر‬
ُ‫قاعد‬ ‫با‬ ‫تاخیر‬
‫دػسٛس‬ ‫اص‬ ‫خغ‬ ‫سا‬ ‫زاخیش‬ ‫یه‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬assign‫اص‬ ُ‫لث‬ ٚnet‫سخ‬ ‫ساػر‬ ‫ػٕر‬ ‫ٞای‬ َ‫ػیٍٙا‬ ‫اص‬ ‫یىی‬ ‫دس‬ ٝ‫و‬ ‫زغییشی‬ ‫ٞش‬ .ٓ‫آٚسی‬ ‫ٔی‬‫خغ‬ ‫ؿٛد‬ ‫ٔی‬ ‫تاػث‬ ،‫دٞذ‬
ٓ‫داسی‬ ‫ایٙدا‬ ‫دس‬ ٝ‫و‬ ‫زاخیشی‬ ‫زشزیة‬ ٗ‫ای‬ ٝ‫ت‬ .‫ٌیشد‬ ‫لشاس‬ ‫چح‬ ‫ػٕر‬ ‫ٔسغیش‬ ‫دس‬ ‫ػدغ‬ ٚ ‫ؿٛد‬ ‫اسصیاتی‬ ‫ٔدذدا‬ ‫ساػر‬ ‫ػٕر‬ ‫ػثاسذ‬ ، ‫زاخیش‬ ٖ‫صٔا‬ ‫ٌزؿر‬ ‫اص‬‫٘ٛع‬ ‫اص‬
inertial.‫٘ـٛد‬ ‫ٔٙسـش‬ ‫خشٚخی‬ ٝ‫ت‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ‫زاخیش‬ ‫ٔمذاس‬ ‫اص‬ ‫وٕسش‬ ‫ػشم‬ ‫تا‬ ‫خاِؼٟایی‬ ٝ‫و‬ ‫ؿٛد‬ ‫ٔی‬ ‫تاػث‬ ‫أش‬ ٗ‫ای‬ ٚ ‫اػر‬
1
Delay
2
Logic Gates Propagation Delay
ٝ‫كفح‬34‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫تعریف‬ ‫ٌّگام‬ ِ‫ب‬ ‫تاخیر‬net
‫زؼشیف‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬netٗ‫ای‬ ‫سٚی‬ ٝ‫و‬ ‫زغییشی‬ ‫ٞش‬ ‫خغ‬ ٗ‫ای‬ ‫اص‬ .ٓ‫وٙی‬ ‫ٔی‬ ‫ٔـخق‬ ٖ‫آ‬ ‫تشای‬ ‫سا‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫زاخیش‬netٜ‫ؿذ‬ ‫ٔـخق‬ ‫زاخیش‬ ‫تا‬ ،‫ؿذ‬ ْ‫ا٘دا‬
.‫اػر‬ ٜ‫اػسفاد‬ ُ‫لات‬ ‫٘یض‬ ‫ٌیر‬ ‫ػٌح‬ ‫زٛكیف‬ ‫ٔٛسد‬ ‫دس‬ ُٕ‫ػ‬ ٗ‫ای‬ .‫ؿٛد‬ ‫ٔی‬ َ‫اػٕا‬
َ‫ٔثا‬15:‫زاخی‬ ‫ایداد‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬.‫ؿٛیذ‬ ‫ٔی‬ ‫آؿٙا‬ ‫٘ر‬ ‫زؼشیف‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫زاخیش‬ ٚ ٜ‫لاػذ‬ ‫تا‬ ‫تحث‬ ‫ٔٛسد‬ ‫ٞای‬ ‫ش‬
// ----- Inertial Delay Example -------
module and_with_delay( o1, i1, i2);
output o1;
input i1, i2;
assign #5 o1 = i1 & i2; // Inertial Delay
endmodule
// ----- Implicit Delay Example ------
wire #5 out;
assign out = i1 & i2; // Implicit Delay during Assignment
8)، ‫عبارات‬‫عملگر‬‫ها‬1
‫عملوود‬ ‫و‬2
‫ها‬
‫زشویة‬ ‫اص‬ ‫ػثاسذ‬ ‫یه‬‫ػٍّٕش‬ ٚ ‫ٞا‬ ‫ػّٕٛ٘ذ‬‫ؿٛد‬ ‫ٔی‬ ٝ‫ػاخس‬ ‫ٞا‬
‫یه‬‫ػّٕٛ٘ذ‬‫یى‬ ‫زٛا٘ذ‬ ‫ٔی‬.‫ؿذ‬ ٜ‫اؿاس‬ ٖ‫آ‬ ٝ‫ت‬ ‫لثال‬ ٝ‫و‬ ‫تاؿذ‬ ‫ای‬ ٜ‫داد‬ ‫ا٘ٛاع‬ ‫اص‬ ‫ی‬
‫دس‬ ‫ٔٛخٛد‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ِیؼر‬ .‫آیذ‬ ‫تذػر‬ ‫ٌّٔٛب‬ ٝ‫٘سید‬ ‫زا‬ ‫دٞٙذ‬ ‫ٔی‬ ْ‫ا٘دا‬ ‫سا‬ ‫ػّٕیازی‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬ ‫سٚی‬ ‫ٞا‬ ‫ػٍّٕش‬Verilogَٚ‫خذ‬ ‫دس‬ٝ‫كفح‬
‫تؼذ‬.‫اػر‬ ٜ‫آٔذ‬
1
Operator
2
Operand
ٝ‫كفح‬35 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫حؼاتی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬1
: ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬
.‫ٌشدا٘ذ‬ ‫ٔی‬ ‫تش‬ ‫سا‬ ‫لؼٕر‬ ‫خاسج‬ ‫تاؿذ‬ ‫كحیح‬ ‫ػّٕٛ٘ذ‬ ٚ‫د‬ ‫ٞش‬ ‫اٌش‬
‫اص‬ ‫ٞشیه‬ ‫اٌش‬‫تیر‬ ‫داسای‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬x‫ػّٕیاذ‬ ٝ‫٘سید‬ ، ‫تاؿٙذ‬x.‫تٛد‬ ‫خٛاٞذ‬
.‫اػر‬ َٚ‫ا‬ ‫ػّٕٛ٘ذ‬ ‫ػالٔر‬ ‫تشاتش‬ ُ‫حاك‬ ‫ػالٔر‬ ٚ ‫ٌشدا٘ذ‬ ‫ٔی‬ ‫تش‬ ‫سا‬ ٓ‫زمؼی‬ ٜ‫ٔا٘ذ‬ ‫تالی‬ % ‫ػٍّٕش‬
ُٕ‫ٔى‬ ٝ‫ت‬ ‫كٛسذ‬ ٗ‫ای‬ ‫غیش‬ ‫دس‬ ‫صیشا‬ ،‫تشد‬ ‫تىاس‬ ‫كحیح‬ ‫اػذاد‬ ‫تلٛسذ‬ ‫ػثاساذ‬ ‫دس‬ ‫سا‬ ‫ٔٙفی‬ ‫اػذاد‬ ‫اػر‬ ‫تٟسش‬2‫اػر‬ ٗ‫ٕٔى‬ ٝ‫و‬ ‫ؿٛ٘ذ‬ ‫ٔی‬ ُ‫زثذی‬
‫ت‬ٜ‫ٔٙسظش‬ ‫غیش‬ ‫٘سایح‬ ‫اػث‬2
.‫ؿٛ٘ذ‬
‫ٌٔٙمی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬3
: ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬
: ‫اػر‬ ‫تیر‬ ‫یه‬ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ػٍّٕش‬ ٝ‫٘سید‬0، ‫٘ادسػر‬1ٚ ‫دسػر‬Xّْٛ‫ٔؼ‬ ‫٘ا‬.
َٚ‫ا‬ ‫ػّٕٛ٘ذ‬ ‫اٌش‬0‫٘ادسػر‬ َ‫ٔؼاد‬ ‫تاؿذ‬4
‫اٌش‬ ،1‫دسػر‬ َ‫ٔؼاد‬ ‫تاؿذ‬5
‫اٌش‬ ٚX.‫ؿذ‬ ‫خٛاٞذ‬ ‫اسصیاتی‬ ّْٛ‫ٔؼ‬ ‫٘ا‬ ‫تاؿذ‬
1
Arithmetic Operators
2
Unexpected Result
3
Logic Operators
4
False Condition
5
True Condition
ٝ‫كفح‬36‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫عولگر‬ ‫نوع‬‫عولگر‬ ‫سوبل‬‫عولیات‬‫ها‬ ‫عولوند‬
‫های‬ ‫عولگر‬
‫حسابی‬‫هنطمی‬ ‫و‬
*‫ضرب‬2
/‫تمسین‬2
+‫جوع‬2
-‫تفریك‬2
%‫هانده‬ ‫بالی‬2
!‫هنطمی‬ ‫هعکوس‬0
&&‫هنطمی‬ ‫و‬2
||‫هنطمی‬ ‫یا‬2
‫الحاق‬ ‫های‬ ‫عولگر‬
‫تکرار‬ ‫و‬
} {‫الحاق‬‫هحدود‬ ‫نا‬
} } { {‫تکرار‬‫هحدود‬ ‫نا‬
‫های‬ ‫عولگر‬
‫شیفت‬
>>‫راست‬ ‫شیفت‬2
<<‫چپ‬ ‫شیفت‬2
‫عولگر‬ ‫نوع‬‫عولگر‬ ‫سوبل‬‫عولیات‬‫ها‬ ‫عولوند‬
‫های‬ ‫عولگر‬
‫ای‬ ‫رابطه‬0
،
، ‫تساوی‬
‫بیتی‬
<‫از‬ ‫کوچکتر‬2
>‫از‬ ‫بسرگتر‬2
<=‫هساوی‬ ‫و‬ ‫کوچکتر‬2
>=‫هساوی‬ ‫و‬ ‫بسرگتر‬2
==‫تساوی‬2
!=‫تساوی‬ ‫عدم‬2
===‫حروف‬ ‫نوع‬ ‫تساوی‬2
!==‫نوع‬ ‫تساوی‬ ‫عدم‬‫حروف‬2
~‫بیتی‬ ‫هعکوس‬0
&‫بیتی‬ ‫و‬2
|‫بیتی‬ ‫یا‬2
^‫بیتی‬ ‫اختصاصی‬ ‫یا‬2
~^‫یا‬^~|‫بیتی‬ ‫اختصاصی‬ ‫یا‬ ‫هعکوس‬2
‫زؼاٚی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬2
: ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬
ٝ‫٘سید‬a==b‫تشاتش‬0‫یا‬1‫یا‬x‫ػّٕٛ٘ذ‬ ‫اص‬ ‫یىی‬ ‫اص‬ ‫تیر‬ ‫یه‬ ‫اٌش‬ .‫اػر‬‫ٞا‬x‫یا‬zٝ‫٘سید‬ ‫تاؿٙذ‬x.‫ؿٛد‬ ‫ٔی‬
ٝ‫٘سید‬a!=b‫تشاتش‬0‫یا‬1‫یا‬x‫ٞا‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬ ‫اص‬ ‫یىی‬ ‫اص‬ ‫تیر‬ ‫یه‬ ‫اٌش‬ .‫اػر‬x‫یا‬zٝ‫٘سید‬ ‫تاؿذ‬x.‫ؿٛد‬ ‫ٔی‬
ٝ‫٘سید‬a===b‫تشاتش‬0‫یا‬1.‫اػر‬aٚb.‫ؿٛ٘ذ‬ ‫ٔی‬ ٝ‫ٔمایؼ‬ ٓٞ ‫تا‬ ‫تیر‬ ٝ‫ت‬ ‫تیر‬
1
Relational
2
Equality
ٝ‫كفح‬37 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
ٝ‫٘سید‬a!==b‫تشاتش‬0‫یا‬1.‫اػر‬aٚb.‫ؿٛ٘ذ‬ ‫ٔی‬ ٝ‫ٔمایؼ‬ ٓٞ‫تا‬ ‫تیر‬ ٝ‫ت‬ ‫تیر‬
‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬‫اِحاق‬ ‫ٞای‬1
: ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬
‫زا‬ ‫تاؿٙذ‬ ‫داس‬ ٜ‫ا٘ذاص‬ ‫اػذاد‬ ‫تایذ‬ ‫حسٕا‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬Verilog.‫تاؿذ‬ ٝ‫٘سید‬ ٜ‫ا٘ذاص‬ ٝ‫ٔحاػث‬ ٝ‫ت‬ ‫لادس‬
‫ٞا‬ ‫ػّٕٛ٘ذ‬‫زٛا٘ٙذ‬ ‫ٔی‬net،reg.‫تاؿٙذ‬ ‫داس‬ ٜ‫ا٘ذاص‬ ‫اػذاد‬ ‫یا‬ ٚ ‫آٟ٘ا‬ ‫اص‬ ‫تشداسی‬ ‫یا‬ ٚ
‫زىشاس‬ ‫اخشازٛس‬2
ُ‫داخ‬ ‫ػذد‬ ‫چٙذتاس‬ ٝ‫و‬ ‫وٙذ‬ ‫ٔی‬ ‫ٔـخق‬. ‫ؿٛد‬ ‫زىشاس‬ ‫تایذ‬ } {
: ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬ ‫ؿشًی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬
‫اػر‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ‫ؿشًی‬ ‫ػٍّٕش‬ ‫اص‬ ٜ‫اػسفاد‬ ‫لاِة‬
<Condition> ? <True-Statement> : <False-Statement>;
‫اٌش‬ ٚ ‫ؿشى‬ ‫تشلشاسی‬ ‫ػثاسذ‬ ‫تاؿذ‬ ‫تشلشاس‬ ‫ؿشى‬ ‫اٌش‬ ، ‫ٌیشد‬ ‫ٔی‬ ‫لشاس‬ ‫اسصیاتی‬ ‫ٔٛسد‬ ‫ؿشى‬ ‫ػثاسذ‬‫ؿشى‬ ‫تشلشاسی‬ ْ‫ػذ‬ ‫ػثاسذ‬ ‫٘ثاؿذ‬ ‫تشلشاس‬ ‫ؿشى‬
.‫ؿٛد‬ ‫ٔی‬ ‫اخشا‬
َ‫ٔثا‬16:.‫آٔٛخر‬ ‫خٛاٞیذ‬ ‫سا‬ ‫ٞا‬ ‫ػٍّٕش‬ ٚ ‫ٞا‬ ‫ػّٕٛ٘ذ‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ػّٕىشد‬ ٜٛ‫٘ح‬ ‫آٔٛصؽ‬ ‫خٟر‬ ‫فمي‬ ‫ٞا‬ ‫وذ‬ ٗ‫ای‬ ‫اػر‬ ‫روش‬ ٝ‫ت‬ ْ‫الص‬ (
) ‫تاؿٙذ‬ ‫ٔی‬ ‫ٞا‬ ‫ػٍّٕش‬
1
Concatenation
2
Replication
ٝ‫كفح‬38‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
//------- Arithmetic Operations --------//
A = 4'b0011; B = 4'b0100; D = 6; E = 4;
A*B // Evaluated to 4’b1100
D/E // Evaluated to 1
A+B // Evaluated to 4’b0111
in1 = 4'b101x; in2 = 4'b1010;
sum = in1 + in2; // Evaluated to 4'x
//------- Logic Operations --------//
A = 3; B = 0;
A && B // Evaluated to 0 ( False )
A || B // Evaluated to 1 ( True )
!A // Evaluated to 0 ( False )
A = 2'bx0; B = 2'b10;
A && B // Evaluated to x ( Unknown )
//------- Concatenation & Replication --------//
A = 1'b1; B = 2'b00; C = 2'b10; D = 3'b110;
y = { B, C }; // Result y is 4’b0010
y = { A, B ,C, D, 3'b001 }; // Result y is 11’b1_00_10_110_001
//------- Conditional Operations --------//
// Models functionality of a tri state buffer
assign addr_bus = drive_enable ? addr_out : 32'bz;
//------- Equality Operations --------//
A = 3; B = 3; X = 4'b1010; Y = 4'b1101; Z = 4'b1xzz; M = 4'b1xzz; N = 4'b1xxx;
A == B // Result is logical 0
A != B // Result is logical 1
X == Z // Result is x
Z === M // Result is logical 1
Z === N // Result is logical 0
M !== M // Result is logical 1
ٝ‫كفح‬39 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
َ‫ٔثا‬17:‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫زٛكیف‬ ‫صیش‬ َ‫ٔثا‬ ‫دس‬4ٝ‫ت‬1.‫وٙیذ‬ ‫ٔی‬ ٜ‫ٔـاٞذ‬ ‫سا‬ ٝ‫زٛػؼ‬ ُ‫لات‬ ‫تیر‬ ‫زه‬ ‫ٌش‬ ٝ‫ٔمایؼ‬ ‫یه‬ ٚ ‫تیسی‬ ‫چٟاس‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ،
module mux4_to_1 ( out, i0, i1, i2, i3, s1, s0 );
output out;
input i0, i1, i2, i3, s1, s0;
assign out = s1 ? ( s0 ? i3 : i2 ) : ( s0 ? i1 : i0 );
endmodule
module fulladd4 ( sum, c_out, a, b, c_in );
output [3:0] sum;
output c_out;
input [3:0] a, b;
input c_in;
assign { c_out, sum } = a + b + c_in; // Concatenating assignment
endmodule
module Comparator ( a_gt_b, a_eq_b, a_lt_b, a, b, gt, eq, lt );
output a_gt_b, a_eq_b, a_lt_b;
input a, b, gt, eq, lt;
assign a_gt_b = ( a & gt ) | ( ~b & gt ) | ( a & ~b );
assign a_eq_b = ( a & b & eq ) | ( ~a & ~b & eq );
assign a_lt_b = ( ~a & lt ) | ( b & lt ) | ( ~a & b );
endmodule
ٝ‫كفح‬40‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
9)‫در‬ ‫رفتاری‬ ‫سازی‬ ‫مدل‬Verilog
‫دس‬Verilogٖ‫زٛا‬ ‫ٔی‬‫افضاس‬ ‫ػخر‬: ‫اص‬ ‫ػثاسزٙذ‬ ‫ػٌٛح‬ ٗ‫ای‬ ، ‫وشد‬ ‫زٛكیف‬ ‫وّی‬ ‫ػٌح‬ ٝ‫ػ‬ ‫دس‬ ‫سا‬
‫ػٌح‬‫ػاصی‬ َ‫ٔذ‬ ٓ‫ػیؼس‬ ‫ٌٔٙمی‬ ‫سفساس‬ ٖ‫آ‬ ‫دس‬ ٝ‫و‬ ‫تاال‬ ‫ػٌح‬ ‫ػاصی‬ َ‫ٔذ‬ : ‫سفساسی‬ ‫زٛكیف‬.‫ؿٛد‬ ‫ٔی‬
.‫ؿٛد‬ ‫ٔی‬ َ‫ٔذ‬ ‫ٞا‬ ‫ثثاذ‬ ّٝ‫ٚػی‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ : ‫ثثازی‬ ‫ػاصی‬ َ‫ٔذ‬
‫ػاصی‬ َ‫ٔذ‬.‫ؿٛد‬ ‫ٔی‬ ‫زٛكیف‬ ‫ثثازی‬ ٚ ‫ٌیر‬ ‫ػٌح‬ ٚ‫د‬ ‫دس‬ ‫افضاس‬ ‫ػخر‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬ : ‫ای‬ ٝ‫خای‬
ِ‫یافت‬ ‫ساخت‬ ‫ّای‬ ‫بلَک‬1
‫٘یض‬ ‫اػسثٙاػازی‬ ٝ‫اِثس‬ ، ‫تٍیش٘ذ‬ ‫لشاس‬ ‫ٞا‬ ‫تّٛن‬ ٗ‫ای‬ ٖٚ‫دس‬ ‫تایؼر‬ ‫ٔی‬ ‫سفساسی‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬.‫ؿٛد‬ ‫ٔی‬ ٜ‫اؿاس‬ ٖ‫آ‬ ٝ‫ت‬ ‫تؼذا‬ ٝ‫و‬ ‫داسد‬ ‫ٚخٛد‬ٝ‫یافس‬ ‫ػاخر‬ ‫تّٛن‬ ‫٘ٛع‬ ٚ‫د‬
‫ٞای‬ ‫تّٛن‬ ‫اص‬ ‫ػثاسزٙذ‬InitialٚAlways.‫تاؿٙذ‬ ‫ٔی‬ ‫زشزیثی‬ ‫ػاخساس‬ ‫داسای‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ .‫تّٛن‬ ٗ‫چٙذی‬ ٖ‫زٛا‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫یه‬ ٖٚ‫دس‬initialٚ
always.‫ٕ٘ٛد‬ ‫زؼشیف‬
‫ٞای‬ ‫تّٛن‬Initialٖ‫صٔا‬ ‫دس‬ ٚ ‫تاس‬ ‫یه‬ ‫فمي‬‫ا‬ ‫كفش‬.‫ٌشد٘ذ‬ ‫ٔی‬ ‫خشا‬
‫ٞای‬ ‫تّٛن‬Always.‫ٌشد٘ذ‬ ‫ٔی‬ ‫اخشا‬ َ‫حا‬ ‫دس‬ ْٚ‫ٔذا‬ ‫تٌٛس‬ ٚ ٝ‫ٕٞیـ‬
‫تّٛن‬ٝ‫ت‬ ‫سا‬ ‫ٔمذاسی‬ ‫زٛا٘ٙذ‬ ‫ٕ٘ی‬ ٚ ‫داس٘ذ‬ ‫سا‬ ‫ٞا‬ ‫ثثاذ‬ ‫ٔمادیش‬ ٖ‫وشد‬ ٗ‫زؼیی‬ ‫زٛا٘ایی‬ ‫فمي‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬Net‫ٞای‬ ٜ‫داد‬ ( ‫ٞا‬wire.‫دٞٙذ‬ ‫٘ؼثر‬ )‫ٔی‬ ‫ؿٕا‬ ‫أا‬
ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ ٖٚ‫دس‬ ‫زٛا٘یذ‬‫سا‬ ‫ثثاذ‬ ‫یه‬ ،‫ثثاذ‬ ‫یه‬ ‫ٔمادیش‬ ‫تا‬‫یه‬ ،Net.‫وٙیذ‬ ‫دٞی‬ ‫ٔمذاس‬ ‫ثاتر‬ ‫ٔمذاس‬ ‫یه‬ ‫یا‬ ٚ
1
Procedural Blocks
ٝ‫كفح‬41 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫تّٛن‬ ٗ‫چٙذی‬ ‫اٌش‬initialٕٝ‫خاز‬ ‫ٞا‬ ‫تّٛن‬ ‫ػایش‬ ‫اص‬ ٚ ُ‫ٔؼسم‬ ‫تٌٛس‬ ‫تّٛن‬ ‫ٞش‬ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ‫اخشا‬ ٝ٘‫خذاٌا‬ ‫تٌٛس‬ ٚ ٓٞ ‫تا‬ ‫كفش‬ ٖ‫صٔا‬ ‫دس‬ ‫ٞا‬ ‫تّٛن‬ ٕٝٞ ، ٓ‫تاؿی‬ ٝ‫داؿس‬
.‫تاتذ‬ ‫ٔی‬
‫چ‬ ٝ‫یافس‬ ‫ػاخر‬ ‫تّٛن‬ ‫یه‬ ٖٚ‫دس‬ ٓ‫تخٛاٞی‬ ٝ‫و‬ ‫كٛسزی‬ ‫دس‬‫دػسٛساذ‬ ‫اص‬ ‫تایذ‬ ٓ‫تاؿی‬ ٝ‫داؿس‬ ‫دػسٛس‬ ٗ‫ٙذی‬beginٚend‫دػسٛساذ‬ ‫یا‬ ٚforkٚjoin.ٓ‫ٕ٘ایی‬ ٜ‫اػسفاد‬
‫دػسٛساذ‬ ‫اص‬ ٝ‫و‬ ‫دسكٛسزی‬beginٚend.‫ٌشد٘ذ‬ ‫ٔی‬ ‫اخشا‬ ‫دیٍشی‬ ‫اص‬ ‫خغ‬ ‫یىی‬ ‫تّٛن‬ ٖٚ‫دس‬ ‫دػسٛساذ‬ ٓ‫وٙی‬ ٜ‫اػسفاد‬‫دػسٛساذ‬ ‫اص‬ ٝ‫و‬ ‫كٛسزی‬ ‫دس‬forkٚjoin
ٖٚ‫دس‬ ‫دػسٛساذ‬ ْ‫زٕا‬ ٓ‫ٕ٘ایی‬ ٜ‫اػسفاد‬.‫ؿٛ٘ذ‬ ‫ٔی‬ ‫اخشا‬ ‫یىذیٍش‬ ‫تا‬ ٖ‫ٕٞضٔا‬ ‫تّٛن‬
َ‫ٔثا‬18:.‫وشد‬ ٓ‫خٛاٞی‬ ٜ‫ٔـاٞذ‬ ‫سا‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ٞای‬ ‫ثثاذ‬ ٖ‫وشد‬ ‫كفش‬ ٖ‫صٔا‬ ‫وٙیذ‬ ‫فشم‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬clk،
resetٚdata3‫ثثاذ‬ ٖ‫وشد‬ ‫كفش‬ ٖ‫صٔا‬ ٚ ٖ‫صٔا‬ ‫ٚاحذ‬enable5‫ا٘د‬ ْ‫ازٕا‬ ٖ‫صٔا‬ ‫دػسٛس‬ ‫ٞش‬ ‫خّٛی‬ .‫تاؿذ‬ ٖ‫صٔا‬ ‫ٚاحذ‬ٝ‫٘ٛؿس‬ ٖ‫صٔا‬ ‫ٚاحذ‬ ‫حؼة‬ ‫تش‬ ٖ‫آ‬ ْ‫ا‬
‫دػسٛساذ‬ ‫زفاٚذ‬ ‫زا‬ ‫اػر‬ ٜ‫ؿذ‬beginٚfork.‫ؿٛد‬ ٖ‫ٕ٘ایا‬
initial
begin
clk = 0; // Execute finish at 23 clk
reset = 0; // Execute finish at 26 clk
enable = 0; // Execute finish at 211 clk
data = 0; // Execute finish at 214 clk
end
initial
fork
clk = 0; // Execute finish at 23 clk
reset = 0; // Execute finish at 23 clk
enable = 0; // Execute finish at 25 clk
data =0; // Execute finish at 23 clk
join
ٝ‫كفح‬42‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫ضرطی‬ ‫ّای‬ ‫بلَک‬
Verilog‫تّٛن‬ ‫دػسٛساذ‬ ‫وّی‬ ‫لاِة‬ .‫تاؿذ‬ ‫ٔی‬ ‫ؿشًی‬ ‫ٞای‬ ‫تّٛن‬ ‫داسای‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٔا٘ٙذ‬ ‫٘یض‬: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ‫ؿشًی‬
if(Condition)
Statement which executed when Condition is True
else if(Second Condition)
Statement Which executed when Second Condition is True
else
Statement Which executed when None of these Conditions are True
‫ؿشًی‬ ‫ػثاساذ‬elseٚelse if‫ػثاسذ‬ ‫اص‬ ‫دفؼاذ‬ ٝ‫ت‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ؿشًی‬ ‫تّٛن‬ ‫یه‬ ‫دس‬ .‫تاؿٙذ‬ ‫ٔی‬ ‫اخسیاسی‬else if‫اػسف‬.‫ٕ٘ٛد‬ ٜ‫اد‬
َ‫ٔثا‬19:.ٓ‫وٙی‬ ‫ٔی‬ َ‫ٔذ‬ ‫تشػی‬ ‫سا‬ ٜ‫ػاد‬ ‫تؼیاس‬ ٝ‫خٟس‬ ٚ‫د‬ ٜ‫ؿٕاس٘ذ‬ ‫یه‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬
if (reset == 1'b0)
counter = 4'b0000;
else if (enable == 1'b1 && up_en == 1'b1)
counter = counter + 1'b1;
else if (enable == 1'b1 && down_en == 1'b1);
counter = counter - 1'b0;
else
counter = counter;
‫دستَر‬Case
‫ٔی‬ ‫ٕ٘ایؾ‬ ‫تؼذی‬ ‫ٞای‬ َ‫ٔثا‬ َ‫خال‬ ‫دس‬ ‫سا‬ ‫دػسٛس‬ ٗ‫ای‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ .‫تاؿذ‬ ‫ٔی‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٕٞا٘ٙذ‬ ‫دلیما‬ ‫دػسٛس‬ ٗ‫ای‬ ‫واسوشد‬.ٓ‫دٞی‬
ٝ‫كفح‬43 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
‫کٌترل‬‫در‬ ‫زهاى‬ِ‫یافت‬ ‫ساخت‬ ‫ّای‬ ‫بلَک‬
‫ٔی‬ ‫احؼاع‬ ‫خاكی‬ ‫ٞای‬ ٖ‫صٔا‬ ‫دس‬ ‫تّٛن‬ ‫ػاصی‬ َ‫فؼا‬ ٝ‫ت‬ ‫٘یاص‬ ‫ٞا‬ ‫ٚلر‬ ‫تؼوی‬ .‫وٙٙذ‬ ‫ٔی‬ ‫واس‬ ٝ‫ت‬ ‫ؿشٚع‬ ‫كفش‬ ٖ‫صٔا‬ ‫دس‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ ‫وّی‬ ‫حاِر‬ ‫دس‬.‫ؿٛد‬
‫دس‬Verilog.‫ؿٛد‬ َ‫فؼا‬ ‫ٔـخق‬ ‫ٔخسّف‬ ‫ٞای‬ ‫خاِغ‬ ‫اص‬ ‫زشویثی‬ ‫یا‬ ‫خاِغ‬ ‫یه‬ ٝ‫ِث‬ ‫دس‬ ‫زا‬ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ًٛسی‬ ‫سا‬ ٝ‫یافس‬ ‫ػاخر‬ ‫تّٛن‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬
‫ز‬ ‫کٌترل‬‫رٍیداد‬ ‫بر‬ ‫هبٌی‬ ‫هاى‬1
‫یه‬ ‫یا‬ ‫ثثاذ‬ ‫یه‬ ‫زغییش‬ ‫ٔؼٙای‬ ٝ‫ت‬ ‫سٚیذاد‬ ‫یه‬Net.‫اػر‬ٝ‫ػ‬‫سٚیذاد‬ ‫تش‬ ‫ٔثسٙی‬ ٖ‫صٔا‬ َ‫وٙسش‬ ‫٘ٛع‬‫وشد‬ ٓ‫خٛاٞی‬ ‫تشػی‬ ٝٔ‫ادا‬ ‫دس‬ ‫سا‬.
: ‫لاعده‬ ‫با‬ ‫رویداد‬ ‫کنترل‬‫ػالٔر‬@ٜ‫تاالسٚ٘ذ‬ ٝ‫ِث‬ ‫تا‬ َ‫ػیٍٙا‬ ‫یه‬ ‫ٔمذاس‬ ‫زغییش‬ ‫تا‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫دػسٛساذ‬ .‫ؿٛد‬ ‫ٔی‬ ٜ‫اػسفاد‬ ‫سٚیذاد‬ َ‫وٙسش‬ ٖ‫وشد‬ ‫ٔـخق‬ ‫تشای‬
.‫ا٘ذ‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ‫صیش‬ َٚ‫خذ‬ ‫دس‬ ٜ‫سٚ٘ذ‬ ٗ‫خایی‬ ٚ ٜ‫سٚ٘ذ‬ ‫تاال‬ ٝ‫ِث‬ .‫ؿٛ٘ذ‬ ‫اخشا‬ َ‫ػؼیٍٙا‬ ‫یه‬ ٜ‫سٚ٘ذ‬ ٗ‫خایی‬ ‫یا‬
‫لبه‬‫لبلی‬ ‫همدار‬‫جدید‬ ‫همدار‬
‫باالرونده‬
z1
x1
01,x,z
‫رونده‬ ‫پایین‬
z0
x0
10,x,z
َ‫ٔثا‬20:‫تّٛن‬ ‫یه‬ َ‫وٙسش‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ػثاسذ‬ ، ٜ‫سٚ٘ذ‬ ‫تاال‬ ّٝ‫ت‬ ‫دس‬ ْٚ‫د‬ ‫ػثاسذ‬ ، ٝ‫ِث‬ ‫ٞش‬ ‫دس‬ َٚ‫ا‬ ‫ػثاسذ‬ .ٓ‫وٙی‬ ‫ٔی‬ ‫تشػی‬ ‫سا‬ ٜ‫لاػذ‬ ‫تا‬ ‫سٚیذاد‬ ‫یه‬ ‫دس‬
.‫ؿذ‬ ‫خٛاٞٙذ‬ ‫اخشا‬ ٜ‫سٚ٘ذ‬ ‫تاال‬ ٝ‫ِث‬ ‫دس‬ ْ‫چٟاس‬ ‫ػثاسذ‬ ٚ ٜ‫سٚ٘ذ‬ ٗ‫خایی‬ ٝ‫ِث‬ ‫دس‬ ْٛ‫ػ‬
1
Event
ٝ‫كفح‬44‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
@(clock) q = d; // Triggered with any change in clock
@(posedge clock) q = d; // Triggered positive edge of clock
@(negedge clock) q = d; // Triggered negative edge of clock
q = @(posedge clock) d; // d is evaluated immediately and assigned to q at positive edge of clock
: ‫نام‬ ‫با‬ ‫رویداد‬ ‫کنترل‬‫دس‬Verilog‫سا‬ ٖ‫آ‬ ْٚ‫ِض‬ ‫ٔٛالغ‬ ‫دس‬ ٚ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫سا‬ ‫سٚیذاد‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬‫زحشیه‬1
ٜ‫ٚاط‬ ‫وّیذ‬ ‫تا‬ ‫سٚیذاد‬ ٗ‫ای‬ ‫زؼشیف‬ .ٓ‫ٕ٘ایی‬eventٚ
‫زحشیه‬‫تا‬ ٖ‫آ‬ ٖ‫وشد‬->.‫ؿٛد‬ ‫ٔی‬ ْ‫ا٘دا‬
: ‫رویداد‬ ‫چند‬ ‫کنترل‬‫زٛػي‬ ‫أش‬ ٗ‫ای‬ .‫ؿٛد‬ ‫ٔی‬ ‫دػسٛساذ‬ ‫اص‬ ٝ‫ٔدٕٛػ‬ ‫یه‬ ‫اخشای‬ ٖ‫ؿذ‬ ‫زشیٍش‬ ‫ػثة‬ ‫آٟ٘ا‬ ‫اص‬ ‫یىی‬ ‫دس‬ ‫زغییش‬ ٝ‫و‬ ٓ‫داسی‬ َ‫ػیٍٙا‬ ‫چٙذ‬ ‫اٚلاذ‬ ‫ٌاٞی‬
orٝ‫ت‬ ‫ٞا‬ َ‫ػیٍٙا‬ ‫یا‬ ‫ٞا‬ ‫سٚیذاد‬ ٗ‫ای‬ ‫ِیؼر‬ .‫ؿٛد‬ ‫ٔی‬ ْ‫ا٘دا‬ ‫ٞا‬ َ‫ػیٍٙا‬ ‫یا‬ ‫ٞا‬ ‫سٚیذاد‬ ٖ‫وشد‬‫حؼاػیر‬ ‫ِیؼر‬2
.‫اػر‬ ‫ٔـٟٛس‬
َ‫ٔثا‬21:‫سٚیذاد‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬.‫ؿٛیذ‬ ‫ٔی‬ ‫آؿٙا‬ ‫سٚیذاد‬ ‫چٙذ‬ ‫تا‬ َ‫وٙسش‬ ٚ ْ‫٘ا‬ ‫تا‬ ‫ٞا‬
// ----- Event Control by Name ------
event rec_data; // Defining Event
always @(posedge clock) // Triggering at Positive Edge
begin
if( last_data_packet ) ->rec_data; // Triggering defined event
end
always @(rec_data)
data_buf = { data[0] , data[1], data[2], data[3] };
// ----- Event Control by Multiply Signals ------
always @(posedge clock or reset)
begin
if( reset ) q = 0;
else q = d;
end
1
Trigger
2
Sensitivity List
ٝ‫كفح‬45 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog
11)‫سطح‬ ‫در‬ ‫مدار‬ ‫طراحی‬‫رفتاری‬
: ‫رفتاری‬ ‫سطح‬ ‫در‬ ‫ترکیبی‬ ‫ّای‬ ‫هدار‬ ‫طراحی‬
‫د‬ ‫سا‬ ‫ٔذاس‬ ‫ٞای‬ ‫ٚسٚدی‬ ْ‫زٕا‬ ‫تایذ‬ ،‫سفساسی‬ ‫ػٌح‬ ‫دس‬ ‫زشویثی‬ ‫ٞای‬ ‫ٔذاس‬ ‫ًشاحی‬ ‫تشای‬‫س‬ٝ٘‫تذ‬ ‫حؼاع‬ ‫ِیؼر‬alwaysٝ‫زٛخ‬ ‫تایذ‬ ‫ٔذاس‬ ‫زٛكیف‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ .‫وشد‬ ‫روش‬
‫ٞای‬ ‫ؿشى‬ ْ‫زٕا‬ ٝ‫و‬ ‫داؿر‬if‫داسای‬ ‫تایذ‬else‫خٌّٛیش‬ ‫زشزیثی‬ ‫ٔذاس‬ ‫ایداد‬ ‫اص‬ ‫زا‬ ‫تاؿٙذ‬.‫ؿٛد‬ ‫ی‬
َ‫ٔثا‬22:‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫زٛكیف‬ ‫صیش‬ َ‫ٔثا‬ ‫دس‬4ٝ‫ت‬1.‫دیذ‬ ‫خٛاٞیذ‬ ‫سا‬
// Behavioral model of a 4-to-1 multiplexer
module mux4_to_1 ( out, i0, i1, i2, i3, s1, s0 );
output out;
reg out;
input i0, i1, i2, i3, s1, s0;
always @( i0 or i1 or i2 or i3 or s1 or s0 )
begin
case { s1, s0 }
2'b00 : out = i0;
2'b01 : out = i1;
2'b10 : out = i2;
2'b11 : out = i3;
defualt : out = 1'bx;
endcase
end
endmodule
‫رفتاری‬ ‫سطح‬ ‫در‬ ‫ترتیبی‬ ‫ّای‬ ‫هدار‬ ‫طراحی‬
.ٓ‫وٙی‬ ‫ٔی‬ ٖ‫تیا‬ َ‫ٔثا‬ ‫چٙذ‬ ‫روش‬ ‫تا‬ ‫ٞا‬ ‫ٔذاس‬ ٗ‫ای‬ ‫ًشاحی‬
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog
Verilog

More Related Content

Similar to Verilog

راهنمای محیط کلاس مجازی میزتحریر
راهنمای محیط کلاس مجازی میزتحریرراهنمای محیط کلاس مجازی میزتحریر
راهنمای محیط کلاس مجازی میزتحریرmiztahr
 
Introduction to design pattern
Introduction to design patternIntroduction to design pattern
Introduction to design patternReza Rahimy
 
Software Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژه
Software Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژهSoftware Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژه
Software Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژهHamzeh Roustaei
 
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریعباس بني اسدي مقدم
 
امضای دیجیتالی چیست؟
امضای دیجیتالی چیست؟امضای دیجیتالی چیست؟
امضای دیجیتالی چیست؟sepanta-no
 
مفاهیم رایانش ابری
مفاهیم رایانش ابریمفاهیم رایانش ابری
مفاهیم رایانش ابریAli Aboutalebi
 
مهام فريق إنتاج المقررات الإلكترونية
مهام فريق إنتاج المقررات الإلكترونيةمهام فريق إنتاج المقررات الإلكترونية
مهام فريق إنتاج المقررات الإلكترونيةfakih1234
 
Active directory-windows-server-2008
Active directory-windows-server-2008Active directory-windows-server-2008
Active directory-windows-server-2008tarasad
 
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0pdnsoftco
 
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0pdnsoftco
 
الگوهای طراحی فرایند - workflow pattern
الگوهای طراحی فرایند - workflow patternالگوهای طراحی فرایند - workflow pattern
الگوهای طراحی فرایند - workflow patternDepna - دپنا
 
AmenehAhmadi baste3(vol2)
AmenehAhmadi baste3(vol2) AmenehAhmadi baste3(vol2)
AmenehAhmadi baste3(vol2) ameneh_ahmadi
 

Similar to Verilog (20)

راهنمای محیط کلاس مجازی میزتحریر
راهنمای محیط کلاس مجازی میزتحریرراهنمای محیط کلاس مجازی میزتحریر
راهنمای محیط کلاس مجازی میزتحریر
 
Sql tuning
Sql tuningSql tuning
Sql tuning
 
Index in SQL Server - webinar01
Index in SQL Server - webinar01Index in SQL Server - webinar01
Index in SQL Server - webinar01
 
Introduction to design pattern
Introduction to design patternIntroduction to design pattern
Introduction to design pattern
 
Software Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژه
Software Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژهSoftware Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژه
Software Engineering - Project Management - مهندسی نرم افزار - مدیریت پروژه
 
Presentation1
Presentation1Presentation1
Presentation1
 
Sharding
ShardingSharding
Sharding
 
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
 
AD In MCITP 2008.197
AD In MCITP 2008.197AD In MCITP 2008.197
AD In MCITP 2008.197
 
vb.net
vb.netvb.net
vb.net
 
امضای دیجیتالی چیست؟
امضای دیجیتالی چیست؟امضای دیجیتالی چیست؟
امضای دیجیتالی چیست؟
 
مفاهیم رایانش ابری
مفاهیم رایانش ابریمفاهیم رایانش ابری
مفاهیم رایانش ابری
 
مهام فريق إنتاج المقررات الإلكترونية
مهام فريق إنتاج المقررات الإلكترونيةمهام فريق إنتاج المقررات الإلكترونية
مهام فريق إنتاج المقررات الإلكترونية
 
Aktioos
AktioosAktioos
Aktioos
 
Active directory-windows-server-2008
Active directory-windows-server-2008Active directory-windows-server-2008
Active directory-windows-server-2008
 
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0
 
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0
 
Karbaremix 91-3
Karbaremix 91-3Karbaremix 91-3
Karbaremix 91-3
 
الگوهای طراحی فرایند - workflow pattern
الگوهای طراحی فرایند - workflow patternالگوهای طراحی فرایند - workflow pattern
الگوهای طراحی فرایند - workflow pattern
 
AmenehAhmadi baste3(vol2)
AmenehAhmadi baste3(vol2) AmenehAhmadi baste3(vol2)
AmenehAhmadi baste3(vol2)
 

More from Seyed Yahya Moradi (18)

DC motor controlling
DC motor controllingDC motor controlling
DC motor controlling
 
Arduino
ArduinoArduino
Arduino
 
Fpga 1
Fpga 1Fpga 1
Fpga 1
 
Research
ResearchResearch
Research
 
Statistic Dist
Statistic DistStatistic Dist
Statistic Dist
 
Commercialization workshop
Commercialization workshop Commercialization workshop
Commercialization workshop
 
Fpga 2
Fpga 2Fpga 2
Fpga 2
 
ECG
ECGECG
ECG
 
Neuroanatomy
NeuroanatomyNeuroanatomy
Neuroanatomy
 
Fuzzy motor
Fuzzy motorFuzzy motor
Fuzzy motor
 
Mean cardiac axis (cardiac vector)
Mean cardiac axis (cardiac vector)Mean cardiac axis (cardiac vector)
Mean cardiac axis (cardiac vector)
 
Chaos and chaotic
Chaos and chaoticChaos and chaotic
Chaos and chaotic
 
Presentation
PresentationPresentation
Presentation
 
Ip mv workshop
Ip mv workshopIp mv workshop
Ip mv workshop
 
BCI
BCIBCI
BCI
 
مگس درمانی
مگس درمانیمگس درمانی
مگس درمانی
 
SSVEP-BCI
SSVEP-BCISSVEP-BCI
SSVEP-BCI
 
Bio Sensor
Bio SensorBio Sensor
Bio Sensor
 

Verilog

  • 1. ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬ Verilog
  • 2. ٝ‫كفح‬2‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫مطالب‬ ‫فهرست‬ ‫مقدمه‬................................................................................................................................................................................3 1)‫سبک‬‫طراح‬‫ی‬....................................................................................................................................................................4 2)‫سطوح‬‫طراح‬‫ی‬‫در‬‫زبان‬Verilog.............................................................................................................................................7 3)‫متد‬‫طراح‬‫ی‬‫از‬‫باال‬‫به‬‫پا‬‫یی‬‫ه‬.....................................................................................................................................................8 4)‫تعار‬‫ی‬‫ف‬‫اول‬‫ی‬‫ه‬....................................................................................................................................................................12 5)‫قواعد‬‫دستور‬‫ی‬‫و‬‫پا‬‫ی‬‫ه‬‫ا‬‫ی‬‫زبان‬Verilog....................................................................................................................................13 6)‫مدل‬‫ساز‬‫ی‬‫در‬‫سطح‬‫گ‬‫ی‬‫ت‬....................................................................................................................................................26 7)‫مدل‬‫ساز‬‫ی‬‫سطح‬‫ثبات‬‫ی‬(‫جر‬‫ی‬‫ان‬‫داده‬‫ها‬)...................................................................................................................................32 8)‫عبارات‬،‫عملگر‬‫ها‬‫و‬‫عملوود‬‫ها‬...............................................................................................................................................34 9)‫مدل‬‫ساز‬‫ی‬‫رفتار‬‫ی‬‫در‬Verilog.............................................................................................................................................44 14)‫طراح‬‫ی‬‫مدار‬‫در‬‫سطح‬‫رفتار‬‫ی‬...............................................................................................................................................45 11)‫مثال‬‫ها‬........................................................................................................................................................................48 12)‫تمار‬‫ی‬‫ه‬.........................................................................................................................................................................63
  • 3. ٝ‫كفح‬3 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫مقدمه‬ Verilog‫ٔی‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫اص‬ ‫یىی‬‫یه‬ ‫زٛػي‬ .‫تاؿذ‬‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬‫یا‬ ٚ ٝ‫حافظ‬ ، ‫فالج‬ ‫فّیح‬ ‫ٔا٘ٙذ‬ َ‫دیدیسا‬ ٓ‫ػیؼس‬ ‫یه‬ ‫سفساس‬ ٖ‫زٛا‬ ‫ٔی‬ .‫ٕ٘ٛد‬ ‫زٛكیف‬ ‫سا‬ ... ٚ ٜ‫خشداص٘ذ‬ٜ‫اػسفاد‬ ‫تا‬‫دیدیساِی‬ ٓ‫ػیؼس‬ ‫یه‬ ‫یا‬ ٚ ‫فالج‬ ‫فّیح‬ ‫یه‬ ‫ٔا٘ٙذ‬ ٜ‫ػاد‬ ‫دیدیساِی‬ ٓ‫ػیؼس‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬ ‫افضاسی‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ٗ‫ای‬ ‫اص‬ ٕ٘ ‫زٛكیف‬ ‫صیش‬ ‫ًشاحی‬ ‫ػٌٛح‬ ‫دس‬ ‫سا‬ ‫خٛد‬ ‫افضاس‬ ‫ػخر‬ ‫زٛا٘یذ‬ ‫ٔی‬ ‫ؿٕا‬ ٖ‫صتا‬ ٗ‫ای‬ ‫زٛػي‬ .‫ٕ٘ٛد‬ ‫زٛكیف‬ ‫ػٌحی‬ ‫ٞش‬ ‫دس‬ ‫سا‬ ‫ٔیىشٚوٙسشِش‬ ‫یه‬ ‫٘ظیش‬ ٝ‫خیـشفس‬: ‫اییذ‬ ‫د‬ ٚ‫س‬ ‫خیؾ‬ ٝ‫و‬ ‫ای‬ ٝ‫وساتچ‬‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬ ‫اسیذ‬Verilog‫وأدیٛزش‬ ،‫تشق‬ ‫ٞای‬ ٝ‫سؿس‬ ٖ‫دا٘ـدٛیا‬ ٝ‫وساتچ‬ ٗ‫ای‬ ‫خاف‬ ٖ‫ٔخاًثا‬ .‫تاؿذ‬ ‫ٔی‬–، ‫افضاس‬ ‫ػخر‬ – ‫خضؿىی‬ ‫ٟٔٙذػی‬.‫تاؿذ‬ ‫ٔی‬ َ‫دیدیسا‬ ‫ٔذاساذ‬ ٝ‫ت‬ ‫ٔٙذ‬ ٝ‫ػالل‬ ‫افشاد‬ ‫دیٍش‬ ٚ ‫اِىسشیه‬ ٛ‫تی‬ٌٔ ُٔ‫وا‬ ٟٓ‫ف‬ ‫تشای‬ ٝ‫و‬ ‫تفشٔایٙذ‬ ‫دلر‬ ‫تایذ‬ ‫وساب‬ ٗ‫ای‬ ٖ‫خٛا٘ٙذٌا‬ٗ‫ای‬ ٖٚ‫دس‬ ‫اِة‬ .‫تاؿٙذ‬ ٜ‫ٌزسا٘ذ‬ ‫سا‬ ‫ٌٔٙمی‬ ‫ٔذاساذ‬ ‫دسع‬ ‫یا‬ ٚ ٝ‫داؿس‬ َ‫دیدیسا‬ ‫ٔذاساذ‬ ‫تا‬ ‫خٛتی‬ ‫آؿٙایی‬ ‫تایؼر‬ ‫ٔی‬ ٝ‫وساتچ‬ ‫اص‬ ٜ‫ؿذ‬ ٖ‫آ‬ ‫تش‬ ‫ػؼی‬ ٗ‫ٕٞچٙی‬ .‫وشد‬ ٜ‫اؿاس‬ ‫آٔٛصؿی‬ ‫ٌّٔة‬ ‫ٞش‬ ‫اص‬ ‫تؼذ‬ ‫ٔسٙٛع‬ ُ‫ٔؼائ‬ ٚ ‫ٞا‬ َ‫ٔثا‬ ٖ‫ؿذ‬ ‫ٌٔشح‬ ٝ‫ت‬ ٖ‫زٛا‬ ‫ٔی‬ ‫آٔٛص‬ ‫خٛد‬ ٗ‫ای‬ ‫ٞای‬ ‫ٚیظٌی‬ ‫اص‬‫واستشد‬ ٝ‫و‬ ‫ٌٔاِثی‬ Verilog ‫دس‬ ‫زش‬ ٝ‫خیـشفس‬ ُ‫ٔؼائ‬ ‫فشاٌیشی‬ ‫خٟر‬ ٖ‫زٛا‬ ‫ٔی‬ ُ‫زٕای‬ ‫كٛسذ‬ ‫دس‬ ٖ‫خٛا٘ٙذٌا‬ .‫ؿٛد‬ ‫٘ظش‬ ‫كشف‬ ‫داس٘ذ‬ ‫وٕسشی‬‫وساب‬ ٝ‫ت‬Verilog HDL – A Guide to Digital Design.‫ٕ٘ایٙذ‬ ٝ‫ٔشاخؼ‬‫ٞای‬ ‫وساب‬ ‫اص‬ ٝ‫وساتچ‬ ٗ‫ای‬ ‫ٌٔاِة‬Verilog HDL – A Guide to Digital Designٝ‫٘ٛؿس‬Samir Palnitkar‫آٔٛصؿی‬ ٜٚ‫خض‬ ،Verilog‫ػؼیذ‬ ٝ‫٘ٛؿس‬ ‫آٔٛصؿی‬ ٜٚ‫خض‬ ، ‫كفشی‬Verilogٝ‫٘ٛؿس‬Deepak Kumar Tala.‫اػر‬ ٜ‫ؿذ‬ ٗ‫زذٚی‬ ٚ ‫آٚسی‬ ‫خٕغ‬ ... ٚ
  • 4. ٝ‫كفح‬4‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 1)‫طراحی‬ ‫سبک‬ ٖ‫صتا‬ ‫خضئیاذ‬ ٝ‫ت‬ ٝ‫ایٙى‬ ‫اص‬ ُ‫لث‬Verilog.ٓ‫وٙی‬ ‫كحثر‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫زٛػي‬ ‫ًشاحی‬ ‫ػثه‬ ٜ‫دستاس‬ ‫وٕی‬ ‫زا‬ ‫اػر‬ ‫٘یاص‬ ‫اتسذا‬ ،ٓ‫خشداصی‬ ٝ‫ت‬ٖ‫صتا‬ Verilog‫خای‬ ٝ‫ت‬ ‫تاال‬ ‫اص‬ ‫ًشاحی‬ ٖ‫أىا‬ ٖ‫ًشاحا‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٔا٘ٙذ‬‫دٞذ‬ ‫ٔی‬ ‫سا‬ ‫تاال‬ ٝ‫ت‬ ٗ‫خایی‬ ‫اص‬ ٚ ٗ‫ی‬ٚ ‫ٔضایا‬ ‫داسای‬ ‫ٞا‬ ‫ٔسذ‬ ٗ‫ای‬ ‫اص‬ ‫ٞشیه‬ ، .‫ؿٛد‬ ‫ٔی‬ ٜ‫اؿاس‬ ٖ‫آ‬ ٝ‫ت‬ ٝ‫و‬ ‫تاؿٙذ‬ ‫ٔی‬ ‫ٔؼایثی‬ ‫سبک‬‫طراحی‬‫باال‬ ِ‫ب‬ ‫پاییي‬ ‫از‬1 ‫ٔذاس‬ ‫ًشاحی‬ ‫دس‬ ‫ػٙسی‬ ‫ٔسذ‬ ‫یه‬ ‫تاال‬ ٝ‫ت‬ ٗ‫خایی‬ ‫ًشاحی‬ ‫ٔسذ‬‫ٔسذ‬ ٗ‫ای‬ ‫دس‬ .‫تاؿذ‬ ‫ٔی‬ َ‫دیدیسا‬ ‫ٞای‬‫ٌیر‬ ‫ػٌح‬ ‫یؼٙی‬ ‫ػٌح‬ ٗ‫زشی‬ ٗ‫خایی‬ ‫اص‬ َ‫دیدیسا‬ ‫افضاس‬ ‫ػخر‬ ‫خذیذ‬ ‫ٞای‬ ‫افضاس‬ ‫ػخر‬ ‫خیچیذٌی‬ ‫افضایؾ‬ ‫تا‬ .‫ؿذ‬ ‫خٛاٞذ‬ ٝ‫اهاف‬ ٖ‫آ‬ ‫خیچیذٌی‬ ٝ‫ت‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫افضاس‬ ‫ػخر‬ ٝ‫ت‬ ٖ‫سػیذ‬ ‫زا‬ ّٝ‫ٔشح‬ ‫ٞش‬ ‫دس‬ ٚ ‫ؿٛد‬ ‫ٔی‬ ‫ًشاحی‬ٜ‫خیاد‬ ‫خٛاٞذ‬ ٗ‫ٕٔى‬ ‫٘ا‬ ٚ ‫ػخر‬ ‫تؼیاس‬ ‫ٔسذ‬ ٗ‫ای‬ ‫زٛػي‬ ‫ػاصی‬.‫ؿذ‬ ُ‫ؿى‬1.‫تاال‬ ٝ‫ت‬ ٗ‫خایی‬ ‫ًشاحی‬ ‫ٔسذ‬ 1 Bottom to Up Design Methodology
  • 5. ٝ‫كفح‬5 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫پاییي‬ ِ‫ب‬ ‫باال‬ ‫از‬ ‫طراحی‬ ‫سبک‬1 ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫ٔخسّف‬ ‫ٞای‬ ‫تخؾ‬ ‫ًشاح‬ ‫ٔسذ‬ ٗ‫ای‬ ‫دس‬ ،‫تاؿذ‬ ‫ٔی‬ ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫اص‬ ‫ًشاحی‬ ‫ٔسذ‬ ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫زٛكیف‬ ٚ ‫ًشاحی‬ ‫دس‬ ‫ٔسذ‬ ٗ‫زشی‬ َٚ‫ٔسذا‬‫سا‬ ‫ٔخسّف‬ ‫ٞای‬ ‫تخؾ‬ ‫ًشاحی‬ ‫زغییش‬ ،ٝ‫اِٚی‬ ‫ٞای‬ ‫زؼر‬ ‫لاتّیر‬ ٝ‫ت‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ٔسذ‬ ٗ‫ای‬ ‫ٞای‬ ‫ٔضیر‬ ‫اص‬ .‫وٙذ‬ ‫ٔی‬ ‫ًشاحی‬ ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫اص‬ ٚ ٝ٘‫خذاٌا‬ ‫تلٛسذ‬‫تذ‬‫ایداد‬ ٖٚ ٝ‫و‬ ‫تاؿذ‬ ‫ٔی‬ ‫ػیؼسٕی‬ ‫دیذ‬ ٚ ‫اًالػاذ‬ ‫٘یاصٔٙذ‬ ‫ٔسذ‬ ٗ‫ای‬ ُٔ‫وا‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫ػٛم‬ ‫دس‬ .‫وشد‬ ٜ‫اؿاس‬ ... ٚ ٗ‫سٚزی‬ ‫ًشاحی‬ ، ‫ٞا‬ ‫تخؾ‬ ‫دیٍش‬ ‫دس‬ ‫زغییشاذ‬‫تا‬ ٝ‫ٔمایؼ‬ ‫دس‬ ‫ػ‬ ‫ًشاحی‬ ‫خٟر‬ ‫ٔسذ‬ ٚ‫د‬ ‫ٞش‬ ‫زشویة‬ ‫اص‬ ‫خٛد‬ ‫ٞای‬ ‫ًشاحی‬ ‫دس‬ ‫افضاس‬ ‫ػخر‬ ٖ‫ًشاحا‬ ‫تیـسش‬ ُ‫دِی‬ ٗ‫ٕٞی‬ ٝ‫ت‬ ،‫تاؿذ‬ ‫ٔی‬ ‫زش‬ ُ‫ٔـى‬ ُ‫لث‬ ‫ٔسذ‬َ‫دیدیسا‬ ‫ٞای‬ ٓ‫یؼس‬ ٜ‫اػسفاد‬‫وٙٙذ‬ ‫ٔی‬. ُ‫ؿى‬2.ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫ًشاحی‬ ‫ٔسذ‬ 1 Top Down Design Methodology
  • 6. ٝ‫كفح‬6‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ُ‫ؿى‬3.ٔ‫یه‬ ‫ًشاحی‬ ُ‫شاح‬ٗ‫خایی‬ ٝ‫ت‬ ‫تاال‬ ‫سٚؽ‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫ٞای‬ ‫ٚیظٌی‬ ٖ‫وشد‬ ‫ٔـخق‬ ‫افضاس‬ ‫ػخر‬ Design Specification ‫تاال‬ ‫ػٌح‬ ‫ًشاحی‬ High Level Design ٗ‫خایی‬ ‫ػٌح‬ ‫ًشاحی‬ Low Level Design ‫ثثازی‬ ‫ًشاحی‬ RTL Design ‫ػّٕىشد‬ ‫تشػی‬ Functional Verfication ‫ٌٔٙمی‬ ‫زفؼیش‬ Logic Synthesis ‫ٌیر‬ ‫ػٌح‬ ‫ػاصی‬ ٝ‫ؿثی‬ Gate Level Simulation ‫وـی‬ ٓ‫ػی‬ ٚ ‫ٌضاسی‬ ‫خای‬ Place & Route ‫ػاصی‬ ٜ‫خیاد‬ Implementation
  • 7. ٝ‫كفح‬7 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 2)‫زبان‬ ‫در‬ ‫طراحی‬ ‫سطوح‬Verilog ٘‫خـسیثا‬ ‫افضاس‬ ‫ػخر‬ ‫ًشاحی‬ ٚ ‫زٛكیف‬ ‫خٟر‬ ‫ٔخسّفی‬ ‫ػٌٛح‬ ‫اص‬ ٖ‫صتا‬ ٗ‫ای‬‫ػ‬ .‫وٙذ‬ ‫ٔی‬ ‫ی‬‫سفساسی‬ ‫ػٌح‬ ‫اص‬ ‫ػثاسزٙذ‬ ٟٓٔ ‫ػٌح‬ ٝ‫ثثازی‬ َ‫ا٘سما‬ ‫ػٌح‬ ،.‫ٌیر‬ ‫ػٌح‬ ٚ ‫گیت‬ ‫تَصیف‬ ‫سطح‬1 ‫افضاس‬ ‫ػخر‬ ،‫ًشاحی‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ً‫ا‬ٕ‫ٔؼسمی‬َ‫ػیٍٙا‬ ‫تا‬ ٓ‫ٔؼسمی‬ ‫تلٛسذ‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ٔی‬ ‫زٛكیف‬ ‫آٟ٘ا‬ ٖ‫ٔیا‬ ‫ازلاالذ‬ ٚ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬ ‫زٛػي‬2 ‫ٞای‬ ‫ػ‬ ‫زٛػي‬ ‫افضاس‬ ‫ػخر‬ ‫ٔؼٕٛال‬ ٚ ‫اػر‬ ‫ٔـىّی‬ ‫تؼیاس‬ ‫واس‬ ٜ‫خیچیذ‬ ٚ ‫تضسي‬ ‫ٞای‬ ‫ٔذاس‬ ‫تشای‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ ‫ًشاحی‬ .ٓ‫داسی‬ ‫ػشٚواس‬ ‫داخّی‬ ٚ ‫خشٚخی‬ ،‫ٚسٚدی‬‫ٌٛح‬ ‫ػٙسض‬ ‫ٞای‬ ‫اتضاس‬ ‫زٛػي‬ ٚ ‫ًشاحی‬ ‫تاالزش‬3 .‫ؿذ‬ ‫خٛاٞذ‬ ُ‫زثذی‬ ‫ٌیر‬ ‫ػٌح‬ ٝ‫ت‬ ‫ثباتی‬ ‫اًتقال‬ ‫تَصیف‬ ‫سطح‬4 ) ‫ّا‬ ُ‫داد‬ ‫جریاى‬ ( ‫د‬ ‫ٔذاس‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ٖ‫ٕٞضٔا‬ ‫تشای‬ ‫ًشاحی‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ٔی‬ ‫ًشاحی‬ ‫یىذیٍش‬ ٗ‫تی‬ ‫ٞا‬ ٜ‫داد‬ َ‫ا٘سما‬ ٚ ‫ثثازی‬ ‫ٞای‬ ‫ػّٕیاذ‬ ٚ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تا‬ ‫یدیساِی‬ .‫ؿٛد‬ ‫ٔی‬ ‫احؼاع‬ ‫ٚهٛح‬ ٝ‫ت‬ ‫ػاػر‬ َ‫ػیٍٙا‬ ‫یه‬ ٝ‫ت‬ ‫ًشاح‬ ‫ٔخسّف‬ ‫ٞای‬ ‫تخؾ‬ ‫ػاصی‬ ‫رفتاری‬ ‫تَصیف‬ ‫سطح‬5 ‫ٞای‬ ٓ‫اٍِٛسیس‬ ‫تشحؼة‬ ‫افضاس‬ ‫ػخر‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ٖ‫ٕٞضٔا‬ٔ ‫ًشاحی‬‫ٞش‬ .‫تاؿذ‬ ‫ٕ٘ی‬ ‫ًشح‬ ‫افضاسی‬ ‫ػخر‬ ‫خضئیاذ‬ ‫زٛكیف‬ ٝ‫ت‬ ‫٘یاصی‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ی‬ ٓ‫اٍِٛسیس‬‫زشزیثی‬ ‫تلٛسذ‬ ‫زٟٙایی‬ ٝ‫ت‬‫ػخر‬ ‫سفساس‬ ‫ٞا‬ ٓ‫اٍِٛسیس‬ ٗ‫ای‬ ٝ‫ٔدٕٛػ‬ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ‫اخشا‬ ‫دیٍشی‬ ‫اص‬ ‫خغ‬ ‫یىی‬ ‫دػسٛساذ‬ ٝ‫و‬ ‫تٌٛسی‬ ‫ؿٛد‬ ‫ٔی‬ ٖ‫تیا‬ ‫دس‬ ‫اكّی‬ ‫اتضاس‬ ‫اص‬ ‫ٞا‬ ‫تّٛن‬ ٚ ‫ٞا‬ ‫زؼه‬ ،‫زٛاتغ‬ .‫وٙذ‬ ‫ٔی‬ ‫زٛكیف‬ ‫سا‬ ‫افضاس‬.‫تاؿٙذ‬ ‫ٔی‬ ‫ًشاحی‬ ‫ػٌح‬ ٗ‫ای‬ 1 Gate Level Modeling 2 Signal 3 Synthesis 4 Register Transfer Level 5 Behavioral Modeling
  • 8. ٝ‫كفح‬8‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 3)‫پاییه‬ ‫به‬ ‫باال‬ ‫از‬ ‫طراحی‬ ‫متد‬ : ‫اػر‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫ؿشح‬ ‫صیش‬ ‫دس‬ ‫ٔسذ‬ ٗ‫ای‬ ‫زٛػي‬ ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫ًشاحی‬ ُ‫ٔشاح‬ ‫افضاس‬ ‫ػخر‬ ‫ٞای‬ ‫ٚیظٌی‬ ٖ‫وشد‬ ‫ٔـخق‬(Design Specification) ٛ‫تل‬ ‫خشداصؿی‬ ‫ػّٕیاذ‬ ٚ ‫خشٚخی‬ ٚ ‫ٞا‬ ‫ٚسٚدی‬ ‫٘ٛع‬ ُ‫لثی‬ ‫اص‬ ‫افضاس‬ ‫ػخر‬ ‫یه‬ ‫وّی‬ ‫ٞای‬ ‫ٚیظٌی‬ ّٝ‫ٔشح‬ ‫دس‬.‫ؿٛد‬ ‫ٔی‬ ‫تشػی‬ ‫وّی‬ ‫سذ‬ ‫تاال‬ ‫ػٌح‬ ‫ًشاحی‬(High Level Design) ‫ٞای‬ ‫تّٛن‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫ٞای‬ ‫خشٚخی‬ ٝ‫ت‬ ‫دػسیاتی‬ ‫تشای‬ ٚ ‫ٌیش٘ذ‬ ‫ٔی‬ ‫لشاس‬ ‫تشػی‬ ‫ٔٛسد‬ ‫دلیك‬ ‫تٌٛس‬ ‫افضاس‬ ‫ػخر‬ ‫ٞای‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬ .‫وشد‬ ٓ‫خٛاٞی‬ ٝ‫زؼثی‬ ‫سا‬ ‫ٔخسّفی‬‫ٔی‬ ‫تّٛن‬ ‫سا‬ ‫وٛچىسش‬ ‫ٞای‬ ‫ٚاحذ‬ ٗ‫ای‬ .‫تاؿذ‬ ‫ٔی‬ ‫زش‬ ‫وٛچه‬ ‫ٞای‬ ‫ٚاحذ‬ ٝ‫ت‬ ‫وّی‬ ‫ًشاحی‬ ‫یه‬ ٖ‫ؿىا٘ذ‬ ‫دسٚالغ‬ ‫ایٙىاس‬ .ٓ‫٘أی‬َ‫ٔثا‬ ‫تشای‬‫تّٛن‬ ، ٓ‫وٙی‬ ‫ًشاحی‬ ‫اتسذایی‬ ٜ‫خشداص٘ذ‬ ‫یه‬ ٓ‫خٛاٞی‬ ‫ٔی‬ ،ٝ‫حافظ‬ ‫ٚاحذ‬ ،‫ٔشوضی‬ ‫خشداصؽ‬ ‫ٚاحذ‬ ‫اص‬ ‫ػثاسزٙذ‬ ٜ‫خشداص٘ذ‬ ٗ‫ای‬ ‫اكّی‬ ‫ٞای‬ ‫ثثاذ‬‫ٞا‬ٙ‫و‬ ‫ٚاحذ‬ ٚ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ،.‫تاؿٙذ‬ ‫ٔی‬ َ‫سش‬ ُ‫ؿى‬4.‫تاال‬ ‫ػٌح‬ ‫ًشاحی‬ ‫یه‬ ‫اص‬ ‫ای‬ ٕٝ٘ٛ٘
  • 9. ٝ‫كفح‬9 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ٗ‫خایی‬ ‫ػٌح‬ ‫ًشاحی‬(Low Level Design) .‫وٙذ‬ ‫ٔی‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫سا‬ ‫تّٛن‬ ‫دٞذ‬ ْ‫ا٘دا‬ ‫تایؼر‬ ‫ٔی‬ ‫تّٛن‬ ‫ٞش‬ ٝ‫و‬ ‫خشداصؿی‬ ‫٘ٛع‬ ٚ ‫تّٛن‬ ‫ٞش‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ‫اػاع‬ ‫تش‬ ‫ًشاح‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬ ‫زٛػي‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬ ‫ػاصی‬ ٜ‫خیاد‬‫ٞا‬ ‫ثثاذ‬‫ٔا‬ ،‫ٞا‬ ‫دیىٛدس‬ ،.‫ؿٛد‬ ‫ٔی‬ ْ‫ا٘دا‬ ... ٚ ‫ٞا‬ ٜ‫ؿٕاس٘ذ‬ ،‫ٞا‬ ‫خّىؼش‬ ‫ِسی‬ ُ‫ؿى‬5.ٗ‫خایی‬ ‫ػٌح‬ ‫ًشاحی‬ ‫یه‬ ‫اص‬ ‫ای‬ ٕٝ٘ٛ٘ ‫ثثازی‬ ‫ًشاحی‬(RTL Design) ‫ٞای‬ ‫وذ‬ ٝ‫ت‬ ُ‫لث‬ ّٝ‫ٔشح‬ ‫ًشاحی‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬Verilogّٝ‫ٔشح‬ ‫ٞای‬ ‫ًشح‬ ٗ‫ای‬ ُ‫زثذی‬ .‫ؿٛد‬ ‫ٔی‬ ُ‫زثذی‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫یا‬ ٚ ٔ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬ ٝ‫ت‬ ُ‫لث‬.‫خزیشد‬ ‫كٛسذ‬ ٖ‫صتا‬ ٖ‫آ‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ٗ‫لٛا٘ی‬ ٚ ‫چٟاسچٛب‬ ‫دس‬ ‫تایؼر‬ ‫ی‬ ‫ػّٕىشد‬ ‫تشػی‬(Functional Verification) .‫تاؿذ‬ ‫ٔی‬ ٜ‫ؿذ‬ ‫ًشاحی‬ ‫افضاس‬ ‫ػخر‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫تشای‬ ‫ػّٕیازی‬ ُٔ‫ؿا‬ ّٝ‫ٔشح‬ ٗ‫ای‬‫افضاس‬ ‫ػخر‬ ‫كحیح‬ ‫واسوشد‬ ‫اص‬ ٖ‫إًیٙا‬ ‫ٔٙظٛس‬ ٝ‫ت‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫ٞای‬ ‫افضاس‬ ْ‫٘ش‬ ‫اص‬ ‫تایؼر‬ ‫ٔی‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬ .‫ٌیشد‬ ‫ٔی‬ ‫كٛسذ‬‫ػاصی‬ ٝ‫ؿثی‬‫زٛكیف‬ ٖ‫صتا‬‫افضاسی‬ ‫ػخر‬‫یه‬ ‫تایؼر‬ ‫ٔی‬ ٗ‫ٕٞچٙی‬ .‫ٕ٘ٛد‬ ٜ‫اػسفاد‬
  • 10. ٝ‫كفح‬10‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫خذیذ‬ ‫افضاس‬ ‫ػخر‬ ٗ‫ای‬ ٝ‫ت‬ . ٓ‫تاؿی‬ ٜ‫وشد‬ ‫ًشاحی‬ ُ‫لث‬ ‫اص‬ ٜ‫ؿذ‬ ‫ًشاحی‬ ‫افضاس‬ ‫ػخر‬ ‫زؼر‬ ‫تشای‬ ٝ٘‫خذاٌا‬ ‫افضاس‬ ‫ػخر‬Testbenchٗ‫ای‬ .‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬ .‫داسد‬ ٜ‫ػٟذ‬ ‫تش‬ ‫سا‬ ٜ‫ؿذ‬ ‫ًشاحی‬ ‫افضاس‬ ‫ػخر‬ ‫خشٚخی‬ ‫ٞای‬ َ‫ػیٍٙا‬ ‫ػٙدؾ‬ ٚ ‫ٚسٚدی‬ ‫ٞای‬ َ‫ػیٍٙا‬ ‫زِٛیذ‬ ٝ‫ٚظیف‬ ‫ػخر‬ ُ‫ؿى‬6.ٜ‫ؿٕاس٘ذ‬ ‫یه‬ ‫زؼر‬ ‫خٟر‬ ‫زؼر‬ ‫افضاس‬ ‫ػخر‬ ‫زفؼی‬‫ش‬‫ٌٔٙمی‬‫یا‬‫ػٙسض‬(Logic Synthesis) ٙ‫زى‬ ‫٘ٛع‬ ُ‫لثی‬ ‫اص‬ ‫ٚسٚدی‬ ‫اًالػاذ‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تا‬ ‫ػٙسض‬ ‫اتضاس‬ .‫تاؿذ‬ ‫ٔی‬ ‫افضاسی‬ ْ‫٘ش‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫دس‬ ُ‫وأدای‬ ٝ‫ٔـات‬ ‫ػّٕیاذ‬ ‫ػٙسض‬‫ِٛٛطی‬ ‫ٞای‬ ‫وذ‬ ‫خشداصؽ‬ ٝ‫ت‬ ْ‫الذا‬ ‫اًالػازی‬ ‫تا٘ه‬ ٚ ‫ٞا‬ ‫خشٚخی‬ ٚ ‫ٞا‬ ‫ٚسٚدی‬ ٝ‫٘مـ‬ ،‫ٔملذ‬ ‫افضاس‬ ‫ػخر‬RTLٕ٘ ‫ٔی‬ٝ‫٘مـ‬ ٝ‫ت‬ ُ‫زثذی‬ ‫سا‬ ‫آٟ٘ا‬ ‫ا٘سٟا‬ ‫دس‬ ٚ ‫ایذ‬ ‫ٞای‬ ‫تخؾ‬ ‫ٕٞضٔا٘ی‬ ‫اص‬ ٖ‫إًیٙا‬ ‫خٟر‬ ٜ‫ؿذ‬ ‫ػٙسض‬ ‫ٔذاس‬ ‫آ٘اِیض‬ ٝ‫ت‬ ْ‫الذا‬ ‫ػٙسض‬ ‫ػّٕیاذ‬ ْ‫ا٘دا‬ ‫اص‬ ‫خغ‬ ٗ‫ٕٞچٙی‬ ‫ػٙسض‬ ‫اتضاس‬ .‫وشد‬ ‫خٛاٞذ‬ ‫ٌیر‬ ‫ػٌح‬ ٔ ‫ٞای‬ ‫زاخیش‬ ‫ػٙسض‬ ‫ػّٕیاذ‬ ‫دس‬ ٝ‫و‬ ‫اػر‬ ‫روش‬ ُ‫لات‬ ( ‫ٕ٘ایذ‬ ‫ٔی‬ ‫صٔا٘ی‬ ‫ٔـىالذ‬ ٖ‫٘یأذ‬ ‫تٛخٛد‬ ٚ ‫یىذیٍش‬ ‫تا‬ ‫ٔخسّف‬‫ٚالؼی‬ ‫ٞای‬ ‫افضاس‬ ‫ػخر‬ ‫دس‬ ‫ٛخٛد‬ ) ‫ؿٛد‬ ‫ٕ٘ی‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫دس‬.‫آٟ٘اػر‬ ٖ‫ٔیا‬ ‫ازلاالذ‬ ٚ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬ ‫تیاٍ٘ش‬ ٝ‫و‬ ‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬ ‫ِیؼر‬ ‫٘ر‬ ‫ػٙسض‬ ‫اتضاس‬ ‫خشٚخی‬ ٝ‫ت‬ .
  • 11. ٝ‫كفح‬11 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫ؿثی‬ٝ‫ٌیر‬ ‫ػٌح‬ ‫ػاصی‬(Gate Level Simulation) ‫كح‬ ‫ػّٕىشد‬ ٚ ٜ‫ؿذ‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫ػٙسض‬ ‫اتضاس‬ ‫زٛػي‬ ٜ‫ؿذ‬ ‫زِٛیذ‬ ‫ِیؼر‬ ‫٘ر‬ ّٝ‫ٔشح‬ ٗ‫ای‬ ‫دس‬. ‫ٌشفر‬ ‫خٛاٞذ‬ ‫لشاس‬ ‫تشػی‬ ‫ٔٛسد‬ ٖ‫آ‬ ‫یح‬ ُ‫ؿى‬7.‫ٌٛیٙذ‬ ‫ٔی‬ ‫ػٙسض‬ ٖ‫آ‬ ٝ‫ت‬ ٝ‫و‬ ‫ٌیر‬ ‫ػٌح‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬ ُ‫زثذی‬ ‫فشایٙذ‬ ‫خای‬‫ٌزا‬‫وـی‬ ٓ‫ػی‬ ٚ ‫سی‬(Place & Route) ‫ٔی‬ ‫لثّی‬ ُ‫ٔشاح‬ ‫دس‬ ٜ‫ؿذ‬ ‫زِٛیذ‬ ‫ِیؼر‬ ‫٘ر‬ ‫تا‬ ‫ٌٔاتك‬ ‫ٔدسٕغ‬ ‫ٔذاس‬ ‫ًشاحی‬ ٝ‫ت‬ ‫ٔشتٛى‬ ‫دسٚالغ‬ ّٝ‫ٔشح‬ ٗ‫ای‬.‫تاؿذ‬
  • 12. ٝ‫كفح‬12‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 4)‫اولیه‬ ‫تعاریف‬ ‫هاجَل‬1 ٜ‫چاس‬ ٜ‫خیچیذ‬ ‫٘ؼثسا‬ ‫ٞای‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ‫تشای‬‫ای‬ٞ ‫تخؾ‬ ٗ‫ای‬ ،ٓ‫٘ذاسی‬ ‫زش‬ ‫وٛچه‬ ‫ٞای‬ ‫تخؾ‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ٝ‫زدضی‬ ‫خض‬.ٓ‫٘أی‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫یه‬ ‫سا‬ ‫وٛچه‬ ‫ای‬ ٖ‫صتا‬ ‫دس‬Verilog( ‫ٌشا‬ ‫ؿی‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫ٔا٘ٙذ‬ ٖ‫زٛا‬ ‫ٔی‬Java , C++ , C# …‫ٔشازثی‬ ّٝ‫ػّؼ‬ ‫ػاخساس‬ )2 ‫ٞا‬ َٛ‫ٔاخ‬ ‫اص‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ّٝ‫تٛػی‬ ‫سا‬ .‫وشد‬ ‫ػاصی‬ ٜ‫خیاد‬ .‫وٙذ‬ ‫ٔی‬ ٖ‫خٟٙا‬ ‫سا‬ ٖ‫آ‬ ٖٚ‫دس‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫أا‬ ‫وٙذ‬ ‫ٔی‬ ٓٞ‫فشا‬ ‫سا‬ ‫تاالزش‬ ‫ٞای‬ َٛ‫ٔاخ‬ ‫٘یاص‬ ‫ٔٛسد‬ ‫ػّٕىشد‬ َٛ‫ٔاخ‬ ًَِ‫ًو‬3 ‫اػ‬ َٛ‫ٔاخ‬ ٗ‫ای‬ ‫اص‬ ٝ‫و‬ ‫ٍٞٙأی‬ ،‫ٔیىٙذ‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫سا‬ ‫ٚالؼی‬ ‫ػٙلش‬ ‫یه‬ ‫اص‬ ‫اٍِٛیی‬ َٛ‫ٔاخ‬ ‫یه‬‫ؿٛد‬ ‫ٔی‬ ٜ‫سفاد‬ Verilogٗ‫ای‬ ‫اص‬ ٕٝ٘ٛ٘ ‫یه‬ٍِٛ‫ا‬‫سا‬‫ؿٕا‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫ٞای‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ٚ ‫ػاخر‬ ‫خٛاٞذ‬ ‫خٛدواس‬ ‫تلٛسذ‬ ‫یه‬ ‫ؿٕا‬ َ‫ٔثا‬ ‫تشای‬ .‫تاؿذ‬ ‫ٔی‬ ‫اكّی‬ َٛ‫ٔاخ‬ ‫اص‬ ‫ودی‬ ‫یه‬ ‫دسٚالغ‬ ٕٝ٘ٛ٘ ٗ‫ای‬ .‫وشد‬ ‫خٛاٞذ‬ ُ‫ٔسل‬ ٖ‫آ‬ ٝ‫ت‬ ‫سا‬ ‫ثثاذ‬ َٛ‫ٔاخ‬8‫تخ‬ ‫دس‬ َٛ‫ٔاخ‬ ٗ‫ای‬ ‫اص‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ‫تا‬ ٚ ‫ٔیىٙیذ‬ ‫ًشاحی‬ ‫تیسی‬‫ثثاذ‬ ٗ‫چٙذی‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ؾ‬ ‫واس‬ ٗ‫ای‬ ٝ‫ت‬ .‫وشد‬ ‫خٛاٞیذ‬ ‫ػاصی‬ ٜ‫خیاد‬ ‫سا‬ ‫٘ٛع‬ ٗ‫ٕٞی‬ ‫اص‬ ‫دیٍش‬Instantiation‫سا‬ ‫ػٙلش‬ ٗ‫ای‬ ٚ ‫ػاصی‬ ٕٝ٘ٛ٘ ‫یا‬ Instance.‫٘أٙذ‬ ‫ٔی‬ ٕٝ٘ٛ٘ ‫یا‬ ُ‫ؿى‬8.ٖ‫آ‬ ٖٚ‫دس‬ ‫ٞای‬ َٛ‫ٔاخ‬ ٚ َٛ‫ٔاخ‬ ‫یه‬ ‫اص‬ ‫ٕ٘ایی‬ 1 Module 2 Hierarchy Structure 3 Instance
  • 13. ٝ‫كفح‬13 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 5)‫قواعد‬‫زبان‬ ‫ای‬ ‫پایه‬ ‫و‬ ‫دستوری‬Verilog ٖ‫صتا‬ ‫دػسٛس‬ ٚ ‫لٛاػذ‬Verilogٖ‫صتا‬ ٝ‫ت‬ ‫صیادی‬ ‫ؿثاٞر‬Cٖ‫صتا‬ .‫داسد‬Verilog‫دس‬ ‫اخسلاكی‬ ‫حشٚف‬ ‫زٕأی‬ .‫تاؿذ‬ ‫ٔی‬ ‫حؼاع‬ ‫تضسي‬ ٚ ‫وٛچه‬ ‫حشٚف‬ ٝ‫ت‬ ‫٘ؼثر‬ ٖ‫صتا‬ ‫ٔا٘ٙذ‬ ٖ‫صتا‬ ٗ‫ای‬C.‫ؿٛ٘ذ‬ ‫ٔی‬ ٝ‫٘ٛؿس‬ ‫وٛچه‬ ‫حشف‬ ‫تا‬‫دس‬Verilog‫ٔا٘ٙذ‬ ٓٞCٜ‫داد‬ ٚ ‫(دػسٛس‬ ٗ‫زٛو‬ ‫ٞش‬ ‫اص‬ ‫خغ‬‫ػالٔر‬ ‫اص‬ ‫تایؼر‬ ‫ٔی‬ );(Semi colleen) .‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ‫خالی‬ ِ‫فاصل‬ ٖ‫صتا‬ ‫دس‬Verilog‫یا‬ ٚ ٝ‫سؿس‬ ‫یه‬ ٖٚ‫دس‬ ّٝ‫فاك‬ ٝ‫و‬ ‫ٔٛاسدی‬ ‫دس‬ ‫فمي‬ .‫ؿٛد‬ ‫ٕ٘ی‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫دس‬ ‫ػٙسض‬ ‫اتضاس‬ ‫زٛػي‬ ‫ػٙسض‬ ْ‫ٍٞٙا‬ ‫دس‬ ‫خاِی‬ ّٝ‫فاك‬ٜ‫وٙٙذ‬ ‫خذا‬ ٖ‫ػٙٛا‬ ٝ‫ت‬ ‫تاؿذ‬ ٜ‫ؿذ‬ ٜ‫اػسفاد‬ )‫ٞا‬ ٜ‫داد‬ ٚ ‫(دػسٛساذ‬ ‫ٞا‬ ٗ‫زٛو‬‫وشوسش‬ .‫ؿذ‬ ‫خٛاٞذ‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫دس‬ ‫دس‬‫د‬ ‫خاِی‬ ّٝ‫فاك‬ ٖ‫ػٙٛا‬ ٝ‫ت‬ ‫صیش‬ ‫ٞای‬: ‫ؿذ‬ ‫خٛاٞٙذ‬ ٝ‫ٌشفس‬ ‫٘ظش‬ ‫س‬ Blank Space ( s ) , Tab ( t ) , Carriage return ( r ), New line (n) ‫تَضیح‬‫ات‬ ٖ‫صتا‬ ‫دس‬ ‫٘ٛیؼی‬ ‫زٛهیح‬ ٜٛ‫٘ح‬Verilogٖ‫صتا‬ ٝ‫ت‬ ٝ‫ٔـات‬ ‫وأال‬C. ‫تاؿذ‬ ‫ٔی‬ ‫خٌی‬ ‫زه‬ ‫زٛهیح‬ : // Comments ‫واسوسش‬ ( ‫خذیذ‬ ‫خي‬ ‫یه‬ ‫ؿشٚع‬ ‫یه‬ ‫تا‬ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ‫ؿشٚع‬ // ‫ػالٔر‬ ‫تا‬ ‫خٌی‬ ‫زه‬ ‫زٛهیحاذ‬Carriage Return.‫یاتٙذ‬ ‫ٔی‬ ًٕٝ‫خا‬ ) ‫خٌی‬ ‫چٙذ‬ ‫زٛهیح‬ : /* Multi Line Comments */ ‫تا‬ ‫خٌی‬ ‫چٙذ‬ ‫زٛهیحاذ‬/*‫تا‬ ٚ ‫ؿشٚع‬*/.‫تاؿذ‬ ‫خي‬ ٗ‫چٙذی‬ ‫داسای‬ ‫زٛا٘ذ‬ ‫ٔی‬ ‫زٛهیحاذ‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛ٘ذ‬ ‫ٔی‬ ْ‫زٕا‬
  • 14. ٝ‫كفح‬14‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬1:‫ا‬ ‫دس‬َ‫ٔثا‬ ٗ‫ی‬‫زٛهیح‬ ٜٛ‫٘ح‬ ‫تا‬‫ٌزا‬ٖ‫صتا‬ ‫لٛاػذ‬ ‫اص‬ ‫اػر‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ‫صسد‬ ٝٙ‫صٔی‬ ‫خغ‬ ‫تا‬ ٝ‫و‬ ‫ػثاسزی‬ ،‫ؿٛد‬ ‫ٔی‬ ‫آؿٙا‬ ٜ‫اؿسثا‬ ٚ ‫كحیح‬ ‫سی‬Verilog .‫وٙذ‬ ‫ٕ٘ی‬ ‫خیشٚی‬ ٌ ‫زٛهیح‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ز‬.‫ؿذ‬ ‫خٛاٞیذ‬ ‫آؿٙا‬ ‫خٌی‬ ‫چٙذ‬ ‫اسی‬ /* 1-bit adder , Example of Multi Line Comment In Verilog The Comment Starts with /* And End With next Token You see */ module adder( a, b, ci, sum, // Verilog will Ignore White Spaces co // So You Can Define All of Your Variables in One Or In Separated Lines ); // The next line represent Wrong Single Line Commenting, this line will generate Verilog Syntax Error During Synthesis. // Input Ports input a; input b; input ci; // Output Ports output sum; output co; // Data Types wire a; // After a token like C you must put wire b; wire ci; wire sum; wire co; ‫اص‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫زشویثی‬ ‫تلٛسذ‬ ٚ ٝ٘‫خذاٌا‬ ‫خٌٛى‬ ‫دس‬ ‫یا‬ ٚ ٓٞ ‫خـر‬ ‫تلٛسذ‬ ٚ ‫خي‬ ‫یه‬ ‫دس‬ ‫سا‬ ‫ٞا‬ ‫ٔسغیش‬ ‫زٕأی‬ ٖ‫زٛا‬ ‫ٔی‬ ،‫ؿٛد‬ ‫ٔی‬ ٜ‫دیذ‬ ٝ‫و‬ ‫ٕٞاٌ٘ٛس‬ٖ‫صتا‬ ‫٘ظش‬ Verilogٗ‫ای‬‫دس‬ ٝ‫و‬ ‫ٞایی‬ ‫ٔسغیش‬ ‫اػر‬ ‫تٟسش‬ ‫ٚاحذ‬ ‫اٍِٛی‬ ‫یه‬ ‫اص‬ ‫خیشٚی‬ ‫تشای‬ ‫أا‬ .‫٘ذاس٘ذ‬ ٓٞ ‫تا‬ ‫فشلی‬ ‫ٞیچ‬ ٚ‫د‬‫ٔسغیش‬ ْ‫زٕا‬ ‫ٔثال‬ ( ‫ٌیش٘ذ‬ ‫ٔی‬ ‫لشاس‬ ‫تٙذی‬ ٝ‫دػس‬ ‫یه‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫خي‬ ‫یه‬ ‫دس‬ ‫سا‬ ) ... ٚ ‫ثثازی‬ ‫ٞای‬ ‫ٔسغیش‬ ْ‫زٕا‬ ‫ٚیا‬ ، ‫ٚسٚدی‬ ‫ٞای‬
  • 15. ٝ‫كفح‬15 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫ّا‬ ُ‫ٍاش‬ ‫کلید‬1 ‫در‬Verilog ‫دس‬Verilog( ‫ٞا‬ ٜ‫ٚاط‬ ‫وّیذ‬ ‫زٕأی‬Keywords)‫تاؿٙذ‬ ‫ٔی‬ ‫وٛچه‬ ‫حشٚف‬ ‫تلٛسذ‬ٝ‫و‬ ‫آ٘دایی‬ ‫اص‬ ،Verilog‫اػر‬ ‫تضسي‬ ٚ ‫وٛچه‬ ‫حشٚف‬ ٝ‫ت‬ ‫حؼاع‬ ٖ‫صتا‬ ‫یه‬ .‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ... ٚ ‫ٞا‬ ْ‫٘ا‬ ، ‫ٞا‬ ‫ٔسغیش‬ ٖ‫تیا‬ ‫تشای‬ ‫تضسي‬ ‫حشٚف‬ ‫تلٛسذ‬ ‫ٞا‬ ٜ‫ٚاط‬ ‫وّیذ‬ ‫اص‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ِزا‬ ٖ‫صتا‬ ٗ‫ای‬ ‫دس‬ ‫اخسلاسی‬ ‫ٞای‬ ْ‫٘ا‬ ٝ‫ت‬Unique Name‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬. ‫بود‬ ‫بسرگ‬ ‫حروف‬ ‫صورت‬ ‫در‬ ‫حتی‬ ‫ها‬ ‫واشه‬ ‫کلید‬ ‫از‬ ‫شود‬ ‫می‬ ‫توصیه‬ : ‫نکته‬‫ن‬‫عنوا‬ ‫به‬‫ن‬Unique Name. ‫نکنید‬ ‫استفاده‬ َ‫ٔثا‬2:ٖ‫صتا‬ ‫ٞای‬ ٜ‫ٚاط‬ ‫وّیذ‬ ‫ا٘ذ‬ ٜ‫ؿذ‬ ٝ‫٘ٛؿس‬ ‫آتی‬ ً٘‫س‬ ٝ‫ت‬ ٝ‫و‬ ‫وّٕازی‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬Verilog‫تاؿٙذ‬ ‫ٔی‬.ً٘‫س‬ ‫ٔـىی‬ ‫وّٕاذ‬ ‫أا‬Unique Name‫ٔی‬ .‫تاؿٙذ‬ Reg // a Verilog Keyword Output // a Verilog Keyword Reg // a Unique Name ( Not Keyword ) REG // a Unique Name ( Not Keyword ) ‫ّا‬ ‫هعرف‬2 ‫در‬Verilog ( ‫ٔؼشف‬ ٖ‫صتا‬ ٗ‫ای‬ ‫دس‬ ‫اؿیا‬ ‫ٞای‬ ْ‫٘ا‬ ٝ‫ت‬Identifier‫ٞا‬ ‫ثثاذ‬ ْ‫٘ا‬ ،‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬ )ٚ.‫ٞؼسٙذ‬ ‫٘ٛع‬ ٗ‫ای‬ ‫اص‬ ‫ٍٕٞی‬ ‫ٞا‬ َٛ‫ٔاخ‬ ‫ػالٔر‬ ‫یا‬ ٚ ) ‫ٞا‬ ٝ٘‫٘ـا‬ ٚ ‫اػذاد‬ ٝ٘ ٚ ‫اِفثا‬ ‫حشٚف‬ ‫فمي‬ ‫وٙیذ‬ ٝ‫زٛخ‬ ( ‫اِفثا‬ ‫حشٚف‬ ‫اص‬ ‫یىی‬ ‫تا‬ ‫تایؼر‬ ‫ٔی‬ ‫ٞا‬ ‫ٔؼشف‬_(Underscore)‫ؿشٚع‬ .‫ؿٛ٘ذ‬ ( ‫اػذاد‬ ، ) ‫تضسي‬ ٚ ‫وٛچه‬ ( ‫اِفثا‬ ‫حشٚف‬ ‫حاٚی‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫ٞا‬ ‫ٔؼشف‬0‫زا‬9( ‫دالس‬ ‫ػالٔر‬ ٚ )$.‫تاؿٙذ‬ ) 1 Keyword 2 Identifier
  • 16. ٝ‫كفح‬16‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬3:ٔ ‫كحیح‬ ‫ٌزاسی‬ ْ‫٘ا‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ٚ ‫تاؿٙذ‬ ‫ٕ٘ی‬ ‫كحیح‬ ‫ا٘ذ‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ً٘‫س‬ ‫صسد‬ ٝٙ‫صٔی‬ ‫خغ‬ ‫تا‬ ٝ‫و‬ ‫ٞایی‬ ‫ٔؼشف‬ ، ‫دیذ‬ ٓ‫خٛاٞی‬ ‫سا‬ ‫ٞا‬ ‫ؼشف‬ ٖ‫صتا‬ ‫لٛاػذ‬Verilog.‫وٙٙذ‬ ‫ٕ٘ی‬ ‫سػایر‬ ‫سا‬ // Valid Identifiers clock_input counterEnable Carray$Output i386 A _TempRegister // Wrong Identifiers $i386 2ndClockSource Colck#2 ٖ‫صتا‬ ‫دس‬Verilog‫تلٛسذ‬ ‫سا‬ ‫ٞا‬ ‫ٔؼشف‬ ٖ‫زٛا‬ ‫ٔی‬ ٗ‫چٙی‬ ٓٞEscapedْ‫٘ا‬ ‫خٟر‬ ‫چاج‬ ُ‫لات‬ ‫ٞای‬ ‫وشوسش‬ ٕٝٞ ‫اص‬ ‫زٛا٘یذ‬ ‫ٔی‬ ‫ؿٕا‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬ ،‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫اِفثا‬ ‫حشٚف‬ ‫زٕأی‬ ‫اص‬ ‫ػثاسزٙذ‬ ‫ٞا‬ ‫وشوسش‬ ٗ‫ای‬ .‫وٙیذ‬ ٜ‫اػسفاد‬ ‫ٔؼشف‬ ‫ٌزاسی‬‫اٍّ٘یؼی‬َ‫ٍٞضدػیٕا‬ ‫وذ‬ ‫اص‬ ‫اػىی‬ ‫ٞای‬ ‫وشوسش‬ ( ‫ٞا‬ ٝ٘‫٘ـا‬ ٚ ‫اػذاد‬ ،0x21‫زا‬0x7E.) ّ‫اػ‬ ‫ته‬ ‫وشوسش‬ ‫تا‬ ‫ٔؼشف‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬( ‫ؾ‬‫ٔؼشف‬ ‫ؿشٚع‬ ‫وشوسش‬ ‫دیٍش‬ ‫ػثاسزی‬ ٝ‫ت‬ .‫داسد‬ ٝٔ‫ادا‬ ‫ؿٛد‬ ٜ‫ٔـاٞذ‬ ّٝ‫فاك‬ ٗ‫اِٚی‬ ٝ‫و‬ ‫صٔا٘ی‬ ‫زا‬ ٚ ٜ‫ؿذ‬ ‫ؿشٚع‬ ) .‫تاؿذ‬ ‫ٔی‬ ّٝ‫فاك‬ ٖ‫آ‬ ْ‫ازٕا‬ ‫وشوسش‬ ٚ ‫اػّؾ‬ ‫ته‬ َ‫ٔثا‬4:.‫تاؿٙذ‬ ‫ٔی‬ ‫كحیح‬ ‫صیش‬ ‫ٞای‬ ‫ٔؼشف‬ ‫زٕأی‬ // Valid Identifiers 486_up Q! 1,2,3 reset* clock22 !Enable ‫اعداد‬‫صحیح‬‫در‬Verilog ٖ‫صتا‬ ‫دس‬Verilog‫دس‬ ‫ٔٙفی‬ ‫اػذاد‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫تایٙشی‬ ‫یا‬ ٚ َ‫اٚوسا‬ ، َ‫دػیٕا‬ ‫ٍٞض‬ ، َ‫دػیٕا‬ ‫ٞای‬ ‫فشٔر‬ ٝ‫ت‬ ‫سا‬ ‫اػذاد‬ ٖ‫زٛا‬ ‫ٔی‬Verilogٕٓ‫ٔس‬ ‫تلٛسذ‬2‫زؼشیف‬ ‫ػالٔر‬ ‫اص‬ ٖ‫زٛا‬ ‫ٔی‬ ‫اػذاد‬ ‫زؼشیف‬ ‫دس‬ .‫ؿذ‬ ‫خٛاٞٙذ‬_(Under Score)،‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ‫اػذاد‬ ‫ػاصی‬ ‫خذا‬ ‫تشای‬Verilogٛ‫تل‬‫اػذاد‬ ‫اص‬ ‫سا‬ ‫ػالٔر‬ ٗ‫ای‬ ‫خٛدواس‬ ‫سذ‬ .) ‫وشد‬ ٜ‫اػسفاد‬ ‫ػذد‬ ‫اتسذای‬ ‫دس‬ ٖ‫زٛا‬ ‫ٕ٘ی‬ ‫ػالٔر‬ ٗ‫ای‬ ‫اص‬ ٝ‫و‬ ‫داؿر‬ ‫زٛج‬ ‫تایذ‬ ( .‫وٙذ‬ ‫ٔی‬ ‫حزف‬
  • 17. ٝ‫كفح‬17 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog Verilog: ‫وٙذ‬ ‫ٔی‬ ٓٞ‫فشا‬ ‫سا‬ ‫صیش‬ ‫ٞای‬ ‫كٛسذ‬ ٝ‫ت‬ ‫اػذاد‬ ‫زؼشیف‬ ٖ‫أىا‬ ‫خیـفشم‬ ‫كٛسذ‬ ٝ‫ت‬ ٜ‫ا٘ذاص‬ ‫تی‬ ‫اػذاد‬ ( ٜ‫ا٘ذاص‬ ‫تی‬ ٚ ٜ‫ا٘ذاص‬ ‫داسای‬ ‫اػذاد‬32‫ٔی‬ ‫زؼشیف‬ ‫تیسی‬.) ‫ؿٛ٘ذ‬ ‫ٍٞض‬ ْ‫اسلا‬ ، ‫ؿٛ٘ذ‬ ‫ٔی‬ ٜ‫داد‬ ‫ٕ٘ایؾ‬ ‫وٛچه‬ ‫حشف‬ ‫تا‬ ‫ٔثٙا‬ ‫(٘ـاٍ٘ش‬ .َ‫دػیٕا‬ ‫ٍٞض‬ ٚ َ‫دػیٕا‬ ، َ‫اٚوسا‬ ، ‫تایٙشی‬ ‫٘ظیش‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ٔثٙا‬ ‫دس‬ ‫اػذاد‬ ).‫ؿٛ٘ذ‬ ‫ٔی‬ ٜ‫داد‬ ‫ٕ٘ایؾ‬ ‫وٛچه‬ ٚ ‫تضسي‬ ‫حشٚف‬ ‫تا‬ ‫دس‬ ‫اػذاد‬ ‫وّی‬ ‫فشٔر‬Verilog: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬ <Size>'<Radix><Value> ٜ‫ا٘ذاص‬=Size‫ٔثٙا‬ ،=Radix‫ٔمذاس‬ ،=Value ٜ‫تٛد‬ ‫ٔداص‬ ‫اػذاد‬ ‫ٔمذاس‬ ٚ ‫ٔثٙا‬ ، ٜ‫ا٘ذاص‬ ‫ٞای‬ ‫٘ـاٍ٘ش‬ ٗ‫تی‬ ّٝ‫فاك‬ ٖ‫افضٚد‬Verilog.‫وٙذ‬ ‫ٔی‬ ‫حزف‬ ‫سا‬ ‫ٞا‬ ّٝ‫فاك‬ ٗ‫ای‬ ‫خٛدواس‬ ‫تٌٛس‬ َ‫ٔثا‬5:.‫ؿذ‬ ‫خٛاٞیذ‬ ‫آؿٙا‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ٕ٘ایؾ‬ ‫ا٘ٛاع‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ ‫نوایش‬ ‫نحوه‬‫والعی‬ ‫شده‬ ‫ذخیره‬ ‫همدار‬‫توضیحات‬ 110000000000000000000000000000000unsized 32 bits 8'hAA10101010sized hex 6'b10_0011100011sized binary 'hF11110000000000000000000000000000unsized 32 bit hex 8'F1111100018bit sized hex 16'FF F0111111111111000016bit with separated digits 16'FF_F0111111111111000016bit with separated digits
  • 18. ٝ‫كفح‬18‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫دس‬Verilog.‫یاتذ‬ ‫ٔی‬ ٝٔ‫ادا‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ٜ‫ا٘ذاص‬ ٝ‫زٛخ‬ ‫تا‬ ٚ ‫ؿشٚع‬ ‫ساػر‬ ‫ػٕر‬ ‫اص‬ ‫اػذاد‬ .‫ٌشد٘ذ‬ ‫ٔی‬ ‫حزف‬ ‫چح‬ ‫ػٕر‬ ٝ‫اهاف‬ ‫ٔمادیش‬ ، ‫تاؿذ‬ ‫ٔمذاس‬ ‫اص‬ ‫وٛچىسش‬ ٜ‫ا٘ذاص‬ ‫اٌش‬ ٗ‫آخشی‬ ‫اٌش‬ .‫ؿذ‬ ‫خٛاٞٙذ‬ ‫خش‬ ٜ‫ؿذ‬ ٜ‫خٛا٘ذ‬ ‫چح‬ ‫ػٕر‬ ‫تیر‬ ٗ‫آخشی‬ ٝ‫ت‬ ٝ‫زٛخ‬ ‫تا‬ ‫چح‬ ‫ػٕر‬ ٜ‫ٔا٘ذ‬ ‫تالی‬ ‫ٔمادیش‬ ، ‫تاؿذ‬ ‫ٔمذاس‬ ‫اص‬ ‫تضسٌسش‬ ٜ‫ا٘ذاص‬ ‫اٌش‬ ‫تیر‬0‫یا‬ ٚ1‫تا‬ ‫تاؿذ‬0‫تیر‬ ٗ‫اخشی‬ ‫اٌش‬ ،Z‫یا‬ ٚX‫تا‬ ‫زشزیة‬ ٝ‫ت‬ ‫تاؿذ‬ZٚX.‫ؿذ‬ ‫خٛاٞذ‬ ‫خش‬ َ‫ٔثا‬6: ‫نوایش‬ ‫نحوه‬‫والعی‬ ‫شده‬ ‫ذخیره‬ ‫همدار‬‫توضیحات‬ 6'hCA001010Truncated , not 11001010 6'hA001010Filled with two 0 on left 16'bZZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z ZFiled with 16 Z 8'bxX X X X X X X XFilled with 8 X ‫در‬ ‫حقیقی‬ ‫اعداد‬Verilog ٖ‫صتا‬Verilog.‫تاؿذ‬ ‫ٔی‬ ‫داسا‬ ‫سا‬ ‫ثاتر‬ ٚ ‫ٔسغیش‬ ‫تلٛسذ‬ ‫حمیمی‬ ‫اػذاد‬ ‫اص‬ ‫خـسیثا٘ی‬ ‫لاتّیر‬Verilogُ‫لات‬ ‫كحیح‬ ‫ػذد‬ ٝ‫ت‬ ٚ ٜ‫وشد‬ ‫سٚ٘ذ‬ ‫سا‬ ‫اػذاد‬ ٗ‫ای‬ ‫خٛدواس‬ ‫ًٛس‬ ٝ‫ت‬ ُٔ‫ؿا‬ ‫زٛا٘ٙذ‬ ‫ٕ٘ی‬ ‫حمیك‬ ‫اػذاد‬ .‫وٙذ‬ ‫ٔی‬ ُ‫زثذی‬ ٝ‫حافظ‬ ‫دس‬ ‫ػاصی‬ ٜ‫رخیش‬Z‫یا‬X‫ز‬ ‫ػّٕی‬ ‫یا‬ ٚ َ‫دػیٕا‬ ‫ٕ٘ایؾ‬ ‫تا‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫حمیمی‬ ‫اػذاد‬ .‫تاؿٙذ‬.‫ؿٛ٘ذ‬ ‫ؼشیف‬ <Value>.<Value> <Mantissa>E<Exponent> Mantissa = ‫اػـاسی‬ ٓ‫سل‬ ، Exponent = ٖ‫زٛا‬
  • 19. ٝ‫كفح‬19 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬7:.‫تاؿٙذ‬ ‫ٔی‬ ‫حمیمی‬ ‫اػذاد‬ ‫كحیح‬ ‫ٕ٘ایؾ‬ ٜٛ‫٘ح‬ ‫ٍٕٞی‬ ‫صیش‬ ‫ٞای‬ ‫ػثاسذ‬ // Valid Real Numbers 1.2 0.6 3.142673 3.6E8 2.7461E6 ‫در‬ ‫عالهت‬ ‫بی‬ ٍ ‫دار‬ ‫عالهت‬ ‫اعداد‬Verilog ‫دس‬Verilog‫ػالٔر‬ ٝ‫و‬ ‫ػذدی‬ ‫ٞش‬ .ٓ‫وٙی‬ ‫ٔـخق‬ ‫سا‬ ‫اػذاد‬ ٖ‫٘ثٛد‬ ‫یا‬ ٚ ٖ‫تٛد‬ ‫داس‬ ‫ػالٔر‬ ٓ‫زٛا٘ی‬ ‫ٕ٘ی‬ ‫دیٍش‬ ‫ٞای‬ ٖ‫صتا‬ ‫ٔا٘ٙذ‬–‫دس‬ ٚ ‫ٔٙفی‬ ‫ؿٛد‬ ٜ‫آٚسد‬ ٖ‫آ‬ ‫اص‬ ُ‫لث‬ .‫تٛد‬ ‫خٛاٞذ‬ ‫ٔثثر‬ ‫كٛسذ‬ ٗ‫ای‬ ‫غیش‬Verilog.‫وٙذ‬ ‫ٔی‬ ٜ‫رخیش‬ ٚ‫د‬ ٕٓ‫ٔس‬ ‫تلٛسذ‬ ‫سا‬ ‫ٔٙفی‬ ‫اػذاد‬ ‫پَرت‬1 ‫در‬ ‫ّا‬Verilog ٔ ‫اسزثاى‬ ‫اتضاس‬ ‫ٚالغ‬ ‫دس‬ ‫ٞا‬ ‫خٛسذ‬َٛ‫ٔاخ‬ ْ‫زٕا‬ .‫تاؿذ‬ ‫خشٚخی‬ ‫زؼذادی‬ ٚ ‫ٚسٚدی‬ ‫زؼذادی‬ ‫داسای‬ ‫زٛا٘ذ‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫ٞش‬ .‫تاؿٙذ‬ ‫ٔی‬ ‫یىذیٍش‬ ٚ ٖٚ‫تیش‬ ‫د٘یای‬ ‫تا‬ ‫ٞا‬ َٛ‫اخ‬ .‫تاؿٙذ‬ ‫خٛسذ‬ ‫داسای‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ) ‫ٔشازة‬ ّٝ‫ػّؼ‬ ‫دس‬ َٛ‫ٔاخ‬ ٗ‫تاالزشی‬ ( ‫ٔادس‬ َٛ‫ٔاخ‬ ‫تدض‬ ‫ٞا‬ ٕٛ٘ ‫زؼشیف‬ ‫ٚسٚدی/خشٚخی‬ ‫یا‬ ٚ ‫خشٚخی‬ ، ‫ٚسٚدی‬ ‫تلٛسذ‬ ٖ‫زٛا‬ ‫ٔی‬ ‫سا‬ ‫ٞا‬ ‫خٛسذ‬: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬ ‫خٛسذ‬ ‫زؼشیف‬ ‫وّی‬ ‫لاِة‬ .‫د‬ input [range_vals:range_var] list_of_identifiers; output [range_vals:range_var] list_of_identifiers; inout [range_vals:range_var] list_of_identifiers; ٖ‫صتا‬ ‫دس‬ ‫سٚؽ‬ ٚ‫د‬ ٖٚ‫تیش‬ ‫د٘یای‬ ‫تا‬ ‫ٞا‬ ‫خٛسذ‬ ‫اسزثاى‬ ‫تشای‬Verilog: ‫داسد‬ ‫ٚخٛد‬‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ٚ ‫زشزیثی‬ ‫سٚؽ‬ ٜ‫آٚسد‬ ‫خٛسذ‬ ‫زؼشیف‬ ‫دس‬ ٝ‫و‬ ‫زشزیثی‬ ٖ‫ٕٞا‬ ٝ‫ت‬ ‫دلیما‬ ‫سا‬ ‫ٞا‬ ‫خٛسذ‬ ٝ‫ت‬ َ‫ازلا‬ ‫ٞای‬ ‫ٔسغیش‬ ‫تایؼر‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫اص‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫زشزیثی‬ ‫سٚؽ‬ ‫دس‬‫اػر‬ ٜ‫ؿذ‬ ‫س‬ ٖ‫آ‬ ‫خای‬ ‫اػر‬ ‫وافی‬ ‫٘ثاؿذ‬ ُ‫ٔسل‬ ‫خایی‬ ٝ‫ت‬ ‫خشٚخی‬ ‫خٛسذ‬ ‫یه‬ ٓ‫تخٛاٞی‬ ‫اٌش‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬ .ٓ‫تیاٚسی‬.ٓ‫تٍزاسی‬ ‫خاِی‬ ‫ا‬ 1 Port
  • 20. ٝ‫كفح‬20‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ٞ ‫خٛسذ‬ ٚ ‫ٞا‬ َٛ‫ٔاخ‬ ‫زؼذاد‬ ٝ‫و‬ ‫صٔا٘ی‬ ‫ٔؼٕٛال‬ . ٓ‫ٕ٘ایی‬ ‫ٔی‬ ٜ‫اػسفاد‬ ‫اػر‬ ٜ‫ؿذ‬ ٜ‫آٚسد‬ َٛ‫ٔاخ‬ ‫زؼشیف‬ ‫دس‬ ٝ‫و‬ ‫ٞا‬ ‫خٛسذ‬ ‫اػأی‬ ‫اص‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ‫دس‬‫افضایؾ‬ ‫آٟ٘ا‬ ‫ای‬ ‫ت‬ ‫خشٚخی‬ ‫خٛسذ‬ ‫یه‬ ٓ‫تخٛاٞی‬ ‫اٌش‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬ .‫ؿٛد‬ ‫ٔی‬ ٜ‫اػسفاد‬ ‫ؿٛد‬ ‫ٔی‬ ‫دؿٛاس‬ ‫آٟ٘ا‬ ‫زشزیة‬ ٖ‫ػدشد‬ ‫تخاًش‬ ٚ ‫یاتذ‬ ‫ٔی‬ٖ‫آ‬ ْ‫٘ا‬ ‫اػر‬ ‫وافی‬ ‫٘ثاؿذ‬ ُ‫ٔسل‬ ‫خایی‬ ٝ .ٓ‫٘یاٚسی‬ ‫سا‬ : ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ‫اص‬ ٜ‫اػسفاد‬ ‫لاِة‬ .port_name( external_signal_name) َ‫ٔثا‬8:‫دس‬ . ‫اػر‬ ٜ‫ؿذ‬ ٜ‫آٚسد‬ ‫ٞا‬ ‫خٛسذ‬ ‫زؼشیف‬ ‫حاِر‬ ‫چٙذ‬ َ‫ٔثا‬ ٗ‫ای‬ َٚ‫ا‬ ‫تخؾ‬ ‫دس‬ٚ‫د‬‫سٚؽ‬ ٚ‫د‬ ْٚ‫د‬ ‫تخؾ‬.‫اػر‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫ٕ٘ایؾ‬ ‫دٞی‬ ‫اسزثاى‬‫خٕغ‬ ٜ‫وٙٙذ‬‫ٞای‬1‫زا‬6(adder1‫زا‬adder6َٛ‫ٔاخ‬ ‫اص‬ ٕٝ٘ٛ٘ ‫یه‬ ‫ٍٕٞی‬ )adder‫ٞای‬ ‫خٛسذ‬ ‫فمي‬ ُ‫لث‬ ‫كفحاذ‬ ‫دس‬ ( ‫تاؿٙذ‬ ‫ٔی‬ ٓ‫تٛدی‬ ٜ‫وشد‬ ‫زؼشیف‬ ‫لثال‬ ٝ‫و‬ .) ٖ‫آ‬ ‫داخّی‬ ‫اخضای‬ ٝ٘ ‫ا٘ذ‬ ٜ‫ؿذ‬ ‫زؼشیف‬ َٛ‫ٔاخ‬ ٗ‫ای‬ ‫ٞای‬ ٜ‫وٙٙذ‬ ‫خٕغ‬1ٚ4،2ٚ5،3ٚ6‫یىؼا٘ی‬ ‫ٞای‬ ‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ‫داسای‬‫ٞؼسٙذ‬‫آٟ٘ا‬ ‫فشق‬ ‫زٟٙا‬ ،‫آٟ٘اػر‬ ‫اسزثاى‬ ‫سٚؽ‬ ‫دس‬.‫ٞای‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫دس‬1‫زا‬3‫اص‬ ‫ٞای‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫دس‬ ٚ ‫زشزیثی‬ ‫سٚؽ‬4‫زا‬6.‫اػر‬ ٜ‫ؿذ‬ ٜ‫اػسفاد‬ ‫ٌزاسی‬ ْ‫٘ا‬ ‫سٚؽ‬ ‫اص‬ input clk; // Clock input input [15:0] data_in; // 16bit Data input bus output [7:0] data_out; // 8bit Data output bus inout [15:0] data_bus // 16bit Bi-Directional data bus adder1 adder( data_a, data_b, carry_i, summation, carry_o); adder2 adder( data_a, data_b, carry_i, summation); adder3 adder( data_a, data_b, carry_i, , carry_o); adder4 adder( .a(data_a), .b(data_b), .sum(summation), .ci(carry_i), .co(carry_o)); adder5 adder( .a(data_a), .b(data_b), .sum(summation), .ci(carry_i)); adder6 adder( .a(data_a), .b(data_b), .ci(carry_i), .co(carry_o));
  • 21. ٝ‫كفح‬21 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫در‬ ‫ّا‬ ُ‫داد‬ ‫اًَاع‬Verilog ‫دس‬ ٟٓٔ ٜ‫داد‬ ‫٘ٛع‬ ٚ‫د‬Verilog‫اص‬ ‫ػثاسزٙذ‬NetٚRegister.ٜ‫داد‬Net‫ٕ٘ایاٍ٘ش‬.‫اػر‬ ‫ٔخسّف‬ ‫ٞای‬ ‫لؼٕر‬ ٖ‫ٔیا‬ ‫ای‬ ٝ‫خای‬ ‫اسزثاى‬ٜ‫داد‬Register‫یه‬ ‫ٕ٘ایاٍ٘ش‬ ‫تشداسی‬ ‫یا‬ ٚ ‫زىی‬ ‫تلٛسذ‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫فٛق‬ ‫ٞای‬ ٜ‫داد‬ ‫اص‬ ‫یه‬ ‫ٞش‬ .‫اػر‬ ‫اًالػاذ‬ ‫ػاصی‬ ٜ‫رخیش‬ ‫تشای‬ ‫ٔسغیش‬1 .‫ؿٛ٘ذ‬ ‫زؼشیف‬ ( ‫٘ر‬Net).‫ٞؼسٙذ‬ ‫ٔذاساذ‬ ٖ‫ٔیا‬ ‫ٚالؼی‬ ‫ازلاالذ‬ ‫ٚالغ‬ ‫دس‬ ‫ٞا‬‫٘ر‬‫دس‬ ‫ٞا‬Verilogٜ‫ٚاط‬ ‫وّیذ‬ ‫زٛػي‬wireٖ‫آ‬ ‫خیـفشم‬ ‫ٔمذاس‬ ٚ ‫ؿٛد‬ ‫ٔی‬ ‫زؼشیف‬Z.‫تاؿذ‬ ‫ٔی‬ ‫دس‬Verilog‫ٞش‬ ‫تشای‬ ‫ٔمذاس‬ ‫چٟاس‬ ‫ٔدٕٛػا‬‫٘ر‬: ‫اص‬ ‫ػثاسزٙذ‬ ‫ٔمذاس‬ ‫چٟاس‬ ٗ‫ای‬ ، ‫داسد‬ ‫ٚخٛد‬ ‫همدار‬‫توضیح‬ 0‫ٌٔٙمی‬ ‫ػٌح‬0‫٘ادسػر‬ ‫ؿشى‬ ، 1‫ٌٔٙمی‬ ‫ػٌح‬1‫دسػر‬ ‫ؿشى‬ ، X‫ٔـخق‬ ‫٘ا‬ ‫ٔمذاس‬ Z) ‫ؿٙاٚس‬ ( ‫تاال‬ ‫أدذا٘غ‬ ‫حاِر‬ ( ‫ثثاذ‬Register)‫دس‬ ‫٘یض‬ ‫ٞا‬Verilogٜ‫ٚاط‬ ‫وّیذ‬ ‫زٛػي‬reg.‫ؿٛ٘ذ‬ ‫ٔی‬ ‫زؼشیف‬ ‫دس‬ ‫ؿٛد‬ ٜ‫داد‬ ‫آٟ٘ا‬ ٝ‫ت‬ ‫خذیذی‬ ‫ٔمذاس‬ ٝ‫و‬ ‫صٔا٘ی‬ ‫زا‬ ‫سا‬ ‫اػر‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫آٟ٘ا‬ ٝ‫ت‬ ٝ‫و‬ ‫ٔمذاسی‬ ٗ‫آخشی‬ ‫ٞا‬ ‫ثثاذ‬‫خٛد‬.‫وٙٙذ‬ ‫ٔی‬ ‫داسی‬ ٍٝ٘ ( ٝ‫حافظ‬ ٖ‫آ‬ ٝ‫ت‬ ‫كٛسذ‬ ٗ‫ای‬ ‫دس‬ ٝ‫و‬ ‫آٚسد‬ ‫تٛخٛد‬ ‫سا‬ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ ٝ‫آسای‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬Memory).‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬ ‫ٞای‬ ‫تّٛن‬ ‫دس‬ ‫ٔسغیش‬ ٖ‫ػٙٛا‬ ٝ‫ت‬ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ٝ‫یافس‬ ‫ػاخر‬(Procedural.‫ؿٛد‬ ‫ٔی‬ ٜ‫اػسفاد‬ ) 1 Vector
  • 22. ٝ‫كفح‬22‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫تّٛن‬ ‫یه‬ ٝ‫ت‬ ‫سا‬ ‫ٔمذاس‬ ‫حاٚی‬ َ‫ػیٍٙا‬ ‫یه‬ ‫تخٛاٞیذ‬ ‫اٌش‬ٝ‫یافس‬ ‫ػاخر‬‫اػس‬ ‫ثثاذ‬ ‫اص‬ ‫تایذ‬ ‫دٞیذ‬ َ‫ا٘سما‬.‫وٙیذ‬ ٜ‫فاد‬ ‫دس‬ ‫اكّی‬ ‫ثثاذ‬ ‫٘ٛع‬ ‫چٟاس‬Verilog: ‫اص‬ ‫ػثاسزٙذ‬ ‫ثبات‬ ‫نوع‬‫توضیح‬ reg‫ػالٔر‬ ٖٚ‫تذ‬ ‫ٔسغیش‬ integer‫داس‬‫ػالٔر‬ ‫ٔسغیش‬32‫تیسی‬ time‫كحیح‬ ‫ػذد‬64‫تیسی‬ real‫ٔواػف‬ ‫دلر‬ ‫تا‬ ‫ؿٙاٚس‬ ‫ٕٔیض‬ ‫ٔسغیش‬ ‫ّا‬ ِ‫رضت‬1 ‫در‬Verilog ‫ػالٔر‬ ٚ‫د‬ ٖٚ‫دس‬ ٝ‫و‬ ‫تاؿذ‬ ‫ٔی‬ ‫ٞا‬ ‫واساوسش‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ٝ‫سؿس‬ ‫یه‬"(double quotation‫دس‬ ‫داؿر‬ ٝ‫زٛخ‬ ‫تایذ‬ .‫ا٘ذ‬ ٝ‫ٌشفس‬ ‫لشاس‬ )Verilog‫تلٛسذ‬ ‫ٞا‬ ٝ‫سؿس‬ ‫دس‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫خٌی‬ ‫چٙذ‬ ‫تلٛسذ‬ ‫سا‬ ‫آٟ٘ا‬ ٖ‫زٛا‬ ‫ٕ٘ی‬ ٚ ‫تاؿٙذ‬ ‫ٔی‬ ‫خٌی‬ ‫زه‬Verilog‫وشوسش‬‫تلٛسذ‬ ‫ٞا‬8‫تیر‬( ‫اػىی‬ ‫تلٛسذ‬ ٚASCII‫زؼشیف‬ )‫ٔی‬‫ؿٛ٘ذ‬. ‫دس‬Verilog‫خالف‬ ‫تش‬C( ‫ا٘سٟایی‬ ‫وشوسش‬ ٝ‫ت‬ ‫٘یاصی‬Termination Character.‫تاؿذ‬ ‫ٕ٘ی‬ ٝ‫سؿس‬ ‫ا٘سٟای‬ ‫ٕ٘ایؾ‬ ‫تشای‬ )‫دس‬ ‫ٞا‬ ٝ‫سؿس‬Verilog‫ثثاذ‬ ‫یه‬ ‫دس‬ .‫تاؿذ‬ ‫تضسي‬ ‫ٚسٚدی‬ ٝ‫سؿس‬ ٜ‫ا٘ذاص‬ ٝ‫ت‬ ‫تایذ‬ ‫ثثاذ‬ ًَٛ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ٜ‫رخیش‬‫یه‬ ٝ‫و‬ ‫صٔا٘ی‬ٝ‫سؿس‬ ‫ثثاذ‬‫دس‬Verilog،‫تاؿذ‬ ٖ‫آ‬ ‫تا‬ ٜ‫ؿذ‬ ٜ‫داد‬ ‫ٔمذاس‬ ‫تضسٌسش‬Verilog .‫وشد‬ ‫خٛاٞذ‬ ‫خش‬ ‫كفش‬ ‫تا‬ ‫سا‬ ‫اهافی‬ ‫چح‬ ‫ػٕر‬ ‫ٞای‬ ‫تیر‬ ‫خٛدواس‬ ‫تٌٛس‬‫دس‬ ‫خاف‬ ‫ٞای‬ ‫وشوسش‬Verilog( ‫اػّؾ‬ ‫ته‬ ‫خیـٛ٘ذ‬ ‫تا‬ ٖ‫زٛا‬ ‫ٔی‬ ‫سا‬‫اص‬ ‫تشخی‬ ، ‫ٕ٘ٛد‬ ‫زؼشیف‬ ) : ‫اص‬ ‫ػثاسزٙذ‬ ‫ٞا‬ ‫وشوسش‬ ٗ‫ای‬ 1 Strings
  • 23. ٝ‫كفح‬23 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫کرکتر‬ ‫نوایش‬‫توضیح‬ n‫خذیذ‬ ‫خي‬ ‫وشوسش‬ t‫وشوسش‬‫زة‬ ‫اػّؾ‬ ‫ته‬ ‫وشوسش‬ "ٗ‫وٛزیـ‬ ُ‫دت‬ ‫وشوسش‬ %‫دسكذ‬ ‫وشوسش‬ ِ‫آرای‬1 ‫ّا‬Verilog ‫دس‬Verilog‫دس‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ٞا‬ ‫تشداس‬ ‫یا‬ ٚ ‫ٞا‬ ٜ‫داد‬ ‫اص‬ ‫ای‬ ٝ‫آسای‬ ،ٖ‫زٛا‬ ‫ٔی‬Verilog.‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫تؼذی‬ ‫چٙذ‬ ‫ٞای‬ ٝ‫آسای‬ ٖ‫زٛا‬ ‫ٕ٘ی‬ ‫افضاسی‬ ْ‫٘ش‬ ‫ٞای‬ ٖ‫صتا‬ ‫خالف‬ ‫تش‬ ‫ٔی‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ٝ‫آسای‬ ‫زؼشیف‬ ‫وّی‬ ‫فشٔر‬: ‫تاؿذ‬ <array_type> <array_name> [ #first_element : #last_element ] ‫زؼذا‬ ‫تشداس‬ ‫أا‬ ‫وٙذ‬ ‫داسی‬ ٍٝ٘ ‫خٛد‬ ‫دس‬ ‫سا‬ ‫ٔخسّف‬ ‫ٞای‬ ًَٛ ‫تا‬ ‫ػٙاكش‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ‫زٛا٘ذ‬ ‫ٔی‬ ٝ‫آسای‬ ‫یه‬ ٝ‫و‬ ‫اػر‬ ٗ‫ای‬ ‫دس‬ ‫تشداس‬ ٚ ٝ‫آسای‬ ‫زفاٚذ‬‫یه‬ ‫اص‬ ‫ٔـخلی‬ ‫د‬ .‫اػر‬ ‫ػٙلش‬ ِ‫حافظ‬2 ‫در‬ ‫ّا‬Verilog ‫دس‬Verilogٝ‫حافظ‬‫دس‬ ٝ‫حافظ‬ ‫یه‬ ‫زؼشیف‬ ‫وّی‬ ‫فشٔر‬ .‫ؿٛ٘ذ‬ ‫ٔی‬ ‫زؼشیف‬ ‫ٞا‬ ‫ثثاذ‬ ‫اص‬ ‫ای‬ ٝ‫آسای‬ ‫تلٛسذ‬ ‫ٞا‬Verilog: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫تلٛسذ‬ reg [ #word_size : 0 ] array_name [0:array_size] َ‫ٔثا‬9:‫ٔی‬ ‫آؿٙا‬ ٝ‫حافظ‬ ٚ ٝ‫سؿس‬ ، ‫آٟ٘ا‬ ‫تشداسی‬ ‫حاِر‬ ٚ ‫كحیح‬ ٚ ‫حمیمی‬ ‫ٞای‬ ‫ٔسغیش‬ ، ‫تشداسی‬ ‫ٞای‬ ‫ثثاذ‬ ٚ ‫ٞا‬ ‫٘ر‬ ، ‫ٞا‬ ‫ثثاذ‬ ‫زؼشیف‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ ٚ ‫زؼشیف‬ ‫اص‬ ‫خغ‬ ٝ‫سؿس‬ ٝ‫و‬ ‫تاؿیذ‬ ٝ‫داؿس‬ ٝ‫زٛخ‬ . ‫ؿٛیذ‬‫تّٛن‬ ‫یه‬ ٖٚ‫دس‬ٝ‫یافس‬ ‫ػاخر‬‫ٔمذاس‬.‫ؿٛد‬ ‫ٔی‬ ‫دٞی‬ 1 Array 2 Memory
  • 24. ٝ‫كفح‬24‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog reg register; // Declaring a one bit Register wire [15:0] Databus; // a 16 nets Representing a 16bit bus reg [31:0] AddressReg; // a 32 bit Register integer Counter; // Integer Data Declaration real Real_Data; // Real Data Declaration integer Output_Data[15:0]; // Array of 16 integers reg membit[0:1023]; // 1K x 1bit memory reg [7:0] membyte[0:1023]; // 1K x 8bit memory reg [8*17:0] version ; // Declare a register variable that is 18 bytes initial version = " version 1.0"; // Filling String inside initial procedural block ‫در‬ ‫ّا‬ ‫هاجَل‬Verilog ‫دس‬ ‫ٞا‬ َٛ‫ٔاخ‬ ‫تا‬Verilog‫ٔی‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ َٛ‫ٔاخ‬ ‫زؼشیف‬ ‫وّی‬ ‫لاِة‬ .ٓ‫خشداصی‬ ‫ٔی‬ ٖ‫آ‬ ‫ٞای‬ ‫ٚیظٌی‬ ٚ َٛ‫ٔاخ‬ ‫زؼشیف‬ ٜٛ‫٘ح‬ ٝ‫ت‬ ‫تخؾ‬ ٗ‫ای‬ ‫دس‬ ، ٓ‫ؿذی‬ ‫آؿٙا‬ ‫لثال‬ : ‫تاؿذ‬ module module_name ( port list ); port declarations (if ports present) parameters (optional) Declaration of wires, regs and other variables Data flow statement (assign) Instantiation of lower level module always and initial blocks, all behavioral statements go in these blocks tasks and functions end module
  • 25. ٝ‫كفح‬25 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫در‬ ‫ّا‬ ‫پَرت‬ ‫اتصال‬ ‫قَاًیي‬Verilog : ‫داؿر‬ ٝ‫زٛخ‬ ‫٘ىازی‬ ٝ‫ت‬ ‫تایذ‬ ‫خاسج‬ ٖ‫خٟا‬ ٝ‫ت‬ َٛ‫ٔاخ‬ ‫یه‬ ‫ٞای‬ ‫خٛسذ‬ َ‫ازلا‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫٘ٛع‬ ‫اص‬ ‫تایذ‬ َٛ‫ٔاخ‬ ‫ٚسٚدی‬ ‫ٞای‬ ‫خٛسذ‬net‫٘ٛع‬ ‫اص‬ ‫ٞایی‬ ‫ٔسغیش‬ ٝ‫ت‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫ٞا‬ ‫خٛسذ‬ ٗ‫ای‬ ٚ ‫تاؿٙذ‬reg‫یا‬ ٚnet‫خ‬ ٖ‫خٟا‬ ‫دس‬.‫ؿٛ٘ذ‬ ُ‫ٔسل‬ ‫اسج‬ ‫٘ٛع‬ ‫اص‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫خشٚخی‬ ‫ٞای‬ ‫خٛسذ‬reg‫یا‬ ٚnet‫٘ٛع‬ ‫اص‬ ‫ٞایی‬ ‫ٔسغیش‬ ٝ‫ت‬ ‫تایذ‬ ‫خٛسزٟا‬ ٗ‫ای‬ ٚ ‫تاؿٙذ‬net.‫ؿٛ٘ذ‬ ُ‫ٔسل‬ ‫خاسج‬ ٖ‫خٟا‬ ‫دس‬ ‫٘ٛع‬ ‫اص‬ ‫تایذ‬ َٛ‫ٔاخ‬ ٝ‫ػٛی‬ ٚ‫د‬ ‫ٞای‬ ‫خٛسذ‬net‫٘ٛع‬ ‫اص‬ ‫ٞایی‬ ‫ٔسغیش‬ ٝ‫ت‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫خٛسزٟا‬ ٗ‫ای‬ ٚ ، ‫تاؿٙذ‬reg‫یا‬ ٚnet‫خاسج‬ ٖ‫خٟا‬ ‫دس‬.‫ؿٛ٘ذ‬ ُ‫ٔسل‬ ‫تاؿٙذ‬ ‫ٌٔٙثك‬ ًَٛ ‫٘ظش‬ ‫اص‬ ‫تایذ‬ ‫آٟ٘ا‬ ٝ‫ت‬ ُ‫ٔسل‬ ‫خاسخی‬ ‫ٞای‬ ‫ٔسغیش‬ ٚ َٛ‫ٔاخ‬ ‫خٛسزٟای‬ ‫پردازش‬ ‫پیص‬1 ‫در‬Verilog ‫دس‬Verilog.‫ٕ٘ٛد‬ ٜ‫اػسفاد‬ ‫آٟ٘ا‬ ‫اص‬ ‫٘یاص‬ ‫كٛسذ‬ ‫دس‬ ٚ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫سا‬ ‫خشداصؽ‬ ‫خیؾ‬ ‫ٞای‬ ‫خاسأسش‬ ٖ‫زٛا‬ ‫ٔی‬ ‫دیٍش‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫زٕأی‬ ‫ٔا٘ٙذ‬ ‫٘یض‬‫اص‬ ‫یىی‬ ‫خشوا‬‫دس‬ ‫خشداصؿی‬ ‫خیؾ‬ ‫دػسٛساذ‬ ٗ‫زشی‬ ‫ستش‬Verilog‫دػسٛس‬define‫زؼشیف‬ ْ‫٘ا‬ ‫یه‬ ‫تا‬ ‫سا‬ ... ، ‫ؿشى‬ ، ‫دػسٛس‬ ، ‫ٔمذاس‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬ ‫دػسٛس‬ ٗ‫ای‬ ‫زٛػي‬ .‫تاؿذ‬ ‫ٔی‬ ‫دػسٛس‬ ‫اص‬ ٜ‫اػسفاد‬ ‫وّی‬ ‫لاِة‬ .‫وشد‬ ٜ‫اػسفاد‬ ‫ٞا‬ ‫وذ‬ ‫دس‬ ْ‫٘ا‬ ٖ‫آ‬ ‫اص‬ ‫فمي‬ ‫خغ‬ ٖ‫آ‬ ‫اص‬ ٚ ‫ٕ٘ٛد‬define:‫اػر‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ `define <Definition-Name> <Definition-Statement> ‫ػالٔر‬ ٜ‫ٕٞشا‬ ٝ‫ت‬ ‫سا‬ ٖ‫آ‬ ْ‫٘ا‬ ‫اػر‬ ‫وافی‬ ‫فمي‬ ‫ٞا‬ ‫وذ‬ ‫دس‬ ‫زؼشیف‬ ٗ‫ای‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تشای‬`: ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ .‫تیاٚسیذ‬ `<Definition-Name> .‫وشد‬ ٓ‫خٛاٞی‬ ٜ‫اػسفاد‬ ‫دفؼاذ‬ ٝ‫ت‬ ٝ‫وساتچ‬ ‫آخش‬ ‫ٞای‬ َ‫ٔثا‬ ‫دس‬ ‫دػسٛس‬ ٗ‫ای‬ ‫اص‬ 1 Preprocessing
  • 26. ٝ‫كفح‬26‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 6)‫گیت‬ ‫سطح‬ ‫در‬ ‫سازی‬ ‫مدل‬ ‫ٔذاس‬ ‫ٌیر‬ ‫ػٌح‬ ‫ػاصی‬ َ‫ٔذ‬ ‫دس‬.ٓ‫وٙی‬ ‫ٔی‬ ٖ‫تیا‬ ‫ا٘ذ‬ ٜ‫ؿذ‬ ُ‫ٔسل‬ ‫یىذیٍش‬ ٝ‫ت‬ ٝ‫و‬ ٝ‫خای‬ ‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ‫تلٛسذ‬ ‫سا‬Verilog‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٔا٘ٙذ‬ ٓٞ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬ ‫داسای‬ ‫خٛد‬ ٖٚ‫دس‬ ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬1 َ‫ا٘سما‬ ‫خٌٛى‬ ،2 ‫ػٛییچ‬ ٚ3 ‫دس‬ ‫٘ذسذ‬ ٝ‫ت‬ ‫اؿیا‬ ٗ‫ای‬ ‫اص‬ ‫ػٙسض‬ ‫ٞای‬ ‫اتضاس‬ ‫ٚخٛد‬ ٝ‫ت‬ ٝ‫زٛخ‬ ‫تا‬ ‫أا‬ ‫تاؿذ‬ ‫ٔی‬ ‫ٞا‬ ‫ا‬ ‫ٞا‬ ‫ًشاحی‬.‫ؿٛد‬ ‫ٔی‬ ٜ‫ػسفاد‬‫تشای‬‫اتسذا‬ ‫ؿشٚع‬‫دس‬ ٝ‫و‬ ‫ای‬ ٝ‫خای‬ ‫ٞای‬ ‫ٌیر‬ ‫ا٘ٛاع‬ ‫تایذ‬Verilogٓ‫وٙی‬ ‫ٔؼشفی‬ ‫سا‬ ‫داس٘ذ‬ ‫ٚخٛد‬. ‫دس‬Verilog‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ػثاسزٙذ‬ ‫ٞا‬ ‫ٌیر‬ ٗ‫ای‬ ، ‫داسد‬ ‫ٚخٛد‬ ‫اكّی‬ ‫ای‬ ٝ‫خای‬ ‫ٌیر‬ ‫ؿؾ‬AND،NAND،OR،NOR،XORٚXNOR‫ٞا‬ ‫ٌیر‬ ٗ‫ای‬ ‫ٍٕٞی‬ . ‫دٞٙذ‬ ‫ٔی‬ ُ‫زـىی‬ ‫سا‬ ‫ٌیر‬ ‫ٞای‬ ‫ٚسٚدی‬ ‫تؼذی‬ ‫ٞای‬ ‫خٛسذ‬ ٚ ٖ‫آ‬ ‫خشٚخی‬ ‫ٌیر‬ ‫ٞش‬ ‫خٛسذ‬ ٗ‫اِٚی‬ .‫تاؿٙذ‬ ‫ٔی‬ ‫خشٚخی‬ ‫یه‬ ٚ ‫ٚسٚدی‬ ‫چٙذ‬ ‫داسای‬‫ٔی‬ ‫زشزیة‬ ٗ‫تذی‬ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ٔخسّف‬ ‫ٞای‬ ‫ٚسٚدی‬ ‫زؼذاد‬ ‫تا‬ ‫ٞایی‬ ‫ٌیر‬ ٖ‫زٛا‬. 6‫ٚاسٍٚ٘ش‬ ‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ػثاسزٙذ‬ ‫اكّی‬ ‫ا٘سماِی‬ ‫ٌیر‬4 ‫تافش‬ ،5 ‫تا‬ ،ٝ‫ػ‬ ‫فش‬6 ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬ ٚ ٗ‫خایی‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬ ، ‫تاال‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫تافش‬ ،ٗ‫خایی‬ َ‫فؼا‬ ٝ‫حاِس‬ .‫تاال‬ َ‫فؼا‬ ٝ‫حاِس‬ٜ‫دِخٛا‬ ‫ٞای‬ ‫خشٚخی‬ ‫زؼذاد‬ ‫تا‬ ‫ٞایی‬ ‫ٌیر‬ ٖ‫زٛا‬ ‫ٔی‬ ‫زشزیة‬ ٗ‫تذی‬ ، ‫ٞؼسٙذ‬ ‫خشٚخی‬ ‫ٞا‬ ‫خٛسذ‬ ‫دیٍش‬ ٚ ‫ٚسٚدی‬ ٝ‫حاِس‬ ٚ‫د‬ ‫ٞای‬ ‫ٌیر‬ ‫آخش‬ ‫خٛسذ‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٞای‬ ‫ٌیر‬ ‫دس‬ .‫ٕ٘ٛد‬ ‫زؼشیف‬.‫تاؿذ‬ ‫ٔی‬ َ‫وٙسش‬ ‫خٛسذ‬ ْٛ‫ػ‬ ‫خٛسذ‬ ٚ ‫ٚسٚدی‬ ْٚ‫د‬ ‫خٛسذ‬ ، ‫خشٚخی‬ َٚ‫ا‬ ‫خٛسذ‬ 1 Logic Gates 2 Transmission Gates 3 Switch 4 Inverter 5 Buffer 6 Tri State Buffer
  • 27. ٝ‫كفح‬27 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫گیت‬ ‫نام‬‫نواد‬‫واشه‬ ‫کلید‬‫گیت‬ ‫نام‬‫نواد‬‫واشه‬ ‫کلید‬ ‫ٌیر‬AND‫تا‬N‫ٚسٚدی‬and‫ٌیر‬NOR‫تا‬N‫ٚسٚدی‬nor ‫ٌیر‬NAND‫تا‬N‫ٚسٚدی‬nand‫ٌیر‬XOR‫تا‬N‫ٚسٚدی‬xor ‫ٌیر‬OR‫تا‬N‫ٚسٚدی‬or‫ٌیر‬XNOR‫تا‬N‫ٚسٚدی‬xnor ‫ٌیر‬NOT‫تا‬N‫خشٚخی‬not‫ٌیر‬‫تافش‬‫تا‬N‫خشٚخی‬buf ٗ‫خایی‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬notif0‫پایین‬ ‫فعال‬ ‫حالته‬ ‫سه‬ ‫بافر‬bufif0 ‫تاال‬ َ‫فؼا‬ ٝ‫حاِس‬ ٝ‫ػ‬ ‫ٚاسٍٚ٘ش‬notif1‫باال‬ ‫فعال‬ ‫حالته‬ ‫سه‬ ‫بافر‬bufif1 ‫زؼشیف‬ ‫تا‬ ‫ػدغ‬ ،‫آٚسد‬ ‫دس‬ ٝ‫خای‬ ‫ٞای‬ ‫ٌیر‬ ‫اص‬ ‫ای‬ ٝ‫ٔدٕٛػ‬ ‫تلٛسذ‬ ‫آ٘شا‬ ‫تایذ‬ ‫اتسذا‬ ‫ٌیر‬ ‫ػٌح‬ ‫دس‬ ‫ٔذاس‬ ‫ًشاحی‬ ‫تشای‬netٝ‫ت‬ ‫سا‬ ٝ‫خای‬ ‫ٌیسٟای‬ ٗ‫ای‬ ‫٘یاص‬ ‫ٔٛسد‬ ‫ٞای‬ ‫یا‬ ‫تٙذی‬ ٓ‫ػی‬ ‫اكٌالحا‬ ‫واس‬ ٗ‫ای‬ ٝ‫ت‬ .‫ٕ٘ٛد‬ ُ‫ٔسل‬ ‫یىذیٍش‬Wiring.‫ؿٛد‬ ‫ٔی‬ ٝ‫ٌفس‬
  • 28. ٝ‫كفح‬28‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬10:‫ٌیر‬ ٚ‫د‬ ٜ‫اػسفاد‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬NAND‫ٌیر‬ ‫یه‬AND‫ٔی‬.ٓ‫ػاصی‬ module and_from_nand(X, Y, F); input X, Y; output F; wire W; nand U1(X, Y, W); nand U2(W, W, F); endmodule َٛ‫ٔاخ‬ ٗ‫ای‬ ‫دس‬XٚYٚ ‫ٚسٚدی‬F.‫تاؿذ‬ ‫ٔی‬ ‫خشٚخی‬ َ‫ٔثا‬11:‫فالج‬ ‫فّیح‬ ‫یه‬ ‫ػاخر‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫دی‬ ‫٘ٛع‬.ٓ‫ؿٛی‬ ‫ٔی‬ ‫آؿٙا‬ module dff(Q, Q_BAR, D, CLK); output Q,Q_BAR; input D, CLK; nand U1(X, D, CLK); nand U2(Y, X, CLK); nand U3(Q, Q_BAR, X); nand U4(Q_BAR, Q, Y); endmodule َٛ‫ٔاخ‬ ٗ‫ای‬ ‫دس‬DٚCLK‫ٚسٚدی‬،QٚQ_BAR.‫تاؿٙذ‬ ‫ٔی‬ ‫خشٚخی‬ ‫ٌیر‬ ‫وٙیذ‬ ٝ‫زٛخ‬nand.‫تاؿٙذ‬ ‫ٔی‬ ‫ٚسٚدی‬ ‫ٞا‬ ٖ‫آسٌٛٔا‬ ‫دیٍش‬ ٚ ‫خشٚخی‬ ٖ‫آسٌٛٔا‬ ٗ‫اِٚی‬ ‫كٛسذ‬ ٗ‫ای‬ ‫دس‬ .‫تاؿذ‬ ‫ٚسٚدی‬ ‫ٔسٙاٞی‬ ‫٘ا‬ ‫زؼذاد‬ ‫داسای‬ ‫زٛا٘ذ‬ ‫ٔی‬
  • 29. ٝ‫كفح‬29 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬12:‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫ػاخر‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬1 .ٓ‫ؿٛی‬ ‫ٔی‬ ‫آؿٙا‬ module mux4_to_1 ( out, i0, i1, i2, i3, s1, s0 ); output out; input i0, i1, i2, i3, s1, s0; // Internal wire declaration wire s0n, s1n, y0, y1, y2, y2; // Gate instantiations not ( s1n, s1 ); not ( s0n, s0 ); and ( y0, i0, s1n, s0n ); and ( y1, i1, s1n, s0 ); and ( y2, i2, s1 , s1n ); and ( y3, i3, s1 , s0 ); or ( out, y0, y1, y2, y3 ); endmodule ُ‫ؿى‬9.‫ٕ٘ٛادس‬‫یه‬ ٝ‫ت‬ ‫چٟاس‬ ‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫ٌٔٙمی‬ 1 Multiplexer
  • 30. ٝ‫كفح‬30‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬13:ُٔ‫وا‬ ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬4.‫وشد‬ ٓ‫خٛاٞی‬ ‫تشػی‬ ‫سا‬ ‫تیر‬ ُٔ‫وا‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫چٟاس‬ ٝ‫ت‬ ‫تیر‬ ‫چٟاس‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ ‫ػاخر‬ ‫تشای‬1‫خشٚخی‬ ٚ ‫ٚسٚدی‬ ‫٘مّی‬ ‫تیر‬ ‫تا‬ ‫تیسی‬‫ٕ٘ٛداس‬ ٝ‫و‬ ٓ‫٘یاصٔٙذی‬‫وذ‬ ٚVerilog‫سا‬ ٖ‫آ‬ .‫تیٙیذ‬ ‫ٔی‬ ٝٔ‫ادا‬ ‫دس‬.‫اػر‬ ٜ‫ؿذ‬ ٜ‫اػسفاد‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫داخّی‬ ‫ٔذاس‬ ‫زٛكیف‬ ‫تشای‬ ‫ٌیر‬ ‫زٛكیف‬ ‫ػٌح‬ ‫اص‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ ُ‫ؿى‬10.ُٔ‫وا‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ ‫ٌٔٙمی‬ ‫ٕ٘ٛداس‬ module fulladd(sum, c_out, a, b, c_in); output sum, c_out; input a, b, c_in; wire s1, c1, c2; xor (s1, a, b); and (c1, a, b); xor(sum, s1, c_in); and(c2, s1, c_in); or(c_out, c2, c1); endmodule
  • 31. ٝ‫كفح‬31 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog .ٓ‫وٙی‬ ُ‫ٔسل‬ ٓٞ ٝ‫ت‬ ‫صیش‬ ‫ًشیك‬ ٝ‫ت‬ ‫سا‬ ‫ٞا‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ٗ‫ای‬ ‫اص‬ ‫ػذد‬ ‫چٟاس‬ ‫تایؼر‬ ‫ٔی‬ ‫تؼذ‬ ّٝ‫ٔشح‬ ‫دس‬ ُ‫ؿى‬11.‫یه‬ ‫ٕ٘ٛداس‬ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫چٟاس‬ ‫اص‬ ٜ‫اػسفاد‬ ‫تا‬ ‫چٟاستیسی‬ ٜ‫وٙٙذ‬ ‫خٕغ‬1‫تیر‬ module fulladder4(sum, c_out, a, b, c_in); output [3:0] sum; output c_out; input [3:0] a,b; input c_in; wire c1, c2, c3; // Making Four Instances of fulladder which defined before fulladd fa0(sum[0], c1, a[0], b[0], c_in); fulladd fa0(sum[1], c2, a[1], b[1], c1); fulladd fa0(sum[2], c3, a[2], b[2], c2); fulladd fa0(sum[3], c_out, a[3], b[3], c3); endmodule ‫وذ‬ ‫دس‬ ٝ‫و‬ ‫ٕٞاٌ٘ٛس‬Verilogٚ ٓ‫وشدی‬ ‫ػاصی‬ ٕٝ٘ٛ٘ ٓ‫تٛدی‬ ٜ‫وشد‬ ‫ًشاحی‬ ُ‫لث‬ ‫تخؾ‬ ‫دس‬ ٝ‫و‬ ‫تیر‬ ‫زه‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫اص‬ ‫تاس‬ ‫چٟاس‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ ‫ؿٛد‬ ‫ٔی‬ ٜ‫ٔـاٞذ‬ .ٓ‫ٕ٘ٛدی‬ ‫ًشاحی‬ ‫سا‬ ‫تیر‬ ‫چٟاس‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ‫یه‬ ٖ‫آ‬ ‫زٛػي‬
  • 32. ٝ‫كفح‬32‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 7)‫مدل‬‫ها‬ ‫داده‬ ‫جریان‬ ( ‫ثباتی‬ ‫سطح‬ ‫سازی‬) ‫خشدا‬ ٚ ‫ٞا‬ ‫ثثاذ‬ ٗ‫تی‬ ‫اًالػاذ‬ َ‫ا٘سما‬ ٜٛ‫٘ح‬ ٝ‫ت‬ ‫ثثازی‬ ‫ػاصی‬ َ‫ٔذ‬ ‫دس‬ٜ‫داد‬ ٖ‫خشیا‬ ‫ػٌح‬ ‫دس‬ ‫ػاصی‬ َ‫ٔذ‬ ‫چٍٍٛ٘ی‬ ٝ‫ت‬ ‫لؼٕر‬ ٗ‫ای‬ ‫دس‬ .ٓ‫دٞی‬ ‫ٔی‬ ‫إٞیر‬ ‫اًالػاذ‬ ‫صی‬ ٖ‫صتا‬ ‫دس‬Verilog.ٓ‫خشداصی‬ ‫ٔی‬ ٖ‫آ‬ ‫ٔضایای‬ ٚ ‫هداٍم‬ ‫دّی‬ ‫هقداری‬1 ‫یه‬ ‫سٚی‬ ‫سا‬ ‫ٔمذاس‬ ٝ‫ی‬ ٖ‫زٛا‬ ‫ٔی‬ ‫دػسٛس‬ ٗ‫ای‬ ‫زٛػي‬Net‫اص‬ ‫یىی‬ ٜ‫ٞشٌا‬ ٚ ٜ‫تٛد‬ ‫اخشا‬ َ‫حا‬ ‫دس‬ ٜ‫ٕٞٛاس‬ ‫دػسٛس‬ ٗ‫ای‬ .‫داد‬ ‫لشاس‬‫ػّٕٛ٘ذ‬‫ٔمذاس‬ ‫وٙذ‬ ‫زغییش‬ ‫ٞای‬Netٓٞ : ‫اػر‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ‫دػسٛس‬ ٗ‫ای‬ ‫اص‬ ٜ‫اػسفاد‬ ‫وّی‬ ‫لاِة‬ .‫وشد‬ ‫خٛاٞذ‬ ‫زغییش‬ ) ‫زاخیش‬ ‫تا‬ ‫یا‬ ٚ ( ٖ‫آ‬ ‫تا‬ ٜ‫ٕٞشا‬ assign <delay> Assignment-Lists; ‫٘ٛع‬ ‫اص‬ ‫تشداس‬ ‫یه‬ ‫یا‬ ‫ٔسغیش‬ ‫یه‬ ‫تایذ‬ ‫دػسٛس‬ ٗ‫ای‬ ‫چح‬ ‫ػٕر‬net.‫تاؿذ‬ ‫٘ٛع‬ ٚ‫د‬ ٗ‫ای‬ ‫اص‬ ‫اِحالی‬ ‫یا‬ ٚ ‫هدا‬ ‫دّی‬ ‫هقدار‬‫ضوٌی‬ ‫ٍم‬2 ‫خٙغ‬ ‫اص‬ ‫سا‬ ‫ٔسغیش‬ ‫یه‬ ٝ‫ایٙى‬ ‫خای‬ ٝ‫ت‬ ‫سٚؽ‬ ٗ‫ای‬ ‫دس‬Net‫دػسٛس‬ ‫زٛػي‬ ‫ػدغ‬ ٚ ٓ‫وٙی‬ ‫زؼشیف‬assign‫سا‬ ُٕ‫ػ‬ ٗ‫ای‬ ٓ‫زٛا٘ی‬ ‫ٔی‬ ،ٓ‫دٞی‬ ‫لشاس‬ ٖ‫آ‬ ‫سٚی‬ ‫سا‬ ‫ٔمذاس‬ ‫یه‬ ‫زؼشیف‬ ْ‫ٍٞٙا‬ ‫دس‬Net.ٓ‫دٞی‬ ْ‫ا٘دا‬ 1 Continuous Assignment 2 Implicit Continuous Assignment
  • 33. ٝ‫كفح‬33 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬14:.‫وشد‬ ‫خٛاٞیذ‬ ٜ‫ٔـاٞذ‬ ‫سا‬ ‫هٕٙی‬ ْٚ‫ٔذا‬ ٚ ْٚ‫ٔذا‬ ‫تلٛسذ‬ ‫دٞی‬ ‫ٔمذاس‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ module mymodule_continuous_assignment( out, i1, i2 ); output out; input i1,i2; assign out = i1 & i2; // Continuous Assignment endmodule module mymodule_implicit_continuous_assignment( out, i1, i2 ); output out; input i1,i2; wire out = i1 & i2; // Implicit Continuous Assignment endmodule ‫ّا‬ ‫تاخیر‬1 ‫ػاصی‬ ٝ‫ؿثی‬ ‫٘سایح‬ ٖ‫ؿذ‬ ‫زش‬ ‫ٚالؼی‬ ‫ٔٙظٛس‬ ٝ‫ت‬‫دس‬ ٖ‫زٛا‬ ‫ٔی‬Verilog‫زاخیش‬ ‫اص‬ ‫٘اؿی‬ ٝ‫و‬ ‫ٞای‬ ‫زاخیش‬‫ا٘سـاس‬‫ٌٔٙمی‬ ‫ٞای‬ ‫ٌیر‬2 ٝ‫زٛخ‬ ‫تایذ‬ .‫وشد‬ ٍ‫ِحا‬ ‫سا‬ ‫تاؿٙذ‬ ‫ٔی‬ .‫داؿر‬ ‫٘خٛاٞٙذ‬ ‫اثشی‬ ‫ٚالؼیر‬ ٚ ‫ػٙسض‬ ‫دس‬ ٚ ‫ٌزاس٘ذ‬ ‫ٔی‬ ‫زاثیش‬ ‫ػاصی‬ ٝ‫ؿثی‬ ‫٘سایح‬ ‫دس‬ ‫فمي‬ ‫زاخیشاذ‬ ٗ‫ای‬ ‫داؿر‬ ُ‫قاعد‬ ‫با‬ ‫تاخیر‬ ‫دػسٛس‬ ‫اص‬ ‫خغ‬ ‫سا‬ ‫زاخیش‬ ‫یه‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬assign‫اص‬ ُ‫لث‬ ٚnet‫سخ‬ ‫ساػر‬ ‫ػٕر‬ ‫ٞای‬ َ‫ػیٍٙا‬ ‫اص‬ ‫یىی‬ ‫دس‬ ٝ‫و‬ ‫زغییشی‬ ‫ٞش‬ .ٓ‫آٚسی‬ ‫ٔی‬‫خغ‬ ‫ؿٛد‬ ‫ٔی‬ ‫تاػث‬ ،‫دٞذ‬ ٓ‫داسی‬ ‫ایٙدا‬ ‫دس‬ ٝ‫و‬ ‫زاخیشی‬ ‫زشزیة‬ ٗ‫ای‬ ٝ‫ت‬ .‫ٌیشد‬ ‫لشاس‬ ‫چح‬ ‫ػٕر‬ ‫ٔسغیش‬ ‫دس‬ ‫ػدغ‬ ٚ ‫ؿٛد‬ ‫اسصیاتی‬ ‫ٔدذدا‬ ‫ساػر‬ ‫ػٕر‬ ‫ػثاسذ‬ ، ‫زاخیش‬ ٖ‫صٔا‬ ‫ٌزؿر‬ ‫اص‬‫٘ٛع‬ ‫اص‬ inertial.‫٘ـٛد‬ ‫ٔٙسـش‬ ‫خشٚخی‬ ٝ‫ت‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ‫زاخیش‬ ‫ٔمذاس‬ ‫اص‬ ‫وٕسش‬ ‫ػشم‬ ‫تا‬ ‫خاِؼٟایی‬ ٝ‫و‬ ‫ؿٛد‬ ‫ٔی‬ ‫تاػث‬ ‫أش‬ ٗ‫ای‬ ٚ ‫اػر‬ 1 Delay 2 Logic Gates Propagation Delay
  • 34. ٝ‫كفح‬34‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫تعریف‬ ‫ٌّگام‬ ِ‫ب‬ ‫تاخیر‬net ‫زؼشیف‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬netٗ‫ای‬ ‫سٚی‬ ٝ‫و‬ ‫زغییشی‬ ‫ٞش‬ ‫خغ‬ ٗ‫ای‬ ‫اص‬ .ٓ‫وٙی‬ ‫ٔی‬ ‫ٔـخق‬ ٖ‫آ‬ ‫تشای‬ ‫سا‬ ‫٘ظش‬ ‫ٔٛسد‬ ‫زاخیش‬netٜ‫ؿذ‬ ‫ٔـخق‬ ‫زاخیش‬ ‫تا‬ ،‫ؿذ‬ ْ‫ا٘دا‬ .‫اػر‬ ٜ‫اػسفاد‬ ُ‫لات‬ ‫٘یض‬ ‫ٌیر‬ ‫ػٌح‬ ‫زٛكیف‬ ‫ٔٛسد‬ ‫دس‬ ُٕ‫ػ‬ ٗ‫ای‬ .‫ؿٛد‬ ‫ٔی‬ َ‫اػٕا‬ َ‫ٔثا‬15:‫زاخی‬ ‫ایداد‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬.‫ؿٛیذ‬ ‫ٔی‬ ‫آؿٙا‬ ‫٘ر‬ ‫زؼشیف‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ ‫زاخیش‬ ٚ ٜ‫لاػذ‬ ‫تا‬ ‫تحث‬ ‫ٔٛسد‬ ‫ٞای‬ ‫ش‬ // ----- Inertial Delay Example ------- module and_with_delay( o1, i1, i2); output o1; input i1, i2; assign #5 o1 = i1 & i2; // Inertial Delay endmodule // ----- Implicit Delay Example ------ wire #5 out; assign out = i1 & i2; // Implicit Delay during Assignment 8)، ‫عبارات‬‫عملگر‬‫ها‬1 ‫عملوود‬ ‫و‬2 ‫ها‬ ‫زشویة‬ ‫اص‬ ‫ػثاسذ‬ ‫یه‬‫ػٍّٕش‬ ٚ ‫ٞا‬ ‫ػّٕٛ٘ذ‬‫ؿٛد‬ ‫ٔی‬ ٝ‫ػاخس‬ ‫ٞا‬ ‫یه‬‫ػّٕٛ٘ذ‬‫یى‬ ‫زٛا٘ذ‬ ‫ٔی‬.‫ؿذ‬ ٜ‫اؿاس‬ ٖ‫آ‬ ٝ‫ت‬ ‫لثال‬ ٝ‫و‬ ‫تاؿذ‬ ‫ای‬ ٜ‫داد‬ ‫ا٘ٛاع‬ ‫اص‬ ‫ی‬ ‫دس‬ ‫ٔٛخٛد‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ِیؼر‬ .‫آیذ‬ ‫تذػر‬ ‫ٌّٔٛب‬ ٝ‫٘سید‬ ‫زا‬ ‫دٞٙذ‬ ‫ٔی‬ ْ‫ا٘دا‬ ‫سا‬ ‫ػّٕیازی‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬ ‫سٚی‬ ‫ٞا‬ ‫ػٍّٕش‬Verilogَٚ‫خذ‬ ‫دس‬ٝ‫كفح‬ ‫تؼذ‬.‫اػر‬ ٜ‫آٔذ‬ 1 Operator 2 Operand
  • 35. ٝ‫كفح‬35 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫حؼاتی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬1 : ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬ .‫ٌشدا٘ذ‬ ‫ٔی‬ ‫تش‬ ‫سا‬ ‫لؼٕر‬ ‫خاسج‬ ‫تاؿذ‬ ‫كحیح‬ ‫ػّٕٛ٘ذ‬ ٚ‫د‬ ‫ٞش‬ ‫اٌش‬ ‫اص‬ ‫ٞشیه‬ ‫اٌش‬‫تیر‬ ‫داسای‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬x‫ػّٕیاذ‬ ٝ‫٘سید‬ ، ‫تاؿٙذ‬x.‫تٛد‬ ‫خٛاٞذ‬ .‫اػر‬ َٚ‫ا‬ ‫ػّٕٛ٘ذ‬ ‫ػالٔر‬ ‫تشاتش‬ ُ‫حاك‬ ‫ػالٔر‬ ٚ ‫ٌشدا٘ذ‬ ‫ٔی‬ ‫تش‬ ‫سا‬ ٓ‫زمؼی‬ ٜ‫ٔا٘ذ‬ ‫تالی‬ % ‫ػٍّٕش‬ ُٕ‫ٔى‬ ٝ‫ت‬ ‫كٛسذ‬ ٗ‫ای‬ ‫غیش‬ ‫دس‬ ‫صیشا‬ ،‫تشد‬ ‫تىاس‬ ‫كحیح‬ ‫اػذاد‬ ‫تلٛسذ‬ ‫ػثاساذ‬ ‫دس‬ ‫سا‬ ‫ٔٙفی‬ ‫اػذاد‬ ‫اػر‬ ‫تٟسش‬2‫اػر‬ ٗ‫ٕٔى‬ ٝ‫و‬ ‫ؿٛ٘ذ‬ ‫ٔی‬ ُ‫زثذی‬ ‫ت‬ٜ‫ٔٙسظش‬ ‫غیش‬ ‫٘سایح‬ ‫اػث‬2 .‫ؿٛ٘ذ‬ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬3 : ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬ : ‫اػر‬ ‫تیر‬ ‫یه‬ ‫ٌٔٙمی‬ ‫ٞای‬ ‫ػٍّٕش‬ ٝ‫٘سید‬0، ‫٘ادسػر‬1ٚ ‫دسػر‬Xّْٛ‫ٔؼ‬ ‫٘ا‬. َٚ‫ا‬ ‫ػّٕٛ٘ذ‬ ‫اٌش‬0‫٘ادسػر‬ َ‫ٔؼاد‬ ‫تاؿذ‬4 ‫اٌش‬ ،1‫دسػر‬ َ‫ٔؼاد‬ ‫تاؿذ‬5 ‫اٌش‬ ٚX.‫ؿذ‬ ‫خٛاٞذ‬ ‫اسصیاتی‬ ّْٛ‫ٔؼ‬ ‫٘ا‬ ‫تاؿذ‬ 1 Arithmetic Operators 2 Unexpected Result 3 Logic Operators 4 False Condition 5 True Condition
  • 36. ٝ‫كفح‬36‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫عولگر‬ ‫نوع‬‫عولگر‬ ‫سوبل‬‫عولیات‬‫ها‬ ‫عولوند‬ ‫های‬ ‫عولگر‬ ‫حسابی‬‫هنطمی‬ ‫و‬ *‫ضرب‬2 /‫تمسین‬2 +‫جوع‬2 -‫تفریك‬2 %‫هانده‬ ‫بالی‬2 !‫هنطمی‬ ‫هعکوس‬0 &&‫هنطمی‬ ‫و‬2 ||‫هنطمی‬ ‫یا‬2 ‫الحاق‬ ‫های‬ ‫عولگر‬ ‫تکرار‬ ‫و‬ } {‫الحاق‬‫هحدود‬ ‫نا‬ } } { {‫تکرار‬‫هحدود‬ ‫نا‬ ‫های‬ ‫عولگر‬ ‫شیفت‬ >>‫راست‬ ‫شیفت‬2 <<‫چپ‬ ‫شیفت‬2 ‫عولگر‬ ‫نوع‬‫عولگر‬ ‫سوبل‬‫عولیات‬‫ها‬ ‫عولوند‬ ‫های‬ ‫عولگر‬ ‫ای‬ ‫رابطه‬0 ، ، ‫تساوی‬ ‫بیتی‬ <‫از‬ ‫کوچکتر‬2 >‫از‬ ‫بسرگتر‬2 <=‫هساوی‬ ‫و‬ ‫کوچکتر‬2 >=‫هساوی‬ ‫و‬ ‫بسرگتر‬2 ==‫تساوی‬2 !=‫تساوی‬ ‫عدم‬2 ===‫حروف‬ ‫نوع‬ ‫تساوی‬2 !==‫نوع‬ ‫تساوی‬ ‫عدم‬‫حروف‬2 ~‫بیتی‬ ‫هعکوس‬0 &‫بیتی‬ ‫و‬2 |‫بیتی‬ ‫یا‬2 ^‫بیتی‬ ‫اختصاصی‬ ‫یا‬2 ~^‫یا‬^~|‫بیتی‬ ‫اختصاصی‬ ‫یا‬ ‫هعکوس‬2 ‫زؼاٚی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬2 : ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬ ٝ‫٘سید‬a==b‫تشاتش‬0‫یا‬1‫یا‬x‫ػّٕٛ٘ذ‬ ‫اص‬ ‫یىی‬ ‫اص‬ ‫تیر‬ ‫یه‬ ‫اٌش‬ .‫اػر‬‫ٞا‬x‫یا‬zٝ‫٘سید‬ ‫تاؿٙذ‬x.‫ؿٛد‬ ‫ٔی‬ ٝ‫٘سید‬a!=b‫تشاتش‬0‫یا‬1‫یا‬x‫ٞا‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬ ‫اص‬ ‫یىی‬ ‫اص‬ ‫تیر‬ ‫یه‬ ‫اٌش‬ .‫اػر‬x‫یا‬zٝ‫٘سید‬ ‫تاؿذ‬x.‫ؿٛد‬ ‫ٔی‬ ٝ‫٘سید‬a===b‫تشاتش‬0‫یا‬1.‫اػر‬aٚb.‫ؿٛ٘ذ‬ ‫ٔی‬ ٝ‫ٔمایؼ‬ ٓٞ ‫تا‬ ‫تیر‬ ٝ‫ت‬ ‫تیر‬ 1 Relational 2 Equality
  • 37. ٝ‫كفح‬37 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ٝ‫٘سید‬a!==b‫تشاتش‬0‫یا‬1.‫اػر‬aٚb.‫ؿٛ٘ذ‬ ‫ٔی‬ ٝ‫ٔمایؼ‬ ٓٞ‫تا‬ ‫تیر‬ ٝ‫ت‬ ‫تیر‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬‫اِحاق‬ ‫ٞای‬1 : ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬ ‫زا‬ ‫تاؿٙذ‬ ‫داس‬ ٜ‫ا٘ذاص‬ ‫اػذاد‬ ‫تایذ‬ ‫حسٕا‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬Verilog.‫تاؿذ‬ ٝ‫٘سید‬ ٜ‫ا٘ذاص‬ ٝ‫ٔحاػث‬ ٝ‫ت‬ ‫لادس‬ ‫ٞا‬ ‫ػّٕٛ٘ذ‬‫زٛا٘ٙذ‬ ‫ٔی‬net،reg.‫تاؿٙذ‬ ‫داس‬ ٜ‫ا٘ذاص‬ ‫اػذاد‬ ‫یا‬ ٚ ‫آٟ٘ا‬ ‫اص‬ ‫تشداسی‬ ‫یا‬ ٚ ‫زىشاس‬ ‫اخشازٛس‬2 ُ‫داخ‬ ‫ػذد‬ ‫چٙذتاس‬ ٝ‫و‬ ‫وٙذ‬ ‫ٔی‬ ‫ٔـخق‬. ‫ؿٛد‬ ‫زىشاس‬ ‫تایذ‬ } { : ‫داؿر‬ ٝ‫زٛخ‬ ‫صیش‬ ‫ٔٛاسد‬ ٝ‫ت‬ ‫تایذ‬ ‫ؿشًی‬ ‫ٞای‬ ‫ػٍّٕش‬ ‫ٔٛسد‬ ‫دس‬ ‫اػر‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ‫ؿشًی‬ ‫ػٍّٕش‬ ‫اص‬ ٜ‫اػسفاد‬ ‫لاِة‬ <Condition> ? <True-Statement> : <False-Statement>; ‫اٌش‬ ٚ ‫ؿشى‬ ‫تشلشاسی‬ ‫ػثاسذ‬ ‫تاؿذ‬ ‫تشلشاس‬ ‫ؿشى‬ ‫اٌش‬ ، ‫ٌیشد‬ ‫ٔی‬ ‫لشاس‬ ‫اسصیاتی‬ ‫ٔٛسد‬ ‫ؿشى‬ ‫ػثاسذ‬‫ؿشى‬ ‫تشلشاسی‬ ْ‫ػذ‬ ‫ػثاسذ‬ ‫٘ثاؿذ‬ ‫تشلشاس‬ ‫ؿشى‬ .‫ؿٛد‬ ‫ٔی‬ ‫اخشا‬ َ‫ٔثا‬16:.‫آٔٛخر‬ ‫خٛاٞیذ‬ ‫سا‬ ‫ٞا‬ ‫ػٍّٕش‬ ٚ ‫ٞا‬ ‫ػّٕٛ٘ذ‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ػّٕىشد‬ ٜٛ‫٘ح‬ ‫آٔٛصؽ‬ ‫خٟر‬ ‫فمي‬ ‫ٞا‬ ‫وذ‬ ٗ‫ای‬ ‫اػر‬ ‫روش‬ ٝ‫ت‬ ْ‫الص‬ ( ) ‫تاؿٙذ‬ ‫ٔی‬ ‫ٞا‬ ‫ػٍّٕش‬ 1 Concatenation 2 Replication
  • 38. ٝ‫كفح‬38‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog //------- Arithmetic Operations --------// A = 4'b0011; B = 4'b0100; D = 6; E = 4; A*B // Evaluated to 4’b1100 D/E // Evaluated to 1 A+B // Evaluated to 4’b0111 in1 = 4'b101x; in2 = 4'b1010; sum = in1 + in2; // Evaluated to 4'x //------- Logic Operations --------// A = 3; B = 0; A && B // Evaluated to 0 ( False ) A || B // Evaluated to 1 ( True ) !A // Evaluated to 0 ( False ) A = 2'bx0; B = 2'b10; A && B // Evaluated to x ( Unknown ) //------- Concatenation & Replication --------// A = 1'b1; B = 2'b00; C = 2'b10; D = 3'b110; y = { B, C }; // Result y is 4’b0010 y = { A, B ,C, D, 3'b001 }; // Result y is 11’b1_00_10_110_001 //------- Conditional Operations --------// // Models functionality of a tri state buffer assign addr_bus = drive_enable ? addr_out : 32'bz; //------- Equality Operations --------// A = 3; B = 3; X = 4'b1010; Y = 4'b1101; Z = 4'b1xzz; M = 4'b1xzz; N = 4'b1xxx; A == B // Result is logical 0 A != B // Result is logical 1 X == Z // Result is x Z === M // Result is logical 1 Z === N // Result is logical 0 M !== M // Result is logical 1
  • 39. ٝ‫كفح‬39 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog َ‫ٔثا‬17:‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫زٛكیف‬ ‫صیش‬ َ‫ٔثا‬ ‫دس‬4ٝ‫ت‬1.‫وٙیذ‬ ‫ٔی‬ ٜ‫ٔـاٞذ‬ ‫سا‬ ٝ‫زٛػؼ‬ ُ‫لات‬ ‫تیر‬ ‫زه‬ ‫ٌش‬ ٝ‫ٔمایؼ‬ ‫یه‬ ٚ ‫تیسی‬ ‫چٟاس‬ ٜ‫وٙٙذ‬ ‫خٕغ‬ ، module mux4_to_1 ( out, i0, i1, i2, i3, s1, s0 ); output out; input i0, i1, i2, i3, s1, s0; assign out = s1 ? ( s0 ? i3 : i2 ) : ( s0 ? i1 : i0 ); endmodule module fulladd4 ( sum, c_out, a, b, c_in ); output [3:0] sum; output c_out; input [3:0] a, b; input c_in; assign { c_out, sum } = a + b + c_in; // Concatenating assignment endmodule module Comparator ( a_gt_b, a_eq_b, a_lt_b, a, b, gt, eq, lt ); output a_gt_b, a_eq_b, a_lt_b; input a, b, gt, eq, lt; assign a_gt_b = ( a & gt ) | ( ~b & gt ) | ( a & ~b ); assign a_eq_b = ( a & b & eq ) | ( ~a & ~b & eq ); assign a_lt_b = ( ~a & lt ) | ( b & lt ) | ( ~a & b ); endmodule
  • 40. ٝ‫كفح‬40‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 9)‫در‬ ‫رفتاری‬ ‫سازی‬ ‫مدل‬Verilog ‫دس‬Verilogٖ‫زٛا‬ ‫ٔی‬‫افضاس‬ ‫ػخر‬: ‫اص‬ ‫ػثاسزٙذ‬ ‫ػٌٛح‬ ٗ‫ای‬ ، ‫وشد‬ ‫زٛكیف‬ ‫وّی‬ ‫ػٌح‬ ٝ‫ػ‬ ‫دس‬ ‫سا‬ ‫ػٌح‬‫ػاصی‬ َ‫ٔذ‬ ٓ‫ػیؼس‬ ‫ٌٔٙمی‬ ‫سفساس‬ ٖ‫آ‬ ‫دس‬ ٝ‫و‬ ‫تاال‬ ‫ػٌح‬ ‫ػاصی‬ َ‫ٔذ‬ : ‫سفساسی‬ ‫زٛكیف‬.‫ؿٛد‬ ‫ٔی‬ .‫ؿٛد‬ ‫ٔی‬ َ‫ٔذ‬ ‫ٞا‬ ‫ثثاذ‬ ّٝ‫ٚػی‬ ٝ‫ت‬ ‫افضاس‬ ‫ػخر‬ ‫ػٌح‬ ٗ‫ای‬ ‫دس‬ : ‫ثثازی‬ ‫ػاصی‬ َ‫ٔذ‬ ‫ػاصی‬ َ‫ٔذ‬.‫ؿٛد‬ ‫ٔی‬ ‫زٛكیف‬ ‫ثثازی‬ ٚ ‫ٌیر‬ ‫ػٌح‬ ٚ‫د‬ ‫دس‬ ‫افضاس‬ ‫ػخر‬ ‫حاِر‬ ٗ‫ای‬ ‫دس‬ : ‫ای‬ ٝ‫خای‬ ِ‫یافت‬ ‫ساخت‬ ‫ّای‬ ‫بلَک‬1 ‫٘یض‬ ‫اػسثٙاػازی‬ ٝ‫اِثس‬ ، ‫تٍیش٘ذ‬ ‫لشاس‬ ‫ٞا‬ ‫تّٛن‬ ٗ‫ای‬ ٖٚ‫دس‬ ‫تایؼر‬ ‫ٔی‬ ‫سفساسی‬ ‫زٛكیف‬ ‫ٞای‬ ‫وذ‬.‫ؿٛد‬ ‫ٔی‬ ٜ‫اؿاس‬ ٖ‫آ‬ ٝ‫ت‬ ‫تؼذا‬ ٝ‫و‬ ‫داسد‬ ‫ٚخٛد‬ٝ‫یافس‬ ‫ػاخر‬ ‫تّٛن‬ ‫٘ٛع‬ ٚ‫د‬ ‫ٞای‬ ‫تّٛن‬ ‫اص‬ ‫ػثاسزٙذ‬InitialٚAlways.‫تاؿٙذ‬ ‫ٔی‬ ‫زشزیثی‬ ‫ػاخساس‬ ‫داسای‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ .‫تّٛن‬ ٗ‫چٙذی‬ ٖ‫زٛا‬ ‫ٔی‬ َٛ‫ٔاخ‬ ‫یه‬ ٖٚ‫دس‬initialٚ always.‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ٞای‬ ‫تّٛن‬Initialٖ‫صٔا‬ ‫دس‬ ٚ ‫تاس‬ ‫یه‬ ‫فمي‬‫ا‬ ‫كفش‬.‫ٌشد٘ذ‬ ‫ٔی‬ ‫خشا‬ ‫ٞای‬ ‫تّٛن‬Always.‫ٌشد٘ذ‬ ‫ٔی‬ ‫اخشا‬ َ‫حا‬ ‫دس‬ ْٚ‫ٔذا‬ ‫تٌٛس‬ ٚ ٝ‫ٕٞیـ‬ ‫تّٛن‬ٝ‫ت‬ ‫سا‬ ‫ٔمذاسی‬ ‫زٛا٘ٙذ‬ ‫ٕ٘ی‬ ٚ ‫داس٘ذ‬ ‫سا‬ ‫ٞا‬ ‫ثثاذ‬ ‫ٔمادیش‬ ٖ‫وشد‬ ٗ‫زؼیی‬ ‫زٛا٘ایی‬ ‫فمي‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬Net‫ٞای‬ ٜ‫داد‬ ( ‫ٞا‬wire.‫دٞٙذ‬ ‫٘ؼثر‬ )‫ٔی‬ ‫ؿٕا‬ ‫أا‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ ٖٚ‫دس‬ ‫زٛا٘یذ‬‫سا‬ ‫ثثاذ‬ ‫یه‬ ،‫ثثاذ‬ ‫یه‬ ‫ٔمادیش‬ ‫تا‬‫یه‬ ،Net.‫وٙیذ‬ ‫دٞی‬ ‫ٔمذاس‬ ‫ثاتر‬ ‫ٔمذاس‬ ‫یه‬ ‫یا‬ ٚ 1 Procedural Blocks
  • 41. ٝ‫كفح‬41 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫تّٛن‬ ٗ‫چٙذی‬ ‫اٌش‬initialٕٝ‫خاز‬ ‫ٞا‬ ‫تّٛن‬ ‫ػایش‬ ‫اص‬ ٚ ُ‫ٔؼسم‬ ‫تٌٛس‬ ‫تّٛن‬ ‫ٞش‬ ٚ ‫ؿٛ٘ذ‬ ‫ٔی‬ ‫اخشا‬ ٝ٘‫خذاٌا‬ ‫تٌٛس‬ ٚ ٓٞ ‫تا‬ ‫كفش‬ ٖ‫صٔا‬ ‫دس‬ ‫ٞا‬ ‫تّٛن‬ ٕٝٞ ، ٓ‫تاؿی‬ ٝ‫داؿس‬ .‫تاتذ‬ ‫ٔی‬ ‫چ‬ ٝ‫یافس‬ ‫ػاخر‬ ‫تّٛن‬ ‫یه‬ ٖٚ‫دس‬ ٓ‫تخٛاٞی‬ ٝ‫و‬ ‫كٛسزی‬ ‫دس‬‫دػسٛساذ‬ ‫اص‬ ‫تایذ‬ ٓ‫تاؿی‬ ٝ‫داؿس‬ ‫دػسٛس‬ ٗ‫ٙذی‬beginٚend‫دػسٛساذ‬ ‫یا‬ ٚforkٚjoin.ٓ‫ٕ٘ایی‬ ٜ‫اػسفاد‬ ‫دػسٛساذ‬ ‫اص‬ ٝ‫و‬ ‫دسكٛسزی‬beginٚend.‫ٌشد٘ذ‬ ‫ٔی‬ ‫اخشا‬ ‫دیٍشی‬ ‫اص‬ ‫خغ‬ ‫یىی‬ ‫تّٛن‬ ٖٚ‫دس‬ ‫دػسٛساذ‬ ٓ‫وٙی‬ ٜ‫اػسفاد‬‫دػسٛساذ‬ ‫اص‬ ٝ‫و‬ ‫كٛسزی‬ ‫دس‬forkٚjoin ٖٚ‫دس‬ ‫دػسٛساذ‬ ْ‫زٕا‬ ٓ‫ٕ٘ایی‬ ٜ‫اػسفاد‬.‫ؿٛ٘ذ‬ ‫ٔی‬ ‫اخشا‬ ‫یىذیٍش‬ ‫تا‬ ٖ‫ٕٞضٔا‬ ‫تّٛن‬ َ‫ٔثا‬18:.‫وشد‬ ٓ‫خٛاٞی‬ ٜ‫ٔـاٞذ‬ ‫سا‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ٞای‬ ‫ثثاذ‬ ٖ‫وشد‬ ‫كفش‬ ٖ‫صٔا‬ ‫وٙیذ‬ ‫فشم‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬clk، resetٚdata3‫ثثاذ‬ ٖ‫وشد‬ ‫كفش‬ ٖ‫صٔا‬ ٚ ٖ‫صٔا‬ ‫ٚاحذ‬enable5‫ا٘د‬ ْ‫ازٕا‬ ٖ‫صٔا‬ ‫دػسٛس‬ ‫ٞش‬ ‫خّٛی‬ .‫تاؿذ‬ ٖ‫صٔا‬ ‫ٚاحذ‬ٝ‫٘ٛؿس‬ ٖ‫صٔا‬ ‫ٚاحذ‬ ‫حؼة‬ ‫تش‬ ٖ‫آ‬ ْ‫ا‬ ‫دػسٛساذ‬ ‫زفاٚذ‬ ‫زا‬ ‫اػر‬ ٜ‫ؿذ‬beginٚfork.‫ؿٛد‬ ٖ‫ٕ٘ایا‬ initial begin clk = 0; // Execute finish at 23 clk reset = 0; // Execute finish at 26 clk enable = 0; // Execute finish at 211 clk data = 0; // Execute finish at 214 clk end initial fork clk = 0; // Execute finish at 23 clk reset = 0; // Execute finish at 23 clk enable = 0; // Execute finish at 25 clk data =0; // Execute finish at 23 clk join
  • 42. ٝ‫كفح‬42‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫ضرطی‬ ‫ّای‬ ‫بلَک‬ Verilog‫تّٛن‬ ‫دػسٛساذ‬ ‫وّی‬ ‫لاِة‬ .‫تاؿذ‬ ‫ٔی‬ ‫ؿشًی‬ ‫ٞای‬ ‫تّٛن‬ ‫داسای‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٔا٘ٙذ‬ ‫٘یض‬: ‫تاؿذ‬ ‫ٔی‬ ‫صیش‬ ‫كٛسذ‬ ٝ‫ت‬ ‫ؿشًی‬ if(Condition) Statement which executed when Condition is True else if(Second Condition) Statement Which executed when Second Condition is True else Statement Which executed when None of these Conditions are True ‫ؿشًی‬ ‫ػثاساذ‬elseٚelse if‫ػثاسذ‬ ‫اص‬ ‫دفؼاذ‬ ٝ‫ت‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ؿشًی‬ ‫تّٛن‬ ‫یه‬ ‫دس‬ .‫تاؿٙذ‬ ‫ٔی‬ ‫اخسیاسی‬else if‫اػسف‬.‫ٕ٘ٛد‬ ٜ‫اد‬ َ‫ٔثا‬19:.ٓ‫وٙی‬ ‫ٔی‬ َ‫ٔذ‬ ‫تشػی‬ ‫سا‬ ٜ‫ػاد‬ ‫تؼیاس‬ ٝ‫خٟس‬ ٚ‫د‬ ٜ‫ؿٕاس٘ذ‬ ‫یه‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬ if (reset == 1'b0) counter = 4'b0000; else if (enable == 1'b1 && up_en == 1'b1) counter = counter + 1'b1; else if (enable == 1'b1 && down_en == 1'b1); counter = counter - 1'b0; else counter = counter; ‫دستَر‬Case ‫ٔی‬ ‫ٕ٘ایؾ‬ ‫تؼذی‬ ‫ٞای‬ َ‫ٔثا‬ َ‫خال‬ ‫دس‬ ‫سا‬ ‫دػسٛس‬ ٗ‫ای‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ .‫تاؿذ‬ ‫ٔی‬ ‫٘ٛیؼی‬ ٝٔ‫تش٘ا‬ ‫ٞای‬ ٖ‫صتا‬ ‫دیٍش‬ ‫ٕٞا٘ٙذ‬ ‫دلیما‬ ‫دػسٛس‬ ٗ‫ای‬ ‫واسوشد‬.ٓ‫دٞی‬
  • 43. ٝ‫كفح‬43 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog ‫کٌترل‬‫در‬ ‫زهاى‬ِ‫یافت‬ ‫ساخت‬ ‫ّای‬ ‫بلَک‬ ‫ٔی‬ ‫احؼاع‬ ‫خاكی‬ ‫ٞای‬ ٖ‫صٔا‬ ‫دس‬ ‫تّٛن‬ ‫ػاصی‬ َ‫فؼا‬ ٝ‫ت‬ ‫٘یاص‬ ‫ٞا‬ ‫ٚلر‬ ‫تؼوی‬ .‫وٙٙذ‬ ‫ٔی‬ ‫واس‬ ٝ‫ت‬ ‫ؿشٚع‬ ‫كفش‬ ٖ‫صٔا‬ ‫دس‬ ٝ‫یافس‬ ‫ػاخر‬ ‫ٞای‬ ‫تّٛن‬ ‫وّی‬ ‫حاِر‬ ‫دس‬.‫ؿٛد‬ ‫دس‬Verilog.‫ؿٛد‬ َ‫فؼا‬ ‫ٔـخق‬ ‫ٔخسّف‬ ‫ٞای‬ ‫خاِغ‬ ‫اص‬ ‫زشویثی‬ ‫یا‬ ‫خاِغ‬ ‫یه‬ ٝ‫ِث‬ ‫دس‬ ‫زا‬ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫ًٛسی‬ ‫سا‬ ٝ‫یافس‬ ‫ػاخر‬ ‫تّٛن‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬ ‫ز‬ ‫کٌترل‬‫رٍیداد‬ ‫بر‬ ‫هبٌی‬ ‫هاى‬1 ‫یه‬ ‫یا‬ ‫ثثاذ‬ ‫یه‬ ‫زغییش‬ ‫ٔؼٙای‬ ٝ‫ت‬ ‫سٚیذاد‬ ‫یه‬Net.‫اػر‬ٝ‫ػ‬‫سٚیذاد‬ ‫تش‬ ‫ٔثسٙی‬ ٖ‫صٔا‬ َ‫وٙسش‬ ‫٘ٛع‬‫وشد‬ ٓ‫خٛاٞی‬ ‫تشػی‬ ٝٔ‫ادا‬ ‫دس‬ ‫سا‬. : ‫لاعده‬ ‫با‬ ‫رویداد‬ ‫کنترل‬‫ػالٔر‬@ٜ‫تاالسٚ٘ذ‬ ٝ‫ِث‬ ‫تا‬ َ‫ػیٍٙا‬ ‫یه‬ ‫ٔمذاس‬ ‫زغییش‬ ‫تا‬ ‫زٛا٘ٙذ‬ ‫ٔی‬ ‫دػسٛساذ‬ .‫ؿٛد‬ ‫ٔی‬ ٜ‫اػسفاد‬ ‫سٚیذاد‬ َ‫وٙسش‬ ٖ‫وشد‬ ‫ٔـخق‬ ‫تشای‬ .‫ا٘ذ‬ ٜ‫ؿذ‬ ‫ٔـخق‬ ‫صیش‬ َٚ‫خذ‬ ‫دس‬ ٜ‫سٚ٘ذ‬ ٗ‫خایی‬ ٚ ٜ‫سٚ٘ذ‬ ‫تاال‬ ٝ‫ِث‬ .‫ؿٛ٘ذ‬ ‫اخشا‬ َ‫ػؼیٍٙا‬ ‫یه‬ ٜ‫سٚ٘ذ‬ ٗ‫خایی‬ ‫یا‬ ‫لبه‬‫لبلی‬ ‫همدار‬‫جدید‬ ‫همدار‬ ‫باالرونده‬ z1 x1 01,x,z ‫رونده‬ ‫پایین‬ z0 x0 10,x,z َ‫ٔثا‬20:‫تّٛن‬ ‫یه‬ َ‫وٙسش‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬‫ػثاسذ‬ ، ٜ‫سٚ٘ذ‬ ‫تاال‬ ّٝ‫ت‬ ‫دس‬ ْٚ‫د‬ ‫ػثاسذ‬ ، ٝ‫ِث‬ ‫ٞش‬ ‫دس‬ َٚ‫ا‬ ‫ػثاسذ‬ .ٓ‫وٙی‬ ‫ٔی‬ ‫تشػی‬ ‫سا‬ ٜ‫لاػذ‬ ‫تا‬ ‫سٚیذاد‬ ‫یه‬ ‫دس‬ .‫ؿذ‬ ‫خٛاٞٙذ‬ ‫اخشا‬ ٜ‫سٚ٘ذ‬ ‫تاال‬ ٝ‫ِث‬ ‫دس‬ ْ‫چٟاس‬ ‫ػثاسذ‬ ٚ ٜ‫سٚ٘ذ‬ ٗ‫خایی‬ ٝ‫ِث‬ ‫دس‬ ْٛ‫ػ‬ 1 Event
  • 44. ٝ‫كفح‬44‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog @(clock) q = d; // Triggered with any change in clock @(posedge clock) q = d; // Triggered positive edge of clock @(negedge clock) q = d; // Triggered negative edge of clock q = @(posedge clock) d; // d is evaluated immediately and assigned to q at positive edge of clock : ‫نام‬ ‫با‬ ‫رویداد‬ ‫کنترل‬‫دس‬Verilog‫سا‬ ٖ‫آ‬ ْٚ‫ِض‬ ‫ٔٛالغ‬ ‫دس‬ ٚ ‫ٕ٘ٛد‬ ‫زؼشیف‬ ‫سا‬ ‫سٚیذاد‬ ‫یه‬ ٖ‫زٛا‬ ‫ٔی‬‫زحشیه‬1 ٜ‫ٚاط‬ ‫وّیذ‬ ‫تا‬ ‫سٚیذاد‬ ٗ‫ای‬ ‫زؼشیف‬ .ٓ‫ٕ٘ایی‬eventٚ ‫زحشیه‬‫تا‬ ٖ‫آ‬ ٖ‫وشد‬->.‫ؿٛد‬ ‫ٔی‬ ْ‫ا٘دا‬ : ‫رویداد‬ ‫چند‬ ‫کنترل‬‫زٛػي‬ ‫أش‬ ٗ‫ای‬ .‫ؿٛد‬ ‫ٔی‬ ‫دػسٛساذ‬ ‫اص‬ ٝ‫ٔدٕٛػ‬ ‫یه‬ ‫اخشای‬ ٖ‫ؿذ‬ ‫زشیٍش‬ ‫ػثة‬ ‫آٟ٘ا‬ ‫اص‬ ‫یىی‬ ‫دس‬ ‫زغییش‬ ٝ‫و‬ ٓ‫داسی‬ َ‫ػیٍٙا‬ ‫چٙذ‬ ‫اٚلاذ‬ ‫ٌاٞی‬ orٝ‫ت‬ ‫ٞا‬ َ‫ػیٍٙا‬ ‫یا‬ ‫ٞا‬ ‫سٚیذاد‬ ٗ‫ای‬ ‫ِیؼر‬ .‫ؿٛد‬ ‫ٔی‬ ْ‫ا٘دا‬ ‫ٞا‬ َ‫ػیٍٙا‬ ‫یا‬ ‫ٞا‬ ‫سٚیذاد‬ ٖ‫وشد‬‫حؼاػیر‬ ‫ِیؼر‬2 .‫اػر‬ ‫ٔـٟٛس‬ َ‫ٔثا‬21:‫سٚیذاد‬ ‫اص‬ ٜ‫اػسفاد‬ ٜٛ‫٘ح‬ ‫تا‬ َ‫ٔثا‬ ٗ‫ای‬ ‫دس‬.‫ؿٛیذ‬ ‫ٔی‬ ‫آؿٙا‬ ‫سٚیذاد‬ ‫چٙذ‬ ‫تا‬ َ‫وٙسش‬ ٚ ْ‫٘ا‬ ‫تا‬ ‫ٞا‬ // ----- Event Control by Name ------ event rec_data; // Defining Event always @(posedge clock) // Triggering at Positive Edge begin if( last_data_packet ) ->rec_data; // Triggering defined event end always @(rec_data) data_buf = { data[0] , data[1], data[2], data[3] }; // ----- Event Control by Multiply Signals ------ always @(posedge clock or reset) begin if( reset ) q = 0; else q = d; end 1 Trigger 2 Sensitivity List
  • 45. ٝ‫كفح‬45 ‫افضاس‬ ‫ػخر‬ ‫زٛكیف‬ ٖ‫صتا‬ ‫آٔٛص‬ ‫خٛد‬Verilog 11)‫سطح‬ ‫در‬ ‫مدار‬ ‫طراحی‬‫رفتاری‬ : ‫رفتاری‬ ‫سطح‬ ‫در‬ ‫ترکیبی‬ ‫ّای‬ ‫هدار‬ ‫طراحی‬ ‫د‬ ‫سا‬ ‫ٔذاس‬ ‫ٞای‬ ‫ٚسٚدی‬ ْ‫زٕا‬ ‫تایذ‬ ،‫سفساسی‬ ‫ػٌح‬ ‫دس‬ ‫زشویثی‬ ‫ٞای‬ ‫ٔذاس‬ ‫ًشاحی‬ ‫تشای‬‫س‬ٝ٘‫تذ‬ ‫حؼاع‬ ‫ِیؼر‬alwaysٝ‫زٛخ‬ ‫تایذ‬ ‫ٔذاس‬ ‫زٛكیف‬ ْ‫ٍٞٙا‬ ٝ‫ت‬ .‫وشد‬ ‫روش‬ ‫ٞای‬ ‫ؿشى‬ ْ‫زٕا‬ ٝ‫و‬ ‫داؿر‬if‫داسای‬ ‫تایذ‬else‫خٌّٛیش‬ ‫زشزیثی‬ ‫ٔذاس‬ ‫ایداد‬ ‫اص‬ ‫زا‬ ‫تاؿٙذ‬.‫ؿٛد‬ ‫ی‬ َ‫ٔثا‬22:‫خّىؼش‬ ‫ٔاِسی‬ ‫یه‬ ‫زٛكیف‬ ‫صیش‬ َ‫ٔثا‬ ‫دس‬4ٝ‫ت‬1.‫دیذ‬ ‫خٛاٞیذ‬ ‫سا‬ // Behavioral model of a 4-to-1 multiplexer module mux4_to_1 ( out, i0, i1, i2, i3, s1, s0 ); output out; reg out; input i0, i1, i2, i3, s1, s0; always @( i0 or i1 or i2 or i3 or s1 or s0 ) begin case { s1, s0 } 2'b00 : out = i0; 2'b01 : out = i1; 2'b10 : out = i2; 2'b11 : out = i3; defualt : out = 1'bx; endcase end endmodule ‫رفتاری‬ ‫سطح‬ ‫در‬ ‫ترتیبی‬ ‫ّای‬ ‫هدار‬ ‫طراحی‬ .ٓ‫وٙی‬ ‫ٔی‬ ٖ‫تیا‬ َ‫ٔثا‬ ‫چٙذ‬ ‫روش‬ ‫تا‬ ‫ٞا‬ ‫ٔذاس‬ ٗ‫ای‬ ‫ًشاحی‬