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

27 بهمن, 1395

تست مدار با ChipScope

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

چه ابزارهایی برای اثبات درستی عملکرد یک سیستم دیجیتالی وجود دارند؟

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

More...

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

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

در بخش سخت‌افزار، دو ماجول ICON و ILA را از بخش IPها در نر‌م‌افزار ISE به مدار مورد نظر برای تست اضافه خواهیم کرد.

در بخش نرم‌افزار، تنظیمات لازم را در نرم‌افزار ChipScope Pro Analyzer بررسی خواهیم کرد تا شرایط برای انجام یک سناریوی تست ساده مهیا شود.

شاید مقاله روش‌های تست و درستی‌آزمایی مدارات دیجیتال هم برایتان جالب باشد…

ویدئو یا متن؟

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

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

آیا تا به حال به این مسئله فکر کرده‌اید که بعد از اینکه یک مدار را پیاده‌سازی کردید، باید چگونه صحت عملکرد آن را به مدیر یا کارفرمایتان نشان دهید؟

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

قبل از ورود به موضوع اصلی، ابتدا در مورد شبیه‌سازی صحبت می‌کنیم.

شبیه‌سازی مدار در ISE: مزایا و معایب

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

شبیه‌سازی نوع اول، شبیه‌سازی رفتاری یا Behavioral Simulation است. در شبیه‌سازی رفتاری که قبل از مرحله سنتز انجام می‌شود، تاخیر‌های انتشار منابع دیجیتالی سیستم شما در نظر گرفته نمی‌شود؛ بنابراین هیچ تاخیری به عنوان تاخیر انتشار قطعات یا سیم‌ها در مدار وجود ندارد؛ مثلاً اگر شما، دو عدد را با هم جمع کنید، حاصلش در صفر ثانیه تولید می‌شود.

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

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

اما شبیه‌سازی نوع دوم، شبیه‌سازی زمانی یا Timing Simulation است. شبیه‌سازی زمانی بعد از مرحله سنتز و Place and Route انجام می‌شود. در این شبیه‌سازی، تاخیر انتشار حاصل از منابع دیجیتالی و سیم‌هایی که در مدار وجود دارند هم در نظر گرفته می‌شود؛ بنابراین حتما می‌توانید حدس بزنید که این شبیه‌سازی، نسبت به شبیه‌سازی رفتاری به واقعیت نزدیک‌تر است.

اما مسئله‌ای که وجود دارد این است که، به طور کلی شبیه‌سازی‌ها (خصوصاً شبیه‌سازی زمانی)، محدودیت‌هایی دارند.

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

مثلاً فرض کنید، می‌خواهید رفتار یک مدار را به مدت ۱۰ میکروثانیه شبیه‌سازی کنید. در واقع می‌‌خواهید ببینید، که از لحظه شروع به کار یک مدار، تا ۱۰ میکروثانیه بعد، مدار چه رفتاری دارد.

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

خصوصاً شبیه‌سازی زمانی با توجه به اینکه جزئیات بیش‌تری را در شبیه‌سازی دخیل می‌‌کند، می‌‌تواند زمان بسیار بیش‌تری را به خود اختصاص دهد.

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

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

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

ارزیاب سیستم، یعنی کسی که باید صحت عملکرد سیستم را به او اثبات کنید، تمایل زیادی به دیدن عملکرد سیستم در حین کار واقعی (به جای شبیه‌سازی) دارد.

از طرف دیگر، ارزیاب سیستم دوست دارد که یک سناریو کامل و جامع تست (که شامل تمام حالات ورودی باشد) را ببیند؛ نه اینکه شما فقط چند نمونه‌ی محدود را، به عنوان مثال به او نشان دهید.

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

این مسئله باعث شده که ما به سراغ استفاده از روش دیگری برویم که به آن، روش تست در حال اجرا یا Run-Time Test می‌گویند.

تست در حال اجرا یا Run-Time Test

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

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

همچنین برای برقراری ارتباط کامپیوتر و FPGA، و دریافت نتایج تست در کامپیوتر، نیاز به برنامه‌نویسی در کامپیوتر دارید.

