در قسمت دوم از مجموعه آموزشی FPGA یاد گرفتیم که چهموقع باید سراغ تراشههای FPGA برویم، به مقایسه این تراشهها با میکروکنترلرها پرداختیم و درنهایت منابع داخلی FPGA را معرفیکردیم. اکنون قصد داریم که با محیط نرمافزار ISE و همچنین زبان VHDL آشنا شویم.
نرمافزار ISE
نرمافزار ISE یا بهطور کاملتر Xilinx ISE Design Suite یک مجموعه نرمافزاری است که خود شامل چندین نرمافزار میباشد و از این نرمافزارها برای طراحی، شبیهسازی، برنامهریزی و بسیاریاز کارهای دیگر استفاده میشود که در ادامهی این مجموعه آموزشی بیشتر با آنها آشنا خواهیمشد. همچنین پساز نسخه ۱۴.۷، نسخه جدیدی ارائهنشد و جای خود را به نرمافزار Vivado داد. البته ناگفته نماند، تراشههایی که در ISE دردسترس هستند، در Vivado غیرقابل دسترس هستند و همینطور بالعکس. پس ما باتوجهبه تراشهای که قصد داریم با آن کارکنیم نرمافزار موردنظر را انتخاب خواهیمکرد. در این مجموعه آموزشی، چون مبنای آموزش براساس تراشهی Spartan-6 خواهد بود، پس نرمافزار ISE را انتخابکردهایم.
نصب نرمافزار ISE
نرمافزار را میتوانید از اینجا دانلود کنید. نصب این نرمافزار بسیارساده خواهد بود ولی اگر شما از ویندوز۱۰ استفاده میکنید ممکناست پساز اجرای نرمافزار با خطای pn.exe has stopped working_ مواجه شوید، در این صورت باید نرمافزار را بسته و مراحل زیر را بهترتیب انجامدهید.
- ابتدا وارد فولدر C:\Xilinx\14.7\ISE_DS\ISE\lib\nt64 شوید و نام فایل libPortability.dll را به libPortability.dll.orig تغییردهید.
- در فولدر مرحله۱ ، یک کپی از فایل libPortabilityNOSH.dll ایجاد کنید و نام آن را libPortability.dll بگذارید.
- حال وارد فولدر C:\Xilinx\14.7\ISE_DS\common\lib\nt64 شوید و فایل libPortabilityNOSH.dll را در این فولدر هم کپی کنید.
- در فولدر مرحله ۳، نام فایل libPortability.dll را به libPortability.dll.orig تغییر دهید.
- در آخر، نام فایل libPortabilityNOSH.dll در فولدر مرحله ۳ را به libPortability.dll تغییر دهید.
شروع اولین پروژه
ابتدا وارد نرمافزار شوید و سپس مانند تصویر زیر از منوی File گزینهی New Project را انتخابکنید.
از پنجره بازشده میتوانید نام و محل ذخیرهسازی پروژه را انتخابکنید و با انتخاب Next به مرحلهی بعد بروید.
در پنجره بازشده باید تنظیمات مربوطبه تراشه انتخابی را انجامدهیم. تراشه ما از خانواده Spartan-6 و از نوع XC65LX9 میباشد. و همچنین پکیج تراشهای که ما از آن استفاده میکنیم TQG144 است. در همین پنجره مشاهده میکنید که ما Speed را ۲- انتخاب کردیم، در این رابطه باید ذکر گردد که این عدد مربوطبه تکنولوژی تراشه است، که باید از دیتاشیت یا از روی خود تراشه خواندهشود. و درنهایت پساز انتخاب Next و Finish پروژه ساختهخواهدشد.
تا اینجا ما فقط پروژه را ساختهایم ولی هنوز مشخص نکردهایم که قراراست در این پروژه چهنوع فایلی را قراردهیم. در ابتدایکار ما قصد داریم که یک ماژول VHDL را به پروژه اضافهکنیم، بههمینمنظور در قسمت Hierarchy راستکلیک کرده و گزینه New Source را انتخاب میکنیم. اگر شما فایل از قبل آمادهای دارید میتوانید بااستفادهاز گزینههای Add Source یا Add Copy of Source آنرا به پروژه اضافه کنید، ولی دقت کنید که فرق بین این دو گزینه این است که یکی از آنها یک کپی از فایل اصلی گرفته و آن را به پروژه اضافه میکند و گزینهی دیگر خود فایل اصلی را در پروژه قرار میدهد، حال اگر شما در حینکار تغییراتی در این فایل ایجاد کنید، این تغییرات در فایلاصلی نیز اعمال خواهد شد. پس بهتر این است که اگر فایلاصلی را نیاز داریم، از گزینه Add Copy of Source استفادهکنیم.
در پنجره ظاهرشده فایلهای متفاوتی وجود دارد که بعدا به توضیح هرکدام خواهیمپرداخت اما فایل موردنظرما در اینجا یک ماژول VHDL میباشد که با انتخاب گزینهی VHDL Module این فایل را به پروژه اضافه میکنیم.
دقتکنید که مانند تصویر زیر حتما هم اسم فایل و هم نوع فایل را انتخابکنید چون درغیر اینصورت خود نرمافزار یکیاز گزینههای موجود را انتخاب میکند که ممکناست فایل موردنظرما نباشد.
با انتخاب گزینهی Next پنجرهای ظاهر خواهد شد که ما میتوانیم بااستفادهاز این Wizard پورتهایی که قرار است اضافهکنیم را انتخابکنیم، البته میتوانیم در اینجا هیچ تنظیمخاصی را انجامندهیم و بعد که فایل ساختهشد اسم پورتها را بنویسیم. همانطورکه در تصویرزیر مشاهده میکنید پورتها میتوانند ورودی، خروجی و یا ورودی-خروجی باشند. همچنین در این Wizard میتوانیم تعداد بیتهای پورتها را نیز انتخابکنیم، که ما در اولین پروژه برای سادگی تمامی پورتها را تکبیتی انتخاب میکنیم. پساز تکمیل این مرحله ماژول VHDL ساخته و به پروژه اضافه خواهد شد.
در کد ایجادشده همانطورکه مشاهده میکنید پورتها اضافه شدهاند، علاوهبر پورتها یکسری کامنت و الگویاصلی کد نیز بهصورت پیشفرض اضافهشدهاست. بهتراست که کامنتها را حذفکنیم و بااستفادهاز کلید Tab چینش کد را هم منظمکنیم تا کد ما زیباتر و شکیلتر بهنظر برسد.
باتوجهبه کدی که ما مینویسیم، باید اول کد، پکیج مربوط به کد موردنظر اضافهشود. درادامه خواهیددید که ما از پکیجهای زیادی استفاده نمیکنیم و تقریبا هرنوع کدی را میتوان با پکیجهایی که معرفیخواهیمکرد نوشت. با بروزرسانیهایی که شرکت Xilinx انجامداد میتوان گفت عملا استفادهاز پکیجهای قدیمی کاری بیهوده است اما هنوز هم هستند کسانیکه علاقهدارند یک عالمه پکیج همان اول کد اضافهکنند که مبادا چیزی را ازدست دادهباشند.
در این کد ساده، ما اول کد فقط دو خط زیر را اضافه میکنیم:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;
بعداز begin مربوط به architecture کد موردنظرمان را مینویسیم، که البته ما در این پروژه بهخاطرسادگی فقط یک خط کد نوشتیم. در این کد، ما در ابتدا A را با AND ،B و سپس نتیجه را با OR ،C کردهایم.
حائز اهمیت است که در اینجا ذکر گردد نتیجه کد تولیدشده، ایجاد یک سختافزار خواهدبود که شامل یک گیت AND دو ورودی و یک گیت OR دو ورودی میباشد و نتیجه کاملا متفاوت با این میباشد که ما همین منطق کد را مثلا در زبان C نوشتهباشیم، در زبان برنامهنویسی هیچ سختافزاری تولید نمیشود بلکه کدها پشت سرهم در CPU اجرا میشوند.
بااستفادهاز مسیر زیر میتوانید شماتیک سختافزار ایجادشده را مشاهدهنمائید:
View RTL Schematic → OK → Add → Create Schematic
پساز اینکه مسیربالا را طیکردید فقط یک شماتیک کلی اولیه که شامل ورودی-خروجیهای مدار شما میباشد نمایش داده خواهد شد، با دابلکلیک برروی آن میتواند به شماتیکزیر برسید.
امیدوارم که تااینجا فرق زبان VHDL با زبانهای برنامهنویسی را بهخوبی درککردهباشید، البته درادامه با توضیحات بیشتری که خواهیمداد مفهوم کاملا برایشما روشنخواهد شد. در قسمت چهارم با ساختار کد و مدارهای ترکیبی و ترتیبی در زبان VHDL آشنا خواهیم شد. پس با ما همراه باشید.
منبع: سیسوگ