HEXALINX
526 subscribers
147 photos
4 files
74 links
این آغاز ماجراجویی شماست...
آموزش رایگان برنامه نویسی FPGA و ZYNQ و ابزارهای طراحی XILINX

پرسش و پاسخ:
@ask_linx

آدرس سایت:
hexalinx.com

آدرس کانال آپارات:
aparat.com/hexalinx

آدرس اینستاگرام:
insatagram.com/hexalinx_go
Download Telegram
پیاده سازی لگاریتم در FPGA

✳️ یکی از مهترین ویژگی‌های تراشه‌های FPGA قابلیت‌های آن‌ها در پیاده‌سازی انواع توابع ریاضی است. توابع ریاضی ممکن است گاها بسیار ساده و ترکیبی از چند عمل ضرب و جمع باشند. بعضا نیز ممکن است شامل عملگرهای غیرخطی همچون لگاریتم یا توابع مثلثاتی باشند. اگر مدت‌هاست با تراشه های FPGA کار می‌کنید، مطمئنا می‌دانید که برای پیاده‌سازی تابع لگاریتم IPCore آماده وجود ندارد. پس در صورتی که نیار به محاسبه لگاریتم در یک الگوریتم داشته باشید باید خودتان آستین‌ها را بالا بزنید و کار را شروع کنید.

@Hexalinx

https://t.me/iv?url=http%3A%2F%2Fhexalinx.com%2Fprogramming%2Ffpga-implementation-of-logarithm%2F&rhash=f4c70bc3a5c788
#ODDR
#IOB

تولید یک کپی از کلاک درون سیستم به روی پین های تراشه FPGA


✳️ مواردی فراوانی وجود دارد که در آن طراح نیاز دارد با استفاده از FPGA کلاک مورد نیاز برای یکی از قطعات روی بورد را تولید کند، این کلاک ممکن است کلاک اصلی FPGA و یا یک کلاک تولید شده درون FPGA با استفاده از بلوک‌های MMCM یا DCM باشد.

@Hexalinx
#Intermediate

✳️ براساس توصیه Xilinx برای ساخت یک کپی از کلاک روی پین‌های تراشه و استفاده از آن خارج از FPGA بهتر است از یک الگوی خاص و استاندارد استفاده شود. این الگو Clock Forwarding نام دارد.

✳️ برای این کار باید از بلوک ODDR در داخل IOB های تراشه های سری ۷ یا بلوک ODDR2 در تراشه های Spartan 6 استفاده کرد.

✳️ برای تراشه های سری ۷ کافیست پایه D1 در ورودی ODDR به مقدار منطقی ‘1’ و پایه D2 باید به مقدار منطقی ‘0’ متصل بشود و کلاکی که باید خروجی شود به پایه C متصل شود. به این ترتیب یک کپی از کلاک روی پین تراشه قرار داده می‌شود. در این بلوک پایه‌های ست و ریست (S/R) به صورت همزمان پشتیبانی نمی‌شوند.

✳️ استفاده از ODDR2 در تراشه‌های Spartan 6 تا حدودی متفاوت است، برای خروجی کردن یک کلاک روی پایه‌های تراشه‌ها باید از DCM نیز کمک بگیریم و یک کلاک با اختلاف فاز ۱۸۰ درجه تولید کنیم. کلاک اصلی به پایه C0 و کلاک تولیدی با اختلاف فاز ۱۸۰ درجه به پایه C1 متصل می‌شود. پایه های D0 و D1 مشابه پایه‌های D1 و D2 در سری 7 هستند. استفاده همزمان از ست و ریست هم توصیه نمی‌شود و ممکن است به خطا منتهی شود.

❗️عملکرد پورت فعال ساز کلاک در هر دو primitive یکسان است و می‌تواند به فراخور نیاز بکارگرفته شوند.

@Hexalinx
#Basic
#ISIM
مشکل استفاده از ISIM برای شبیه سازی مدارت در windows 10

✳️ در صورتی که از windows 10 استفاده می کنید و برای اجرای نرم افزار ISIM‌ و شبیه سازی طراحی مشکل دارید. زیاد نگران نباشید چون راه حل آن چندان پیچیده نیست.
شما ممکن است در زمان اجرا با این خطا روبرو شوید.
ERROR:Simulator:861 - Failed to link the design

❗️برای برطرف کردن مشکل تنها کافی است به پوشه زیر مراجعه کنید و فایل “collect2.exe” رو حذف کنید.
installation directory \ Xilinx \ 14.x \ ISE_DS \ ISE \ gnu \ MinGW \ 5.0.0 \ nt \ libexec \ gcc \ mingw32 \ 3.4.2 \ collect2.exe