در روش تست در حال اجرا، شما برای تست کردن مثلاً یک ثانیه از رفتار سیستم، فقط نیاز به یک ثانیه زمان دارید، چون سیستم واقعا در حال کار بر روی FPGA است.

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

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

اما خبر خوب این است که شما برای پیاده‌‌سازی یک تست در حال اجرا در FPGA، نیاز به انجام هیچ کدام از این کار‌ها ندارید؛ چون شرکت XILINX، از قبل، تحت ابزاری با عنوان ChipScope این امکانات را برای شما فراهم کرده است.

تنها کاری که شما نیاز است انجام دهید، این است که به کمک این ابزار، یک سناریوی تست آماده کنید؛ تا تست‌تان را در سریع‌‌ترین زمان ممکن شروع کنید.

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

نمایش دیاگرام اتصال FPGA به کامپیوتر برای تست در حال اجرا با ChipScope

دیاگرام اتصال FPGA به کامپیوتر برای تست در حال اجرا با ChipScope

فرض کنید شما کدی را نوشته‌ و آن را سنتز کرده‌اید. سپس آن را، در FPGA پیاده‌‌سازی کرده‌اید.

همان‌‌طور که در شکل بالا می‌‌بینید، کد شما (که شامل رجیستر‌هایی به نام A، B، C، D، E و غیره است)، بخشی از FPGA را اشغال کرده است. اکنون شما می‌خواهید این کد را به صورت عملی و در حالتی که روی FPGA در حال کار است، تست کنید.

ابتدا اجازه دهید که یک سناریوی تست بسیار ساده را با هم در نظر بگیریم.

فرض کنید، می‌خواهید هرگاه رجیستر A برابر با ۱۰۰ شد، مقدار رجیستر B را بخوانید.

اکنون به سراغ مراحل مختلف تست با ابزار ChipScope می‌رویم.

ابزار ChipScope

به طور کلی، این ابزار از دو بخش تشکیل شده است:

یک بخش، بخش سخت‌افزاری است که ما درون FPGA پیاده‌سازی می‌کنیم و بخش دیگر، بخش نرم‌افزاری است که درون کامپیوتر و به کمک نرم‌افزار مخصوصی به نام ChipScope Pro Analyzer انجام می‌دهیم.

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

بخش سخت‌‌افزاری ابزار ChipScope

برای پیاده‌سازی بخش سخت‌‌افزاری مربوط به ابزار ChipScope در FPGA، باید به بخش IPهای نرم‌افزار ISE مراجعه کنید و در آن بخش، دو IP، که مربوط به ChipScope هستند را در کدتان Instant و Port Map کنید.

اولین آی پی، ICON نامیده می‌شود که مخفف Integrated Controller است. این IP را انتخاب می‌کنید و در کد، Instant می‌کنید. این IP، فقط یک پورت به اسم پورت کنترل دارد.

IP اصلی ما، IP دوم است که ILA نام دارد؛ ILA مخفف Integrated Logic Analyzer است؛ این IP را در کدتان Instant کنید.

نمایش IP‌های ICON و ILA که برای تست با ChipScope، درون کد، Instant شده‌اند

دیاگرام IP‌های ICON و ILA که برای تست با ChipScope، درون کد، Instant شده‌اند

همان‌طور که در شکل بالا می‌بینید، ILA همانند ICON، یک پورت کنترلی دارد. علاوه بر آن، این IP، یک پورت کلاک نیز دارد که آن را به پورت کلاک سیستم‌‌تان وصل کنید.

پس از عملیات Instant کردن IPها در کد، باید پورت کنترل ILA و پورت کنترل ICON را به هم متصل کنید.

ILA، دو پورت اصلی نیز دارد؛ یک پورت Data و یک پورت Trig.

اجازه دهید که بار دیگر، سناریوی تست را مرور کنیم.

