1 - سطح گیت
جلسه اول (ماژول ها) جلسه دوم (گیت ها) جلسه سوم (نوع سیگنال) جلسه چهارم (پایان فصل)2 - مقداردهی مداوم
جلسه پنجم (اُپراتور ها) جلسه ششم (آرایه ها) جلسه هفتم (شرط ها) جلسه هشتم (فراخوانی ماژول) جلسه نهم (تست بنچ) جلسه دهم (نگاشت حافظه)3 - سطح رفتاری (ترکیبی)
جلسه یازدهم (بلاک Always) جلسه دوازدهم (ابزار ها) جلسه سیزدهم (نوع پردازش) جلسه چهاردهم (نکات تکمیلی) جلسه پانزدهم (پایان فصل)4 - سطح رفتاری (ترتیبی)
جلسه شانزدهم (لبه ها) جلسه هفدهم (تست بنچ 2) جلسه هجدهم (شمارنده ها) جلسه نوزدهم (ضرب و شیفت) جلسه بیستم (استیت ماشین) جلسه بیست و یکم (کشف رشته) جلسه بیست و دوم (فرکانس) جلسه بیست و سوم (نان بلاک) جلسه بیست و چهارم (پایان)5 - جلسات تمرینی
جلسه تمرین اول (تاخیر ها) جلسه تمرین دوم (الحاق-منطق) جلسه تمرین سوم (شیفت ها) جلسه تمرین چهارم (استیت)6 - مثال های پروژه محور
پروژه طراحی پردازنده RTL پروژه پردازنده Maano پروژه پردازنده MIPS7 - ارتباط و گفتگو
ارتباط با نویسنده گروه تلگرام تبلیغات و آگهیآموزش وریلاگ آموزش Verilog
تا الان مشغول پیاده سازی و نوشتن ماژول های مختلفی بودیم ، حالا یه سوال !! از کجا معلوم درست نوشتیم ؟ از کجا معلوم مدار جمع کننده ما ، واقعا عمل جمع رو انجام میده ؟ برای رسیدن به جواب این سوالات ، باید ماژول یا مدار مون رو تست کنیم ، آزمایش کنیم ببینیم اگه بهش ورودی دلخواه بدیم ، خروجی های موردنظرمون تولید میشه یانه . برای اینکه یه ماژول رو تست کنید ، باید یه ماژول دیگه بنویسید تحت عنوان تست بِنچ ، ماژول تست بِنچ یک ماژولِ بدون ورودی و بدون خروجی محسوب میشه که فقط سیگنال واسطه ای داره ، این سیگنال های واسطه ای قراره به ماژول اصلی وصل بشن و مقادیر رو بگیرن .
1- 2- 3- 4- 5- 6- 7- 8- 9-
module Adder( input [3:0] X, input [3:0] Y, output [4:0] Z ); assign Z=X+Y; endmodule
کُد بالا یه جمع کننده چهاربیتی هست که قراره واسش یه تست بِنچ بنویسیم . برای اینکار ابتدا یه اسم برای ماژول تست بنچ مون انتخاب میکنیم (مثلا Tb) بعدش به اندازه ورودی های ماژول اصلی (جمع کننده) ، reg تعریف میکنیم و به اندازه خروجی های ماژول اصلی ، wire تعریف میکنیم :
1- 2- 3- 4- 5- 6- 7- 8-
module Tb( ); reg [3:0] A; reg [3:0] B; wire [4:0] F; endmodule
هر اسمی دلتون میخواد میتونید برای این reg و wire ها بذارید !! حتی میتونید اسم شونُ مثل اسم سیگنال های ورودی و خروجی ماژول اصلی (جمع کننده) بذارید تا دُچار سردرگمی نشید . حالا باید به روش جلسه قبل ، ماژول اصلی (جمع کننده) رو فراخوانی کنید و سیگنال های واسطه ای که تعریف کردید رو بهش وصل کنید :
1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14-
module Tb( ); reg [3:0] A; reg [3:0] B; wire [4:0] F; Adder U ( .X(A), .Y(B), .Z(F) ); endmodule
خب تا اینجا ماژول تست بنچ ساخته شد. حالا باید به سیگنال های واسطه ای که به ورودی مدار وصل اند که همون reg هامون میشن ، مقدار بدیم. برای اینکار از کلید واژه initial و همچنین تاخیرها (#) استفاده می کنیم :
1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- 16- 17- 18- 19- 20- 21- 22- 23- 24- 25- 26- 27- 28- 29- 30- 31- 32-
`timescale 1ns / 1ps module Tb( ); reg [3:0] A; reg [3:0] B; wire [4:0] F; Adder U ( .X(A), .Y(B), .Z(F) ); initial begin A=4'd8; B=4'd3; #50; A=4'd4; B=4'd1; #20; A=4'd3; B=4'd7; #60; A=4'd2; B=4'd5; end endmodule
دقت کنید که initial این امکان رو برای ما فراهم می کنه تا از لحظه صفر تا لحظه بی نهایت ، سیگنالها رو مقدار دهی کنیم . حالا سوال ، چرا ما توی نوشتن ماژول هامون ، ازش استفاده نکردیم ؟ میشه استفاده کرد ولی اینکار اصلا حرفه ای نیست . initial در فضای شبیه سازی استفاده میشه ولی توی فضای سخت افزار و حقیقی ، قابل پیاده سازی نیست . بنابراین شاید شما بتونید ماژول هاتون رو با initial کد نویسی کنید ، ولی وقتی بخواین برنامه رو به یک پردازنده بدید تا اجرا کنه ، امکان پذیر نیست. توضیحات بیشتر رو توی ویدئو های آموزشی دادم میتونید برید دانلود کنید . پس کُد بالا داره میگه برای 50 واحد زمانی ، ورودی ها 8 و 3 باشند و بعدش مقدارشون عوض بشه و برای 20 واحد زمانی مقدار ورودی ها 4 و 1 باشه و به همین ترتیب ادامه ماجرا ... حالا اگه این تست بنچ رو توی یه نرم افزار شبیه سازی اجرا کنیم ، خروجی مدار در 50 واحد زمانی اول ، برابر 12 (جمع 3 و 8) ، در 20 واحد زمانی بعدی خروجی مدار برابر 5 خواهد بود و به همین صورت ادامه ... ما در خط اول واحد زمانی مون رو نانو ثانیه انتخاب کردیم با دقت پیکوثانیه (دقت مهم نیست).
بچه ها این یکی از جلساتی هست که حتما باید ویدئو رو ببینید ، چون من توی فیلم توضیحات تکمیلی دادم پس لطف کنید این قسمت رو حتما رایگان دانلود و تماشا کنید . دانلود فیلم جلسه
رفتن به جلسه بعد ...