@Hexalinx
#Basic
#MUX

مالتی‌پلکسرها در FPGA

❗️مالتی پلکسرها غالبا با استفاده از عبارت شرطی IF یا CASE در زبان HDL تولید می‌شوند.
❗️استفاده عبارت IF/THEN/ELSE منجر به تولید یک انکدر اولویت‌دار می‌شود.
❗️استفاده از عبارت CASE منجربه تولید یک کدکننده پیچیده می شود. بدون اینکه اولویتی داشته باشند.

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

1️⃣ تاخیر و سایز مالتی پلکسرها به تعداد ورودی‌ها و تعداد عبارت IF/THEN یا CASE که تو در تو تعریف شده‌اند، بستگی دارد.
2️⃣ لچ‌های ناخواسته یا فعال سازهای کلاک زمانی که عبارات شرطی تمام حالات را در برنگیرند تولید می‌شود. برای پیدا کردن چنین مواردی در کدها باید به دقت گزارش های سنتز را مطالعه و بررسی کرد.
3️⃣ اگر نیاز به استفاده تو در تو از عبارت شرطی IF بود مهمترین شرط را در بایددر ابتدا قرار دهیم و تا خروجی آن کمترین مسیر بحرانی را داشته باشد. عبارت که در ELSE آخر قرار می گیرد به لحاظ اهمیت کمترین ارزش را دارد و خروجی حاصل از آن می‌تواند مسیر طولانی‌تری را طی کند.

@Hexalinx
#VU19P
شرکت xilinx هفته گذشته بزرگترین تراشه fpga دنیا را تحت عنوان #VU19P معرفی کرد.

این تراشه از سری Virtex UltraScale plus است و بیش از ۹ میلیون logic cell دارد.
این تراشه همچون برادران کوچکتر خود با استفاده از تکنولوژی ۱۶ نانو متر ساخته شده است و حدودا ۱.۶ برابر از بزرگترین تراشه موجود در بازار یعنی تراشه VU440# بزرگتر است که با تکنولوژی ۲۲ نانومتری ساخته شده بود. این تراشه حدودا ۳ برابر بزرگتر از تراشه VUP13P# است

@Hexalinx
❗️❗️❗️توجه ❗️❗️❗️

🔖سخت افزارها، سرعت و ظرفیت پردازش سیستم‌ها را بالا می‌برند و نرم‌افزارها، سرعت پردازشی ماشین‌ها را به چالش می‌کشند. برای رسیدن به حداکثر ظرفیت پردازشی چاره‌ای جز بهینه سازی توام سخت افزار و نرم‌ افزار نداریم. دنیای FPGA و Zynq مصداق بارز این حقیقت فراموش شده است.

🔖از شما دعوت می‌شود تا برای ساخت آینده خودتان با ما همراه شوید. ما با کیفیت‌ترین و مهمترین نکات آموزشی را در کنار کاربردی ترین مفاهیمِ پیاده سازی، در اختیار شما عزیزان می‌گذاریم. اگر به دنبال یادگیری های عمیق و آموزش های کلیدی و استفاده بهینه از اندوخته‌های خودتان هستید هگرالینکس می تواند به شما کمک کند و دریچه ی جدیدی را به رویتان باز کند و لذت یادگیری در کنار مطالب ارزشمند برایتان آسان تر شود.
هگزالینکس با هدف ارائه دوره ها و مقالات آموزشی فارسی در زمینه آموزش تراشه های FPGA و Zynq راه اندازی شده است.

www.Hexalinx.com
ما را در شبکه‌های اجتماعی دنبال کنید و اگر از کیفیت مطالب رضایت داشتید، به دوستان خود معرفی کنید.
aparat.com/Hexalinx
t.me/Hexalinx
youtube.com/Hexalinx
linkedin.com/Hexalinx
instagram.com/Hexalinx_go

@Hexalinx
#Digital_Filter
#Intermediate

پیاده‌سازی فیلتر میانگین‌گیر متحرک

✳️ فیلتر میانگین‌گیر متحرک یا فیلتر moving average یکی از ساده‌ترین انواع فیلترهای دیجیتال است. این فیلتر برای مواردی همچون حذف نویز یا هموار کردن سیگنال‌ها در حوزه زمان بکار گرفته می‌شود. مشخصات فیلتر میانگین‌گیر با توجه به کاربرد مد نظر متفاوت است.

اگر علاقه دارید با نحوه پیاده سازی این فیلتر آشنا شوید. آموزش زیر را در سایت هگزالینکس مطالعه بفرمایید. 👇