می‌خواهیم هر وقت رجیستر A برابر با ۱۰۰ شد، مقدار رجیسترB  قرائت شود؛ یعنی ما در هر کلاک باید نگاه کنیم که اگر رجیستر A برابر با ۱۰۰ است، مقدار رجیستر B را بخوانیم.

برای این کار، باید رجیستری را که می‌‌خواهید مقدارش را قرائت کنید، به پورت دیتای بلوک ILA وصل کنید.

همچنین مطابق شکل زیر، رجیستری را که می‌‌خواهید روی آن شرط بگذارید را، به پورت Trig وصل کنید.

نمایش نحوه‌ی اتصال رجیسترها به پورت‌های IP، برای تست با ChipScope

اتصال رجیسترها به پورت‌های IP، برای تست با ChipScope

مثلاً در سناریوی ما، رجیستر B را به پورت دیتای بلوک ILA و رجیستر A را به پورت Trig، وصل کنید. پس از انجام این کارها، کار ما در FPGA و در بخش سخت‌افزاری تمام شده است و حالا می‌‌توانیم به بخش نرم‌افزاری بپردازیم؛

بخش نرم‌افزاری ابزار ChipScope

در بخش نرم‌افزار، شما باید نرم‌افزار ChipScope Pro Analyzer را از مجموعه نرم‌افزاری ISE اجرا کنید. بعد از این اینکه ماجول‌‌های ICON و ILA را در کنار کدتان قرار دادید، یک بار دیگر کد را سنتز کرده و آن را Place And Route کنید؛ سپس فایل بیتی را درست کنید و در FPGA پروگرام کنید.

بعد از پروگرام کردن دوباره‌ی FPGA، از طریق نرم‌افزار ChipScope Pro Analyzer به FPGA متصل می‌‌شوید و به محض اینکه ارتباط با FPGA برقرار شد، نرم‌‌افزار ChipScope Pro Analyzer، متوجه می‌شود که شما درون FPGA، بلوک ICON و ILA را استفاده کرده‌اید؛ حتی متوجه می‌شود که رجیسترهایی که به پورت دیتا و Trig متصل کرده‌اید، چند بیتی هستند.

 همه‌ی این موارد در نرم‌‌افزار ChipScope نشان داده می‌شود. ارتباط FPGA و نرم‌‌افزار ChipScope Pro Analyzer به کمک همان پروگرامری که برای پروگرام کردن FPGA استفاده می‌کنید، انجام می‌شود؛ یعنی شما برای این ارتباط، به هیچ پورت یا پین اضافه‌ای از FPGA نیاز ندارید. بلکه به کمک همان پورت Jtag از FPGA (که به کمک آن پروگرامر را به FPGA متصل می‌کردید و از طریق نرم‌افزار iMPACT، تراشه‌ی FPGA را پروگرام می‌کردید)، می‌توانید با نرم‌افزار ChipScope Pro Analyzer ارتباط برقرار کنید.

نکته‌ی بعدی این است که در ماجول ILA، یک حافظه‌ی بلوکی یا Block RAM وجود دارد که وظیفه‌اش این است که در هر کلاک، در صورت برقراری شرط ما، مقدار رجیستری که به پورت Data متصل است را ذخیره کند؛ مثلاً در این مثال، اگر شرط A برابر با ۱۰۰ برقرار شود، مقدار رجیستر B قرائت می‌شود و در این حافظه‌ی بلوکی قرار داده می‌شود. وقتی کل این حافظه‌ی بلوکی پر شد، اطلاعات ذخیره شده به صورت اتوماتیک و از طریق پورت Jtag  و پروگرامر به کامپیوتر و نرم‌افزار ChipScope Pro Analyzer منتقل می‌شود و روی صفحه نمایش کامپیوتر نشان داده می‌شود.

پس از انجام این تنظیمات، باید در نرم‌‌افزار ChipScope Pro Analyzer، تنظیمات سه بخش را انجام دهیم:

بخش اول، بخش match است که در این بخش، ریز‌شرط‌ها را مشخص می‌کنید. برای مثال، شرط A برابر با ۱۰۰، در سناریوی نمونه‌‌ای که ذکر شد، یک ریزشرط محسوب می‌‌شود.

