آموزش وریلاگ | پروژه وریلاگ
 گروه تلگرام 
VerilogCode.ir
آموزش وریلاگ | پروژه وریلاگ


آموزش وریلاگ - جلسه 9 :

آموزش وریلاگ آموزش Verilog

دانلود فیلم بالا (جلسه نهم)

تا الان مشغول پیاده سازی و نوشتن ماژول های مختلفی بودیم ، حالا یه سوال !! از کجا معلوم درست نوشتیم ؟ از کجا معلوم مدار جمع کننده ما ، واقعا عمل جمع رو انجام میده ؟ برای رسیدن به جواب این سوالات ، باید ماژول یا مدار مون رو تست کنیم ، آزمایش کنیم ببینیم اگه بهش ورودی دلخواه بدیم ، خروجی های موردنظرمون تولید میشه یانه . برای اینکه یه ماژول رو تست کنید ، باید یه ماژول دیگه بنویسید تحت عنوان تست بِنچ ، ماژول تست بِنچ یک ماژولِ بدون ورودی و بدون خروجی محسوب میشه که فقط سیگنال واسطه ای داره ، این سیگنال های واسطه ای قراره به ماژول اصلی وصل بشن و مقادیر رو بگیرن .

ISE Project - VerilogCode.ir : \ Box9-1.v
 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 تعریف میکنیم :

ISE Project - VerilogCode.ir : \ Box9-2.v
 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 ها بذارید !! حتی میتونید اسم شونُ مثل اسم سیگنال های ورودی و خروجی ماژول اصلی (جمع کننده) بذارید تا دُچار سردرگمی نشید . حالا باید به روش جلسه قبل ، ماژول اصلی (جمع کننده) رو فراخوانی کنید و سیگنال های واسطه ای که تعریف کردید رو بهش وصل کنید :

ISE Project - VerilogCode.ir : \ Box9-3.v
 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 و همچنین تاخیرها (#) استفاده می کنیم :

ISE Project - VerilogCode.ir : \ Box9-4.v
 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 خواهد بود و به همین صورت ادامه ... ما در خط اول واحد زمانی مون رو نانو ثانیه انتخاب کردیم با دقت پیکوثانیه (دقت مهم نیست).

بچه ها این یکی از جلساتی هست که حتما باید ویدئو رو ببینید ، چون من توی فیلم توضیحات تکمیلی دادم پس لطف کنید این قسمت رو حتما رایگان دانلود و تماشا کنید . دانلود فیلم جلسه

رفتن به جلسه بعد ...

مشاهده نظرات کاربران




پیام شما با موفقیت ارسال شد و به زودی در این قسمت به نمایش در خواهد آمد .
لطفا تمام فیلد های الزامی را پُر کنید .