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

2 فروردین, 1395

منابع سخت‌افزاری درون FPGA

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

در این برنامه ویدئویی، شما را با این منابع سخت‌افزاری و کاربرد هر کدام آشنا می‌کنم.

More...

تسلط واقعی به پیاده‌سازی مدارات دیجیتال به کمک FPGA نیاز به یادگیری دو مهارت مهم دارد:

  • کدنویسی اصولی به زبان VHDL یا Verilog؛
  • آشنایی با استفاده اصولی از منابع سخت‌افزاری درون FPGA.

بسیاری از افراد، فقط روی مهارت اول، یعنی کدنویسی اصولی با زبان VHDL یا Verilog متمرکز می‌شوند؛ در حالی که آشنایی با منابع سخت‌افزاری داخل FPGA و نحوه استفاده اصولی از آنها در پیاده‌سازی، احتمالا مهمترین مهارتی است که برای پیاده‌سازی بهینه مدارات دیجیتال با FPGA باید به آن مسلط شوید.

در این برنامه، در مورد منابع سخت‌افزاری مثل Logic Cellها، ضرب کننده‌ها، حافظه‌های داخلی، بلوک‌های IO و منابع مرتبط با کلاک صحبت می‌کنم.

Logic Cellها در واقع مجموعه LUTها و فلیپ‌فلاپ‌ها هستند که با هم، منابع عمومی سخت‌افزاری درون FPGA را تشکیل می‌دهند.

ضرب کننده‌ها بخش بسیار مهمی در تمام FPGAهای شرکت Xilinx هستند که علاوه بر عملیات ضرب، قابلیت‌های بسیار زیادی دیگری هم دارند. این قابلیت‌ها را به طور مفصل‌تر در برنامه ویدئویی پشت پرده عملیات ضرب در FPGA توضیح داده‌ام.

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

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

ویدئو یا متن؟

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

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

در جلسه­‌ی قبل­، راجع به مفهوم FPGA صحبت کردم­.

در این جلسه می‌­خواهم بحث جلسه‌ی قبل، در این زمینه را کامل کنم و همچنین در ادامه راجع به بعضی از باور­ها­ی غلطی که بین کاربران FPGA وجود دارد، توضیحات بیشتری بدهم.

 ابتدا اجازه دهید یک یاد­آوری از مباحث مطرح شده در جلسه‌­ی قبل داشته باشیم­.

در قسمت قبل راجع به این موضوع صحبت کردیم که هر تابع منطقی را می‌توانیم به کمک Look-Up Table یا LUT پیاده‌ساز­ی بکنیم­.

درحقیقت FPGA­ها از هزاران LUT تشکیل شده‌اند که به کمک آن‌ها می‌توانیم مدارهای بزرگتر را پیاده‌ساز­ی کنیم.

در واقع مدارهای بزرگ‌تر به توابع کوچک‌تر تقسیم می‌شوند و هر کدام به کمک یک LUT پیاده‌­ساز­ی می‌شوند­.

اکنون باید این LUT­ها را به هم وصل کنیم تا مدار اصلی تشکیل شود.

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

در اصطلاح به عمل سیم­‌بند­ی بین LUT­ ها، Routing گفته می‌شود­.

با پروگرام کردن درون LUT­ها و سوئیچ‌­ها­ی مربوط به سیم‌­ها، می‌توان هر مدار بزرگی را ایجاد کرد.

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

FPGA را می‌­توان بارها و بارها پیکره‌­بندی کرد.

ممکن است بخواهید با FPGA تمرین کنید­، ممکن است بخواهید با FPGA  تست انجام دهید­، ممکن است بخواهید با FPGA مدار­ی طراحی کنید و بعدا از آن مدار راضی نباشید­. بنا­بر­این­، بارها و بارها می‌توانید FPGA را با پیکره‌­بندی به یک مدار جدید تبدیل کنید­.

اجازه بدهید نگاه دقیق­‌تر­ی به منابع دیجیتالی درون FPGA داشته باشیم­.

اگر ما بتوانیم پوسته­‌ی بیرونی FPGA را کنار بزنیم و داخل آن را ببینیم، احتمالا تصویری شبیه به آنچه در شکل زیر است خواهید دید­:

منابع درونی FPGA

منابع درونی FPGA

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

