آموزش اِف‌پی‌جی‌اِی از صفر
3.37K subscribers
520 photos
14 videos
10 files
517 links
آموزش قدم به قدم طراحی دیجیتال به کمک FPGA

🌎 آموزشگاه فراد اندیش
www.FaradAndish.com
☎️ ۴۲۴۳۹۹۰۰
ایمیل سایت:
help@faradandish.com

📌 لینک اولین پست کانال:
https://t.me/fpga0/22
Download Telegram
⚡️چرا مدارات دیجیتال را فقط به صورت سنکرون در FPGA پیاده‌سازی می‌کنیم؟

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

1⃣ مدارات ترکیبی

2⃣ مدارات ترتیبی آسنکرون

3⃣ مدارات ترتیبی سنکرون

فکر می‌کنید کدامیک از این نوع مدارات را می‌توان در FPGA پیاده‌سازی کرد؟

بله، هر سه نوع مدار را می‌توان در FPGA پیاده‌سازی کرد.

اما در عمل، کدام نوع مدار را در FPGA پیاده‌سازی می‌کنیم؟

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

🔷 منابع سخت‌افزاری کمتری از FPGA اشغال می‌کند.

🔷 کارایی و سرعت آن بیشتر می‌شود.

🔷 فرآیند طراحی و پیاده‌سازی آن راحت‌تر می‌شود.

🔷 دارای قابلیت اطمینان بیشتری در بلند مدت است.

اما مهمترین نیازمندی یک مدار سنکرون چیست؟

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

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

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

🆔 @FPGA0
⚡️چگونه یک سیگنال کلاک با کیفیت داشته باشیم؟ (قسمت اول)

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

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

✳️ استفاده از بلوک DCM

اولین نکته‌ی مهم برای پیاده‌سازی کلاک در FPGA این است که همواره از بلوک DCM استفاده کنید.

🔷 همان‌طور که می‌دانید، بلوک DCM یکی از منابع سخت‌افزاری موجود در ‌FPGAهای شرکت Xilinx است.

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

🔷 شما می‌توانید به کمک این بلوک، فرکانس اسیلاتور روی بُرد را که به FPGA وارد می‌شود، به فرکانس کلاک مورد نظر خودتان برای استفاده در مدار تغییر دهید.

ادامه دارد...
🆔@FPGA0
چگونه یک سیگنال کلاک با کیفیت داشته باشیم؟ (قسمت دوم)

✳️ استفاده از قید پریود

🔷 نکته‌ی بسیار مهم دیگر در ارتباط با پیاده‌سازی کلاک در FPGA، استفاده از قید period در فایل UCF است.

اما قید period چیست و چرا در پیاده‌سازی‌ها باید از آن استفاده کرد؟

🔷 مداراتی که بدون قید period پیاده‌سازی می‌شوند، بهینه و قابل اعتماد نیستند.

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

🔷 ممکن است بعد از پیاده‌سازی، مدار شما به فرکانس کلاک مورد نظر شما نرسد و یا ممکن است به فرکانس کلاکی بیش از فرکانس مورد نیاز شما برسد.

در هر دو صورت، پیاده‌سازی بهینه‌ای انجام نشده است.

🔷 شما به کمک قید period، به نرم‌افزار پیاده‌ساز اعلام می‌کنید که قرار است چه فرکانس کلاکی را به مدارتان اعمال کنید و بر این اساس، بهینه‌ترین پیاده‌سازی را انجام می‌دهد.

🔷 به همین دلیل، توصیه اکید شرکت Xilinx این است که حتماً از قید period استفاده کنید.

در واقع، استفاده از قید period در مدارات یک "الزام" است.

برای مثال، در صورتی که فرکانس اعمال شده به مدار 50MHz باشد، باید کد زیر را در فایل UCF وارد کنیم:

NET "Clock" TNM_NET = Clock;
TIMESPEC TS_Clock = PERIOD "Clock" 50 MHz HIGH 50% ;

در کد بالا، فرض شده است که نام پورت کلاک، Clock است.

ادامه دارد...
🆔 @FPGA0
چگونه یک سیگنال کلاک با کیفیت داشته باشیم؟ (قسمت سوم)