http://hexalinx.com/programming/moving-average-filter/

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

https://www.aparat.com/v/5xOcL
#Basic
#Fanout

مفهوم fanout در مدرات دیجیتال

✳️ در الکترونیک دیجیتال، مفهومfanout به عنوان پارامتری برای توصیف ظرفیت خروجی‌ گیت‌های منطقی بکار برده می‌شود و بیانگر تعداد ورودی‌هایی است که یک خروجی می‌تواند برای گیت‌های دیگر تامین کند. به بیان ساده‌تر در FPGA تعداد مسیرهای منشعب شده از یک سیگنال یا پورت خروجی fanout نامیده می‌شود. هر پورت ورودی در گیت‌های منطقی نمی‌تواند با بیش از یک پورت خروجی تغذیه شود، اما در نقطه مقابل هر خروجی ممکن است برای تامین ورودی بخش‌های مختلف سیستم مورد استفاده قرار بگیرد. هر چه fanout یک سیگنال کمتر باشد، میزان پایداری و قابلیت اطمینان عملکرد آن سیگنال‌ و در نتیجه کل سیستم بالاتر می‌رود. در واقع fanout معیاری برای سنجش تعداد کپی‌های ساخته شده از یک سیگنال واحد درون طراحی دیجیتال است.

❗️بالا بودن بیش از حد fanout یک سیگنال در طراحی علاوه بر مصرف حجم زیادی از منابع #routing ممکن است باعث بروز مشکلات زمان‌بندی در طرح بشود و عملکرد آن را مختل کند.

@Hexalinx
#Basic
#Reset

آیا لازم است بعد از پیکره‌بندی FPGA، آن را ریست کنیم؟ آیا لازم است یک ریست اولیه قبل از شروع به کار ماژول یا سیستم پیاده‌سازی شده، اعمال شود و تمام مقادیر رجیسترهای میانی را مقدرا دهی کند؟ چگونه باید برای پیاده‌سازی های خودمان روتیم por یا power on reset ایجاد کنیم؟

ممکن است در زمان اجرای پروژه با سوالاتی مشابه سوالات بالا روبرو شده باشید و آن‌ها را بدون پاسخ رها کرده باشید. در این پست کوتاه سعی می کنیم به صورت مختصر به چند مورد از این سوالات پاسخ بدهیم. 👇

@Hexalinx
#Reset
#POR

به طور کلی زمانی که FPGA پیکره‌بندی می‌شود نیازی به اعمال سیگنال ریست نداریم. تمامی سلول‌های درون تراشه بلافاصله بعد از پیکره‌بندی مقدار دهی می‌شوند. این اتفاق چیزی فراتر از اعمال یک ریست ساده به فلیپ فلاپ‌ها است و تمامی بخش‌های تراشه را در بر می‌گیرد. به عبارت دیگر پیکره‌بندی FPGA منجربه به اعمال یک ریست سرتاسری می‌شود. این ریست سرتاسری تمام سیگنال‌ها و حتی فضای درون حافظه‌ها را تحت تاثیر قرار می‌دهد. لازم است توجه شود که با اعمال این ریست سرتاسری، مقدار سلول‌ها لزوما صفر نمی‌شوند و می‌توانند هر مقداری که طراح به آن اختصاص می‌دهد را داشته باشند. مقدار دهی اولیه به سیگنال‌ها با استفاده عملگر "=:” صورت می‌پذیرد. پس به شما پیشنهاد می‌کنم حتما اگر مقدار اولیه خاصی برای برخی از سیگنال‌هایی که داخل برنامه خود تعریف می‌کنید مد نظر دارید، به جای استفاده از روتین‌های ست یا ریست در برنامه، برای آن‌ها مقدار اولیه تعیین کنید. در صورت عدم تعیین این مقدار اولیه، به صورت پیش فرض مقدار صفر به سلول‌های درون تراشه نسبت داده می‌شود. با توجه به توضیحات فوق واضح است که تراشه FPGA به سیگنال کنترلی به نام por نیاز ندارد.

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

@Hexalinx
#Intermediate
#Clock_Gating

گیت کردن کلاک یا Clock Gating چیست؟ آیا مجبوریم برای کنترل کلاک از مفهوم Clock Gating استفاده کنیم؟