منابع اصلی­ که در FPGA­ها وجود دارند، Logic Block­ها هستند که در واقع همان LUT­ها هستند­.

Routing Matrix­ها از دیگر منابع هستند که شامل سیم‌­ها و سوئیچ‌­ها­ می‌شوند­.

در رابطه با این دو منبع در جلسه­‌ی قبل توضیح دادیم­.

منبع بعدی I/O Block­ها هستند، پشت هر پین­ آی سی FPGA مداری وجود دارد که به آن I/O Block گفته می‌شود.

حافظه‌­ها، ضرب­‌کنند­ه‌­ها و در نهایت منابع کلاک، از جمله منابعی هستند که در درون FPGAها وجود دارند.

در ادامه راجع به هر کدام توضیح مختصری می‌دهم:

Logic Block­ها

در تصویر­ی که در زیر مشاهده می­‌کنید­، می‎توانید مدار یک Logic Block را در یک FPGA فرضی مشاهده کنید:

مدار یک Logic Block درون FPGA

مدار یک Logic Block درون FPGA

معمولا به Logic Block­ها­، Logic Cell هم گفته می‌شود­.

 Logic Block­ها جزء اصلی تشکیل­‌دهند­ه FPGA­ها هستند و در حقیقت همان LUT­ها هستند­.

بخشی که کنارLUT  اضافه شده‌ است، فلیپ‌فلاپ است.

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

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

برای اینکه بتوانیم تغییرات LUT­ها که در واقع همان توابع کوچک ما هستند را به صورت سنکرون با کلاک به بقیه مدار منتقل کنیم، می‌توانیم در خروجی LUT­ها یک فلیپ‌­فلاپ قرار دهیم.

بنا­بر­این­، وجود این فلیپ‌­فلاپ­‌ها، در Logic Block­ها به ما کمک می­‌کند که مدارهای سنکرون طراحی کنیم­.

اگر هم نخواهیم چنین کاری کنیم می‌توانیم خروجی Look-Up Table را به صورت مستقیم در بقیه­‌ی مدار استفاده بکنیم­؛ که این انتخاب را می‌توانیم به وسیله­‌ی مالتی‌­پلکسر­ی که در Logic Block وجود دارد انجام بدهیم­.

Routing Matrix­ها

منبع بعد­ی که در جلسه­‌ی قبل راجع به آن صحبت کردیم، Routing Matrix­ها هستند که شامل سیم‌­ها و شبکه­‌ی اتصالات قابل برنامه‌­ریز­ی است.

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

I/O Block­ها

پشت هر پین یا پایه‌­ی FPGA مداری وجود دارد که به آن I/O Block­ گفته می‌شود. این مدارها نیز قابل برنامه­‌ریز­ی هستند­.

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

همینطور شما به وسیله­‌ی این مدارها می‌توانید انواع استاندارد­ها­ی I/O را برای این پایه‌­ها تعریف کنید.

مثلا­، می‌توانید مقدار جریان­‌دهی پایه­‌ها­ی خروجی را تعریف کنید، یا سطح ولتاژ پایه‌­ها­ی ورودی-خروجی­، چه مقدار باشد. با این قابلیت می‌توانید پایه­‌ها­ی FPGA را به انواع مختلف قطعات جانبی وصل کنید­.

حافظه‌ها

اگر طراحی دیجیتال انجام داده باشید می‌­دانید که معمولا به هنگام طراحی دیجیتال، شما به مقداری حافظه نیز نیاز دارید­.

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

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

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

اگر این بلوک‌­ها­ی سخت­‌افزار­ی نبودند­، شما برای ذخیره­‌ساز­ی اطلاعات مجبور بودید از Look-Up Table­ها استفاده بکنید­.

اینکار دو ضرر داشت­:

اول اینکه Look-Up Table­ها منابع دیجیتالی بسیار مهمی هستند که به کمک آن‌ها می‌توانید توابع رو پیاده­‌ساز­ی کنید و اگر شما بخواهید حافظه­‌ها را هم به کمک آن‌ها پیاده‌­ساز­ی کنید، مقدار زیادی از این Look-Up Tableها را از دست خواهید داد.

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

ضرب‌­کنند­ه‌­ها

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

