توسط احمد ثقفی 

6 فروردین, 1395

روش توصیف مدارات دیجیتال برای FPGA

مداری که در ذهن شما به عنوان طراح و پیاده‌ساز دیجیتال وجود دارد باید به نحوی برای FPGA توصیف شود.

این کار عملا توسط نرم‌افزارهای مخصوصی که برای این هدف طراحی شده‌اند انجام می‌شود. 

اما سوال اساسی در ذهن بسیاری از افرادی که به تازگی وارد دنیای پیاده‌سازی با FPGA شده‌اند این که چطور طرح مدار دیجیتالی را که در ذهن دارند برای نرم‌افزار پیاده‌سازی توصیف کنند.

در این برنامه ویدئویی، روش‌های توصیف مدارات دیجیتال برای نرم‌افزارهای پیاده‌سازی دیجیتال با FPGA را به شما توضیح می‌دهم و همچنین روش اصلی را که در عمل و در پروژه‌های حرفه‌ای از آن استفاده می‌شود معرفی می‌کنم.

More...

به طور کلی، دو روش برای توصیف مدارات دیجیتال برای نرم‌افزارهای پیاده‌سازی وجود دارد:

  • استفاده از شماتیک مدار
  • استفاده از زبان توصیف سخت‌افزاری

در این برنامه در مورد مزایا و معایب استفاده از هر کدام از این دو روش صحبت خواهم کرد و نهایتا توضیح خواهم داد که در پروژه‌های حرفه‌ای از کدام یک از این روش‌ها استفاده می‌شود.

در ادامه این ویدئو، همچنین به صورت مقدماتی در مورد زبان VHDL و مفاهیم مهم آن صحبت خواهم کرد و بخش‌های اصلی آن را به کمک یک مثال بسیار ساده معرفی می‌کنم.

برای آشنایی بیشتر با زبان VHDL، این برنامه ویدئویی را ببینید...

ویدئو یا متن؟

محتوای این برنامه آموزشی، به دو صورت ویدئو و متن آماده شده است. اگر علاقمند به یادگیری این مطلب به صورت ویدئویی هستید، ویدئوی زیر را ببینید و اگر ترجیح می‌دهید آن را به صورت متن مطالعه کنید، ادامه این مطلب را بخوانید.

برای دانلود نسخه با کیفیت این ویدئو، روی دکمه زیر کلیک کنید:

در این برنامه می‌­خواهم در مورد چگونگی توصیف یک مدار دیجیتال برای FPGA صحبت بکنم­.

اگر از برنامه­‌ها­ی گذشته به یاد داشته باشید، گفتم در FPGA، مدارها به کمک منابع دیجیتالی موجود در آن پیاده‌­ساز­ی می‌شوند­.

اما سوالی که پیش می‌آید این است که در ابتدا چطور یک مدار دیجیتال را برای FPGA توصیف بکنیم­؟

 قبل از این­که به این پرسش پاسخ دهیم، ببینیم هنگامی که با پرداز­ند­ه‌­ها سر و کار دار­یم چطور سیستم و ایده‌­ی طرح را برای آن‌ها معرفی می­‌کنیم­.

پیاده‌سازی در پردازنده‌ها

وقتی با پرداز­ند­ه کار می­‌کنیم به کمک دستور­ات برنامه­‌نویسی‌ای که از پیش برای آن پرداز­ند­ه تعریف شد­ه است، می‌توانیم یک الگوریتم را در آنها پیاده­‌ساز­ی کنیم­.

بنا­بر­این، در پرداز­ند­ه­‌ها زبان برنامه‌­نویسی ابزار­ی ا­ست که به کمک آن  ایده‌­ای را که در ذهن دار­یم می‌­توانیم به پرداز­ند­ه معرفی کنیم­.

اما این موضوع در مورد FPGA­ها به چه صورت است­؟

چطور­ می‌توانیم مدار دیجیتالی که در ذهن دار­یم، یا رو­ی کاغذ طراحی کرده‌ایم، را برای FPGA­ها توصیف بکنیم­.

روش‌های توصیف مدار در FPGA

برای توصیف مدارها در FPGA به طور کلی دو روش وجود دارد­.

روش اول استفاده از شماتیک مدار­ی است­.

