Verilog Hardware Description Language
Verilog Hardware Description Language
Verilog
ابراهیم جهاندار
www.jahandar.ir
خود آموز زبان توصیف سخت افزار Verilog صفحه 2
فهرست مطالب
مقدمه 3 .......................................................................................................................................................................................
)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و ...جمع آوری و تدوین شده است.
در پایان از تمامی خوانندگان عزیز تقاضا دارم که ایراد و پیشنهادات خود را به آدرس پست الکترونیک اینجانب به نشانی e {at} jahandar.irارسال نموده و به هرچه
بهتر شدن آن کمک نمایند .همچنین نسخه های جدید این کتابچه را می توانید از ادرس زیر دریافت نمایید.
www.jahandar.ir/files/Verilog-Hardware-Description-Language.pdf
تمامی حقوق این کتابچه برای نویسنده آن محفوظ می باشد .نسخه الکترونیکی کتابچه فوق بصورت مجانی در اینترنت قرار داده شده است ،فروش و یا هرگونه درآمد
زایی از طریق این کتابچه مجاز نمی باشد منوط به اجازه از موئلف می باشد.
)1سبک طراحی
به پردازیم ،ابتدا نیاز است تا کمی درباره سبک طراحی توسط زبان های توصیف سخت افزار صحبت کنیم .زبان Verilog قبل از اینکه به جزئیات زبان
Verilogمانند دیگر زبان های توصیف سخت افزار به طراحان امکان طراحی از باال به پایین و از پایین به باال را می دهد ،هریک از این متد ها دارای مزایا و
معایبی می باشند که به آن اشاره می شود.
1
سبک طراحی از پایین به باال
متد طراحی پایین به باال یک متد سنتی در طراحی مدار های دیجیتال می باشد .در این متد سخت افزار دیجیتال از پایین ترین سطح یعنی سطح گیت
طراحی می شود و در هر مرحله تا رسیدن به سخت افزار مورد نظر به پیچیدگی آن اضافه خواهد شد .با افزایش پیچیدگی سخت افزار های جدید پیاده
سازی توسط این متد بسیار سخت و نا ممکن خواهد شد.
1
سبک طراحی از باال به پایین
متداول ترین متد در طراحی و توصیف یک سخت افزار متد طراحی از باال به پایین می باشد ،در این متد طراح بخش های مختلف یک سخت افزار را
بصورت جداگانه و از باال به پایین طراحی می کند .از مزیت های این متد می توان به قابلیت تست های اولیه ،تغییر طراحی بخش های مختلف بدون ایجاد
تغییرات در دیگر بخش ها ،ط راحی روتین و ...اشاره کرد .در عوض پیاده سازی کامل این متد نیازمند اطالعات و دید سیستمی می باشد که در مقایسه با
متد قبل مشکل تر می باشد ،به همین دلیل بیشتر طراحان سخت افزار در طراحی های خود از ترکیب هر دو متد جهت طراحی سیستم های دیجیتال
استفاده می کنند.
برسی عملکرد
تفسیر منطقی طراحی ثباتی
Functional
Logic Synthesis RTL Design
Verfication
1
سطح توصیف گیت
در این سطح طراحی ،سخت افزار مستقیماً توسط گیت های منطقی و اتصاالت میان آنها توصیف می شود .در این سطح بصورت مستقیم با سیگنال 2های
ورودی ،خروجی و داخلی سروکار داریم .طراحی در این سطح برای مدار های بزرگ و پیچیده کار بسیار مشکلی است و معموال سخت افزار توسط سطوح
باالتر طراحی و توسط ابزار های سنتز 3به سطح گیت تبدیل خواهد شد.
5
سطح توصیف رفتاری
در این سطح سخت افزار برحسب بلوک های همزمان طراحی می شود .در این روش نیازی به توصیف جزئیات سخت افزاری طرح نمی باشد .هر
بلوک به تنهایی بصورت ترتیبی بیان می شود بطوری که دستورات یکی پس از دیگری اجرا می شوند و مجموعه این بلوک ها رفتار سخت افزار را
توصیف می کند .توابع ،تسک ها و ماجول ها از ابزار اصلی در این سطح طراحی می باشند.
در مرحله ویژگی های کلی یک سخت افزار از قبیل نوع ورودی ها و خروجی و عملیات پردازشی بصورت کلی برسی می شود.
در این مرحله ورودی و خروجی های سخت افزار بطور دقیق مورد برسی قرار می گیرند و برای دستیابی به خروجی های مورد نظر بلوک های
مختلفی را تعبیه خواهیم کرد .اینکار درواقع شکاندن یک طراحی کلی به واحد های کوچک تر می باشد .این واحد های کوچکتر را بلوک می
نامیم .برای مثال می خواهیم یک پردازنده ابتدایی طراحی کنیم ،بلوک
های اصلی این پردازنده عبارتند از واحد پردازش مرکزی ،واحد حافظه،
ثبات ها ،ورودی و خروجی و واحد کنترل می باشند.
در این مرحله طراح بر اساس ورودی و خروجی هر بلوک و نوع پردازشی که هر بلوک می بایست انجام دهد بلوک را پیاده سازی می کند.
پیاده سازی در این مرحله توسط ثبات ها ،دیکودر ها ،مالتی پلکسر ها ،شمارنده ها و ...انجام می شود.
در این مرحله طراحی مرحله قبل به کد های Verilogو یا دیگر زبان های توصیف سخت افزار تبدیل می شود .تبدیل طرح های مرحله قبل
به کد های توصیف سخت افزار می بایست در چهارچوب و قوانین برنامه نویسی آن زبان صورت پذیرد.
این مرحله شامل عملیاتی برای شبیه سازی سخت افزار طراحی شده می باشد .شبیه سازی به منظور اطمینان از کارکرد صحیح سخت افزار
صورت می گیرد .در این مرحله می بایست از نرم افزار های شبیه سازی زبان توصیف سخت افزاری استفاده نمود .همچنین می بایست یک
خود آموز زبان توصیف سخت افزار Verilog صفحه 10
سخت افزار جداگانه برای تست سخت افزار طراحی شده از قبل طراحی کرده باشیم .به این سخت افزار جدید Testbenchگفته می شود .این
سخت وظیفه تولید سیگنال های ورودی و سنجش سیگنال های خروجی سخت افزار طراحی شده را بر عهده دارد.
سنتز عملیات مشابه کامپایل در زبان های برنامه نویسی نرم افزاری می باشد .ابزار سنتز با استفاده از اطالعات ورودی از قبیل نوع تکنولوژی
می نماید و در انتها آنها را تبدیل به نقشه RTL سخت افزار مقصد ،نقشه ورودی ها و خروجی ها و بانک اطالعاتی اقدام به پردازش کد های
سطح گیت خواهد کرد .ابزار سنتز همچنین پس از انجام عملیات سنتز اقدام به آنالیز مدار سنتز شده جهت اطمینان از همزمانی بخش های
مختلف با یکدیگر و بوجود نیامدن مشکالت زمانی می نماید ( قابل ذکر است که در عملیات سنتز تاخیر های موجود در سخت افزار های واقعی
در نظر گرفته نمی شود ) .به خروجی ابزار سنتز نت لیست گفته می شود که بیانگر گیت های منطقی و اتصاالت میان آنهاست.
صفحه 11 خود آموز زبان توصیف سخت افزار Verilog
در این مرحله نت لیست تولید شده توسط ابزار سنتز شبیه سازی شده و عملکرد صحیح آن مورد برسی قرار خواهد گرفت .
فرایند تبدیل کد های توصیف سخت افزار به کد های توصیف سطح گیت که به آن سنتز می گویند شکل .7
این مرحله درواقع مربوط به طراحی مدار مجتمع مطابق با نت لیست تولید شده در مراحل قبلی می باشد.
خود آموز زبان توصیف سخت افزار Verilog صفحه 12
)4تعاریف اولیه
1
ماجول
برای توصیف سخت افزار های نسبتا پیچیده چاره ای جز تجزیه سخت افزار به بخش های کوچک تر نداریم ،این بخش های کوچک را یک ماجول می نامیم.
) ساختار سلسله مراتبی 2را بوسیله نمونه سازی از ماجول ها … Java , C++ , C# می توان مانند زبان های برنامه نویسی شی گرا ( Verilog در زبان
پیاده سازی کرد.
یک ماجول عملکرد مورد نیاز ماجول های باالتر را فراهم می کند اما پیاده سازی درون آن را پنهان می کند.
3
نمونه
یک ماجول الگویی از یک عنصر واقعی را پیاده سازی میکند ،هنگامی که از این ماجول استفاده می
شود Verilogیک نمونه از این الگو را بصورت خودکار خواهد ساخت و ورودی و خروجی های مورد نظر
شما را به آن متصل خواهد کرد .این نمونه درواقع یک کپی از ماجول اصلی می باشد .برای مثال شما
یک ماجول ثبات 8بیتی طراحی میکنید و با نمونه سازی از این ماجول در بخش های مختلف چندین
یا نمونه سازی و این Instantiation ثبات دیگر از همین نوع را پیاده سازی خواهید کرد .به این کار
عنصر را Instanceیا نمونه می نامند.
Module 1
Hierarchy Structure 2
Instance 3
صفحه 13 خود آموز زبان توصیف سخت افزار Verilog
فاصله خالی
فاصله خالی در هنگام سنتز توسط ابزار سنتز در نظر گرفته نمی شود .فقط در مواردی که فاصله درون یک رشته و یا به عنوان جدا کننده Verilog در زبان
توکن ها (دستورات و داده ها) استفاده شده باشد در در نظر گرفته خواهد شد .کرکتر های زیر به عنوان فاصله خالی در نظر گرفته خواهند شد :
توضیحات
نحوه توضیح نویسی در زبان Verilogکامال مشابه به زبان Cمی باشد .
توضیحات تک خطی با عالمت //شروع می شوند و با یک شروع یک خط جدید ( کارکتر ) Carriage Returnخاطمه می یابند.
توضیحات چند خطی با * /شروع و با */تمام می شوند .در این حالت توضیحات می تواند دارای چندین خط باشد.
Verilog خود آموز زبان توصیف سخت افزار 14 صفحه
Verilog عبارتی که با پس زمینه زرد مشخص شده است از قواعد زبان، در این مثال با نحوه توضیح گذاری صحیح و اشتباه آشنا می شود: 1 مثال
.پیروی نمی کند
.در این مثال با نحوه توضیح گذاری چند خطی آشنا خواهید شد
/* 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استفاده نکنید .
مثال : 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و عالمت دالر ( ) $باشند.
Keyword 1
Identifier 2
خود آموز زبان توصیف سخت افزار Verilog صفحه 16
مثال : 3در این مثال نحوه نام گذاری صحیح معرف ها را خواهیم دید ،معرف هایی که با پس زمینه زرد رنگ مشخص شده اند صحیح نمی باشند و
قواعد زبان Verilogرا رعایت نمی کنند.
تعریف نمود ،در این حالت شما می توانید از همه کرکتر های قابل چاپ جهت نام Escaped هم چنین می توان معرف ها را بصورت Verilog در زبان
). 0x21تا 0x7E گذاری معرف استفاده کنید .این کرکتر ها عبارتند از تمامی حروف الفبا انگلیسی ،اعداد و نشانه ها ( کرکتر های اسکی از کد هگزدسیمال
در این روش نام گذاری معرف با کرکتر بک اسلش ( \ ) شروع شده و تا زمانی که اولین فاصله مشاهده شود ادامه دارد .به عبارتی دیگر کرکتر شروع معرف
بک اسلش و کرکتر اتمام آن فاصله می باشد.
در زبان Verilogمی توان اعداد را در مبنای های دسیمال ،هگز دسیمال ،اوکتال و یا باینری تعریف نمود .اعداد منفی در Verilogبصورت متمم 2تعریف
خواهند شد .در تعریف اعداد می توان از عالمت _ ( ) Under Scoreبرای جدا سازی اعداد استفاده نمود Verilog ،بصورت خودکار این عالمت را از اعداد
حذف می کند ( .باید توجه داشت که از این عالمت نمی توان در ابتدای عدد استفاده کرد ).
صفحه 17 خود آموز زبان توصیف سخت افزار Verilog
اعداد دارای اندازه و بی اندازه ( اعداد بی اندازه به صورت پیشفرض 32بیتی تعریف می شوند ).
اعداد در مبنا های مختلف نظیر باینری ،اوکتال ،دسیمال و هگز دسیمال( .نشانگر مبنا با حرف کوچک نمایش داده می شوند ،ارقام هگز
><Size>'<Radix><Value
افزودن فاصله بین نشانگر های اندازه ،مبنا و مقدار اعداد مجاز بوده Verilogبطور خودکار این فاصله ها را حذف می کند.
مثال : 5در این مثال با انواع نمایش های مختلف آشنا خواهید شد.
در Verilogاعداد از سمت راست شروع و با توجه اندازه مشخص شده ادامه می یابد.
اگر اندازه کوچکتر از مقدار باشد ،مقادیر اضافه سمت چپ حذف می گردند.
اگر اندازه بزرگتر از مقدار باشد ،مقادیر باقی مانده سمت چپ با توجه به آخرین بیت سمت چپ خوانده شده پر خواهند شد .اگر آخرین
بیت 0و یا 1باشد با ، 0اگر اخرین بیت Zو یا Xباشد به ترتیب با Zو Xپر خواهد شد.
مثال : 6
زبان Verilogقابلیت پشتیبانی از اعداد حقیقی بصورت متغیر و ثابت را دارا می باشد Verilog .به طور خودکار این اعداد را روند کرده و به عدد صحیح قابل
ذخیره سازی در حافظه تبدیل می کند .اعداد حقیقی نمی توانند شامل Zیا Xباشند .اعداد حقیقی می توانند با نمایش دسیمال و یا علمی تعریف شوند.
><Value>.<Value
><Mantissa>E<Exponent
مثال : 7عبارت های زیر همگی نحوه نمایش صحیح اعداد حقیقی می باشند.
// Valid Real Numbers
1.2 0.3 6.1623.6 6.3E8 2..631E3
مانند زبان های دیگر نمی توانیم عالمت دار بودن و یا نبودن اعداد را مشخص کنیم .هر عددی که عالمت – قبل از آن آورده شود منفی و در 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وجود دارد :روش ترتیبی و روش نام گذاری
در روش ترتیبی به هنگام نمونه سازی ا ز ماجول می بایست متغیر های اتصال به پورت ها را دقیقا به همان ترتیبی که در تعریف پورت آورده شده است
بیاوریم .در این روش اگر بخواهیم یک پورت خروجی به جایی متصل نباشد کافی است جای آن را خالی بگذاریم.
Port 1
خود آموز زبان توصیف سخت افزار Verilog صفحه 20
در روش نام گذاری از اسامی پورت ها که در تعریف ماجول آورده شده است استفاده می نماییم .معموال زمانی که تعداد ماجول ها و پورت های آنها افزایش
می یابد و بخاطر سپردن ترتیب آنها دشوار می شود استفاده می شود .در این روش اگر بخواهیم یک پورت خروجی به جایی متصل نباشد کافی است نام آن
را نیاوریم.
) .port_name( external_signal_name
مثال : 8در بخش اول این مثال چند حالت تعریف پورت ها آورده شده است .در دو بخش دوم دو روش ارتباط دهی نمایش داده شده است .جمع
کننده های 1تا adder1( 6تا )adder6همگی یک نمونه از ماجول adderکه قبال تعریف کرده بودیم می باشند ( در صفحات قبل فقط پورت های
این ماجول تعریف شده اند نه اجزای داخلی آن ).
جمع کننده های 1و 2 ، 4و 3 ، 5و 6دارای ورودی و خروجی های یکسانی هستند ،تنها فرق آنها در روش ارتباط آنهاست .در جمع کننده های 1تا 3از
روش ترتیبی و در جمع کننده های 4تا 6از روش نام گذاری استفاده شده است.
input ;clk // Clock input
;input [11:0] data_in // 13bit Data input bus
;output [.:0] data_out // 8bit Data output bus
inout [11:0] data_bus // 13bit Bi-Directional data bus
adder1 ;)adder( data_a, data_b, carry_i, summation, carry_o
adder2 ;)adder( data_a, data_b, carry_i, summation
adder6 ;)adder( data_a, data_b, carry_i, , carry_o
adder6 ;))adder( .a(data_a), .b(data_b), .sum(summation), .ci(carry_i), .co(carry_o
adder1 ;))adder( .a(data_a), .b(data_b), .sum(summation), .ci(carry_i
adder3 ;))adder( .a(data_a), .b(data_b), .ci(carry_i), .co(carry_o
صفحه 21 خود آموز زبان توصیف سخت افزار Verilog
دو نوع داده مهم در Verilogعبارتند از Netو . Registerداده Netنمایانگر ارتباط پایه ای میان قسمت های مختلف است .داده Registerنمایانگر یک
متغیر برای ذخیره سازی اطالعات است .هر یک از داده های فوق می توانند بصورت تکی و یا برداری 1تعریف شوند.
نت ( )Netها در واقع اتصاالت واقعی میان مدارات هستند .نت ها در Verilogتوسط کلید واژه wireتعریف می شود و مقدار پیشفرض آن Zمی باشد.
در Verilogمجموعا چهار مقدار برای هر نت وجود دارد ،این چهار مقدار عبارتند از :
توضیح مقدار
سطح منطقی ، 0شرط نادرست 0
سطح منطقی ، 1شرط درست 1
مقدار نا مشخص X
حالت امپدانس باال ( شناور ) Z
ثبات ها آخرین مقداری که به آنها داده شده است را تا زمانی که مقدار جدیدی به آنها داده شود در خود نگه داری می کنند.
می توان یک آرایه از ثبات ها را بوجود آورد که در این صورت به آن حافظه ( )Memoryگفته می شود.
از ثبات ها به عنوان متغیر در بلوک های ساخت یافته( )Proceduralاستفاده کرد.
Vector 1
خود آموز زبان توصیف سخت افزار Verilog صفحه 22
اگر بخواهید یک سیگنال حاوی مقدار را به یک بلوک ساخت یافته انتقال دهید باید از ثبات استفاده کنید.
1
رشته ها در Verilog
)doubleقرار گرفته اند .باید توجه داشت در Verilogرشته ها بصورت (quotation یک رشته مجموعه ای از کاراکتر ها می باشد که درون دو عالمت "
تک خطی می باشند و نمی توان آنها را بصورت چند خطی تعریف نمود .در Verilogکرکتر ها بصورت 8بیت و بصورت اسکی ( )ASCIIتعریف می شوند.
در یک ثبات Verilog )Terminationبرای نمایش انتهای رشته نمی باشد .رشته ها در (Character نیازی به کرکتر انتهایی C بر خالف Verilog در
Verilog بزرگتر مقدار داده شده با آن باشد، Verilog ذخیره می شوند و طول ثبات باید به اندازه رشته ورودی بزرگ باشد .زمانی که یک ثبات رشته در
بطور خودکار بیت های سمت چپ اضافی را با صفر پر خواهد کرد .کرکتر های خاص در Verilogرا می توان با پیشوند بک اسلش ( \ ) تعریف نمود ،برخی از
این کرکتر ها عبارتند از :
Strings 1
صفحه 23 خود آموز زبان توصیف سخت افزار Verilog
تفاوت آرایه و بردار در این است که یک آرایه می تواند مجموعه ای از عناصر با طول های مختلف را در خود نگه داری کند اما بردار تعداد مشخصی از یک
عنصر است.
2
حافظه ها در Verilog
در Verilogحافظه ها بصورت آرایه ای از ثبات ها تعریف می شوند .فرمت کلی تعریف یک حافظه در Verilogبصورت زیر می باشد :
]reg [ #word_size : 0 ] array_name [0:array_size
مثال : 9در این مثال نحوه تعریف ثبات ها ،نت ها و ثبات های برداری ،متغیر های حقیقی و صحیح و حالت برداری آنها ،رشته و حافظه آشنا می
شوید .توجه داشته باشید که رشته پس از تعریف و درون یک بلوک ساخت یافته مقدار دهی می شود.
Array 1
Memory 2
Verilog خود آموز زبان توصیف سخت افزار 24 صفحه
قالب کلی تعریف ماجول به صورت زیر می. در این بخش به نحوه تعریف ماجول و ویژگی های آن می پردازیم، قبال آشنا شدیم Verilog با ماجول ها در
: باشد
به هنگام اتصال پورت های یک ماجول به جهان خارج باید به نکاتی توجه داشت :
پورت های ورودی ماجول باید از نوع netباشند و این پورت ها می توانند به متغیر هایی از نوع regو یا netدر جهان خارج متصل شوند.
پورت های خروجی ماجول می توانند از نوع regو یا netباشند و این پورتها باید به متغیر هایی از نوع netدر جهان خارج متصل شوند.
پورت های دو سویه ماجول باید از نوع netباشند ،و این پورتها می توانند به متغیر هایی از نوع regو یا netدر جهان خارج متصل شوند.
پورتهای ماجول و متغیر های خارجی متصل به آنها باید از نظر طول منطبق باشند.
1
پیش پردازش در Verilog
نیز مانند تمامی زبان های برنامه نویسی دیگر می توان پارامتر های پیش پردازش را تعریف نمود و در صورت نیاز از آنها استفاده نمود .یکی از Verilog در
می باشد .توسط این دستور می توان یک مقدار ،دستور ،شرط ... ،را با یک نام تعریف Verilogدستورdefine پرکاربر ترین دستورات پیش پردازشی در
نمود و از آن پس فقط از آن نام در کد ها استفاده کرد .قالب کلی استفاده از دستور defineبه صورت زیر است:
>`define <Definition-Name> <Definition-Statement
برای استفاده از این تعریف در کد ها فقط کافی است نام آن را به همراه عالمت ` بیاورید .به صورت زیر :
>`<Definition-Name
از این دستور در مثال های آخر کتابچه به دفعات استفاده خواهیم کرد.
Preprocessing 1
خود آموز زبان توصیف سخت افزار Verilog صفحه 26
در Verilogشش گیت پایه ای اصلی وجود دارد ،این گیت ها عبارتند از گیت های XOR ، NOR ، OR ، NAND ، ANDو . XNORهمگی این گیت ها
دارای چند ورودی و یک خروجی می باشند .اولین پورت هر گیت خروجی آن و پورت های بعدی ورودی های گیت را تشکیل می دهند بدین ترتیب می
توان گیت هایی با تعداد ورودی های مختلف تعریف نمود.
6گیت انتقالی اصلی عبارتند از گیت های وارونگر ، 4بافر ، 5بافر سه 6حالته فعال پایین ،بافر سه حالته فعال باال ،وارونگر سه حالته فعال پایین و وارونگر سه
حالته فعال باال .پورت آخر گیت های دو حالته ورودی و دیگر پورت ها خروجی هستند ،بدین ترتیب می توان گیت هایی با تعداد خروجی های دلخواه
تعریف نمود .در گیت های سه حالته پورت اول خروجی ،پورت دوم ورودی و پورت سوم پورت کنترل می باشد.
کلید واژه نماد نام گیت کلید واژه نماد نام گیت
bufif0 بافر سه حالته فعال پایین notif0 وارونگر سه حالته فعال پایین
bufif1 بافر سه حالته فعال باال notif1 وارونگر سه حالته فعال باال
برای طراحی مدار در سطح گیت ابتدا باید آنرا بصورت مجموعه ای از گیت های پایه در آورد ،سپس با تعریف netهای مورد نیاز این گیتهای پایه را به
یکدیگر متصل نمود .به این کار اصطالحا سیم بندی یا Wiringگفته می شود.
خود آموز زبان توصیف سخت افزار Verilog صفحه 28
مثال : 10در این مثال با استفاده دو گیت NANDیک گیت ANDمی سازیم.
;)module and_from_nand(X, Y, F
;input X, Y
;output F
wire ;W
;)nand U1(W, X, Y
;)nand U2(F, W, W
endmodule
در این ماجول Xو Yورودی و Fخروجی می باشد.
مثال : 11در این مثال با ساخت یک فلیپ فالپ نوع دی آشنا می شویم.
;)module dff(Q, Q_BAR, D, CLK
;output Q,Q_BAR
;input D, CLK
endmodule
// Gate instantiations
not ( s1n, s1 );
not ( s0n, s0 );
and ( y0, i0, s1n, s0n );
and ( y1, i1, s1n, s0 );
and ( y2, i2, s1 , s1n );
and ( y6, i6, s1 , s0 );
or ( out, y0, y1, y2, y6 );
endmodule
Multiplexer 1
خود آموز زبان توصیف سخت افزار Verilog صفحه 30
مثال : 13در این مثال یک جمع کنند کامل 4بیت را برسی خواهیم کرد.
برای ساخت یک جمع کننده چهار بیت به چهار جمع کننده کامل 1بیتی با بیت نقلی ورودی و خروجی نیازمندیم که نمودار و کد Verilogآن را
در ادامه می بینید .در این مثال از سطح توصیف گیت برای توصیف مدار داخلی جمع کننده استفاده شده است.
در مرحله بعد می بایست چهار عدد از این جمع کننده ها را به طریق زیر به هم متصل کنیم.
نمودار یک جمع کننده چهاربیتی با استفاده از چهار جمع کننده 1بیت شکل .11
1
مقداری دهی مداوم
Net توسط این دستور می توان یه مقدار را روی یک Netقرار داد .این دستور همواره در حال اجرا بوده و هرگاه یکی از عملوند های آن تغییر کند مقدار
هم همراه با آن ( و یا با تاخیر ) تغییر خواهد کرد .قالب کلی استفاده از این دستور به صورت زیر است :
;assign <delay> Assignment-Lists
سمت چپ این دستور باید یک متغیر یا یک بردار از نوع netو یا الحاقی از این دو نوع باشد.
2
مقدار دهی مداوم ضمنی
در این روش به جای اینکه یک متغیر را از جنس Netتعریف کنیم و سپس توسط دستور assignیک مقدار را روی آن قرار دهیم ،می توانیم این عمل را
در هنگام تعریف Netانجام دهیم.
مثال : 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است و این امر باعث می شود که پالسهایی با عرض کمتر از مقدار تاخیر مشخص شده به خروجی منتشر نشود.
Delay 1
Logic Gates Propagation Delay 2
خود آموز زبان توصیف سخت افزار Verilog صفحه 34
در این حالت به هنگام تعریف netتاخیر مورد نظر را برای آن مشخص می کنیم .از این پس هر تغییری که روی این netانجام شد ،با تاخیر مشخص شده
اعمال می شود .این عمل در مورد توصیف سطح گیت نیز قابل استفاده است.
مثال : 15در این مثال با نحوه ایجاد تاخیر های مورد بحث با قاعده و تاخیر به هنگام تعریف نت آشنا می شوید.
// ----- Inertial Delay Example -------
;)module and_with_delay( o1, i1, i2
;output o1
;input i1, i2
assign #1 o1 = i1 & i2; // Inertial Delay
endmodule
یک عملوند می تواند یکی از انواع داده ای باشد که قبال به آن اشاره شد.
عملگر ها روی عملوند ها عملیاتی را انجام می دهند تا نتیجه مطلوب بدست آید .لیست عملگر های موجود در Verilogدر جدول صفحه
Operator 1
Operand 2
صفحه 35 خود آموز زبان توصیف سخت افزار Verilog
در مورد عملگر های حسابی 1باید به موارد زیر توجه داشت :
اگر هریک از عملوند ها دارای بیت xباشند ،نتیجه عملیات xخواهد بود.
عملگر %باقی مانده تقسیم را بر می گرداند و عالمت حاصل برابر عالمت عملوند اول است.
بهتر است اعداد منفی را در عبارات بصورت اعداد صحیح بکار برد ،زیرا در غیر این صورت به مکمل 2تبدیل می شوند که ممکن است
در مورد عملگر های منطقی 3باید به موارد زیر توجه داشت :
. نتیجه عملگر های منطقی یک بیت است 0 :نادرست 1 ،درست و Xنا معلوم
اگر عملوند اول 0باشد معادل نادرست ،4اگر 1باشد معادل درست 5و اگر Xباشد نا معلوم ارزیابی خواهد شد.
عملوند ها عملیات سمبل عملگر نوع عملگر عملوند ها عملیات سمبل عملگر نوع عملگر
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بیت به بیت با هم مقایسه می شوند.
Relational 1
Equality 2
صفحه 37 خود آموز زبان توصیف سخت افزار Verilog
نتیجه a!==bبرابر 0یا 1است a .و bبیت به بیت باهم مقایسه می شوند.
در مورد عملگر های الحاق 1باید به موارد زیر توجه داشت :
عملوند ها حتما باید اعداد اندازه دار باشند تا Verilogقادر به محاسبه اندازه نتیجه باشد.
عملوند ها می توانند reg ، netو یا برداری از آنها و یا اعداد اندازه دار باشند.
اپراتور تکرار 2مشخص می کند که چندبار عدد داخل { } باید تکرار شود .
در مورد عملگر های شرطی باید به موارد زیر توجه داشت :
قالب استفاده از عملگر شرطی به صورت زیر است
><Condition> ? <True-Statement ;>: <False-Statement
عبارت شرط مورد ارزیابی قرار می گیرد ،اگر شرط برقرار باشد عبارت برقراری شرط و اگر شرط برقرار نباشد عبارت عدم برقراری شرط
اجرا می شود.
Concatenation 1
Replication 2
Verilog خود آموز زبان توصیف سخت افزار 38 صفحه
( الزم به ذکر است این کد ها فقط جهت آموزش نحوه عملکرد. در این مثال نحوه استفاده از عملوند ها و عملگر ها را خواهید آموخت: 16 مثال
) عملگر ها می باشند
//------- Arithmetic Operations --------//
A = 6'b0011; B = 6'b0100; D = 3; E = 6;
A*B // Evaluated to 6’b1100
D/E // Evaluated to 1
A+B // Evaluated to 6’b0111
in1 = 6'b101x; in2 = 6'b1010;
sum = in1 + in2; // Evaluated to 6'x
//------- Logic Operations --------//
A = 6; 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 = 6'b110;
y = { B, C }; // Result y is 6’b0010
y = { A, B ,C, D, 6'b001 }; // Result y is 11’b1_00_10_110_001
. جمع کننده چهار بیتی و یک مقایسه گر تک بیت قابل توسعه را مشاهده می کنید، 1 به4 در مثال زیر توصیف یک مالتی پلکسر: 17 مثال
module mux6_to_1 ( out, i0, i1, i2, i6, s1, s0 );
output out;
input i0, i1, i2, i6, s1, s0;
assign out = s1 ? ( s0 ? i6 : i2 ) : ( s0 ? i1 : i0 );
endmodule
سطح توصیف رفتاری :مدل سازی سطح باال که در آن رفتار منطقی سیستم مدل سازی می شود.
مدل سازی جریان داده ها :در این سطح سخت افزار به وسیله ثبات ها مدل می شود.
مدل سازی پایه ای :در این حالت سخت افزار در دو سطح گیت و ثباتی توصیف می شود.
1
بلوک های ساخت یافته
کد های توصیف رفتاری می بایست درون این بلوک ها قرار بگیرند ،البته استثناعاتی نیز وجود دارد که بعدا به آن اشاره می شود .دو نوع بلوک ساخت یافته
و initial .بلوک های ساخت یافته دارای ساختار ترتیبی می باشند .درون یک ماجول می توان چندین بلوک Always و Initial عبارتند از بلوک های
alwaysتعریف نمود.
بلوک های ساخت یافته فقط توانایی تعیین کردن مقادیر ثبات ها را دارند و نمی توانند مقداری را به Netها ( داده های ) wireنسبت دهند .اما شما می
توانید درون بلوک های ساخت یافته ،یک ثبات را با مقادیر یک ثبات ،یک Netو یا یک مقدار ثابت مقدار دهی کنید.
داشته باشیم ،همه بلوک ها در زمان صفر با هم و بطور جداگانه اجرا می شوند و هر بلوک بطور مستقل و از سایر بلوک ها خاتمه initial اگر چندین بلوک
می بابد.
در صورتی که بخواهیم درون یک بلوک ساخت یافته چندین دستور داشته باشیم باید از دستورات beginو endو یا دستورات forkو joinاستفاده نماییم.
join استفاده کنیم دستورات درون بلوک یکی پس از دیگری اجرا می گردند .در صورتی که از دستورات forkو end درصورتی که از دستورات beginو
استفاده نماییم تمام دستورات درون بلوک همزمان با یکدیگر اجرا می شوند.
مثال : 18در این مثال نحوه استفاده از بلوک های ساخت یافته را مشاهده خواهیم کرد .در این مثال فرض کنید زمان صفر کردن ثبات های ، clk
resetو 3 dataواحد زمان و زمان صفر کردن ثبات 5 enableواحد زمان باشد .جلوی هر دستور زمان اتمام انجام آن بر حسب واحد زمان نوشته
شده است تا تفاوت دستورات beginو forkنمایان شود.
initial
begin
;clk = 0 // Execute finish at 26 clk
;reset = 0 // Execute finish at 23 clk
;enable = 0 // Execute finish at 211 clk
;data = 0 // Execute finish at 216 clk
end
initial
fork
;clk = 0 // Execute finish at 26 clk
;reset = 0 // Execute finish at 26 clk
;enable = 0 // Execute finish at 21 clk
;data =0 // Execute finish at 26 clk
join
خود آموز زبان توصیف سخت افزار Verilog صفحه 42
عبارات شرطی elseو else ifاختیاری می باشند .در یک بلوک شرطی می توان به دفعات از عبارت else ifاستفاده نمود.
مثال : 19در این مثال یک شمارنده دو جهته بسیار ساده را برسی مدل می کنیم.
)if (reset == 1'b0
;counter = 6'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
1
کنترل زمان مبنی بر رویداد
یک رویداد به معنای تغییر یک ثبات یا یک Netاست .سه نوع کنترل زمان مبتنی بر رویداد را در ادامه برسی خواهیم کرد.
کنترل رویداد با قاعده :عالمت @ برای مشخص کردن کنترل رویداد استفاده می شود .دستورات می توانند با تغییر مقدار یک سیگنال با لبه باالرونده
یا پایین رونده یک سیگنال اجرا شوند .لبه باال رونده و پایین رونده در جدول زیر مشخص شده اند.
مثال : 20در این مثال با نحوه کنترل یک بلوک در یک رویداد با قاعده را برسی می کنیم .عبارت اول در هر لبه ،عبارت دوم در بله باال رونده ،عبارت
سوم در لبه پایین رونده و عبارت چهارم در لبه باال رونده اجرا خواهند شد.
Event 1
Verilog خود آموز زبان توصیف سخت افزار 44 صفحه
وevent تعریف این رویداد با کلید واژه. نماییم1می توان یک رویداد را تعریف نمود و در مواقع لزوم آن را تحریک Verilog در: کنترل رویداد با نام
. انجام می شود-> تحریک کردن آن با
این امر توسط. گاهی اوقات چند سیگنال داریم که تغییر در یکی از آنها سبب تریگر شدن اجرای یک مجموعه از دستورات می شود: کنترل چند رویداد
. مشهور است2 لیست این رویداد ها یا سیگنال ها به لیست حساسیت. کردن رویداد ها یا سیگنال ها انجام می شودor
. در این مثال با نحوه استفاده از رویداد ها با نام و کنترل با چند رویداد آشنا می شوید: 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[6] };
Trigger 1
Sensitivity List 2
صفحه 45 خود آموز زبان توصیف سخت افزار Verilog
مثال : 22در مثال زیر توصیف یک مالتی پلکسر 4به 1را خواهید دید.
// Behavioral model of a 6-to-1 multiplexer
;) module mux6_to_1 ( out, i0, i1, i2, i6, s1, s0
;output out
;reg out
;input i0, i1, i2, i6, s1, s0
) always @( i0 or i1 or i2 or i6 or s1 or s0
begin
)} case ({ s1, s0
;2'b00 : out = i0
;2'b01 : out = i1
;2'b10 : out = i2
;2'b11 : out = i6
endcase
end
endmodule
مثال : 23یک فلیپ فالپ نوع Dحساس به لبه باال رونده با Resetسنکرون طراحی کنید.
;) module d_ff ( d, clk, rst, q
;input d, clk, rst
;output q
;reg q
) always @( posedge clk
begin
)if (rst
;q = 1'b0
else
;q = d
end
endmodule
always در این مثال dورودی داده clk ،پالس ساعت و qخروجی فلیپ فالپ می باشد .همانطور که مشاهده می شود پس یک پالس ساعت clkبلوک
اجرا می شود و اگر پالس ریست 1باشد خروجی برابر صفر خواهد شد و اگر 1نباشد خروجی برابر ورودی خواهد شد.
مثال : 24یک فلیپ فالپ نوع Dحساس به لبه باال رونده با Resetآسکنرون طراحی کنید.
;) module d_ff ( d, clk, rst, q
;input d, clk, rst
;output q
;reg q
)always @( posedge clk or posedge rst
begin
)if (rst
;q = 1'b0
else
;q = d
end
endmodule
همانطور که مشاهده می شود در شمارنده با ریست آسنکرون بلوک alwaysدر لبه باال رونده پالس ساعت و یا پالس ریست اجرا می شود که اگر ریست 1
باشد خروجی qصفر خواهد شد و اگر ریست 1نباشد به معنای پالس ساعت برای فلیپ فالپ می باشد که qرا برابر ورودی یعنی dقرار می دهد.
47 صفحه Verilog خود آموز زبان توصیف سخت افزار
. کار کندclk بیتی دو جهته با ورودی بارگذاری سنکرون و ریست آسنکرون طراحی کنید که با لبه پایین رونده پالس4 یک شمارنده
module counter ( clk, ld, rst, u_d, d_in, q );
input clk, ld, rst, u_d;
input [6:0] d_in;
output [6:0] q;
reg [6:0] q;
always @( negedge clk or posedge rst)
begin
if (rst)
q = 6'b0000;
else if( ld )
q = d_in;
else if( u_d )
q = q + 1;
else
q = q – 1;
end
endmodule
. بیتی به روش توصیف رفتاری را طراحی کنید8 تفریق کننده/ یک جمع کننده: 25 مثال
توجه داشته باشید در این کد از سریز.خروجی می باشد res عملیات جمع یا تفریق وoper ، بیتی8 ورودی های برداریb وa در این جمع کننده
.صرف نظر شده است
module addsub(a, b, oper, res);
input oper;
input [.:0] a;
input [.:0] b;
output [.:0] res;
reg [.:0] res;
always @(a or b or oper)
begin
if (oper == 1'b0)
res = a + b;
else
res = a - b;
end
endmodule
خود آموز زبان توصیف سخت افزار Verilog صفحه 48
)11مثال ها
در این بخش چندین مثال را با توضیحات برسی خواهیم کرد.
مقسم فرکانس
در این مثال یک مقسم فرکانس فرکانس ½ را برسی خواهیم کرد .اساس کار یک مقسم فرکانس مانند یک شمارنده می باشد .اما در این مثال برای تقسیم
فرکانس به دو فقط کافی است در هر لبه باالرونده پالس ساعت پالس خروجی را وارون نماییم.
;)module clk_div_by2 (clk_in, enable,reset, clk_out
;assign po = tmp
endmodule
شمارنده 4بیتی
در این قسمت یک شمارنده موجی با بیت نقلی را برسی خواهیم کرد .در این طراحی ما از متد باال به پایین استفاده خواهیم کرد .ابتدا با توصیف باالترین
بلوک شروع خواهیم کرد .در این مثال باالترین بلوک شمارنده موجی می باشد .یک شمارنده را می توان با روش های مختلفی مدل کرد .در یک شمارنده از
تعدادی فلیپ فالپ نوع Tاستفاده شده است که پس از مدل سازی بلوک شمارنده باید آنها را مدل سازی کنیم.
در ماجول باال از چهار نمونه از ماجول T_FFکه مدل یک فلیپ فالپ نوع Tاست استفاده شده است .حال باید ماجول T_FFرا توصیف کنیم.
در روند توصیف فلیپ فالپ Tاز یک فلیپ فالپ نوع Dاستفاده شده است که نوبت به توصیف آن می رسد.
در این مثال فلیپ فالپ در سطح جریان داده ها مدل سازی شده است که البته می توان این فلیپ فالپ را به روش ساده تری در سطج توصیف رفتاری
.مدل سازی کرد که کد آن را در ادامه مشاهده می کنید
module D_FF(q, q_bar, d, clk, reset);
output q;
input d, clk, reset;
reg q;
always @ ( posedge reset or negedge clk)
begin
if(reset)
q = 1'b0;
else
q = d;
qbar = ~q;
end
endmodule
صفحه 57 خود آموز زبان توصیف سخت افزار Verilog
راه فرعی
بزرگراه بزرگراه
راه فرعی
برای راه فرعی سنسوری در نظر می گیریم تا وجود ماشین ها را در راه فرعی را مشخص کند .این سنسور سیگنال Xرا به کنترلر ارسال می
کند .زمانی که Xیک باشد به معنای وجود ماشین در راه فرعی می باشد.
برای هر راه یک سیگنال ترافیک در نظر می گیریم که نمایانگر وضعیت چراغ در آن راه می باشد
بزرگراه در برابر راه فرعی دارای اولویت باالتری می باشد .چراغ بزرگراه به صورت پیشرفض سبز می باشد.
زمانی که تعدادی ماشین در راه فرعی منتظر سبز شدن چراغ می مانند چراغ راه فرعی باید سبز شده تا به ماشین ها اجزاه عبور دهد .این
چراغ باید تا زمانی که همه ماشین ها از راه فرعی عبور نکردند سبز بماند.
زمانی که دیگر ماشینی از راه فرعی عبور نمی کند چراغ راه فرعی ابتدا زرد و سپس قرمز می شود.
در هر یک از مراحل می بایست تاخیر هایی در نظر گرفته شود که قابل تغییر باشند.
خود آموز زبان توصیف سخت افزار Verilog صفحه 58
در مرحله بعد می بایست نمودار حالت را برای این کنترلر رسم نماییم.
در این مثال از عبارات پیش پردازنده جهت هرچه انعطاف پذیر و خوانا.بهترین راه برای مدل سازی سخت افزار این کنترلر استفاده توصیف رفتاری می باشد
.تر شدن کد ها استفاده می شود
`define TRUE 1'b1
`define FALSE 1'b0
`define RED 2'd0
`define YELLOW 2'd1
`define GREEN 2'd2
//State definition // Highway Secondary Road
`define S0 6'd0 // G R
`define S1 6'd1 // Y R
`define S2 6'd2 // R R
`define S6 6'd6 // R G
`define S6 6'd6 // R Y
// Delays
`define Y2RDELAY 6 // Yellow to Red delay
`define R2GDELAY 2 // Red to Green delay
module sig_control( hwy, secondary , X, clock, clear);
// I/O Ports
output [1:0] hwy, secondary ;
// 2-bit output for 6 states of signal
reg [1:0] hwy, secondary ;
input X; // if 1 indicate there is car on the secondary road
input clock, clear;
hwy = `GREEN;
secondary = `RED;
end
// state changes only at positive edge of clock
always @ (posedge clock)
state = next_state;
// Compute Values of Highway Signal & secondary Road Signal
always @(state) // only executed when state changes
begin
case(state)
`S0: begin
hwy = `GREEN;
secondary = `RED;
end
`S1: begin
hwy = `YELLOW;
secondary = `RED;
end
`S2: begin
hwy = `RED;
secondary = `RED;
end
`S6: begin
hwy = `RED;
secondary = `GREEN;
end
`S6: begin
hwy = `RED;
secondary = `YELLOW;
end
endcase
end
always @(state or clear or X)
begin
if(clear)
next_state = `S0;
else
case(state)
`S0: begin
if(x)
next_state = `S1;
61 صفحه Verilog خود آموز زبان توصیف سخت افزار
else
next_state = `S0;
end
`S1: begin
repeat (`Y2RDELAY) @ (posedge clock);
next_state = `S2;
end
`S2: begin
repeat (`R2GDELAY) @ (posedge clock);
next_state = `S6;
end
`S6: begin
if(x)
next_state = `S6;
else
next_state = `S6;
end
`S6: begin
repeat (`Y2RDELAY) @ (posedge clock);
next_state = `S0;
end
: قالب کلی استفاده از این دستور به صورت زیر است. جهت ایجاد تاخیر استفاده شده استrepeat در این مثال از دستور
repeat (<number-of-repeats> @ (<at-specified-event>)
begin
<Statement>
end
در این صورت این دستور فقط به تعداد پالس های ساعت مشخص. مانند مثال باال. اختیاری می باشدStatement و کدend وbegin استفاده از دستورات
.شده تاخیر ایجاد می کند
Verilog خود آموز زبان توصیف سخت افزار 62 صفحه
1
مولد بیت توازن
module parity_using_assign (
data_in , // 8 bit data in
parity_out // 1 bit parity out
);
output parity_out;
input [.:0] data_in;
wire parity_out;
assign parity_out = (data_in[0] ^ data_in[1]) ^
(data_in[2] ^ data_in[6]) ^
(data_in[6] ^ data_in[1]) ^
(data_in[3] ^ data_in[.]);
endmodule
)12تمارین
)1یک مبدل کد BCDبه EX3چهاربیت را با توصیف سطح گیت طراحی کنید.
)2یک شمارنده BCDچهار بیت باال پایین شمار سنکرون ،با بازنشانی آسنکرون و پایه فعال ساز فعال باال طراحی کنید.
)3یک کنترلر کننده تکی نمایشگر هفت قسمتی کاتد مشترک طراحی کنید.
)4یک مالتی پلکسر 16به 1را با طراحی مالتی پلکسر 2به 1و 4به 1و گسترش آنها طراحی کنید.
)6یک رجیستر سنکرون 32بیتی با ورودی و خروجی موازی و بصورت مجزا و پایه بازنشانی ( ریست ) طراحی کنید.
)7یک حافظه RAMبا عرض کلمه 8بیت و تعداد 1024کلمه به همراه پایه های فعال ساز ،خواندن /نوشتن و ورودی کالک طراحی کنید.
)8مالتی پلکسر تمرین قبل را گسترش داده و آن را بصورت برداری پیاده سازی نمایید .عرض باس مالتی پلکسر 32بیت باشد.
)9کنترلر نمایشگر هفت قسمتی تمرین قبل را گسترش داده و توسط آن کنترلر یک نمایشگر هفت قسمتی چهار رقمی مالتی پلکس شده کاتد
مشترک طراحی نمایید ( .این نوع نمایشگر درواقع 4نمایشگر هفت قسمتی درون یک پکیج می باشد که پایه های مشترک هر نمایشگر بصورت مجزا و پایه های رقم
های همه نمایشگر ها بصورت متصل به یکدیگر از پکیج بیرون آمده اند .برای راه اندازی این نمایشگر می بایست با سرعت باالیی سر های آند مشترک هریک از نمایشگر ها
را سوییچ کرد و عدد مورد نظر را توسط 7پایه رقم ها به نمایش در آورد .برای فهم بهتر عملکرد این نمایشگر ها عبارت Multiplexed 7Segment Displayرا در اینترنت
جستجو نمایید )