✳️ مواردی وجود دارد که در یک طرح مجبوریم بین دو یا چند کلاک سوئیچ کنیم و یا برای کنترل توان مصرفی تراشه کلاک آن را در برخی زمان‌ها غیرفعال کنیم.
❗️محتمل‌ترین پاسخی که در ابتدا ممکن به است به ذهن طراحان کم تجربه‌تر برسد، فعال یا غیرفعال کردن کلاک بوسیله یک مدار کنترلی کمکی با دستورات شرطی است. این کار در اصطلاح پیاده‌سازی، تحت عنوان گیت کردن کلاک یا clock gating شناخته می‌شود؟
تا اینجا برای سوال خودمان یک راه حل ارائه دادیم و به نظر مشکل حل شد. اما کمی صبر کنید!!! از قبل می‌دانیم که کلاک‌ها درون تراشه‌های قابل‌ پیکره‌بندی یکسری مسیرهای اختصاصی دارند. این مسیرها کاملا مستقل از منابع #interconnect روی تراشه هستند. خروج کلاک از مسیرهای اختصاصی خودش ممکن است باعث بروز تاخیر و کجی کلاک شود و این یعنی تحت تاثیر قرار گرفتن عملکرد مدار و بروز مشکل زمان‌بندی در طراحی. خب حالا با این توضیحات clock gating خوب است یا بد؟ برای دریافت پاسخ کامل خود ادامه مطلب را مطالعه بفرمایید. 👇

@Hexalinx
#Intermediate
#BUFGCE, #BUFHCE

🔖 تقریبا در تمامی تراشه‌های FPGA پیش‌بینی‌های لازم برای گیت کردن کلاک در راستای کاهش توان مصرفی در نظر گرفته شده است. در تراشه‌های سری ۷ این مساله به شکل جدی‌تری مورد توجه قرار گرفته است. با استفاده از کنترل‌های در نظر گرفته شده برای این منظور می‌توان به راحتی بخشی از مدار را که نیاز به انجام عملیات خاصی ندارند، غیرفعال کرد. این کنترل‌ها برای تغییر و مالتی‌پلکس کردن دو یا چند کلاک هم می‌توانند مورد استفاده قرار بگیرند.


🔖 اگر با منابع کلاک درون تراشه‌های سری ۷ آشنا باشید حتما بافرهای کلاک را می‌شناسید و نام‌هایی مثل BUFGCE و ‌BUFHCE را شنیده‌اید. تقریبا در تمامی طراحی‌ها تعداد زیادی بافر از نوع BUFGCE و ‌BUFHCE وجود دارد که بدون استفاده رها می‌شوند. در حالت کلی هر BUFGCE می‌تواند کلاک مورد نیاز برای چندین ناحیه کلاک مختلف در تراشه را تامین کند و در نقطه مقابل هر ‌BUFHCE تنها قادر به تامین کلاک برای یک ناحیه کلاک است.
برای درک بهتر مساله اجازه بدهید مثالی از نحوه فعال یا غیرفعال کردن کلاک بزنیم. توجه شود که در اینجا مفهوم غیرفعال کردن کلاک برای یک یا چند فلیپ‌فلاپ بکار نمی‌رود و مساله کنترل کلاک بخشی از مدار پیاده‌سازی شده است. اگر تمامی مداراتی که نیاز است به طور دائم فعال باشند به شکل مناسبی با تعریف قیود مکانی در یک یا چند ناحیه کلاک محصور شده باشند، آنگاه یک BUFGCE می‌تواند برای تامین کلاک این نواحی به کار گرفته بشود. از سوی دیگر اگر اینترفیس خاصی به صورت کامل درون یک ناحیه کلاک محصور شده باشد و تنها نیاز باشد در بازه‌های زمانی کوتاه فعال باشد، می‌توان با BUFHCE کلاک ورودی به این ناحیه را گیت کرد.


🔖 کنترل پایه‌های enable این دو بافر یک روش بسیار آسان برای کنترل دینامیک توان مصرفی روی نواحی مختلف کلاک است. در مورد روش مالتی پلکس کردن کلاک‌ها نیز در آینده مطلبی ارائه خواهیم داد.


❗️اما هنوز یک نکته باقی مانده است. اگر به دلایل مختلف مجبور هستیم clock gating انجام دهیم. چگونه اینکار را انجام دهیم تا کمترین تاثیر منفی را روی طرح بگذارد؟ بهترین نقطه برای آغاز یا پایان فرایند clock gaiting دقیقا وسط بخش میانی کلاک است. دقیقا زمانی که مقدار آن صفر است. این کار معمولا با گیت and انجام می‌شود و هدف ممانعت از ایجاد #glitch در خروجی است. با رعایت این مساله در زمان روشن شدن گیت یا خاموش شدن آن در کلاک تولیدی خروجی هیچ شرایط پیش بینی نشده‌ای به وجود نمی‌آید و همینطور عرض پالس نیز کوتاه نمی‌شود.

@Hexalinx
Channel photo updated
Channel photo updated