✳️ ورود سیگنال کلاک به FPGA فقط از طریق پایه‌های مخصوص به کلاک

🔷 نکته سو‌م برای پیاده‌سازی کلاک در FPGA این است که دقت کنید سیگنال کلاک حتما از پایه‌های مخصوص کلاک به FPGA وارد شوند.

🔷 در ‌FPGAها، تعداد زیادی IO وجود دارد؛ اما از میان این IO‌ها، تنها تعداد کمی از آن‌ها مخصوص ورود کلاک هستند.

در ‌FPGAهای شرکت Xilinx، نام پایه‌های کلاک شامل کلمه‌ی GCLK یا CC است.

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

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

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

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

🆔@FPGA0
❇️ اگر چه ما به عنوان "پیاده‌ساز" الگوریتم‌های پردازش سیگنال با FPGA نیاز به آشنایی با الگوریتم‌های پردازشی و نحوه طراحی آن‌ها نداریم، اما مطمئناً آشنایی با مفاهیم مرتبط با پردازش سیگنال می‌تواند به ما برای پیاده‌سازی بهینه و همچنین تعامل آسان‌تر با طراح الگوریتم‌ها کمک کند.

🔺 اما مشکلی که در این بین وجود دارد این است که یادگیری این مفاهیم اغلب مستلزم مطالعه‌ی کتاب‌های پیچیده و پر از فرمول پردازش سیگنال است که البته خوشایند اکثر ما نیست.

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

🔷 این را کتاب را دانلود کنید و در اولین فرصت مطالعه آن را شروع کنید 👇
🆔 @FPGA0

📚 عنوان: Practical Digital Signal Processing

👤 نویسنده: Edmund Lai
📅 سال انتشار: 2003
🖨 ناشر: Elsevier

📥 لینک دانلود: https://goo.gl/bjaNQQ
⚡️ مزایای استفاده از بلوک DCM برای پیاده‌سازی کلاک در FPGA (قسمت اول)

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

کاربرد اصلی بلوک DCM تغییر فرکانس کلاک مدار است.

🔷 به کمک این بلوک می‌توانید سیگنال کلاکی که توسط اسیلاتور روی بُرد ساخته شده و به FPGA وارد می‌شود را به سیگنال کلاک جدیدی با فرکانس مورد نظرتان برای استفاده در مدار تبدیل کنید.

استفاده از بلوک DCM، به جز تغییر فرکانس اسیلاتور، دارای مزایای مهم دیگری نیز است که به همین دلیل، توصیه می‌شود در تمام پیاده‌سازی‌ها، از بلوک DCM استفاده شود. (حتی اگر نیاز به تغییر فرکانس کلاک روی برد نباشد!)

🔷 در پست‌های بعدی، مهمترین مزایای استفاده از بلوک DCM را توضیح خواهم داد.

ادامه دارد...
🆔 @FPGA0
🌟 پیشنهادات جدید فراد اندیش برای ایام کرونا...

🔹 در لینک زیر به سوالات و ابهامات شما در مورد دوره‌های آنلاین پاسخ داده‌ام و...

🔅 پیشنهادات ویژه‌ای را به دلیل شرایط ویژه کشور برای اولین بار ارائه کرده‌ام 👇

🌎 https://faradandish.com/course-faq

🆔 @FPGA0
⚡️ مزایای استفاده از بلوک DCM برای پیاده‌سازی کلاک در FPGA (قسمت دوم)

همان‌طور که در پست قبلی اشاره شد، کاربرد اصلی بلوک DCM تغییر فرکانس کلاک مدار است.

اما این بلوک مزایای مهم دیگری نیز دارد:

1⃣ کاهش جیتر کلاک ورودی

🔷 بلوک DCM می‌تواند جیتر کلاک ورودی را کاهش دهد.

اما منظور از جیتر چیست؟

🔷 معمولاً شما از یک اسیلاتور به عنوان کلاک مدارتان در FPGA استفاده می‌کنید.

🔷 فرض کنید روی اسیلاتور عدد ۱۰۰ مگاهرتز، به عنوان فرکانس خروجی نوشته شده باشد.