در روش شماتیک مدار­ی، شما به کمک یک نرم‌­افزار و به کمک قطعات پایه­‌ی دیجیتالی می‌توانید مدار را ترسیم و برای FPGA توصیف بکنید.

به ‌طورمثال­، می‌توانید به کمک گیت­‌ها­ی پایه­، فلیپ­‌فلاپ­‌ها­، بلوک­‌ها­ی مالتی‌­پلکسر­، انکودر، دیکودر و ... مدارهای مختلف را برای FPGA رسم ­و توصیف کنید­.

این روش به نظر خیلی ساده می‌آید، ولی در عمل کاربرد چندانی ندارد.

زیرا با این روش­، مدیریت و ترسیم مدارهای بزرگ در این نرم‌­افزار تقریبا غیر ممکن است­.

فرض کنید، می‌خواهید مدار­ی را  ترسیم کنید که از هزار­ان گیت و بلوک‌­ها­ی دیجیتالی تشکیل شد­ه است.

اولا­، ترسیم آن  در صفحه­‌ی محدود مانیتور بسیار سخت است­.

ثانیا، در صورت ترسیم شماتیک، اگر ایراد­ی در آن وجود داشت یا اگر خواستید تغییر­ی در آن  انجام دهید، این­ کار می‌تواند خیلی مشکل­ و تقریبا غیرممکن باشد­.

گیت‌های پایه برای توصیف شماتیکی مدار در FPGA

گیت‌های پایه برای توصیف شماتیکی مدار در FPGA

به همین دلیل برای توصیف مدار­های بزرگ در FPGA روش دیگری به اسم زبان‌­ها­ی توصیف سخت‌­افزار­ی، وجود دارد.

زبان توصیف سخت‌افزار (HDL)

زبان توصیف سخت‌­افزار­ یا Hardware Description Language که به اختصار به آن HDL گفته می‌شود، زبانی­ است که در آن  ساختار­ها و عباراتی وجود دارد که به کمک آن‌ها می‌توانیم رفتار مدار دیجیتال را توصیف کنیم­.

در واقع زبان توصیف سخت­‌افزار­ی از دستور­ات تشکیل نشده است.

چون دستور­ات مربوط به CPU هستند­.

اما­ همانطور که می‌­دانید در FPGA­ها نه تنها CPU­، بلکه در ابتدا هیچ سخت‌­افزار­ی که توصیف­‌کنند­ه و ارائه‌کنند­ه‌­ی یک قابلیت مشخص باشد وجود ندارد­.

بنا­بر­این زبان توصیف سخت­‌افزار­ی زبانی نیست که از دستور­ات تشکیل شده باشد.

بلکه در این زبان ساختار­ها و عباراتی وجود دار­ند، که اگرچه ممکن است شبیه دستورات برنامه‌­نویسی باشند، ولی در عمل توصیف­‌کنند­ه­‌ی سخت‌­افزار دیجیتال هستند­.

اجازه بدهید مفهوم زبان سخت‌­افزار­ی را با یک مثال بیشتر توضیح دهم.

 کد­ی را که در زیر می­بینید، یک ساختار شرطی if-then-else است که در اکثر زبان­‌ها­ی برنامه‌نویسی وجود دارد­.

فرض کنید این بخش یک کد به زبان مثلا C است که توسط یک پرداز­ند­ه قرار­ است اجرا شود.

دستور if-then-else قبلا برای CPU تعریف شده است و CPU در هنگام مواجه شدن با این دستور، با توجه به مقدار C مقدار A یا B را به F منتقل می‌کند­.

اگر C مساوی صفر باشد، A به F منتقل می‌شود و درغیر این­ صورت B به F منتقل می‌شود­.

اما اگر فرض کنیم که این عبارات توصیف‌­کنند­ه‌­ی یک سخت‌­افزار دیجیتال هستند،  این عبارات چه سخت‌افزار دیجیتالی را توصیف می‌کنند­؟

 این عبارات توصیف­‌کنند­ه­‌ی یک مالتی­‌پلکسر دو به یک هستند­.
مالتی­‌پلکسر دو به یک حاصل از کد بالا

مالتی­‌پلکسر دو به یک حاصل از کد بالا

در مالتی­‌پلکسر دو به یک­، با توجه به مقدار C یکی از ورود­ی‌­ها­ی A یا B به خروجی F منتقل می‌شود­. همان­طور که می­‌بینید، این کد هم دقیقا این مفهوم دیجیتال را دارد معرفی و توصیف می‌کند­.

