آیا تا به حال به این نکته فکر کردهاید که چطور میتوانید صحت عملکرد مداری را که با 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 پیادهسازی کردهاید.
همانطور که در شکل بالا میبینید، کد شما (که شامل رجیسترهایی به نام 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 کنید.
همانطور که در شکل بالا میبینید، ILA همانند ICON، یک پورت کنترلی دارد. علاوه بر آن، این IP، یک پورت کلاک نیز دارد که آن را به پورت کلاک سیستمتان وصل کنید.
پس از عملیات Instant کردن IPها در کد، باید پورت کنترل ILA و پورت کنترل ICON را به هم متصل کنید.
ILA، دو پورت اصلی نیز دارد؛ یک پورت Data و یک پورت Trig.
اجازه دهید که بار دیگر، سناریوی تست را مرور کنیم.
میخواهیم هر وقت رجیستر A برابر با ۱۰۰ شد، مقدار رجیسترB قرائت شود؛ یعنی ما در هر کلاک باید نگاه کنیم که اگر رجیستر A برابر با ۱۰۰ است، مقدار رجیستر B را بخوانیم.
برای این کار، باید رجیستری را که میخواهید مقدارش را قرائت کنید، به پورت دیتای بلوک ILA وصل کنید.
همچنین مطابق شکل زیر، رجیستری را که میخواهید روی آن شرط بگذارید را، به پورت Trig وصل کنید.
مثلاً در سناریوی ما، رجیستر 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 ذخیره میشود.
وقتی دوباره شرط m0 برقرار شود، بدون نیاز به برقراری شرط Trig، نمونهبرداری انجام میشود؛ چون تنها یک بار برقراری شرط Trig، نیاز بود.
پس، هر بار شرط m0 برقرار شود، میتوانیم یک نمونه در Block RAM ذخیره کنیم.
وقتی Block RAM پر شد، به صورت اتوماتیک نمونهها به نرم افزار ChipScope Pro Analyzer منتقل میشوند. بنابراین شما میتوانید نتایج تست را که به صورت عملی و در حین کار FPGA انجام شده، روی مانیتور ببینید.
امکانات و قابلیتهای ChipScope برای پیاده سازی انواع سناریوهای پیچیده بسیار بیشتر از این است که بتوان در یک مقالهی کوتاه، دربارهی آنها صحبت کرد. اما من در این زمینه، یک برنامهی ویدئویی کامل چند ساعته آماده کردهام که در صورت تمایل، میتوانید از آن برنامه استفاده کنید.
در آن برنامهی ویدئویی، به جز صحبت در مورد تمام قابلیتهای ابزار ChipScope، به صورت عملی و مرحله به مرحله به پیادهسازی سناریوهای مختلف تست به کمک این ابزار میپردازیم. در واقع، چندین سناریوی مختلف را به کمک این ابزار و قابلیتهای مختلفی که دارد، پیادهسازی میکنیم تا شما کاملاً با ریزهکاریها و قابلیتهای مختلف این نرمافزار آشنا شوید.
امیدوارم از خواندن این مقاله هم لذت برده باشید و بتوانید از نکات یاد گرفته شده، در انجام پروژههایتان استفاده کنید.
آیا برنامه ویدئویی تست مدار با ChipScope برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.
با سلام . از زحمات شما بسیار سپاس گزار هستم و این آموزش برای من خیلی جالب و جدید بود
با تشکر محمدی
سلام، ممنون.
خوشحالم که مورد توجهتون قرار گرفته.
با سلام
ویدئوی کامل چند ساعته در مورد chipscope را که در این ویدئو اشاره میفرمایید را از کجا میتونم تهیه کنم؟
سلام،
دوره آنلاین تکنیکهای پیشرفته تست مدار با ChipScope در حال حاضر آماده شده است و میتوانید از طریق لینک زیر در آن ثبتنام کنید:
https://faradandish.com/product/chipscope/
موفق باشید.
عرض خسته نباشید و خدا قوت دارم خدمت استاد ثقفی که همیشه برای آموزش دیگران زحمت می کشید. میخواستم بپرسم ویدئوی کامل چند ساعته در مورد chipscope را که در این ویدئو اشاره میفرمایید را چجوری و از کجا باید تهیه کنیم؟
سلام، ممنون از شما.
دوره آنلاین تکنیکهای پیشرفته تست مدار با ChipScope در حال حاضر آماده شده است و میتوانید از طریق لینک زیر در آن ثبتنام کنید:
https://faradandish.com/product/chipscope/
موفق باشید.
سلام
انصافا شیوایی و سادگی بیان شما در انتقال مفاهیم سنگین به زبان ساده خیلی عالیست
آیا کتاب جامع و کاربردی در این زمینه ندارید که تهیه کنیم؟کتابی که شامل همین مقالات و مطالبی باشه که آموزش دادید
سلام،
ممنون از شما. به زودی کتابی در زمینه پیادهسازی با FPGA منتشر خواهم کرد.
موفق باشید.
چقدر پیوسته و روان توضیح میدید
ممنون از نظر مثبت شما. خوشحالم که این آموزش برای شما مفید بوده است.