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


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

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

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

این جلسه در مورد تست بنچ مدارات ترتیبی هستش که البته برای دوستانی که با ویدئو همراه ما هستن اجباری نیست ، چون ما توی ویدئو هامون هر ماژولی که می نویسیم سریعا تست بنچ و شکل موج خروجی شو هم باهم کار میکنیم .

ISE Project - VerilogCode.ir : \ Box17-1.v
 1-
 2-
 3-
 4-
 5-
 6-
 7- 
 8-
 9-
10-
11-
12-
13-
14-
15-
16- 
17-
18-
19-
module DFF(
    input Clk,
    input Rst,
    input D,
    output reg Q,
    output Qp
    );  
	
    assign Qp=~Q;
 
    always @(posedge Clk or negedge Rst)
    begin 
	if (Rst==0)
	    Q=0;
	else 
	    Q=D;
    end 
	
endmodule

فرض کنید برای فلیپ فلاپ D کد بالا میخوایم تست بنچ بنویسیم ، تست بنچ مدارات ترتیبی از نظر ساختار مشابه مدارات ترکیبی هست (جلسه 9) ، ورودی مدارات ترتیبی معمولا کلاک و ریست هست و حالا اگه ورودی های دیگه هم باشه که خب اضافه میکنیم . تنها تفاوت تست بنچ نویسی مدارات ترکیبی و ترتیبی سر همین کلاک هست . کلاک رو چطور به عنوان ورودی توی تست بنچ مقداردهی کنیم ؟
ببینید ورودی کلاک چیز خاصی نیست اونهم مثل بقیه ورودی ها یه سیم یا سیگنال هست ، با این تفاوت که مُدام بالا پایین میشه . شکل الف زیر رو ببینید یه سیم داریم که مقدارش 0 هست . فرض کنید ما هر 5 نانوثانیه مقدار این سیم رو نات کنیم . چه اتفاقی میفته ؟

آموزش وریلاگ

همونطور که توی شکل ب میبینیم ، نات کردن در هر 5 نانوثانیه باعث میشه سیم ما هر 5 نانوثانیه مقدار صفر یا یک رو به خودش بگیره و در شکل ج مشخص میشه که وقتی هر 5 نانوثانیه این کار رو کنیم ، دوره تناوب کلاک ما 10 نانوثانیه خواهد بود. خب به همین راحتی ما از یه سیم ساده یه کلاک با دوره تناوب 10 نانو ثانیه ساختیم . اما کد وریلاگ اون چطور میشه :

ISE Project - VerilogCode.ir : \ Box17-2.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-
module TestBench_DFF;

reg Clk,Rst,D;
wire Q,Qp;

DFF U  (.Clk(Clk),
	.Rst(Rst),
	.D(D),
	.Q(Q),
	.Qp(Qp));
	
initial 
begin 
    Clk=0;
    D=1;
    Rst=0;
    #100;
    Rst=1;
    #60;
    D=0;
    #60;
    D=1;
    #60;
    Rst=0;
end 

always #5 Clk=~Clk;
	
endmodule

مجددا مرور کنیم ، توی خط 1 یه اسم دلخواه برای ماژول تست بنچ انتخاب میکنیم . این ماژول نه ورودی داره و نه خروجی . حالا توی خطوط بعدی به ازای ورودی های ماژولی که واسش تست بنچ میخایم بنویسیم reg تعریف میکنیم و به ازای خروجی های اون ماژول wire تعریف میکنیم .
حالا توی خط 6 عمل فراخوانی رو انجام میدیم . اسم ماژول اصلی رو که DFF بود مینویسیم و یه اسم مستعار مثلا U واسش انتخاب میکنیم . حالا مطابق خط 6 تا 10 ورودی و خروجی هارو بهم وصل میکنیم . بعدش توی خط 12 از یه بلاک initial استفاده میکنیم تا مقادیر ورودی هارو مشخص کنیم . معمولا اینجا ابتدا کلاک رو صفر میکنیم و بعد دیگه بهش دست نمیزنیم . برای ریست هم معمولا ابتدا فعالش میکنیم (ریست رو مساوی صفر قرار میدیم) و بعد از چند نانوثانیه غیر فعالش میکنیم (ریست رو مساوی یک قرار میدیم) ، بدین ترتیب من به ازای 100 نانوثانیه مدار رو ریست کردم و گفتم بعد از 100 نانوثانیه مدار از ریست در بیاد و شروع کنه به کار کردن .
حالا ورودی های دیگه ای اگه دارم مقداردهی شون میکنم که توی فلیپ فلاپ D فقط یه ورودی به اسم D داریم که من کاملا دلبخواهی مقادیر مختلف رو توی خط 20 تا 23 بهش دادم . توی خط 24 هم مجددا ریست رو فعال کردم تا مدار ریست بشه (چرا ؟ دوست داشتم ، دلبخواهی ، شما میخای خط 24 رو ننویس و مدار تو ریست نکن).

حالا نوبت به مقداردهی کلاک میرسه ، ما توی initial فقط در لحظه اول کلاک رو صفر کردیم ، حالا باید کلاک رو نات کنیم و بسازیم . خارج از بلاک initial توی یه بلاک always میگیم کلاک مساوی بشه با نات کلاک البته با 5 نانو ثانیه تاخیر، این باعث میشه هر 5 نانوثانیه سیم کلاک مقدارش نات بشه دقیقا مشابه شکل 17-1 و دوره تناوب کلاک هم 10 نانوثانیه خواهد بود ، به همین راحتی . دانلود فیلم جلسه

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

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




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


آوا مهجوری

سلام تست بنچ ارور میده.نفهمیدم مشکلش چیه

سید محسن

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

حسین

تایم اسکیل رو نباید بنویسیم که نانو ثانیه هست یا پیکو ثانیه ؟

سید محسن

سلام به صورت دیفالت نانو ثانیه در نظر میگیره ولی بله بهتره که بذاریم ، پس توی خط اول تست بنچ این رو اضافه کنید `timescale 1ns / 1ps

علی

سلام من یه خراب کاری کردم در بین سیمولیشن گرفتن به دلیل این که سیمولیشن خراب شده بود از تسک منیجر از مدل سیم خارج شدم حالا هر چی دوباره وارد می شم هیچ کدوم از ماژولا رو سیو نمی کنه و کامپایل هم نمی کنه فقط یه با یه پیغام داد که برای کامپایل یه فایلی رو نمی تونم پیدا کنم خیلی کارم گیره می تونید یه راهنمایی کنید ؟

سید محسن

سلام ، نرم افزار مدلسیم این مشکلات غیرمنطقی واسش پیش میاد معمولا . سعی کنیم پروژه رو از اول بسازید و تمام مراحل ساخت رو مجددا طی کنید .

anonymous

درود بر سید محسن

سید محسن

درود بر خودت :)