وقتی که شما رجیستر A را به پورت Trig وصل کردید، در واقع فقط مشخص شد که قرار است روی رجیستر A شرطی بگذارید. حال باید از طریق بخش match در نرم‌افزار، به سخت‌افزار اعلام کنید که شرط موردنظر شما چیست.

وقتی در قسمت Match، شرط‌ها را وارد می‌کنید، به طور پیش فرض، برای آن‌ها، نامی با الگوی m0، m1، m2 و... در نظر گرفته می‌شود.

نمایش سناریوی تست

سناریوی تست

در اینجا تنها یک ریزشرط داریم که نام آن m0 قرار داده شده است. حالا باید دو تا شرط Trig و capture را مشخص کنیم.

ابتدا به سراغ شرط capture می‌رویم. شرط capture، شرطی است که در صورت وقوع، مقدار رجیستر B در آن کلاک قرائت می‌شود و به حافظه‌ی بلوکی منتقل می‌شود.

اما شرط Trig چه شرطی است؟ شرط Trig، شرطی است که لازم است فقط یک‌بار اتفاق بیفتد تا شرط capture کار کند؛

یعنی اگر شرط Trig رخ ندهد، رخداد شرط capture باعث نمونه‌برداری از رجیستر B و ذخیره‌سازی در Block RAM نخواهد شد. بلکه حتما لازم است قبل از رخداد شرط capture، حداقل یک‌‌بار شرط  Trig اتفاق بیفتد. در واقع، پس از فقط یک‌بار رخ دادن شرط Trig، از آن به بعد هر بار که شرط capture رخ دهد، مقدار رجیستر B قرائت شده و در حافظه بلوکی ذخیره می‌شود.

این مسئله برای این است که در عمل بتواند برای طراحی سناریوهای پیچیده‌ی تست، به شما انعطاف بیش‌تری بدهد.

در این مثال، چون فقط یک ریز‌شرط داریم، مطابق شکل، هم شرط Trig و هم شرط capture را برابر با m0 قرار می‌دهیم؛ در واقع شرط Trig و capture یکسان، و برابر با، A مساوی 100 هستند. بنابراین با اولین باری که A برابر 100 باشد، هم شرط Trig و هم شرط capture برقرار می‌شود؛ بنابراین یک نمونه درBlock RAM  ذخیره می‌شود.

نمایش تنظیمات بخش‌های Trig ،Match و Capture برای تست با ChipScope

تنظیمات بخش‌های Trig ،Match و Capture برای تست با ChipScope

وقتی دوباره شرط m0 برقرار شود، بدون نیاز به برقراری شرط Trig، نمونه‌برداری انجام می‌شود؛ چون تنها یک بار برقراری شرط Trig، نیاز بود.

پس، هر بار شرط m0 برقرار شود، می‌توانیم یک نمونه در Block RAM ذخیره کنیم.

وقتی Block RAM پر شد، به صورت اتوماتیک نمونه‌ها به نرم افزار ChipScope Pro Analyzer منتقل می‌شوند. بنابراین شما می‌‌توانید نتایج تست را که به صورت عملی و در حین کار FPGA انجام شده، روی مانیتور ببینید.

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

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

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

آیا برنامه ویدئویی تست مدار با ChipScope برای شما مفید بود؟

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

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

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

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

احمد ثقفی

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

  • با سلام . از زحمات شما بسیار سپاس گزار هستم و این آموزش برای من خیلی جالب و جدید بود
    با تشکر محمدی

  • با سلام
    ویدئوی کامل چند ساعته در مورد chipscope را که در این ویدئو اشاره میفرمایید را از کجا میتونم تهیه کنم؟

  • عرض خسته نباشید و خدا قوت دارم خدمت استاد ثقفی که همیشه برای آموزش دیگران زحمت می کشید. میخواستم بپرسم ویدئوی کامل چند ساعته در مورد chipscope را که در این ویدئو اشاره میفرمایید را چجوری و از کجا باید تهیه کنیم؟

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

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

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

    >