1 - سطح گیت
جلسه اول (ماژول ها) جلسه دوم (گیت ها) جلسه سوم (نوع سیگنال) جلسه چهارم (پایان فصل)2 - مقداردهی مداوم
جلسه پنجم (اُپراتور ها) جلسه ششم (آرایه ها) جلسه هفتم (شرط ها) جلسه هشتم (فراخوانی ماژول) جلسه نهم (تست بنچ) جلسه دهم (نگاشت حافظه)3 - سطح رفتاری (ترکیبی)
جلسه یازدهم (بلاک Always) جلسه دوازدهم (ابزار ها) جلسه سیزدهم (نوع پردازش) جلسه چهاردهم (نکات تکمیلی) جلسه پانزدهم (پایان فصل)4 - سطح رفتاری (ترتیبی)
جلسه شانزدهم (لبه ها) جلسه هفدهم (تست بنچ 2) جلسه هجدهم (شمارنده ها) جلسه نوزدهم (ضرب و شیفت) جلسه بیستم (استیت ماشین) جلسه بیست و یکم (کشف رشته) جلسه بیست و دوم (فرکانس) جلسه بیست و سوم (نان بلاک) جلسه بیست و چهارم (پایان)5 - جلسات تمرینی
جلسه تمرین اول (تاخیر ها) جلسه تمرین دوم (الحاق-منطق) جلسه تمرین سوم (شیفت ها) جلسه تمرین چهارم (استیت)6 - مثال های پروژه محور
پروژه طراحی پردازنده RTL پروژه پردازنده Maano پروژه پردازنده MIPS7 - ارتباط و گفتگو
ارتباط با نویسنده گروه تلگرام تبلیغات و آگهیآموزش وریلاگ آموزش Verilog
بیاین اولین مثال مون رو بنویسیم . فرض کنید میخوایم یه مدار وارونگر بسازیم بطوری که هرچی ورودی بگیره ، معکوس شو توی خروجی نمایش بده . مثلا اگه یک بیت 0 بهش ورودی بدیم ، خروجی یک بیت 1 بشه و بالعکس. خب پس داریم :
1- 2- 3- 4- 5- 6- 7- 8-
module Varoon( input X, output Y ); endmodule
تا الان فقط ورودی و خروجی رو تعریف کردیم ، و مدار مون خالی هستش ، مطابق با شکل زیر :
حالا با استفاده از کلیدواژه ( ) not می تونیم یک گیت نات رو به مدار اضافه کنیم ، بطوری که ورودی این گیت ، سیگنال X و خروجی اون سیگنال Y هستش که این مدار دقیقا کاری که خواستیم رو انجام میده و ورودی رو وارون میکنه.
1- 2- 3- 4- 5- 6- 7- 8-
module Varoon( input X, output Y ); not(Y,X); endmodule
حالا کُد مون کامل شده و معادل تصویری اون میشه شکل زیر :
خب چند تا سوال، کلید واژه چیه ؟ گیت نات از کجا اومد ؟ چطور گیت ها تعریف میشن و ورودی و خروجی گیت ها چطور مشخص میشن ؟ کلید واژه ها دستوراتی هستند که با نوشتن اونها ، یه کاری برای ما انجام میشه ، مثلا کلید واژه module برای ما یک ماژول تعریف میکنه ، یا کلید واژه input یک ورودی برای ما تعریف میکنه ، بنابراین ما کلید واژه های بسیاری داریم که هر کدام عملکردی دارند و ما قصد داریم به مرور با اونها آشنا بشیم. معادل هر گیت منطقی ، یک کلید واژه داریم که کار اون گیت رو برای ما انجام میده ، مثل همین مدار بالا که گیت نات با کلید واژه not تعریف شد . با برخی دیگر از این کلید واژه های گیت آشنا بشیم : and (x,y,z)           // x = y & z or (x,y,z)           // x = y | z xor (x,y,z)           // x = y ^ z nand (x,y,z)           // x = ~ ( y & z ) nor (x,y,z)           // x = ~ ( y | z ) xnor (x,y,z)           // x = ~( y ^ z ) buf (x,y)           // x = y احتمالا تا الان متوجه شدید که جایگاه ورودی و خروجی های گیت کجاست ، همیشه حرف سمت چپ خروجی و بقیه حروف ورودی ما هستند که در اینجا x خروجی و y , z ورودی های گیت هستند . البته شما میتونید هر حروفی که دوست داشتید برای نام گذاری ورودی و خروجی گیت ها استفاده کنید ، حتی میتونید یه کلمه انتخاب کنید ، مثلا بجای x بذارید Hello . گیت بافر ، معمولا یک ورودی داره که همون رو دقیقا توی خروجی قرار میده . راستی تا یادم نرفته بگم که ورودی و خروجی ماژول رو با ورودی و خروجی گیت ها قاطی نکنید !! به تصویر زیر نگاه کنید ، سیگنال های آبی ورودی ماژول ما هستند و سینگال های قرمز ورودی گیت های ما هستند، صورتی ها خروجی ماژول ما و نارنجی ها خروجی گیت های ما هستند. همونطور که میبینید گاهی این سیگنال ها باهم اشتراک هم دارند ، مثلا خروجی یک گیت ، ورودی گیت دیگری است و یا خروجی یک گیت همان خروجی ماژول می شود.
نظرتون چیه کد وریلاگ مربوط به شکل بالا رو بنویسیم ؟ من اسم این ماژول رو تست میذارم و شروع می کنم به کُد نویسی و از 5 کلید واژه گیت استفاده می کنم برای توصیف مدار بالا :
1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15-
module Test( input A, input B, input C, output F, output G ); xor(L,A,B); // L = A ^ B xor(F,L,C); // F = L ^ C and(P,L,C); // P = L & C and(Q,A,B); // Q = A & B or(G,P,Q); // G = P | Q endmodule
بریم سراغ سوالات احتمالی ، از خط اول شروع می کنیم :
+
اسم ماژول هرچیزی میتونه باشه ؟ بله هرچیزی ، فقط اسمش با عدد شروع نشه .
+
حتما باید اول ورودی تعریف بشه بعد خروجی ها ؟ خیر ترتیب اصلا مهم نیست ، قاطی پاتی هم میشه نوشت .
+
چرا آخر خط های 2 تا 5 ویرگول داره ولی خط 6 آخرش ویرگول نداره ؟ مدل و قانون وریلاگه ، میگه آخرین خط توی تعریفِ ورودی و خروجی ها ، نباید ویرگول داشته باشه.
+
سیگنال های L و P و Q از کجا اومد ؟ شکل بالا رو ببینید به دلخواه خودم تعریف کردم ، مثلا توی گیت اول ، قراره A و B باهم ایکسور بشن ، خب حاصل توی چی ریخته بشه ؟ من به دلخواه گفتم توی L ریخته بشه و L رو خروجی گیت ایکسور در نظر گرفتم.
+
ترتیبِ نوشتنِ گیت ها مهمه ؟ خیر وریلاگ همه ی گیت هارو همزمان شبیه سازی و مدلسازی میکنه ، بنابراین نیازی نیست به ترتیب بنویسید میتونید اول or رو تعریف کنید بعد xor یا and و یا هر ترتیبی که دوست دارید رو قرار بدید.
+
سمت راست چندتا خط سبز رنگ هست ، اونا چیه ؟ کامنت هست ، توضیحاتی که برای خواننده میذاریم تا خواننده بتونه برنامه رو بهتر درک کنه ، حتی میتونید بجای توضیح ، فحش هم بنویسید ... مهم نیست و تاثیری روی کُد اصلی نداره ، وریلاگ همیشه کامنت هارو نادیده میگیره و اجرا نمیکنه .
+
چرا L توی خط 9 ، خروجی گیت هست اما توی خط 10 ، ورودی گیت شده ؟ ببینید تمام اسم ها و حروف هایی که ما تعریف شون میکنیم ، یه سیگنال هستند یا بهتره بگیم یه متغییر هستند که یه مقداری توشون ذخیره میشه ، اینجا سیگنال ها یا متغییر هامون تک بیتی هستند ، یعنی مقدارشون در نهایت یا 0 هست یا 1 ، پس مقدار L یا 0 هست یا 1 و به عنوان خروجی گیت ایکسور هست ... حالا چه اشکالی داره من مقدار L رو بگیرم بدم به یه گیت دیگه به عنوان ورودی ؟ اصلا عیبی نداره یه متغییر یا سیگنال ، ورودیِ هزاران گیتِ دیگه باشه . شما یه لطفی کنید اصلا به این چیزا فکر نکنید !! هرچی که توی شکل مدار میبینید ، دقیقا همون رو بنویسید ، چیکار با این کارا دارید.
+
چرا آخر همه ی خط های 9 تا 13 سمیکالن (نقطه ویرگول) گذاشتی ؟ قانون وریلاگه ، بعد از هر خط کُد یا هر خط برنامه باید اینُ بذاری.
ادامه سوالات رو توی کامنت ها بپرسید، یکاری هم کنیم ، ازین به بعد اگه شکل خواستیم بکشیم ، جعبه رو نذاریم ، داریم مدار وصل میکنیم ، میوه که نیست هعی میذاریمش توی جعبه ، دیگه قضیه ماژول هارو فهمیدید و نیازی نیست حتما توی شکل هم جعبه بذاریم .
دانلود فیلم جلسه
هانیه
گیت های سه حالته هم داریم که کنترل بشن ؟
سید محسن
بله توی ویدئو به اونها هم اشاره کردیم ، بافر های سه حالته .
عاطفه
من تازه شروع کردم دارم با سایت شما جلو میرم
سید محسن
سلام ، با قدرت ادامه بدید مطمئن باشید در آخر یه وریلاگ نویسه خوب میشید .
هادی
سیم های رابط رو نباید وایر تعریف کنیم ؟
سید محسن
سلام ، توی جلسه سوم به این مبحث پرداخته شده .
آوا مهجوری
خدا خیرتون بده خیلی ساده توضیح میدین
مهدیزاده
آقاسید خدا قوت
Sara
سلام. ممنون از وقتی که گذاشتین یه سوال داشتم، من مقایسه کننده هارو واقعا لازمه که یادبگیرم. شما تو فیلماتون مقایسه کننده درس دادین؟ تو سرفصلها ندیدم..
سید محسن
سلام ، دقیقا خود مقایسه کننده رو خیر مثالش توی درسنامه های ما نیست . ولی خب جلسات مختلف رو بخونید متوجه میشید چطور انجام بدید . اگه عجله دارید فردا پیام بدید به من یه فیلم براتون ضبط کنم توضیح مقایسه کننده .
سپهر سلمانی
خدا خیرتان بده
سید محسن
ممنونم .