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


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

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

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

در جلسه آخر فصل اول هستیم ، دو تا مثال حل میکنیم و بعدش یکم باهم گپ میزنیم و آماده میشیم برای فصل بعدی که بسیار جذاب تر از این فصل خواهد بود.

آموزش وریلاگ

تصویر بالا یک فلیپ فلاپ از نوع J-K هست که قصد داریم کد شو بنویسیم . ابتدا ورودی ، خروجی و سیگنال های واسطه رو تعریف میکنیم :

ISE Project - VerilogCode.ir : \ Box4-1.v
 1-
 2-
 3-
 4-
 5-
 6-
 7- 
 8-
 9-
10-
11-
module FlipFlop(
    input   J,
    input   K,
    input   Clk,
    output  Q,
    output  Q_Prim
    );  
	
    wire S,R;
	
endmodule

کد بالا معادل شکل زیر :

آموزش وریلاگ

خب حالا گیت هارو اضافه می کنیم به کد برنامه مون :

ISE Project - VerilogCode.ir : \ Box4-2.v
 1-
 2-
 3-
 4-
 5-
 6-
 7- 
 8-
 9-
10-
11-
12-
13-
14-
15-
16-
module FlipFlop(
    input   J,
    input   K,
    input   Clk,
    output  Q,
    output  Q_Prim
    );  
	
    wire S,R;

    nand(R,Q_Prim,J,Clk);    //R = ~(Q' & J & Clk)    
    nand(S,Clk,K,Q);         //S = ~(Clk & K & Q)    
    nand(Q,R,Q_Prim);        //Q = ~(Q' & R)    
    nand(Q_Prim,Q,S);        //Q' = ~(Q & S)     
	
endmodule

شاید سوال پیش بیاد که برای ورودی کلاک پالس باید کار خاصی کنیم ؟ خیر ، اصلا به ما چه ربطی داره که ورودی چی میخواد باشه ؟ ما فقط وظیفه داریم ورودی و خروجی ها رو به گیت ها وصل کنیم ، همین .
یا شاید بپرسید ، چرا خروجی ماژول ، وصل شده به ورودی گیت ها ، ببینید خروجی ماژول حق نداره ورودی ماژول باشه ، اما میتونه ورودی گیت های داخلی باشه ، به عبارتی دیگر شما خروجی و ورودی های ماژول رو هرجایی که دوست داشتید میتونید وارد کنید کسی هم نمی تونه جلوی شما رو بگیره .
و این نکته هم بد نیست بگم ، توی خط 11 و 12 ، کلید واژه nand ما سه تا ورودی داره ، اصلا مشکلی نداره ممکنه گیت ما صد ها ورودی داشته باشه ، شما فقط کافیه خروجی رو سمت چپ بنویسید و مابقی ورودی هارو بعدش بنویسید ، مثلا فرض کنید قراره سیگنال های A,B,C,D,E,F رو اَند کنیم و حاصل رو با Z نمایش بدیم ، در این صورت کافیه بنویسیم : and (Z,A,B,C,D,E,F) به همین راحتی .
خب حالا بریم سراغ مثال آخر این فصل :

آموزش وریلاگ

فرض کنید مدار بالا ، مربوط به یک بُمب میباشد، ورودی A رو داریم به همراه خروجی های S,C ، همینطور دو سیگنال واسطه ای داریم که مقدار ثابت دارند ، یعنی یکی شون 1 منطقی یا همون 5 وُلت هست و دیگری 0 منطقی یا همون زمین هست. در روش اول سیگنال های واسطه ای رو به این صورت تعریف کنیم :

ISE Project - VerilogCode.ir : \ Box4-3.v
 1-
 2-
 3-
 4-
 5-
 6-
 7- 
 8-
 9-
10-
module Bomb(
    input   A,
    output  S,
    output  C
    );  
	
    wire n=1'b1;              //n=1    
    wire m=1'b0;              //m=0    
	
