آموزش VHDL
VHDL : Very High Speed Integrated Circuit Hardware Description Languege
برای یادگیری زبان VHDL دانستن جبر بول و آشنایی با مدارات منطقی ضروری است. لذا ما فرض می کنیم که دوستان با دو مقوله فوق آشنایی کافی دارند.
و اما یادگیری VHDL چه مزایایی دارد. قبل از هرچیز باید گفت که هدف از یادگیری VHDL خصوصاْ در ایران طراحی مدارات دیجیتال و پیاده سازی در FPGA می باشد هرچند مدار طراحی شده را بصورت ASIC (آی سی خاص) نیز می توان پیاده سازی نمود اما غالباْ مدارات دیجیتال با هدف پیاده سازی در FPGA طراحی می شوند.
برای یادگیری VHDL در این مقطع نیاز به نرم افزاری برای شبیه سازی مدارات طراحی شده خواهیم داشت. نرم افزارهای زیادی برای این منظور وجود دارند اما بهترین و آسانترین انها Active-HDL می باشد که نتایج شبیه سازی را بصورت شکل موجهای گرافیکی نمایش می دهد. و در عین حال کار کردی آسان دارد. در اولین فرصت نحوه تهیه این نرم افزار را خواهم گفت.
و اما بپردازیم به VHDL :
هر برنامه VHDL دارای دو قسمت اصلی می باشد. یکی به نام Entity و دیگری Architecture :
در قسمت Entity ورودیها و خروجیهای مدار یا برنامه VHDL و مشخصات آنها تعیین می شود. به عبارت دیگر Entity مثل یک جعبه سیاه است که از بیرون فقط ورودیها و خروجیها قابل تشخیص است همچنین تعدادی از پارامترهای کلی اما اینکه در این جعبه سیاه چه خبر است در Architecture معلوم می شود.
در Architecture در واقع نحوه ارتباط ورودیها و خروجیها معلوم می شود. مثلاْ اگر در قسمت Entity دو ورودی A و B و یک خروجی C تعریف کرده ایم در Architecture می گوییم که این ورودیها چه رابطه ای با خروجی دارند. مثلاْ ممکن است بگوییم C <= A AND B یا C <= A XOR B و ... . بنابراین دیده می شود که یک برنامه VHDL می تواند تنها یک Entity داشته باشد ولی در تعداد Architecture ها محدودیتی ندارد.
ٍEntity Example1 is
Port (A,B,C: IN Bit ; O1 , O2: OUT Bit)
End Entity Example1;
Architecture AND2 of Example1 is
Begin
O1 <= A AND B ;
O2 <= B AND C;
End Architecture AND2;
Architecture OR3 of Example1 is
begin
O1 <= A OR B OR C ;
O2 <= A OR C:
End Architecture OR3;
می بینید که من با یک Entity دو Architecture تعریف کرده ام اما باید توجه داشته باشید که این دو Architecture در واقع بیان کننده دو مدار جداگانه هستند که تنها دارای مرودی و خروجی یکسان هستند. بنابراین در آن واحد فقط از یکی از آنها می توان استفاده نمود. همانگونه که در عمل امکان ندارد یک خروجی در آن واحد هم حاصل OR و هم AND دو یا چند سیگنال ورودی باشد در VHDL نیز امکان ندارد چراکه VHDL نیز همان مدار منطقی می باشد منتها فقط نحوه توصیف تغییر کرده است.
VHDL دارای ساختاری Event Driven است یعنی برخلاف سایر زبانهای برنامه نویسی با هر تغییر روی مقادیر ورودی خروجیهای متناظر محاسبه می شوند . اینطور نیست که دستورات به ترتیب و خط به خط اجرا شوند. مثلاْ در مثال فوق در بخش AND2 اگر سیگنال ورودی C تغییر کند بلافاصله مقدار خروجی برای O2 محاسبه می شود بدون آنکه محاسبات مربوط به O1 انجام شود. اما اگر همین مثال را با استفاده از مثلاْ زبان C اجرا می کردیم ابتدا خط بالایی یعنی O1 <= A AND B اجرا می شد سپس دستور O2 <= B AND C اجرا می شد.
فصل اول: " طراحي مدارهاي تركيبي با استفاده از مدلهاي گيت VHDL "
1.1 Entity و Architecture
2.1 شناسه ها
3.1 Netlist
4.1 انتقال سيگنال
5.1 پارامترهاي عمومي
6.1 مقادير ثابت و پورتهاي باز
7.1 Testbench
8.1 پيكربندي يا Configuration
----------------------------------------------------------------------------
مدارهاي تركيبي همانطور كه مي دانيم داراي حالت نيستند و تغييرات روي سيگنالهاي ورودي بلافاصله به خروجيهاي مدار منتقل مي شوند. در اين فصل اصول طراحي مدارهاي تركيبي با استفاده از VHDL آموزش داده خواهد شد.
۱.۱ Entity و Architecture
همانطور كه در جلسه قبل گفته شد ، هر برنامه VHDL ساده داراي دو قسمت مي باشد: يك Entity و يك Architecture . قسمت Entity يك جعبه سياهي را معرفي مي كند كه تنها مي توان وروديها و خروجيها و نوع آنها را ديد اما از مدار داخل آن اطلاعاتي به ما نمي دهد. اما Architecture تابع و يا ساختار و معماري مدار داخل جعبه سياه را معرفي مي كند. به عنوان يك مثال ساده فرض كنيد يك جعبه سياه در اختيار داريم كه دو سيم به آن وارد شده و يك سيم نيز از آن خارج شده است. اگر قرار باشد آنرا بصورت برنامه VHDL مدل كنيم بايد در قسمت Entity اسم وروديها و خروجيها مشخص شود و همچنين مشخص كنيم كه نوع آنها چيست ؟ ( Bit ، Std_logic و ... ) - كه بعداً مفصلاً در مورد آن بحث خواهد شد - و در قسمت Architecture گفته مي شود كه اين سيگنالها چه رابطه اي با هم دارند مثلاً آيا با هم جمع مي شوند ، AND مي شوند يا هر چيز ديگري. بنابراين مي توان گفت كه يك برنامه VHDL ميتواند داراي چندين Architecture باشد اما بيش از يك Entity مجاز نيست داشته باشد. يعني يك مدار با وروديها و خروجيهاي مشخص در زمانهاي مختلف مي تواند عملكردهاي متفاوتي داشته باشد. يا حتي مي توان براي يك Entity توصيف هاي متفاوتي از يك عملكرد را ايجاد نمود ، مثلاً براي نشان دادن AND دو سيگنال يكبار ممكن است از گيت AND كه قبلاً وجود دارد استفاده كنيم و يا ممكن است آنرا بصورت تابع بولي نمايش دهيم و يا آنرا بصورت جدول درستي نمايش دهيم. كه براي هريك از موارد فوق مي توان Architecture جداگانه اي براي يك Entity نوشت.
توصيف Entity با كلمات رزرو شده ENTITY و IS شروع و با كلمات رزرو شده END ENTITY خاتمه مي يابد. البته آوردن كلمه ENTITY همراه END اختياري است اما براي وضوح بيشتر برنامه بهتر است نوشته شود. در VHDL براي مشخص كردن انتهاي هر عبارت همانند زبان C از " ; " استفاده مي شود. بنابراين توصيف يك Entity بصورت زير خواهد بود.
ENTITY exp1 IS
PORT ( x , y : IN BIT ; z: OUT BIT);
END ENTITY exp1 ;
VHDL اوليه در سال 1987 تعريف شد. در سال 1993 چند استاندارد ديگر نيز به VHDL اضافه شد كه باعث سازگاري بيشتر آن با دستور زبان برنامه نويسي شود. در اينجا براي خوانايي بيشتر مثالها از استاندارد 1993 استفاده شده است. در استاندارد 1987 ، ترجيحاً از END بجاي END ENTITY استفاده مي شد. اين مسأله در مورد ساختارهاي ديگر زبان نيز صادق بود.
Entity شامل يك توصيف ( Declaration ) مي باشد . از كلمه رزرو شده PORT براي مشخص كردن ارتباطات بين Entity و دنياي خارج استفاده مي شود. در مثال قبل سيگنالهاي x و y از نوع بيت با استفاده از كلمه رزرو شده IN معرفي شدند و سيگنال z نيز از نوع BIT با استفاده از كلمه رزرو شده OUT بعنوان خروجي مدار معرفي شدند. سيگنالهاي دوطرفه ( مرودي و خروجي ) با استفاده از كلمه رزرو شده INOUT در VHDL مشخص مي شوند. BIT نوع پيشفرض با دو مقدار 0 و 1 مي باشد.
تعريف Architecture شامل اسم ان و اسم Entity مربوطه مي باشد. اسم Entity در اينجا بايد همان نامي باشد كه در قسمت تعريف Entity انتخاب كرده ايم و انتخاب ان نيز كاملاً اختياري است منتهي مجاز نيستيم كه از كلمات رزرو شده استفاده كنيم. در مثال قبل مدل VHDL تنها شامل يك عبارت بين كلمه رزرو شده Begin و خط END Architecture مي باشد كه در واقع مقدار x AND y را به سيگنال z منتقل ميكند. تابع AND يك عملگر داخلي VHDL مي باشد كه مقدار نوع بيت گرفته و خروجي نوع بيت توليد كرده است. VHDL داراي عملگرهاي NOT ، AND ، OR ، NAND ، NOR ، XOR و XNOR مي باشد كه براي مقادير نوع بيت تعريف شده اند و چنانچه براي ساير انواع متغيرها مورد استفاده قرار گيرد بايد كتابخانه هاي مربوطه كه اين عملگرها را براي آن نوع متغير تعريف نموده اند فراخواني شوند. عملگر NOT داراي بالاترين اولويت بوده و ساير عملگرها داراي اولويت يكسان هستند. لذا اولويت اجراي آنها بترتيب نوشتن ( از چپ به راست ) مي باشد. توجه داشته باشيد كه جبر بول در حالت عادي براي عملگر AND اولويت بالاتري نسبت به OR قائل است اما اين مسأله در VHDL صحت ندارد.
سلام . من اردلان هستم .25ساله . فارغ التحصيل مهندسی الکترونیک دانشگاه آزاد اسلامی واحد تهران جنوب ! عاشق الکترونیک و دنیای زیبای آن . در ضمن در زمینه موسیقی هم به آهنگ های آرش و نانسی عجرم علاقه مند هستم . با تشکر...!!!