More Related Content More from Seyed Yahya Moradi More from Seyed Yahya Moradi (18) Verilog2. ٝكفح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
رفتاری سطح در ترتیبی ّای هدار طراحی
.ٓوٙی ٔی ٖتیا َٔثا چٙذ روش تا ٞا ٔذاس ٗای ًشاحی