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

1 تیر, 1395

اختصاص پورت‌های مدار

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

More...

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

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

برای آشنایی با نرم‌افزار ISE این برنامه ویدئویی را ببینید…

در این برنامه ویدئویی، شما را با نحوه اختصاص پورت‌های مدار به پین‌های FPGA آشنا می‌کنم. در این برنامه، با قید LOC و فایل UCF آشنا می‌شوید. به کمک قید LOC می‌توانید پورت‌های مدارتان را به پین‌های FPGA متصل کنید. این کار، در فایلی به نام UCF انجام می‌شود.

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

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

ویدئو یا متن؟

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

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

در این مقاله، قصد دارم در مورد نحوه‌ی اختصاص پورت‌های مدار به پین‌های FPGA صحبت کنم.

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

در این مقاله، توضیحاتی در مورد این موضوع می‌دهم و در انتها، برای درک بهتر موضوع، یک مثال مطرح می‌کنم.

به شکل زیر توجه کنید:

شمایی از تراشه‌ی FPGA روی بُرد

شمایی از تراشه‌ی FPGA روی بُرد

در این شکل، مدار ساده‌ای می‌‌بینید که در واقع یک بُرد PCB است که روی آن یک FPGA، یک اسیلاتور   و دو LED قرار دارد.

هدف، طراحی مداری است که این LEDها را به نحو خاصی روشن و خاموش کند.

چون این مدار، یک مدار ترتیبی است، به یک اسیلاتور نیاز داریم؛ همان‌‌طور که می‌‌بینید، اسیلاتور روی بُرد وجود دارد.

فرض کنید، مدار را به کمک یک زبان توصیف سخت‌افزار، مانند VHDL، طراحی کرده‌ایم و برای Entity آن، سه پورت تعریف کرده‌ایم.

یک پورت کلاک و دو پورت تک بیتی LED0 وLED1 که قاعدتاً از نوع STD_Logic هستند.

فرض کنید، بعد از اینکه این کد را سنتز کرده و روی FPGA پیاده‌‌سازی کردید، کد شما قسمت آبی رنگ از FPGA را اِشغال کند (شکل بالا).

پورت کلاک و پورت‌های LED0 و LED1 را نیز در شکل می‌بینید. برای اینکه مدار شما کار کند، باید پورت‌های مدار را به نحو مناسبی، به پین‌های FPGA متصل شوند.

مثلاً، پورت کلاک کد شما، که در FPGA پیاده‌سازی شده است، باید به پینی از FPGA وصل شود که آن پین، روی بُرد، به اسیلاتور متصل است؛ بدین ترتیب می‌تواند کلاک را به کد شما که در FPGA پیاده‌سازی شده منتقل کند.

یا مثلاً، پورت‌های LED0 و LED1 باید به آن پین‌هایی از FPGA متصل شوند که روی بُرد به LED‌ها متصل هستند، تا بتوانند LED‌ها را خاموش و روشن کنند.

در این مقاله، می‌‌خواهیم راجع به همین موضوع صحبت کنیم که چطور پورت‌های مدار درون FPGA را، به پین‌های مورد نظرمان وصل کنیم.

برای این کار، باید در نرم‌افزار ISE از فایل ویژه‌ای به نام فایل قیود کاربر یا UCF استفاده کنیم؛ UCF مخفف عبارت User Constraints File است.

شما می‌‌توانید در فایل UCF انواع مختلفی از قیود و تنظیمات را برای مراحل سنتز، جانمایی و مسیریابی مشخص کنید؛ که این موضوع، بحث مفصلی است که معمولاً به مسائل پیشرفته‌ی پیاده‌سازی در FPGA، مربوط می‌شود.

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

نکته‌ی جالب این است که از میان تمام قیودی که وجود دارد، تنها قیدی که برای پیاده‌‌سازی عملی اجباری است، استفاده از همین قید است؛ چون در غیر این صورت، نرم افزار ISE از اینکه شما روی بُرد، از کدام پین‌‌ها برای اتصال به قطعات مختلف استفاده کرده‌اید، اطلاعی ندارد.

نرم‌افزار، نمی‌تواند به صورت خودکار پورت‌های مربوط به بُرد شما را به پین‌ها متصل کند.

