1 - سطح گیت
جلسه اول (ماژول ها) جلسه دوم (گیت ها) جلسه سوم (نوع سیگنال) جلسه چهارم (پایان فصل)2 - مقداردهی مداوم
جلسه پنجم (اُپراتور ها) جلسه ششم (آرایه ها) جلسه هفتم (شرط ها) جلسه هشتم (فراخوانی ماژول) جلسه نهم (تست بنچ) جلسه دهم (نگاشت حافظه)3 - سطح رفتاری (ترکیبی)
جلسه یازدهم (بلاک Always) جلسه دوازدهم (ابزار ها) جلسه سیزدهم (نوع پردازش) جلسه چهاردهم (نکات تکمیلی) جلسه پانزدهم (پایان فصل)4 - سطح رفتاری (ترتیبی)
جلسه شانزدهم (لبه ها) جلسه هفدهم (تست بنچ 2) جلسه هجدهم (شمارنده ها) جلسه نوزدهم (ضرب و شیفت) جلسه بیستم (استیت ماشین) جلسه بیست و یکم (کشف رشته) جلسه بیست و دوم (فرکانس) جلسه بیست و سوم (نان بلاک) جلسه بیست و چهارم (پایان)5 - جلسات تمرینی
جلسه تمرین اول (تاخیر ها) جلسه تمرین دوم (الحاق-منطق) جلسه تمرین سوم (شیفت ها) جلسه تمرین چهارم (استیت)6 - مثال های پروژه محور
پروژه طراحی پردازنده RTL پروژه پردازنده Maano پروژه پردازنده MIPS7 - ارتباط و گفتگو
ارتباط با نویسنده گروه تلگرام تبلیغات و آگهیآموزش وریلاگ آموزش Verilog
ما در وریلاگ می تونیم با 3 ساختار کد بنویسیم ، ساختار اول با استفاده از کلید واژه گیت ها بود ، که یاد گرفتیم. دو ساختار دیگه assign و always هست ، که با اُپراتور های منطقی و اُپراتور های جبری میشه توی این ساختار ها کد نوشت . به مثال زیر دقت کنید که قراره دو ورودی اَند بشه و در خروجی قرار بگیره :
1- 2- 3- 4- 5- 6- 7- 8- 9-
module MyAnd( input A, input B, output C ); assign C = A & B; //and(C,A,B); endmodule
با استفاده از اُپراتور & اینکار صورت گرفت ، البته اُپراتور های دیگه هم داریم ، مثل نات ~ ، اور | ، ایکسور ^ ، نَند &~ ، نُر |~ و اُپراتور های دیگه. همیشه یادتون باشه ، وقتی از ساختار assign استفاده می کنید ، همیشه سیگنالی که قراره مقداردهی بشه ، باید از نوع wire باشه و حق نداریم نوع شو reg تعریف کنیم ، در مثال بالا سیگنال C حق نداره reg باشه .
حالا بیاین شکل بالا که مثال جلسات قبلی بوده رو به این روش بنویسیم :
1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- 16- 17-
module FullAdder( input X, input Y, input W, output S, output C ); wire L,P,Q; assign L = X ^ Y; assign P = L & W; assign Q = X & Y; assign S = L ^ W; assign C = P | Q; endmodule
همینجا بهتون بگم که ترتیب خطوط اصلا مهم نیست ، یعنی شما میتونید اول خط 14 رو بنویسید بعد خطوط بعدی ، وریلاگ میاد همه خطوط رو میخونه تموم که شد ، سخت افزار رو میسازه (خط به خط نمیسازه) . نکته جالب اینکه میشه این کُد رو بصورت خیلی خلاصه تری نوشت ، ما اجازه داریم تا جایی که میتونیم ساده سازی کنیم تا از حجم کُد کم کنیم :
1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12-
module FullAdder( input X, input Y, input W, output S, output C ); assign S = (X^Y) ^ (W); assign C = ((X^Y)&(W)) | (X&Y); endmodule
برای اینکه بهتر درک کنید ، شکل مدار رو بیارید و با کُد مقایسه کنید . امیدوارم نحوه خوندن رو بلد باشید (همیشه اول داخل پرانتز ها انجام میشن و اولویت دارن ، بعدش بیرون پرانتزی ها ) . حالا فهمیدید چرا از این ساختار و این اُپراتور ها استفاده کردیم ؟ چون با قدرت خلاصه نویسی و ساده سازی می تونیم حجم کُد هامون رو بسیار کم کنیم، برخلاف کُد های فصل اول که بسیار طولانی بودند.
تا الان هرچی برنامه نوشتیم بر اساس شکل مدار بود ، یعنی شکل مدار رو داشتیم و کُد معادل شو می نوشتیم . اما آیا تمام قدرت وریلاگ همینه ؟ اینکار هارو که میشد با نرم افزار پروتئوس انجام داد و با رسم شماتیک مدار ، خروجی گرفت . پس چرا وریلاگ اختراع شد ؟ ما در وریلاگ میتونیم دو مدل کُد نویسی کنیم : الف) کد بر اساس شماتیک مدار ب) کُد بر اساس رفتار مدار حالت الف رو که یاد گرفتیم ، اما حالت ب : گاهی ما نمیدونیم مداری که میخوایم از چه اجزایی تشکیل شده ، اما بخوبی از عملکرد مدار و اینکه چه کاری قراره انجام بده آگاهیم ، مثلا میدونیم مدار ما شمارنده است و قراره بشماره ولی نمیدونیم اجزاش چیه و مدارش چه شکلیه ، به اصطلاح رفتار مدار رو میدونیم . وریلاگ این اجازه رو به ما میده که رفتار مدار رو بنویسیم و اون خودش مدار رو تشکیل میده ، اصلا به خاطر همینه که بهش میگن زبان توصیف مدار ، یعنی فقط کافیه توصیف کنی چه مداری میخوای ؟ خودش مدار رو تشکیل میده.
شکل بالا یه مدار ضرب کننده تک بیتی است، که نمیدونیم چطور عمل ضرب رو انجام میده اما می تونیم با کمک اُپراتور های جبری ، توصیف اش کنیم . اُپراتور جبری جمع + ، تفریق - ، ضرب * ، شیفت به راست و چپ >> و << به این صورت نوشته میشن . پس کد ماژول ضرب کننده ما با روش رفتاری میشه :
1- 2- 3- 4- 5- 6- 7- 8- 9-
module Mult( input A, input B, output C ); assign C = A*B; endmodule
از این جلسه به بعد سعی می کنیم دیگه به روش رفتاری کُد بنویسیم و با شکل مدار کاری نداشته باشیم ، البته برخی جاها نیاز به شکل داریم که خواهم گفت. با استفاده از روش رفتاری ما می تونیم گسترده ترین مدار ها که از هزاران گیت و قطعه تشکیل شده رو تنها با چند خط ساده ، کد نویسی کنیم که دلیل پیدایش و محبوبیت وریلاگ دقیقا همین مسئله است. در کامنت ها همراه شما خواهم بود ، سوالی اگر هست بپرسید. اگه کامنت دوست ندارید شماره تلفنم توی بخش ارتباط با نویسنده هست ، تماس بگیرید عزیزانم. دانلود فیلم جلسه
رفتن به جلسه بعد ...morteza
Very Good
شاه پوری
بسیار عالی ست.
سید محسن
ممنون از انرژی تون