بنابراین­ در این کد سخت‌­افزار­ی­، دستور­ی برای اجرا در CPU وجود ندارد، بلکه یک ساختار یا یک توصیف از یک مدار سخت‌­افزار­ی دیجیتالی است.

زبان‌­ها­ی توصیف سخت­‌افزار­ی مختلفی در دنیا وجود دارند.

 VHDL و Verilog­ از معروف­‌ترین و پرکاربرد­تری­ن آن‌ها هستند.

اگرچه این دو زبان در ظاهر و ساختار­ تفاوت­‌ها­یی دار­ند ولی به کمک هر دو زبان می­‌توانید هر نوع مدار دیجیتالی را توصیف کنید­.

در ادامه کمی بیشتر با زبان VHDL آشنا می‌شویم.

زبان VHDL

VHDL مخفف عبارت VHSIC Hardware Description Language است­.

حرف V مخفف Very High Speed Integrated Circuit است­.

بنا­بر­این­، به طور کل VHDL مخفف زبان توصیف سخت‌­افزار­ی مدار­ات مجتمع با سرعت خیلی زیاد است­.

 VHDL ابتدا توسط وزارت دفاع آمریکا ابداع شد­.

در آن زمان هدف از ابداع این زبان، پیاده‌­ساز­ی یک سیستم دیجیتال نبود، بلکه به کمک آن  زبان می‌خواستند مدار­اتی را که قبلا پیاده‌­ساز­ی کرد­ه‌اند، مستند­ساز­ی کنند­.

هدف دیگر از ابداع این زبان­، انجام مدل­‌ساز­ی­‌ها­ی مدار­ات دیجیتال بود­.

اما بعد­ها از این زبان برای پیاده‌­ساز­ی سیستم­‌ها­ی دیجیتال استفاده شد­.

نهایتا این زبان توسط سازمان IEEE استانداردساز­ی شد و زبان VHDL­ فعلی‌ای که ما در حال استفاده از آن هستیم، زبان استاندارد شد­ه در سازمان IEEE است­.

 همانطور که گفتم زبان VHDL یک زبان برنامه­‌نویسی نیست، بلکه زبانی ا­ست که به کمک آن  می‌توانیم یک طرح سخت‌­افزار­ی را توصیف کنیم­.

اکنون می‌خواهیم با ساختار زبان VHDL کمی آشنا شویم­.

Entity و Architecture

هر کد VHDL به طور کلی از دو بخش تشکیل شد­ه است­.

 این دو بخش را به کمک شکل زیر توضیح می‌دهم­:
بخش Entity و Architecture مدار دیجیتال

بخش Entity و Architecture مدار دیجیتال

در این شکل فرض کنید که ما یک IC یا یک مدار دیجیتال دار­یم­.

به طور کلی می‌توان این مدار دیجیتال را به دو بخش تقسیم کرد­:

یک بخش پایه­‌ها­، پین­‌ها­، یا پورت­‌ها­ی ورود­ی-خروجی هستند و بخش دیگر­، مدار داخلی است­.

در اصطلاحِ VHDL به پین‌­ها یا پورت­‌ها­ی ورود­ی-خروجی Entity و به مدار داخلی Architecture گفته می‌شود­.

در بخش اول یا همان Entity، تنها کار­ی که ما انجام می‌دهیم تعریف پور‌ت‌ها است­.

یعنی برای پورت­‌ها اسم انتخاب می‌­کنیم و مشخص می‌­کنیم که این پورت­‌ها ورود­ی­، خروجی یا دو طرفه هستند.

همچنین نوع آن پورت‌­ها را هم مشخص می­‌کنیم­.

اما بخش اصلی یک کد VHDL، بخش Architecture است که می‌توانیم یک مدار دیجیتال را در آن  توصیف بکنیم­.

توصیف تمام جمع‌کننده با زبان VHDL

برای آشنایی بیشتر با این زبان یک مثال را با هم بررسی می‌کنیم­.

در تصویر زیر یک مدار تمام جمع­‌کنند­ه و توابع خروجی آن را  مشاهده می‌کنید­:

مدار تمام جمع­‌کنند­ه و توابع خروجی آن

مدار تمام جمع­‌کنند­ه و توابع خروجی آن

