مقدمه ای درباره FPGA & CPLD
برای آنکه بتوان بخش بزرگی از یک طرح را داخل یک تراشه منتقل نمود و از زمان و هزینه مونتاژ و راه اندازی و نگهداری طرح کاست، ساخت تراشه های قابل برنامه ریزی مطرح شد از جمله مزایای استفاده از تراشه های قابل برنامه ریزی در طراحی پروژه ها عبارتند از :
– کاهش ابعاد و حجم
– کاهش زمان و هزینه طرح
– افزایش اطمینان از سیستم
– حفاظت از طرح
– حفاظت در برابر نویز و اغتشاش
FPGA ها ابزار سخت افزاری قابل برنامه ریزی ارزان قیمت را جایگزین کاربردهای فعلی کنترلرهای داخلی (Embedded Controllers) نموده اند. به همین دلیل بازار آنها رشد گسترده ای داشته است. علاوه بر این به جهت ارائه راه حل های مناسب برای IC های سفارشی با عملکرد بالا موفقیت زیادی به دست آورده اند. در واقع به نظر می رسد که FPGAها با توجه به ارزان بودن، نسل فعلی تراشه های ASIC را از رده خارج کنند. همین مزیت هزینه و عملکرد توجه زیادی را درحوزه تحقیقات به خود معطوف کرده است.
ویژگی استفاده از قطعات منطقی قابل برنامه ریزی (PLD) و FPGA، ارزان بودن قیمت و سرعت ورود آنها به بازار است.
قطعات ASIC، هزینه های توسعه مهندسی غیر قابل برگشت بالاتری دارند و در نتیجه اغلب، قیمت این محصولات بالاتر است، اما اساساً کارایی بالاتری دارند. این شیوه های مختلف طراحی محیطهایی را با مجموعه ای از متدولوژی و ابزاهای مختلف CAD پدید می آورند.
در طول یک دهه گذشته، انواع مختلفی از سخت افزارهای قابل برنامه ریزی به سرعت پیشرفت کرده اند. این قطعات نام های مختلفی دارند مثل سخت افزار قابل آرایش مجدد، سخت افزار قابل آرایش، سخت افزار قابل برنامه ریزی مجدد.
ایده اصلی و زیر بنایی معماری FPGA و CPLD بسیار ساده است. به طوری کلی میتوان مدارهای ترکیبی و ترتیبی را مستقیماً روی بستر سیلیکون ایجاد کرد. تراشه های ASIC با اینکه کارایی بالایی دارند اما تنها می توانند یک نوع عملیات را انجام دهند.
از آنجایی که امکان توزیع هزینه توسعه بین چند کاربر وجود ندارد، قیمت ASIC ها معمولاً بیش از سیستمهای مبتنی بر ریز پردازنده معمولی می شود.
تکنولوژی تراشه های قابل برنامه ریزی
قابلیت برنامه ریزی شدن مدارات مختلف و اتصالات متفاوت بر روی PLD به دلیل سوئیچ های قابل برنامه ریزی است که در این تراشه وجود دارد، این سوئیچ ها می بایست علاوه بر اشغال فضای بسیار کم دارای کمترین تاخیر زمانی باشند بطور کلی سوئیچ های قابل برنامه ریزی در PLD با استفاده از سه نوع تکنولوژی قابل پیاده سازی است.
1-استفاده از Anti – Fuse
2-استفاده از سلولهای حافظه موقت Sram
3-استفاده از گیتهای شناور EEPROM یا EPROM
Anti – Fuse
خصوصیت اصلی Anti – Fuseها تنها یک بار قابلیت برنامه ریزی بودن، اشغال فضای کم و بالا بودن فرکانس کاری، به دلیل پایین بودن اثر مقاومتی و ظرفیت خازنی آنها است.
عیب اصلی این روش نداشتن قابلیت برنامه ریزی مجدد است و زمانی که یک بار برنامه ریزی گردد دیگر به حالت اولیه برنمی گردد و مزیت اصلی آن فرکانس کاری بالا و اشغال فضای کم آن است این نوع PLDها نسبت به انواع دیگر PLDها نسبتاً گرانتر هستند.
SRAM
در روش SRAM از سلولهای حافظه به دو طریق استفاده می شود، در روش اول از یک سلول حافظه برای کنترل روشن یا خاموش شدن یک ترانزیستور استفاده می گردد که در این حالت خروجی سلول حافظه به بیس ترانزیستور یا گیت فت متصل می شود، با روشن یا خاموش شدن ترانزیستور یک مسیر وصل یا قطع می شود. در روش دوم سلول حافظه به ورودیهای انتخاب مالتی پلکسر وصل می شود. در این حالت با صفر یا یک شدن سلول حافظه مسیر خطوط عوض می شود، مهمترین عیب این روش پاک شدن برنامه ریزی با قطع تغذیه می باشد، تراشه هایی که با این روش برنامه ریزی می گردند، می بایست با استفاده از یک سیستم جانبی با هر بار وصل شدن تغذیه تراشه برنامه ریزی گردد، این روش نسبت به روش Anti – Fuse فضای بیشتری اشغال می کند و تاخیر زمانی نیز بیشتر است.
روش برنامه ریزی EEPROM یا EPROM
مهمترین مزیت این روش پاک نشدن برنامه ریزی با قطع برق مهمترین عیب آن اشغال فضای زیاد این نوع ساختار سوئیچ می باشد.
تقسیم بندی PLDها
PLDها شامل قطعات کم ظرفیت و پرظرفیت می باشند. PLDهای کم ظرفیت (ساده ) معمولاً کمتر از 600 گیت قابل استفاده دارند و شامل محصولاتی چون PALها و GALها می شوند.
PLDهای ساده شامل سوئیچ های EEPROM یا EPROM و Anti – Fuse می باشند.
(High – Capacity – PLD) HCPLD بیشتر از 600 گیت قابل استفاده دارند و شامل CPLD و FPGA می شوند.
FPGAها ساختمان اتصالات داخلی گسسته دارند، در حالیکه CPLDها دارای اتصالات داخلی پیوسته می باشند.
در ساخت HCPLD ها از تکنولوژی EEPROM , EPROM , Sram و Anti – Fuse استفاده شده است.
انواع تراشه های برنامه ریزی
(Programable read only memoey) PRom
اولین تراشه های قابل برنامه ریزی که به بازار عرضه شد حافظه فقط خواندنی PRom بود، در این تراشه خطوط آدرس بعنوان ورودی و خطوط دیتا به عنوان خروجی تلقی می شوند.
PRom شامل دسته ای از گیتهای and غیر قابل برنامه ریزی و یک آرایه OR قابل برنامه ریزی است. PRom در حد یک حافظه است و قابلیت برنامه ریزی یک مدار منطقی را ندارد.
(Programable logic array) PLA
اولین تراشه قابل برنامه ریزی که برای پیاده سازی مدار منطقی آرایه برنامه پذیر and و یک آرایه برنامه پذیر OR می باشد. دو اشکال عمده، هزینه گران ساخت و سرعت پایین آن است .
(Programable array logic) PAL
تراشه Pal دارای یک آرایه and قابل برنامه ریزی و یک آرایه OR تثبیت شده است.
GAL
تراشه GAL دارای یک آرایه and قابل برنامه ریزی و یک آرایه OR تثبیت شده است. تراشه GAL دارای سرعت بیشتر نسبت به تراشه PAL می باشد.
بعد از تراشه های فوق MPGAها و FPGAها به بازار آمدند.
MPGA: Mask programable gate array
FPGA: Field programable gate array
ساختار FPGA
بطور کلی تا کنون سه نوع معماری برای FPGA ها توسط کارخانه های مختلف سازنده ارائه شده است که عبارتند از:
1-آرایه دو بعدی متقارن Symetric matrix
2-آرایه های سطری row based
3-دریایی از گیتها sea of gates
بلوکهای FPGA
1-بلوکهای منطقی (Logic array Block) LAB
2-بلوکهای کنترل کننده I/o
3-اتصالات قابل برنامه ریزی PIA
(Programable Interconnect array)
بلوکهای منطقی
بلوکهای منطقی شرکتهای سازنده FPGA از نظر اندازه ومنطق به کار رفته در آنها با هم تفاوتهای بسیاری دارند.
این بلوکها در FPGAها و CPLDهای Altera به نام LAB شناخته می شوند.
هر LAB می تواند شامل سه زیر بلوک Macrocell و Interconnect local و term logic باشد.
بلوک term logic
در LAB برای برقراری ارتباط یک Macrocell با Macrocellهای دیگر ونیز فیدبک به ورودی Macrocell از بلوک term logic استفاده می شود.
یک بلوک term logic از دو نوع آرایش بسط دهنده موازی (parallel Expanders) وبسط دهنده عمومی (common Expanders) برای برقرای ارتباط استفاده می کند.
بلوکهای کنترل کننده I/o
این بلوکها نوعی مدارات منطقی می باشند که وظیفه برنامه ریزی نوع پورت خروجی و نیز برقراری فیدبک از پینها به درون PIA را دارد.
بلوک (Programable Interconnect array) PIA
این بلوک برای برقراری ارتباط بین بلوکهای منطقی و بلوکهای کنترل کننده ورودی و خروجی استفاده می شود.
شرکتهای سازنده FPGA
Technology
Logic Block
Architecture
Company
Sram
Anti – fuse
Sram
Anti – fuse
Look up table
Multiplexer
Nand
Multiplexer
Symetric matrix
Row based
Sea of gates
Symetric matrix
Xilinx
Actel
Plessey
Quick logic
شرکت Altera و Xilinx از ساختار آرایه ی دو بعدی متقارن استفاده می کنند که با استفاده از Sram برنامه ریزی می شوند و بلوکهای منطقی نیز بر پایه look up table طراحی شده اند.
شرک Altera با استفاده از آرایه سطری تراشه های خود را طراحی نموده است، FPGAهای این شرکت با استفاده از Anti – Fuse برنامه ریزی می گردند و بلوکهای منطقی آنها بر اساس Multiplexer طراحی شده اند.
روش برنامه ریزی Jtag
اینترفیسی که برای این منظور استفاده می شود Byte Blaster نام دارد و کاربر را قادر می سازد تا با استفاده از کامپیوتر و اتصال Byte Blaster به پورت پارالل کامپیوتر برنامه ریزی را انجام دهد .
این اینترفیس با استفاده از نرم افزار maxplus 2 برای برنامه ریزی بصورت Jtag مورد استفاده قرار می گیرد. و هردو نوع ولتاژ 3/3 و 5 ولت را پشتیبانی می کند.
دراستاندارد JTAG برای برنامه ریزی از 4 پین استفاده می گردد.
پین ورودی TDI برای اعمال دیتا به صورت سریال به IC بکار می رود. دیتای قرار گرفته بر روی پین با لبه بالا رونده کلاک به داخل IC شیفت داده می شود.
پین خروجی TDO برای خواندن دیتای برنامه ریزی شده استفاده می گردد و با لبه پایین رونده کلاک دیتا به خارج شیفت داده می شود. پین ورودی TMS : نوع مود تست را مشخص می کند و برای ریست نیز استفاده میشود.
پین ورودی TCK کلاک ورودی به IC است و پینهای TDO و TDI نیز با استفاده از این کلاک کار می کنند.
Byte Blaster NV 25 – pin Header pin – outs
Jtag mode
Sinal Name
pin
TCK
2
TMS
3
TDI
8
TDO
11
VCC
15
GND
25 to 18
این جدول پینهای استاندار Jtag را نشان می دهد.
طول کابل Byte Blaster به هیچ عنوان نباید بیش از 1 متر در نظر گرفته شود.
تراشه های قابل برنامه ریزی Altera
تراشه های قابل برنامه ریزی شرکت Altera مطابق تقسیم بندی خود شرکت شامل 4 دسته است.
* High – Density FPGA1
Stratix
Stratix Gx
APEX II
APEX 20K
اهم خصوصیت این دسته از FPGA ها سرعت و ظرفیت بسیار بالای آن است.
* High – voloume FPGA2
* Mid – Density FPGA3
* Mature device 4
VHDL چیست؟
VHSIC از حروف اول VHSIC Hardware Description Language به معنی زبان توصیف سخت افزاری VHSIC گرفته شده است.
VHDL نیز خود از حروف اول Very High Speed Intergrated circuits تشکیل شده است و به پروژه VHSIC توسط وزارت دفاع آمریکا (DOD) با هدف توسعه نسل جدیدی از مدارهای مجتمع با سرعت بالا حمایت می شد. همزمان با اجرای این طرح و پیشرفتهای پیاپی که در زمینه فناوری نیمه هادیها و بسته بندی (packaging) به وجود آمده بود، امکان پیچیده تر شدن روز افزون سیستمهای الکترونیکی، دفاعی و فضایی را ازخود به جای گذاشت.
بیشترین سهم در هزینه طول عمر این سیستمها، مربوط به هزینه تعمیر ونگهداری بود.
توسعه این زبان به گروهی از پیمانکاران DOD واگذار شده و اولین نسخه آن در سال 1985 عرضه گردید. پس از آن در مراحل بعدی توسعه، استاندارد سازی زبان با همکاری نمایندگانی از صنعت، دولت و دانشگاه به IEEE واگذار شد. درنهایت این زبان در سال 1987 تایید شده و به صورت استاندارد 1987- 1076 IEEE معرفی گردید. پنج سال بعد طی نظر خواهی مجدد ویژگیهای جدیدی به آن اضافه شد و به صورت نسخه 1993- 1076 ارائه شد.
از زمانی که VHDL به صورت استاندارد IEEE در آمده است، کاربرد فراوانی در بین جامعه طراحان سیستمهای الکترونیکی با CAD (طراحی با کمک کامپیوتر) پیدا کرده است. DOD نیازمند این بود که توصیفهای VHDL برای کلیه مدارهای مجتمع با کاربرد خاص (ASICs) مورد استفاده قرار گیرد. با ایجاد بسته استاندارد 1164 IEEE قابلیت کاربرد مدلهای ایجاد شده در محیطهای مختلف VHDL که توسط عرضه کنندگان مختلف ارائه شده بود، افزایش پیدا کرد. به همین صورت امکان پشتیبانی سنتز با تشکیل نسخه سنتز بسته 1164 IEEE فراهم شد. در عمل اکثر عرضه کنندگان اصلی CAD ،VHDL را پشتیبانی می کنند.
VHDL زبانی است برای توصیف سیستمهای دیجیتالی. شبیه سازها می توانند بدون اینکه سیستم به طور واقعی ساخته شود، از این توصیف برای شبیه سازی رفتار سیستم استفاده کنند، همچنین کامپایلرهای سنتز می توانند از این توصیف برای ایجاد توصیفی از سخت افراز دیجیتالی به منظور پیاده سازی سیستم استفاده کنند.
برنامه های VHDL با برنامه های پاسکال، C و فرترن تفاوت دارند. منطق فکری در برنامه های متداول بر اساس الگوریتمی از محاسبات ترتیبی بنا شده که پردازش روی داده ها را برای یک عملیات محاسباتی مشخص انجام می دهد. روند نوشتن چنین برنامه ای اساساً ترتیبی است که در واقع از مدل محاسبات ترتیبی تبعیت می کند، که اساس کار اکثر کامپیوترهای مدرن را تشکیل می دهد. نوشتن برنامه های VHDL بسیار متفاوت است. در VHDL به نحوه محاسبه یک تابع کمتر توجه می شود و در مقابل به رفتار سیستمهای فیزیکی مانند یک مدار دیجیتال توجه بیشتری می شود. این توصیف رفتاری حداقل دو هدف را در بردارد که هرد دو را بررسی می کنیم. هدف اول شبیه سازی مدارهای دیجیتالی است. شبیه سازها از توصیف VHDL برای انجام شبیه سازی استفاده می کنند تا رفتاری کاملاً مشابه به رفتار سیستم فیزیکی را به وجود آورند. کاربرد این شبیه سازی، ارزیابی و تایید رفتار مدار دیجیتالی، قبل از صرف هزینه ای سنگین برای ساخت آن است.
هدف دوم سنتز مدارهای دیجیتالی است. پس از آنالیز توصیف VHDL توسط ابزارهای طراحی، یک مدار دیجیتالی حاصل می شود که همان رفتار مربوط به توصیف VHDL را دارد.
این توصیف های مداری، به سرعت قابل پردازش و تبدیل به سخت افزارهای سفارشی هستند. همچنین می توان آنها را روی واحدهای سخت افزاری قابل برنامه ریزی پیاده نمود.
انواع تاخیر در VHDL
1-تاخیر اینرسی (inertial)
مدارهای دیجیتالی دارای مقدار اینرسی معینی هستند. برای مثال عکس العمل خروجی گیت به هر تغییر در ورودی، مقدار زمان و مقدار انرژی معینی را صرف می کند. این نشان می دهد که هر تغییر در ورودی باید در یک دوره زمانی معین دوام داشته باشد تا خروجی به آن پاسخ دهد. چرا که اگر زمان ماندگاری به اندازه کافی نباشد، رخدادها در ورودی به خروجی انتشار پیدا نخواهد کرد. این مدل تاخیر انتشاری را مدل تاخیر اینVسی می نامند که در برنامه های VHDL مدل تاخیر `یش فرض می باشد.
2-تاخیر انتقالی (transport)
سیگنالها از سیمها همانند ادوات سوئیچینگ با یک آهنگ معین عبور می کنند و با تاخیری متناسب با طول مسیر مواجه می شوند. اما سیمها بر خلاف ادوات سوئیچینگ نسبتاً اینرسی کمتری دارند. در نتیجه سیمها، سیگنالهای با عرض پالس بسیار کوچک را انتشار می دهند و ما می توانیم سیم ها را به عنوان محیط انتشار تغییرات در مقدار سیگنال مستقل از عرض پالس مدل کنیم. در فن آوریهای جدید با رشد کاهش ابعاد، تاخیرهای سیم نیز مطرح می شوند، از این رو باید در پی راه هایی برای کاهش طول سیمها بود، زیرا در این مدارات تاخیر سیمها قابل اغماض نخواهد بود.
اپراتورهای VHDL
1-شی ءهای داده 2- نوع های داده 3-عملگرها
– شیءهای داده در VHDL:
در VHDL سه کلاس برای شیءها وجود دارد: سیگنال، متغیر، ثابت
سیگنال ها:
سیگنال شی ای است که مقدار فعلی و آتی یک شیء را نگه می دارد. از این منظر که VHDL یک زبان توصیف سخت افزار است، سیگنالها نقش سیم را ایفا می کنند. سیگنالها در توصیف درگاه به عنوان ورودی و خروجی، در توصیف ساختاری به عنوان سیگنال و در معماری به عنوان سیگنال ظاهر می شوند. معرفی سیگنال بصورت زیر انجام می شود:
Signal signal_ name : signal_ type: = initial_ value ;
متغیرها:
تفاوت سیگنالها با متغیرها در این است که سیگنالها را در شبیه سازی می توان طوری زمان بندی کرد که در یک زمان معین، مقداری را بپذیرند، در حالیکه به متغیرها در هنگام اجرای عبارت نسبت دهی مقدار داده می شود. در هر زمان می توان چندین مقدار را برای زمان های آتی سیگنال زمان بندی کرد. در مقابل در هر زمان تنها می توان یک مقدار به متغیر نسبت داد. به همین جهت پیاده سازی شیء سیگنال با سابقه ای از مقادیر آن همراه است ودر نتیجه نسبت به متغیرها به حافظه بیشتری نیاز دارد و زمان اجرای بالاتری دارد.
متغیرها به طور کامل با آنچه در زبانهای برنامه نویسی متداول به کار می روند معادل هستند و برای محاسبات درون روالها، توابع، پروسس ها بکار می روند. معرفی متغیر به صورت زیر انجام می شود:
variable variable_ name : signal_ type: = initial_ value ;
ثابتها:
ثابتها باید در ابتدای شبیه سازی معرفی شوند و مقدارشان مشخص شود و نمی توانند در طول شبیه سازی تغییر کنند. ثابتها می توانند از هر نوع مجاز VHDL باشند. معرفی ثابتها بصورت زیر انجام می شود:
Constant Constant_ name : Constant_ type: = initial_ value ;
نوع های داده در VHDL
1-نوعهای داده استاندارد:
تعریف نوع های استاندارد در بسته standard قرار دارند. بسته استاندارد را کلیه عرضه کنندگان ارا ئه می کنند. این بسته حاوی تعاریف نو ع ها و توابع از پیش تعریف شده زبان VHDL می باشد.
نوع داده های استاندارد در VHDL عبارتند از :
صحیح (integer)
حقیقی (real)
بولی (Boolean)
کاراکتر (character)
بیت (bit)
بردار بیت (bit _ vector)
زمان (time)
رشته (string)
طبیعی (natural)
مثبت (positive)
2-نوع های آرایه ای :
آرایه سیگنالهای بیتی در سیستمهای دیجیتالی از نوع های بسیار معمول هستند. آرایه ها گروهی از المانها هستند که همه از یک نوع هستند. برای مثال یک کلمه، آرایه ای از بیتها و حافظه آرایه ای از کلمه هاست.
3-نوع های فیزیکی :
نوع فیزیکی به دلیل نیاز به نمایش کمیات فیزیکی مثل زمان، ولتاژ یا جریان بوجود آمده است. مقدار نوع فیزیکی به صورت یک واحد تعریف می شود مثل ثانیه، ولتاژ یا آمپر، time در VHDL یک نوع فیزیکی از پیش تعریف شده است.
Type time is range < implementation dependent >
units
Fs ; — femto seconds
Fs ; –pico seconds 1000 ps=
ps ; –nano seconds 1000 ns=
ns ; –micro seconds 1000 us=
us ; –milli seconds 1000 ms=
ms ; — seconds 1000 s=
s ; –minutes 60 min=
min ; –hours 60 hr=
end units ;
عملگرها: عملگرها در روابطی به کار می روند که شامل نوع شی ء سیگنال، متغیر یا ثابت هستند، مجموعه ای از عملگرهای تعریف شده در VHDL بصورت زیر می باشند.
Logical operators and or nand nor xor xnor
Relational operators = /= < <= > >=
Shift operators sll srl sla sra rol ror
Multiplying operators * / mod rem
Miscellaneous operators ** abs
عملگرهایی که تقدم بالاتر دارند زودتر روی عملوند عمل می کنند.
توضیح عملگرهای شیفت
sll: تغییر مکان منطقی به سمت چپ
srl: تغییر مکان منطقی به سمت راست
sla: تغییر مکان ریاضی به سمت چپ
sra: تغییر مکان ریاضی به سمت راست
rol: چرخش منطقی به سمت چپ
ror: چرخش منطقی به سمت راست
مفاهیم بنیادی در زبان VHDL :
قبل از هر چیز باید به تعریف انواع port در VHDL پرداخت.
in : input port
به عنوان ورودی
out: output port
به عنوان خروجی – با نوشتن در آن، مقدار آن قابل خواندن نیست.
Inout : bidirectional
به عنوان خروجیI/0 (ورودی خروجی) – دو طرفه عمل می کند.
BUFFER : buffered output port
از انواع خروجی می باشد- بر خلاف پورت out، قابل خواندن است.
در زبان VHDL دو بخش مهم وجود دارد که عبارتند از:
1-موجودیت طرح Entity
2-معماری طرح Architecture
بحث خود را از توصیف سیستمهای دیجیتالی آغاز می کنیم. اولین مفهوم برنامه نویسی در VHDL موجودیت طرح (Entity) است، تراشه، برد، ترانزیستور مثالهایی از موجودیت طرح هستند که در واقع واحدهایی از یک طرح به شمار می آیند که می خواهیم رفتار آنرا توصیف و شبیه سازی کنیم. برای مثال مدار دیجیتالی یک نیم جمع کننده (half – adder) را در نظر بگیرید. این مدار دو سیگنال ورودی x و y دارد و مقدار سیگنالهای خروجی sum و carry هستند. برای این نیم جمع کننده موجودیت زیر می نویسیم:
Entity half _ adder is
Port (x , y : in bit ;
sum , carry : out bit) ;
; end half _ adder
ورودی ها و خروجی های مدار، درگاه (port) نامیده می شوند. درگاه ها از شی ءهای ویژه برنامه نویسی و از نوع سیگنال هستند. ارتباط مدار نیم جمع کننده با دنیای خارج و سایر مدارها از طریق درگاه ها صورت می گیرد. به همین جهت درگاه ها را سیگنال تلقی می کنیم، نه متغیر.
همانطور که درمثال موجودیت طرح (Entity) برای یک نیم جمع کننده (half_ adder) دیده می شود، درگاه ها از نوع bit معرفی می شوند که نمایانگر یک سیگنال تک بیتی است. bit یکی از نوع های سیگنال تعریف شده در VHDL است که می تواند مقادیر یا را بپذیرد.
حالا به بخش معماری طرح نیم جمع کننده می رسیم.
Architecture main of half _ adder is
begin
Sum < = (x xor y) after 5 ns ;
carry < = (x and y) after 5 ns ;
end main ;
در توضیح بخش معماری مثال half_ adder باید گفت که در خط اول به نام موجودیتی که توصیف رابط های این موجودیت طرح را در بر دارد اشاره شده است.
هر عبارت در معماری این مثال یک عبارت انتساب سیگنال است که در آن عملگر < = عمل انتساب سیگنال را نشان می دهد. هر عبارت نحوه وابستگی سیگنال خروجی به سیگنالهای ورودی و شیوه محاسبه آن را بیان می کند.
در مجموع هرگاه یک گذار سیگنال روی یکی از سیگنالهای سمت راست عبارت انتساب سیگنال اتفاق افتد، عبارت محاسبه شده و مقدار جدید سیگنال خروجی برای زمانی در آینده که بوسیله کلید واژه after تعریف شده است، زمان بندی می شود. وابستگی سیگنالهای خروجی به سیگنالهای ورودی از مجموعه عبارت بدست می آید و به ترتیب نوشتاری آنها در برنامه بستگی ندارد. یعنی ترتیب دستورات در برنامه می تواند تغییر کند، بدون اینکه در رفتار مدار تغییری حاصل شود. به همین جهت این عبارت را عبارت انتساب سیگنال همزمان (concurrent signal assignment) می نامند.
فرمت دستور if
if < condition > then
< statement >
elsif < condition > then
< statement >
else
< statement >
end if ;
در مثال زیر از دستور if در یک مالتی پکلس استفاده شده است:
if (s0 = 101 and s1 = 101 ) then
;1 q < = a
elsif (s0 = 101 and s1 = 111 ) then
;2 q < = a
elsif (s0 = 111 and s1 = 101 ) then
;3 q < = a
elsif (s0 = 111 and s1 = 111 ) then
;4 q < = a
elsif
;1×1 q < =
end if ;
حلقه در VHDL
while < condition > loop
< statement >
end loop ;
i : = 0 ; مثال
while ( i < 10 ) loop
i : = i + 1 ;
end loop ;
فرمت دستور case
case < expression > is
when < choices > =>
< state ment >
when <choices> =>
<statement>
when others =>
<statement>
end case;
(مثال
case sel is
when =>
z<= B ;
when 3 to 10 =>
z <= c;
when others = >
null ;
end case ;
در مثال فوق وقتی سیگنال sel مقدار صفر، یک یا دو داشته باشد. مقدار سیگنال B در سیگنال Z قرار می گیرد.
و وقتی سیگنال sel مقدار 3 تا 10 داشته باشد، مقدار سیگنال C در سیگنال Z قرار می گیرد. و در غیر این حالات هیچ کاری انجام نمی شود.
دستور null که در case استفاده می شود به معنای انجام ندادن عمل است.
فرمت دستور with
with < iden > select
< iden > < = < condition > when < c.v > ,
< condition > when < c.v > ,
< condition > when others ;
with sel select
,1100011 when 101 x < =
, 1101111 when y
, 1110011 when z
when others ; 111
در مثال بالا اگر سیگنال sel برابر 000 باشد، x برابر صفر است.
اگر سیگنال sel برابر 011 باشد، x برابر y است.
اگر سیگنال sel برابر 100 باشد، x برابر z است. در غیر حالات فوق سیگنالX برابر 1 خواهد بود.
پیاده سازی یک شمارنده با استفاده از VHDL
entity count is
port ( clk , reset : in bit ;
q: Buffer integer range 0 to 15) ;
end count ;
Architecture main of count is
begin
Process (CLK)
Begin
Then 111 event and clk = 1if reset
Then 111 = if reset
; 0q < =
else
; 1+q < = q
end if ;
then 12 if q =
; 0q < =
end if ;
end if ;
end process ;
end main ;
پیاده سازی PWM با استفاده از VHDL
entity PWM is
; 100 to 0 port (data : in integer Range
clk : in bit ;
LD : in bit ;
; 100 to 0 q_ out : out integer Range
PWM : out bit ) ;
End PWM ;
Architecture a of PWM is
begin
Process (CLK , LD)
; 100 to 0 Variable cnt : integer range
; 100 to 0 Variable latch_ d : integer range
begin
then 111if LD =
latch _ d : = data ;
else
) then 111 if ( CLK / event AND CLK =
; 0) then cnt : = 99 if (cnt =
end if ;
if (cnt = latch_ d) then
; 101PWM < =
else
) then0 if ( cnt =
; 111PWM < =
end if ;
end if ;
end if ;
end if ;
q _out < = Cnt ;
end process ;
end a ;
روند طراحی FPGA
1-مدل VHDL: اولین مرحله ساخت مدل VHDL است. می توان مدل VHDL را با استفاده از یک ویرایشگر متن نوشت. شبیه سازها و ابزارهای جدید سنتز، خود دارای ویرایشگرهایی هستند که مبتنی بر املاء زبان است و برای ساده کردن کار، امکاناتی را برای استفاده از قالبهای آماده زبان در بر دارند. از طرف دیگر ماشینهای حالت را می توان به صورت گرافیکی نیز توصیف کرد که بطور خودکار به VHDL تبدیل می شوند. البته روش سنتی رسم شماتیک نیز همچنان امکان پذیر است.
2-شبیه سازی رفتاری: مدل VHDL را می توان قبل از عمل سنتز روی FPGA شبیه سازی کرد. هدف از شبیه سازی معمولاً تایید صحت عملکرد است. همچنین می تواند کاربردهای دیگری مثل تولید بردارهای تست و ارزیابی اولیه کارایی داشته باشد.
3-سنتز: طرح پس از تحلیل، با استفاده از یک کتابخانه از واحدهای پایه که عموماً latch , Flip – Flop , gate هستند، سنتز می شود.
4-شبیه سازی عملیاتی : پس از سنتز می توان طرح را به منظور ارزیابی اولیه کارایی شبیه سازی کرد.
اطلاعات مربوط به زمان بندی از روی خصوصیات معلوم فیزیکی واحدهای FPGA به دست می آیند. با این وجود طرح بایستی روی تراشه FPGA پیاده سازی شود، زیرا زمان بندی به دست آمده کاملاً دقیق نیست.
5-جانمایی مسیریابی سیگنال:
مسیر سیگنال باید بین واحدهای پایه از طریق ماتریس سوئیچ تعیین شود و اتصالات برقرار شوند. بعد از اینکه جانمایی و مسیریابی سیگنال به دقت انجام شد می توان اطلاعات دقیقی درباره تاخیرهای زمانی بین قطعات مدار به دست آورد. دقت شبیه سازی بعد از جانمایی و تعیین مسیر سیگنال بسیار بالاتر از شبیه سازی عملیاتی است. از این رو این مرحله را تایید (verification) نیز می نامند.
بیت های آرایش، برای پیاده سازی جانمایی وتعیین مسیر سیگنال، نیز تولید می شوند.
6-برنامه ریزی: بیت های آرایشی روی تراشه FPGA هدف، بار (load) می شوند. به این ترتیب تراشه برای پیاده سازی عملکرد مورد نظر آرایش پیدا کرده است.
فهرست مطالب
عنوان صفحه
مقدمه ای درباره FPGA & CPLD 1
تکنولوژی تراشه های قابل برنامه ریزی 2
تقسیم بندی PLDها 4
انواع تراشه های قابل برنامه ریزی 5
ساختار FPGA 6
بلوکهای FPGA 6
شرکتهای سازنده FPGA 7
روش برنامه ریزی JTAG 8
تراشه های قابل برنامه ریزی Altera 10
VHDL 11
انواع تاخیر در VHDL 13
اپراتورهای VHDL 14
مفاهیم بنیادی در زبان VHDL 19
ضمائم 30
عنوان:
FPGA & CPLD
زبان برنامه نویسی VHDL
استاد راهنما:
دانشجو:
تابستان 84
30