endmodule

حالا گیت هارو اضافه میکنیم :

ISE Project - VerilogCode.ir : \ Box4-4.v
 1-
 2-
 3-
 4-
 5-
 6-
 7- 
 8-
 9-
10-
11-
12-
13-
module Bomb(
    input   A,
    output  S,
    output  C
    );  
	
    wire n=1'b1;              //n=1    
    wire m=1'b0;              //m=0    

    xor(S,A,n);         //S = A ^ 1     
    and(C,A,m);         //C = A & 0    
	
endmodule

روش دوم اینه که بصورت مستقیم و بدون تعریف کردن wire ، مقادیر سیگنالهای واسطه رو به گیت ها بدیم :

ISE Project - VerilogCode.ir : \ Box4-5.v
 1-
 2-
 3-
 4-
 5-
 6-
 7- 
 8-
 9-
10-
module Bomb(
    input   A,
    output  S,
    output  C
    );  
	
    xor(S,A,1'b1);         //S = A ^ 1     
    and(C,A,1'b0);         //C = A & 0    
	
endmodule

بنظر من روش دوم خیلی بهتر و زیباتره ، احتمالا واستون سوال پیش اومده که چطور یک مقداردهی انجام میشه و عبارت n=1'b1 و m=1’b0 از کجا اومد !! ببینید اول توضیح بدم که یک متغییر یا سیگنال ، میتونه 4 مقدار داشته باشه : 0 که همون زمین یا صفر منطقی هست ، 1 که همون ولتاژ بالا یا یک منطقی هست ، Z که به معنای HZ ( های امپدانس ) هست و در جاهای خاص استفاده میکنیم ، X که به معنای مقدار نامشخص هست که این روهم در جاهای خاص استفاده می کنیم .

حالا نحوه مقداردهی به این صورته که ، اول مشخص کنید سیگنال تون چند بیت داره (توی این فصل تمام سیگنال هایی که ما تعریف کردیم یک بیتی بودن ، در فصل بعدی با سیگنال های چند بیتی آشنا میشیم) ، بعدش یدونه علامت کوتیشن بذارید ، تا اینجا شد n=1’b ، حالا باید تعیین کنین فُرمت مقداردهی تون چیه ؟ باینری b ؟ دسیمال d ؟ هگز h ؟ که ما در اکثر مواقع با فُرمت باینری مقداردهی انجام میدیم که میشه فرمت b ، پس تا اینجا داریم n=1’b ، حالا باید مقدار سیگنال رو بنویسید ، اگه دوست دارید 0 منطقی باشه ، صفر رو بنویسید یعنی n=1’b0 یا اگه دوست دارید 1 منطقی باشه یک رو بنویسید n=1’b1 . البته میتونید های امپدانس n=1’bZ و یا مقدار نامشخص n=1’bX هم بهش بدید.

این فصل تموم شد، حالا بیاید کمی باهم گپ بزنیم ، چه پیشنهاداتی دارید ؟ دوس دارید چه چیزهایی اضافه یا کم بشه ؟ در کامنت ها با شما خواهم بود .یک نکته هم بهتون بگم حتما سعی کنید فیلم جلسات رو دانلود کنید مخصوصا این جلسات رو که رایگان هم هست ، من توی فیلم نکات بیشتر و مباحث رو کامل تر میگم که باعث میشه حرفه ای تر بشید .
دانلود فیلم جلسه

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

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




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


علی

سلام چرا به جای n=1'b1 مستقیم عدد 1 رو ندادید؟ میتونید بنویسید and=(x,a.1) چون اگر بخوایم بیت تعریف کنیم میتونیم موقع اینپوت کردن تعداد بیت رو تعیین کرد

سید محسن

متوجه حرف ات نشدم . من یه عدد یه بیتی میخاستم چون یه سیم بیشتر نبود و توی دنیای مدارمنطقی یدونه سیم برق یعنی یه بیت داده .