🔷 اما در عمل، فرکانسی که این اسیلاتور تولید می‌کند ۱۰۰ مگاهرتز نیست، بلکه مقداری نزدیک به ۱۰۰ مگاهرتز است، و این مقدار مدام در حال تغییر است.

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

🔷 یکی از مهمترین مزایای بلوک DCM این است که می‌تواند تا حد زیادی جیتر کلاک حاصل از اسیلاتور را کاهش دهد.

ادامه دارد...
🆔 @FPGA0
🌟 کرونافِر: پیشنهادات ویژه ایام کرونا...

🔹 پزرگترین فروش ویژه فراد اندیش به دلیل شرایط ویژه کشور

🔅 برای اطلاع از این پیشنهادات روی لینک زیر کلیک کنید: 👇

🌎 https://faradandish.com/corona-offer

🔺 مهلت استفاده از کرونافِر: جمعه ۵ اردیبهشت

🆔 @FPGA0
⚡️ مزایای استفاده از بلوک DCM برای پیاده‌سازی کلاک در FPGA (قسمت سوم)

در پست‌های قبلی گفتیم که کاربرد اصلی بلوک DCM، تغییر فرکانس کلاک مدار است.

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

اما مزیت دوم بلوک DCM:

2⃣ تصحیح Duty Cycle کلاک ورودی

🔷 همان‌طور که می‌دانید، منظور از duty cycle، نسبت مدت زمان یک بودن سیگنال مربعی، به پریود آن است.

🔷 مثلاً، فرض کنید که شما انتظار دارید duty cycle اسیلاتور روی بُرد، 50 درصد باشد.

🔷 با این حال، ممکن است مقداری خطا در duty cycle وجود داشته باشد.

🔷 بلوک DCM می‌تواند خطای duty cycle سیگنال کلاک را تصحیح کند.

ادامه دارد...
🆔 @FPGA0
🌟 کرونافِر چیست؟

🔹 کرونافِر از دو کلمه کرونا و آفر (به معنای پیشنهاد) تشکیل شده است و به معنای پیشنهاد کرونایی یا پیشنهادی به دلیل شرایط کرونا است.

🔹 این نامی است که برای بزرگترین پیشنهاد ویژه تاریخ فراد اندیش انتخاب کرده‌ایم.

🔹 این پیشنهادات فقط به دلیل شرایط استثنایی کشور و کمک به استفاده بهتر از این دوران ارائه شده‌اند.

🔅 برای اطلاع از این پیشنهادات روی لینک زیر کلیک کنید: 👇

🌎 https://faradandish.com/corona-offer

🔺 مهلت استفاده از کرونافِر: جمعه ۵ اردیبهشت

🆔 @FPGA0
⚡️ مزایای استفاده از بلوک DCM برای پیاده‌سازی کلاک در FPGA (قسمت چهارم)

در پست‌های قبلی به کاربرد اصلی بلوک DCM که تغییر فرکانس کلاک مدار است، اشاره شد.

همچنین، دو مزیت مهم استفاده از آن که "کاهش جیتر کلاک ورودی" و "تصحیح Duty Cycle کلاک ورودی" است بیان شد.

و اما مزیت سوم استفاده از بلوک DCM:

3⃣ استفاده‌ی خودکار از بافرهای مخصوص کلاک

🔷 در FPGA، بافرهای مخصوصی وجود دارند که باید در مسیر کلاک یا کلاک‌های ورودی مدار قرار داده شوند.

🔷 به عبارت دیگر، برای استفاده از تمام تمهیداتی که برای کلاک در FPGA وجود دارد، شما حتماً باید سیگنال کلاک مدار را به محض ورود به FPGA، از این بافرها عبور دهید.

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

🔷 اما اگر از بلوک DCM استفاده کنید، تمام بافرهای کلاک لازم، به صورت خودکار در مدار شما قرار خواهد گرفت و دیگر نیازی به instant کردن دستی آن‌ها نیست.

بنابراین، بلوک DCM به جز تغییر فرکانس، کارهای مفید دیگری هم انجام می‌دهد که به همین دلیل، توصیه می‌شود حتی اگر نیازی به تولید فرکانس جدید برای کلاک ندارید، باز هم از DCM استفاده کنید.