همانطور که از درس مدار منطقی به یاد دارید، یک مدار تمام جمع‌­کنند­ه سه ورود­ی B ،A و Cin را باهم جمع و Sum و Cout را تولید می‌کند.

توابع عبارات منطقی Sum و Cout در شکل بالا قابل مشاهده است.

برای پیاده‌سازی این توابع، ابتدا باید به کمک ساختار Entity، ورود­ی­-خروجی‌­ها را معرفی کنیم و سپس در بخش Architecture مدار­ داخلی را توصیف بکنیم­.

این مدار سه ورود­ی A و B و Cin و دو خروجی Sum و Cout  دارد که می‌توانیم به کمک ساختار Entity آن  را در زبان VHDL توصیف بکنیم­.

همانطور که در کد زیر ملاحظه می‌کنید بخش Entity با کلمه­ کلید­ی Entity شروع می‌شود و پس از آن، اسم Entity قرار می‌گیرد، که نام آن را Full Adder گذاشتیم.

پس از اسم Entity کلمه­‌ی کلید­ی IS قرار دارد که پس از این کلمه کلیدی، پورت‌­ها را معرفی می­‌کنیم­.

مثلا­ برای توصیف پورتِ اول، ابتدا باید اسم آن را مشخص کنیم، که ما اسم این پورت را A گذاشتیم­.

سپس علامت دو نقطه (:)­ قرار می‌گیرد و پس از آن نوع  ورود­ی یا خروجی بودن پورت تعیین می‌گردد.

با توجه به اینکه پورت A ورود­ی است، از کلمه­ کلید­ی IN استفاده کرد­یم.

در نهایت هم باید نوع پورت را مشخص کنیم که از نوع STD_Logic استفاده کرد­یم.

در برنامه­‌ها­ی بعد­ی راجع به نوع STD_Logic صحبت خواهم کرد.

حال که پورت‌ها را تعریف کردیم نوبت توصیف مدار داخلی است که آن را به کمک ساختار Architecture معرفی می­‌کنیم­.

بخش Architecture با کلمه‌­ی کلید­ی Architecture شروع می‌شود­، سپس به ترتیب اسم Architecture، کلمه‌­ی کلید­ی of­، اسم Entity و کلمه‌­ی کلید­ی is قرار می‌گیرد.

بعد از کلمه­‌ی کلید­ی begin­ می‌توانید مدار داخلی را توصیف کنید­.

خوشبختانه توابع پایه مثل NOR ،NAND ،XNOR ،XOR ،NOT ،OR ،AND در زبان VHDL از قبل تعریف شده‌اند.

بنا­بر­این­ به کمک این توابع می‌توانیم خروجی Sum و Cout را تولید کنیم­.

به طور مثال تابع A XOR B XOR Cin را نوشتیم و به خروجی Sum­ ارجاع دادیم.

 برای نسبت داد­ن این ترکیب منطقی به خروجی Sum، از علامت کوچکتر مساوی (=>) در این زبان استفاده می‌شود، که اصطلاحا به آن علامت ارجاع یا Assignment­ گفته می‌شود.

البته­ این مثال یک مدار ساده اما کامل برای پیاده­ساز­ی مدار در زبان VHDL بود­.

 در این برنامه مختصرا با زبان VHDL آشنا شدیم و توانستیم یک مدار ساده‌ اما کامل را توصیف کنیم، در برنامه­‌ها­ی بعد­ درباره‌­ی امکانات زبان VHDL و پیاده­‌ساز­ی مدار­ات پیچیده‌­تر، بیشتر صحبت خواهم کرد­.

آیا برنامه ویدئویی توصیف مدارات دیجیتال برای FPGA برای شما مفید بود؟

لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمه‌های اشتراک گذاری ابتدای این مطلب و به اشتراک‌گذاری آن در شبکه‌های اجتماعی می‌توانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.

کانال تلگرام آموزش FPGA از صفر

برای عضویت در کانال تلگرام و دسترسی به آموزش‌های بیشتر و اطلاع سریع از زمان انتشار آموزش‌ها و تخفیف‌های ویژه، روی دکمه زیر کلیک کنید:

شاید به این موضوعات نیز علاقه داشته باشید:

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

۷ تکنیک پیشرفته کدنویسی برای FPGA

>