اگر ضرب‌­کنند­ه‌­ها­ی از پیش ساخته شد­ه در FPGA وجود نداشت، شما مجبور بودید مثل حافظه­‌ها از LUT­ها استفاده کنید و به کمک آن‌ها ضرب­‌کنند­ه‌­ها را پیاده‌­ساز­ی کنید­.

برای اینکه منابع Look-Up Table را بیهوده مصرف نکنید، و همچنین برای اینکه بتوانید ضرب‌کننده‌هایی با سرعت بیشتر پیاده­‌ساز­ی کنید­، در FPGA­ ها معمولا تعداد­ی ضرب­‌کنند­ه به صورت سخت­‌افزار­ی از قبل تعبیه شده­ است که می‌توانید در طراحی مدار از آنها استفاده کنید­.

منابع کلاک

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

مساله کلاک­، به خصوص در طراحی مدارات سنکرون مساله­ بسیار مهمی است­.

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

کلاک از مسیر­ها­ی مختلفی عبور می­‌کند و این مسیر­ها طول‌های متفاوتی دارند و این طول‌­ها­ی متفاوت، باعث ایجاد ﺗﺄخیر­ها­ی متفاوت در رساندن کلاک به بخش‌­ها­ی مختلف مدار می‌شود.

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

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

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

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

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

اما ممکن است مدار­ی که شما در حال طراحی آن هستید، نیاز به فرکانس کلاک دیگر­ی داشته باشد­.

مثلا­، ممکن است شما بخواهید مدار­ی با فرکانس کلاک 128 مگاهرتز طراحی کنید­.

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

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

این منبع سخت‌­افزاری در FPGAها­ی شرکت XILINX با نام DCM شناخته می شود.

البته در بعضی از FPGAها­ی دیگر، نام های دیگر­ی دارد ولی در بیشتر FPGAها به نام DCM شناخته می‌شود.

به کمک DCM­ها می‌توانید فرکانس اسیلاتور موجود روی برد را تغییر دهید و در سیستم طراحی شده با فرکانس جدید از آن استفاده بکنید­.

DCM برای ایجاد فرکانس‌های مختلف

DCM برای ایجاد فرکانس‌های مختلف

 اجازه بدهید راجع به آن باور­ها­ی غلطی که در ابتدا به آن اشاره کرد­م کمی صحبت کنیم­.

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

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

شما احتمالا برای یکی از میکروکنترلر­ها برنامه‌­نویسی کرده‌اید­ و یا اگر با میکروکنترلر هم کار نکرد­ه باشید، احتمالابه زبان Pascal ،Basic ­،C یا زبان دیگر­ی، با کامپیوتر برنامه­‌نویسی انجام داده‌ا­ید­.

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

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

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

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

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

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

اما رجیستر­ی هم به خود­ی خود در FPGA وجود ندارد­. بنا­بر­این شما دو رجیستر نیز باید طراحی کنید.

بنابراین زمانی که با FPGA کار می­‌کنید، شما در حال طراحی سخت­‌افزار هستید نه نرم‌­افزار­.

بنا­بر­این­، عباراتی مثل برنامه­‌نویسی برای FPGA، یا طراحی نرم­‌افزار برای FPGA، عبارات غلطی هستند­.

در بحثی که در مورد زبان­‌ها­ی توصیف سخت­‌افزار­ی خواهیم داشت، اشاره خواهم کرد که در آن زبان‌­ها هم چیزی به اسم دستور وجود ندارد، چون دستورات مربوط به CPU هستند­.

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

توصیف کنید­.

در مورد این مفاهیم در برنامه‌های بعد­ی بیشتر توضیح خواهم داد­.

شما با خواندن این مقاله و همچنین قسمت قبل همین مقاله، نه تنها منابع درونی FPGA را به خوبی می‌شناسید، بلکه با باورهای غلطی که در رابطه با FPGAها وجود دارد نیز آشنا هستید.

شما قطعا با شناخت این مفاهیم بنیادی و همچنین آشنایی با باورهای غلط رایجی که وجود دارد، در آینده طراحی‌های صحیح‌تر و بهینه‌تری با FPGA انجام خواهید داد.


آیا برنامه ویدئویی FPGA چیست؟ - منابع سخت‌افزاری درون FPGA برای شما مفید بود؟

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

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

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

درباره نویسنده:

احمد ثقفی

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

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

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

    >