مثلاً، اگر اسیلاتور روی برد شما ۱۰۰ مگاهرتز است و فرکانس کلاک مورد نیاز مدار شما نیز ۱۰۰ مگاهرتز است، سیگنال کلاک ۱۰۰ مگاهرتز را به ورودی DCM اعمال کنید و در خروجی آن هم ۱۰۰ مگاهرتز را دریافت کنید.

به این ترتیب می‌توانید از مزایای زیادی که استفاده از DCM برای مدار شما ایجاد می‌کند، بهره ببرید.

🆔 @FPGA0
سوال:

من میخوام یه مدار فرکانس بالا طراحی کنم و پیاده سازی سخت افزاری کنم اونم تا حد 10گیگاهرتز. آیا با FPGA این امکان هست و اگر نیست با کدوم سخت افزاری مثل FPGA میشه مدارات فرکانس بالا اونم تا این حد فرکانس زیاد ساخت؟

📝 جواب:

در FPGAهای شرکت Xilinx پایه‌های ورودی/خروجی (I/O) مخصوصی وجود دارند به نام Gigabit Transceiver یا GT که قابلیت ارسال و دریافت دیتا حتی بیش از ۱۰ گیگابیت در ثانیه را هم دارند. البته تعداد این پایه‌ها و حداکثر سرعت آن‌ها در هر نوع از FPGAهای شرکت Xilinx متفاوت هست.

برای اطلاعات بیشتر میتونید به لینک زیر مراجعه کنید:

http://www.xilinx.com/products/technology/high-speed-serial.html

البته طراحی چنین بردی نیاز به تجربه دارد. با نرم‌افزار آلتیوم می‌توان این برد را طراحی کرد، فقط طراح حتماً باید تجربه‌ی چنین کاری را داشته باشد؛ در غیر این صورت نیاز به زمان زیادی خواهد داشت.
🆔 @FPGA0
⚡️ تحقق مداری یک سیگنال در زبان VHDL وقتی در FPGA پیاده‌سازی می‌شود چیست؟

🔷 وقتی یک سیگنال داخلی در زبان VHDL تعریف می‌کنیم، این سیگنال می‌تواند به دو نوع مختلف پیاده‌سازی شود:

🔹 به صورت یک سیم
🔹 به صورت یک رجیستر

🔷 اما سوالی که برای بسیاری از پیاده‌سازان دیجیتال با FPGA مطرح می‌شود این است:

تحت چه شرایطی یک سیگنال داخلی بعد از پیاده‌سازی تبدیل به سیم و در چه شرایطی تبدیل به یک رجیستر می‌شود؟

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

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

🔷 با ارجاع به یک سیگنال، درون شرط لبه‌ی بالارونده‌ی کلاک، این ارجاع‌ هم‌زمان و سنکرون با لبه‌ی کلاک انجام می‌شود.

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

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

🆔 @FPGA0
⚡️ قوانین ارجاع در زبان VHDL (قسمت اول)

🔷 در زبان VHDL، برای انجام ارجاع‌ها قوانینی وجود دارد که در ادامه به آن‌ها می‌پردازیم.

1⃣ قانون ارجاع ساده

🔷 وقتی یک سیگنال را به کمک ارجاع ساده به سیگنال دیگری ارجاع می‌دهید، باید عرض بیت سیگنال‌ها در دو سمت ارجاع با هم برابر باشد.

🔷 برای مثال، باید عرض بیت دو سیگنال A و B در ارجاع زیر با هم برابر باشد:

A <= B;

2⃣ قانون ارجاع جمع

🔷 فرض کنید مانند کد زیر می‌خواهیم تعدادی سیگنال را با هم جمع یا تفریق کنیم:

A <= B + C – D;

🔷 طبق قانون ارجاع جمع در زبان VHDL باید حداقل یکی از سیگنال‌های سمت راست، هم عرض سیگنال سمت چپ باشد و عرض بیت سایر سیگنال‌ها نیز کوچک‌تر یا مساوی سیگنال سمت چپ باشد.

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

نکته: به طور کلی، در هر نوع ارجاعی، باید نوع یا تایپ‌ تمامی سیگنال‌های حاضر در ارجاع یکسان باشد.

ادامه دارد...

🆔 @FPGA0