در فایل UCF، برای اینکه شما پورت‌های مدار را به پین‌های مورد نظرتان وصل کنید، باید از قیدی به نام قید مکان یا Location، که به طور مخفف LOC نوشته می‌شود ( که آن را "لوک" می‌‌خوانیم)، استفاده کنید.

بنابراین باید به کمک قید LOC، هر پورت از مدارتان را که در Entity تعریف کرده‌اید، به پین دلخواه‌تان از FPGA وصل کنید.

اگر پورت‌ها یک بیتی باشند، باید آن یک بیت را به کمک قید LOC، به پین مورد نظرتان وصل کنید.

اگر پورت‌ها برداری یا چند بیتی باشند، باید برای هر کدام از بیت‌ها، یک‌بار از قید LOC استفاده کنید و آن بیت را به پین مورد نظرتان روی FPGA وصل کنید.

نکته‌ای که باید در نظر داشته باشید این است که، وقتی شما شروع به پیاده‌سازی روی FPGA می‌کنید، معمولاً با یک بُرد از قبل طراحی شده سر و کار دارید.

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

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

اکنون، اجازه دهید مثال ساده‌ای را با هم بررسی کنیم تا ببینیم چگونه باید فایل UCF را کامل کنیم.

فرض کنید، روی بُرد، یک FPGA داریم که یک اسیلاتور و چهار LED به آن متصل است.

می‌‌خواهیم LEDها را به نحو خاصی روشن و خاموش کنیم.

قاعدتاً، شما باید کدی برای پیاده‌سازی بنویسید که Entity آن به صورت زیر است:

entity LED_Counter is 
  Port ( 
    Clock : in STD_LOGIC; 
    LED   : out std_logic_vector (3 downto 0));

در این Entity ، یک پورت کلاک، به صورت ورودی و از نوع STD_Logic تعریف کرده‌ایم.

یک پورت LED هم به صورت خروجی و از نوع STD_Logic_vetctor و به عرض بیت چهار بیت، تعریف کرده‌ایم.

همان‌‌طور که در شکل زیر می‌‌بینید، قاعدتاً هر کدام از این بیت‌ها، باید به یکی از LED‌های روی بُرد متصل شود، تا بتوانند آن‌ها را کنترل کنند.

شمایی از تراشه‌ی FPGA روی بُرد

شمایی از تراشه‌ی FPGA روی بُرد

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

همان‌‌طور که در شکل بالا می‌‌بینید، اسیلاتور، به پورتی که نام آن p14 است، متصل شده است. همچنین، LED1 به پورتی به نام p24 وصل شده است.

ما باید به کمک قیدها، مواردی را برای نرم افزار ISE مشخص کنیم که وقتی نرم‌افزار در حال جانمایی و مسیریابی است، پورت‌های مدار را به پین‌های مورد نظر ما وصل کند.

مثلاً، ما دوست داریم، پورت کلاک به پین شماره‌ی ۱۴ وصل شود. برای این کار، باید فایل UCF را درست کنید. فایل UCF، یک فایل متنی است که پسوندش ucf. است.

بعد از اینکه فایل UCF را درست کردید، برای اینکه پورت کلاکی را که در Entity تعریف کرده‌اید، به پین شماره‌ی ۱۴ از FPGA وصل کنید، باید کدی مانند زیر را، در فایل UCF تایپ کنید.

Net "Clock" LOC = p14;

این خط، با کلمه‌ی کلیدی net شروع می‌شود؛ پس از آن، باید نام پورت را بنویسید؛ در واقع همان اسمی که در Entity مشخص کرده‌اید را بنویسید. سپس از قید Location استفاده کنید که آن را با کلمه‌ی LOC نشان می‌دهیم. در انتها نیز، باید نام پین مورد نظرتان را بنویسید.

برای LED‌ها نیز، مانند کد زیر، تک تک بیت‌ها را به پین‌های موردنظر روی بُرد متصل می‌کنیم:

Net "LED[0]" LOC = p105;
Net "LED[1]" LOC = p104;
Net "LED[2]" LOC = p102;
Net "LED[3]" LOC = p101;

امیدوارم از خواندن این مقاله هم لذت برده باشید، و بتوانید از نکات یاد گرفته شده، در انجام پروژه‌‌هایتان استفاده کنید.

آیا برنامه ویدئویی نحوه اختصاص پورت‌های مدار به پین‌های FPGA برای شما مفید بود؟

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

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

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

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

احمد ثقفی

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

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

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

    >