⚡️ چگونه عملیات تقسیم را در FPGA پیادهسازی کنیم؟
🔷 در زبان VHDL عملگر '+' برای عملیات جمع، '-' برای تفریق، '*' برای ضرب و '/' برای تقسیم قابل استفاده است.
🔷 اما عملگر تقسیم نسبت به عملگرهای دیگر محدودتر است.
🔷 عملگر '/'، فقط برای پیادهسازی عملیات تقسیم یک رجیستر، بر یک عدد ثابت قابل استفاده است؛ این عدد ثابت نیز حتماً باید توانی از دو باشد.
🔷 برای مثال، شما میتوانید به کمک عملگر تقسیم، ریجستر A را بر یک عدد ثابت مانند 128یا 256 تقسیم کنید.
🔷 اما نمیتوانید به کمک این عملگر یک رجیستر را بر رجیستر دیگر تقسیم کنید.
🔷 برای تقسیم یک رجیستر بر رجیستر دیگر، دو راه دارید: یا باید مدار ویژهای طراحی و پیادهسازی کنید و یا از IP تقسیمکنندهی نرمافزار ISE استفاده کنید.
🔷 در مقالهی "پیادهسازی عملیات تقسیم در FPGA" نحوهی انجام تنظیمات و استفاده از IP تقسیمکننده را بهطور مفصل شرح دادهام:
🌎 https://bit.ly/DividerIP
🆔 @FPGA0
🔷 در زبان VHDL عملگر '+' برای عملیات جمع، '-' برای تفریق، '*' برای ضرب و '/' برای تقسیم قابل استفاده است.
🔷 اما عملگر تقسیم نسبت به عملگرهای دیگر محدودتر است.
🔷 عملگر '/'، فقط برای پیادهسازی عملیات تقسیم یک رجیستر، بر یک عدد ثابت قابل استفاده است؛ این عدد ثابت نیز حتماً باید توانی از دو باشد.
🔷 برای مثال، شما میتوانید به کمک عملگر تقسیم، ریجستر A را بر یک عدد ثابت مانند 128یا 256 تقسیم کنید.
🔷 اما نمیتوانید به کمک این عملگر یک رجیستر را بر رجیستر دیگر تقسیم کنید.
🔷 برای تقسیم یک رجیستر بر رجیستر دیگر، دو راه دارید: یا باید مدار ویژهای طراحی و پیادهسازی کنید و یا از IP تقسیمکنندهی نرمافزار ISE استفاده کنید.
🔷 در مقالهی "پیادهسازی عملیات تقسیم در FPGA" نحوهی انجام تنظیمات و استفاده از IP تقسیمکننده را بهطور مفصل شرح دادهام:
🌎 https://bit.ly/DividerIP
🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۳۱
🎓 پیادهسازی عملیات تقسیم در FPGA
🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۷ دقیقه
📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 https://bit.ly/DividerIP
#برنامه_ویدئویی۳۱
🎓 پیادهسازی عملیات تقسیم در FPGA
🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۷ دقیقه
📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 https://bit.ly/DividerIP
⚡️ قابلیت Generic در زبان VHDL برای سهولت در کدنویسی
🔷 گاهی نیاز است مقادیر و پارامترهایی را در کدی که همکار سابق شما نوشته است یا کدی که خودتان چند ماه پیش نوشتهاید تغییر دهید.
🔷 ممکن است این مقادیر در بخشهای مختلف کد پراکنده شده باشند و یا حتی در بخشهایی از کد با مقادیر دیگر ترکیب شده و قابل تشخیص نباشند.
🔷 برای اینکه به سادگی بتوانیم مقادیر و پارامترها را در کد VHDL تغییر دهیم، از قابلیت generic استفاده میکنیم.
🔷 این قابلیت امکان جدید پیادهسازی به شما نمیدهد. بلکه استفاده از generic کدنویسی شما را سادهتر میکند.
🔷 قابلیت generic مشابه قابلیت پارامتری کردن در برنامهنویسی است.
✅ کافی است در بخش entity کد، قسمتی به نام generic ایجاد کنید و پارامترهای دلخواه را در آن تعریف کنید. برای مثال، به بخش entity کد زیر توجه کنید:
entity Example_Register_Generic is
Generic
(
Reg_Width:integer:= 8);
Port
(
D : in unsigned(Reg_Width-1 downto 0);
Clock: in STD_LOGIC;
Reset: in std_logic;
Q : out unsigned(Reg_Width-1 downto 0));
end Example_Register_Generic;
✅ به این ترتیب، در کد بالا طول پورتهای D و Q را به صورت Generic تعریف کردیم و هر گاه نیاز به تغییر طول آنها بود، به راحتی میتوانیم تغییرشان دهیم.
✅ برای دیدن مثالهای بیشتر میتوانید به مقالهی "کدنویسی آسان به کمک قابلیت Generic" در سایت فراداندیش مراجعه کنید:
🌎 https://goo.gl/Z2kmXG
🆔 @FPGA0
🔷 گاهی نیاز است مقادیر و پارامترهایی را در کدی که همکار سابق شما نوشته است یا کدی که خودتان چند ماه پیش نوشتهاید تغییر دهید.
🔷 ممکن است این مقادیر در بخشهای مختلف کد پراکنده شده باشند و یا حتی در بخشهایی از کد با مقادیر دیگر ترکیب شده و قابل تشخیص نباشند.
🔷 برای اینکه به سادگی بتوانیم مقادیر و پارامترها را در کد VHDL تغییر دهیم، از قابلیت generic استفاده میکنیم.
🔷 این قابلیت امکان جدید پیادهسازی به شما نمیدهد. بلکه استفاده از generic کدنویسی شما را سادهتر میکند.
🔷 قابلیت generic مشابه قابلیت پارامتری کردن در برنامهنویسی است.
✅ کافی است در بخش entity کد، قسمتی به نام generic ایجاد کنید و پارامترهای دلخواه را در آن تعریف کنید. برای مثال، به بخش entity کد زیر توجه کنید:
entity Example_Register_Generic is
Generic
(
Reg_Width:integer:= 8);
Port
(
D : in unsigned(Reg_Width-1 downto 0);
Clock: in STD_LOGIC;
Reset: in std_logic;
Q : out unsigned(Reg_Width-1 downto 0));
end Example_Register_Generic;
✅ به این ترتیب، در کد بالا طول پورتهای D و Q را به صورت Generic تعریف کردیم و هر گاه نیاز به تغییر طول آنها بود، به راحتی میتوانیم تغییرشان دهیم.
✅ برای دیدن مثالهای بیشتر میتوانید به مقالهی "کدنویسی آسان به کمک قابلیت Generic" در سایت فراداندیش مراجعه کنید:
🌎 https://goo.gl/Z2kmXG
🆔 @FPGA0
🆔 @FPGA0
#مقاله۷
🎓 کدنویسی آسان به کمک قابلیت Generic
📚 نوشته احمد ثقفی
📥 در سایت فراد اندیش بخوانید 👇👇👇👇
🌎 https://goo.gl/Z2kmXG
#مقاله۷
🎓 کدنویسی آسان به کمک قابلیت Generic
📚 نوشته احمد ثقفی
📥 در سایت فراد اندیش بخوانید 👇👇👇👇
🌎 https://goo.gl/Z2kmXG
❓ سوال:
شما در توضیحات دوره پردازش سیگنال گفته بودید:
"موضوع مهم در ارتباط با این سیستم ۷-مرحلهای این است که برای یادگیری و استفاده از آن نیاز به دانستن هیچ فرمول یا دانشی در مورد پردازش سیگنال ندارید و بعد از یادگیری میتوانید به سرعت، انواع الگوریتمهای پیچیده پردازش سیگنال را پیادهسازی کنید."
🌎 https://goo.gl/oSHLWC
اکثر دوستانم این سوال براشون پیش اومده بود که چطور ممکنه بدون پیش نیاز درس DSP و سیگنال و بدون فرمول در ۴ جلسه، این دوره براشون مفید واقع بشه...؟
شما در توضیحات دوره پردازش سیگنال گفته بودید:
"موضوع مهم در ارتباط با این سیستم ۷-مرحلهای این است که برای یادگیری و استفاده از آن نیاز به دانستن هیچ فرمول یا دانشی در مورد پردازش سیگنال ندارید و بعد از یادگیری میتوانید به سرعت، انواع الگوریتمهای پیچیده پردازش سیگنال را پیادهسازی کنید."
🌎 https://goo.gl/oSHLWC
اکثر دوستانم این سوال براشون پیش اومده بود که چطور ممکنه بدون پیش نیاز درس DSP و سیگنال و بدون فرمول در ۴ جلسه، این دوره براشون مفید واقع بشه...؟
📝 جواب:
در این دوره، من طراحی الگوریتمهای پردازش سیگنال را آموزش نمیدهم. درس DSP و سیگنال و سیستم، درسهایی هستند که شما در آنها یاد میگیرید که چطور سیستمهای پردازش سیگنال را تحلیل و طراحی کنید.
آنچه در دوره پردازش سیگنال با FPGA آموزش داده میشود، نحوهی پیادهسازی این الگوریتمها است و برای اینکه بتوانید این الگوریتمها را با FPGA پیادهسازی کنید، نیازی به تسلط به آنها یا توانایی طراحی آنها ندارید. بلکه نیاز به آشنایی با روشها و تکنیکهایی دارید که به شما کمک کند این الگوریتمها را پیادهسازی کنید.
خوشبحتانه اولین دوره که برگزار شد، من اعتقادم به روشهایی که ارائه کردم خیلی بیشتر هم شد. در این دوره، سه تا از شرکت کنندگان، دانشجو در مقطع دکتری بودند و شرکت کنندگانی هم در مقطع لیسانس و فوق لیسانس با گرایشهای مختلف داشتیم. تمام دوستان به شدت از دوره و مهارتهایی که در آن یاد گرفته بودند راضی بودند 👇
🌎 https://goo.gl/oSHLWC
تخصص اصلی خود من هم پیادهسازی سیستمهای پردازش سیگنال دیجیتال است و نه طراحی الگوریتمهای پردازشی، گرچه با این مباحث آشنایی دارم. اما به کمک همین روشها، تا به حال توانستهام انواع سیستمهای پیچیده پردازش سیگنال را پیادهسازی کنم و البته مطمئن هستم شما هم میتوانید.
🌎 https://goo.gl/oSHLWC
🆔 @FPGA0
در این دوره، من طراحی الگوریتمهای پردازش سیگنال را آموزش نمیدهم. درس DSP و سیگنال و سیستم، درسهایی هستند که شما در آنها یاد میگیرید که چطور سیستمهای پردازش سیگنال را تحلیل و طراحی کنید.
آنچه در دوره پردازش سیگنال با FPGA آموزش داده میشود، نحوهی پیادهسازی این الگوریتمها است و برای اینکه بتوانید این الگوریتمها را با FPGA پیادهسازی کنید، نیازی به تسلط به آنها یا توانایی طراحی آنها ندارید. بلکه نیاز به آشنایی با روشها و تکنیکهایی دارید که به شما کمک کند این الگوریتمها را پیادهسازی کنید.
خوشبحتانه اولین دوره که برگزار شد، من اعتقادم به روشهایی که ارائه کردم خیلی بیشتر هم شد. در این دوره، سه تا از شرکت کنندگان، دانشجو در مقطع دکتری بودند و شرکت کنندگانی هم در مقطع لیسانس و فوق لیسانس با گرایشهای مختلف داشتیم. تمام دوستان به شدت از دوره و مهارتهایی که در آن یاد گرفته بودند راضی بودند 👇
🌎 https://goo.gl/oSHLWC
تخصص اصلی خود من هم پیادهسازی سیستمهای پردازش سیگنال دیجیتال است و نه طراحی الگوریتمهای پردازشی، گرچه با این مباحث آشنایی دارم. اما به کمک همین روشها، تا به حال توانستهام انواع سیستمهای پیچیده پردازش سیگنال را پیادهسازی کنم و البته مطمئن هستم شما هم میتوانید.
🌎 https://goo.gl/oSHLWC
🆔 @FPGA0
⚡️ اثبات صحت عملکرد مدار به مدیر یا کارفرما (قسمت اول)
🔷 یکی از روشهای تست مدار شبیهسازی است؛ اما این روش محدودیتهایی دارد.
🔷 به علاوه، کارفرما یا ارزیاب سیستم تمایل زیادی به دیدن عملکرد سیستم در حین کار واقعی (بهجای شبیهسازی) دارد.
🔷 ابزار ChipScope امکان تست در حال اجرا را برای سیستم فراهم میکند.
🔷 در این مجموعه پست دربارهی انواع شبیهسازی و همچنین دربارهی روش تست در حال اجرا صحبت خواهم کرد.
❇️ شبیهسازی مدار؛ مزایا و معایب
🔷 شبیهسازی یکی از روشهای تست مدار است که قبل از پیادهسازی مدار، میتوانید در کامپیوتر و به کمک نرمافزارهای شبیهساز، از صحت عملکرد مدار مطمئن شوید.
🔷 شبیهسازی مدارات دیجیتال به دو نوع تقسیم میشود:
1⃣ شبیهسازی نوع اول: شبیهسازی رفتاری یا behavioral simulation
🔷 شبیهسازی رفتاری قبل از مرحله سنتز انجام میشود و تاخیرهای انتشار منابع دیجیتالی سیستم در نظر گرفته نمیشود.
🔷 بنابراین، هیچ تاخیری به عنوان تاخیر انتشار قطعات یا سیمها در مدار وجود ندارد.
🔷 هدف از شبیهسازی رفتاری، اطمینان از صحت عملکرد مدار است؛ به همین دلیل، به این شبیهسازی، شبیهسازی functional یا شبیهسازی عملکرد نیز گفته میشود.
🔷 مثلاً اگر شما، یک جمعکننده طراحی کرده باشید، هدف از شبیهسازی رفتاری این است که مطمئن شوید که اگر اعداد دو و سه را به ورودی جمعکننده اعمال کنید، خروجی پنج را خواهید داشت.
2⃣ شبیهسازی نوع دوم: شبیهسازی زمانی یا timing simulation
🔷 شبیهسازی زمانی بعد از مرحله سنتز و place and route انجام میشود.
🔷 در این شبیهسازی، تاخیر انتشار حاصل از منابع دیجیتالی و سیمهایی که در مدار وجود دارند هم در نظر گرفته میشود.
🔷 بنابراین، حتما میتوانید حدس بزنید که این شبیهسازی، نسبت به شبیهسازی رفتاری به واقعیت نزدیکتر است.
✅ اما بهطور کلی شبیهسازیها (خصوصاً شبیهسازی زمانی)، فرایندی زمانبر است. گاهی شبیهسازی ۱۰ میکروثانیه از عملکرد یک مدار، بسته به میزان پیچیدگی آن میتواند تا چند دقیقه و یا حتی چند ساعت طول بکشد! بنابراین در عمل، استفاده از شبیهسازی محدودیتهایی خواهد داشت.
ادامه دارد...
🆔 @FPGA0
🔷 یکی از روشهای تست مدار شبیهسازی است؛ اما این روش محدودیتهایی دارد.
🔷 به علاوه، کارفرما یا ارزیاب سیستم تمایل زیادی به دیدن عملکرد سیستم در حین کار واقعی (بهجای شبیهسازی) دارد.
🔷 ابزار ChipScope امکان تست در حال اجرا را برای سیستم فراهم میکند.
🔷 در این مجموعه پست دربارهی انواع شبیهسازی و همچنین دربارهی روش تست در حال اجرا صحبت خواهم کرد.
❇️ شبیهسازی مدار؛ مزایا و معایب
🔷 شبیهسازی یکی از روشهای تست مدار است که قبل از پیادهسازی مدار، میتوانید در کامپیوتر و به کمک نرمافزارهای شبیهساز، از صحت عملکرد مدار مطمئن شوید.
🔷 شبیهسازی مدارات دیجیتال به دو نوع تقسیم میشود:
1⃣ شبیهسازی نوع اول: شبیهسازی رفتاری یا behavioral simulation
🔷 شبیهسازی رفتاری قبل از مرحله سنتز انجام میشود و تاخیرهای انتشار منابع دیجیتالی سیستم در نظر گرفته نمیشود.
🔷 بنابراین، هیچ تاخیری به عنوان تاخیر انتشار قطعات یا سیمها در مدار وجود ندارد.
🔷 هدف از شبیهسازی رفتاری، اطمینان از صحت عملکرد مدار است؛ به همین دلیل، به این شبیهسازی، شبیهسازی functional یا شبیهسازی عملکرد نیز گفته میشود.
🔷 مثلاً اگر شما، یک جمعکننده طراحی کرده باشید، هدف از شبیهسازی رفتاری این است که مطمئن شوید که اگر اعداد دو و سه را به ورودی جمعکننده اعمال کنید، خروجی پنج را خواهید داشت.
2⃣ شبیهسازی نوع دوم: شبیهسازی زمانی یا timing simulation
🔷 شبیهسازی زمانی بعد از مرحله سنتز و place and route انجام میشود.
🔷 در این شبیهسازی، تاخیر انتشار حاصل از منابع دیجیتالی و سیمهایی که در مدار وجود دارند هم در نظر گرفته میشود.
🔷 بنابراین، حتما میتوانید حدس بزنید که این شبیهسازی، نسبت به شبیهسازی رفتاری به واقعیت نزدیکتر است.
✅ اما بهطور کلی شبیهسازیها (خصوصاً شبیهسازی زمانی)، فرایندی زمانبر است. گاهی شبیهسازی ۱۰ میکروثانیه از عملکرد یک مدار، بسته به میزان پیچیدگی آن میتواند تا چند دقیقه و یا حتی چند ساعت طول بکشد! بنابراین در عمل، استفاده از شبیهسازی محدودیتهایی خواهد داشت.
ادامه دارد...
🆔 @FPGA0
⚡️ اثبات صحت عملکرد مدار به مدیر یا کارفرما (قسمت دوم)
🔷 در قسمت قبل انواع روشهای شبیهسازی را دیدید. در این قسمت دربارهی تست در حین اجرا صحبت خواهم کرد.
❇️ تحویل سیستم پیادهسازی شده به کارفرما
🔷 همانطور که گفته شد، ارزیاب سیستم، یعنی کسی که باید صحت عملکرد سیستم را به او اثبات کنید، تمایل زیادی به دیدن عملکرد سیستم در حین کار واقعی (بهجای شبیهسازی) دارد.
🔷 از طرف دیگر، ارزیاب سیستم دوست دارد که یک سناریو کامل و جامع تست (که شامل تمام حالات ورودی باشد) را ببیند؛ نه اینکه شما فقط چند نمونهی محدود را به عنوان مثال به او نشان دهید.
🔷 از طرفی، شبیهسازی یک سناریوی جامع که شامل تمام حالات ورودی باشد، بسیار زمانبر است.
🔷 این مسئله باعث شده که ما به سراغ استفاده از روش دیگری برویم که به آن، روش تست در حال اجرا یا run time test میگویند.
❇️ روش تست در حال اجرا
🔷 در روش تست در حال اجرا، به جای اینکه مدار را شبیهسازی کنید، آن را روی FPGA پیادهسازی میکنید و در حالی که مدار بر روی FPGA در حال کار است، آن را تست میکنید.
🔷 برای انجام این کار، نیاز دارید که در کنار مدار اصلیتان، سختافزارهای دیگری، در درون FPGA پیادهسازی کنید.
🔷 همچنین، برای برقراری ارتباط کامپیوتر و FPGA و دریافت نتایج تست در کامپیوتر، نیاز به برنامهنویسی در کامپیوتر دارید.
🔷 در مجموعهی نرمافزاری ISE، ابزاری وجود دارد که تمام این نیازمندیها را برای شما برآورده میکند؛ نام این ابزار، ChipScope است.
✅ در مقالهی "تست مدار با ChipScope" نحوهی انجام تنظیمات و استفاده از ChipScope را بهطور مفصل شرح دادهام:
🌎 https://bit.ly/ChipScope
🆔 @FPGA0
🔷 در قسمت قبل انواع روشهای شبیهسازی را دیدید. در این قسمت دربارهی تست در حین اجرا صحبت خواهم کرد.
❇️ تحویل سیستم پیادهسازی شده به کارفرما
🔷 همانطور که گفته شد، ارزیاب سیستم، یعنی کسی که باید صحت عملکرد سیستم را به او اثبات کنید، تمایل زیادی به دیدن عملکرد سیستم در حین کار واقعی (بهجای شبیهسازی) دارد.
🔷 از طرف دیگر، ارزیاب سیستم دوست دارد که یک سناریو کامل و جامع تست (که شامل تمام حالات ورودی باشد) را ببیند؛ نه اینکه شما فقط چند نمونهی محدود را به عنوان مثال به او نشان دهید.
🔷 از طرفی، شبیهسازی یک سناریوی جامع که شامل تمام حالات ورودی باشد، بسیار زمانبر است.
🔷 این مسئله باعث شده که ما به سراغ استفاده از روش دیگری برویم که به آن، روش تست در حال اجرا یا run time test میگویند.
❇️ روش تست در حال اجرا
🔷 در روش تست در حال اجرا، به جای اینکه مدار را شبیهسازی کنید، آن را روی FPGA پیادهسازی میکنید و در حالی که مدار بر روی FPGA در حال کار است، آن را تست میکنید.
🔷 برای انجام این کار، نیاز دارید که در کنار مدار اصلیتان، سختافزارهای دیگری، در درون FPGA پیادهسازی کنید.
🔷 همچنین، برای برقراری ارتباط کامپیوتر و FPGA و دریافت نتایج تست در کامپیوتر، نیاز به برنامهنویسی در کامپیوتر دارید.
🔷 در مجموعهی نرمافزاری ISE، ابزاری وجود دارد که تمام این نیازمندیها را برای شما برآورده میکند؛ نام این ابزار، ChipScope است.
✅ در مقالهی "تست مدار با ChipScope" نحوهی انجام تنظیمات و استفاده از ChipScope را بهطور مفصل شرح دادهام:
🌎 https://bit.ly/ChipScope
🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۲۶
🎓 تست مدار با ChipScope
🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۶ دقیقه
📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 https://bit.ly/ChipScope
#برنامه_ویدئویی۲۶
🎓 تست مدار با ChipScope
🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۶ دقیقه
📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 https://bit.ly/ChipScope
⚡️ پیاده سازی محاسبات ماتریسی در FPGA
🔷 محاسبات ماتریسی در سیستمهای دیجیتال کاربردهای فراوانی دارند.
🔷 برای مثال، در سیستمهای مخابراتی MIMO و در سیستمهای مخابراتی که از روش OFDM برای ارسال اطلاعات استفاده میکنند، به انجام محاسبات ماتریسی نیاز است.
🔷 از آنجا که تصاویر دیجیتال بهصورت ماتریس ذخیره میشوند، در سیستمهای پردازش تصویر نیز به محاسبات ماتریسی نیاز داریم.
❇️ دو نیازمندی اساسی در مبحث محاسبات ماتریسی
در زمینهی پیادهسازی ماتریسها دو نیازمندی ویژه داریم:
1⃣ ذخیرهسازی ماتریسها
2⃣ انجام محاسبات مختلف روی ماتریسها
🔷 اما با توجه به یک بعدی بودن حافظهها چگونه باید ماتریسهای چند بعدی را در آنها ذخیره کنیم؟
🔷 برای این کار، ستونها یا سطرهای ماتریس را (با توجه به نوع محاسباتمان) بهصورت پشت سر هم در حافظه ذخیره میکنیم.
🔷 مثلاً، برای ذخیرهسازی یک ماتریس سه در سه، در خانهی اول تا سوم حافظه، سطر اول ماتریس را قرار میدهیم. سپس در خانهی چهارم تا ششم، سطر دوم و در خانهی هفتم تا نهم، سطر سوم ماتریس را قرار میدهیم.
🔷 پس از ذخیرهسازی ماتریس میتوانیم به سراغ انجام محاسبات برویم.
✅ در مقالهی "پیادهسازی محاسبات ماتریسی در FPGA"، به کمک یک مثال، نحوهی ذخیرهی یک تصویر در حافظه و انجام محاسبات روی آن را توضیح دادهام:
🌎 https://bit.ly/MatrixFPGA
🆔 @FPGA0
🔷 محاسبات ماتریسی در سیستمهای دیجیتال کاربردهای فراوانی دارند.
🔷 برای مثال، در سیستمهای مخابراتی MIMO و در سیستمهای مخابراتی که از روش OFDM برای ارسال اطلاعات استفاده میکنند، به انجام محاسبات ماتریسی نیاز است.
🔷 از آنجا که تصاویر دیجیتال بهصورت ماتریس ذخیره میشوند، در سیستمهای پردازش تصویر نیز به محاسبات ماتریسی نیاز داریم.
❇️ دو نیازمندی اساسی در مبحث محاسبات ماتریسی
در زمینهی پیادهسازی ماتریسها دو نیازمندی ویژه داریم:
1⃣ ذخیرهسازی ماتریسها
2⃣ انجام محاسبات مختلف روی ماتریسها
🔷 اما با توجه به یک بعدی بودن حافظهها چگونه باید ماتریسهای چند بعدی را در آنها ذخیره کنیم؟
🔷 برای این کار، ستونها یا سطرهای ماتریس را (با توجه به نوع محاسباتمان) بهصورت پشت سر هم در حافظه ذخیره میکنیم.
🔷 مثلاً، برای ذخیرهسازی یک ماتریس سه در سه، در خانهی اول تا سوم حافظه، سطر اول ماتریس را قرار میدهیم. سپس در خانهی چهارم تا ششم، سطر دوم و در خانهی هفتم تا نهم، سطر سوم ماتریس را قرار میدهیم.
🔷 پس از ذخیرهسازی ماتریس میتوانیم به سراغ انجام محاسبات برویم.
✅ در مقالهی "پیادهسازی محاسبات ماتریسی در FPGA"، به کمک یک مثال، نحوهی ذخیرهی یک تصویر در حافظه و انجام محاسبات روی آن را توضیح دادهام:
🌎 https://bit.ly/MatrixFPGA
🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۲۵
🎓 پیادهسازی محاسبات ماتریسی در FPGA
🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۲ دقیقه
📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 https://bit.ly/MatrixFPGA
#برنامه_ویدئویی۲۵
🎓 پیادهسازی محاسبات ماتریسی در FPGA
🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۲ دقیقه
📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 https://bit.ly/MatrixFPGA
⚡️ موقعیت شغلی جدید...
🔹 یک شرکت معتبر و با سابقه در حوزه ساخت سیستمهای مخابراتی و پردازش سیگنال مبتنی بر FPGA در تهران، به دنبال نیرویهای متبحر و با انگیزه برای انجام پروژه های جدید خود است.
❇️ موارد زير برای این موقعیت شغلی مهم هستند:
1️⃣ تجربه کار با نرم افزارهای Vivado و ISE
2️⃣ بک گراند پردازشی (مباحث fixed-point را در بلوک های پردازش سيگنال تجربه کرده باشند)
3️⃣ آشنا با سيستم جنراتور (تسلط کامل نياز نيست)
4️⃣ تجربه کار با مدارات فرکانس بالا و مدارات پلی فيز مزیت محسوب می شود
5️⃣ مسئوليت پذير و منظم
7️⃣ آشنا با مستندسازی فنی
❇️ اگر فکر میکنید مهارت و خصوصیات فردی شما با موارد بالا تطبیق دارد، لطفا رزومهتان را به ایمیل زیر ارسال کنید:
📭 edu@faradandish.com
☎️ رزومه شما به شرکت مورد نظر ارسال خواهد شد و آنها پس از بررسی، در صورت نیاز با شما تماس خواهند گرفت.
🆔 @FPGA0
🔹 یک شرکت معتبر و با سابقه در حوزه ساخت سیستمهای مخابراتی و پردازش سیگنال مبتنی بر FPGA در تهران، به دنبال نیرویهای متبحر و با انگیزه برای انجام پروژه های جدید خود است.
❇️ موارد زير برای این موقعیت شغلی مهم هستند:
1️⃣ تجربه کار با نرم افزارهای Vivado و ISE
2️⃣ بک گراند پردازشی (مباحث fixed-point را در بلوک های پردازش سيگنال تجربه کرده باشند)
3️⃣ آشنا با سيستم جنراتور (تسلط کامل نياز نيست)
4️⃣ تجربه کار با مدارات فرکانس بالا و مدارات پلی فيز مزیت محسوب می شود
5️⃣ مسئوليت پذير و منظم
7️⃣ آشنا با مستندسازی فنی
❇️ اگر فکر میکنید مهارت و خصوصیات فردی شما با موارد بالا تطبیق دارد، لطفا رزومهتان را به ایمیل زیر ارسال کنید:
📭 edu@faradandish.com
☎️ رزومه شما به شرکت مورد نظر ارسال خواهد شد و آنها پس از بررسی، در صورت نیاز با شما تماس خواهند گرفت.
🆔 @FPGA0
📝 جواب:
یکی از بهترین افرادی که در زمینه FPGA میشناسم، گرایش تحصیلیش الکترونیک آنالوگ بود.
به نظرم ارتباط زیادی بین این رشتهها و انتخاب FPGA به عنوان زمینه شغلی وجود ندارد. بخشی از اطلاعاتی که در رشته الکترونیک به دست میآورید و بخشی از اطلاعاتی که در رشته مخابرات سیستم به دست میآورید در این کار برای شما مفید خواهند بود.
در مجموع به نظر من، مهمترین بخش داستان، مطالعه، یادگیری و تجربه خودتان هست که در هیچکدام از این دو گرایش به شما آموزش داده نمیشود.
من شخصاً خیلی حساسیتی در این زمینه احساس نمیکنم. به نظرم گرایشی را انتخاب کنید که الان به آن بیشتر علاقه دارید و فکر میکنید در آن موفقتر خواهید بود.
اگر به طور جدی علاقه دارید در حوزه طراحی دیجیتال با FPGA به صورت حرفهای کار کنید، مهم نیست در کدامیک از این گرایشها تحصیل میکنید. آنچه مهم است، مطالعه و یادگیری، انجام تمرین و کسب تجربه توسط خودتان است و همانطور که گفتم، اینها مواردی است که در هیچ کدام از این گرایشها به شما یاد نمیدهند.
با استفاده از منابع آموزشی خوب و راهنمایی افرادی که در این زمینه دارای تجربه حرفهای هستند، حتماً موفق خواهید شد.
🆔 @FPGA0
یکی از بهترین افرادی که در زمینه FPGA میشناسم، گرایش تحصیلیش الکترونیک آنالوگ بود.
به نظرم ارتباط زیادی بین این رشتهها و انتخاب FPGA به عنوان زمینه شغلی وجود ندارد. بخشی از اطلاعاتی که در رشته الکترونیک به دست میآورید و بخشی از اطلاعاتی که در رشته مخابرات سیستم به دست میآورید در این کار برای شما مفید خواهند بود.
در مجموع به نظر من، مهمترین بخش داستان، مطالعه، یادگیری و تجربه خودتان هست که در هیچکدام از این دو گرایش به شما آموزش داده نمیشود.
من شخصاً خیلی حساسیتی در این زمینه احساس نمیکنم. به نظرم گرایشی را انتخاب کنید که الان به آن بیشتر علاقه دارید و فکر میکنید در آن موفقتر خواهید بود.
اگر به طور جدی علاقه دارید در حوزه طراحی دیجیتال با FPGA به صورت حرفهای کار کنید، مهم نیست در کدامیک از این گرایشها تحصیل میکنید. آنچه مهم است، مطالعه و یادگیری، انجام تمرین و کسب تجربه توسط خودتان است و همانطور که گفتم، اینها مواردی است که در هیچ کدام از این گرایشها به شما یاد نمیدهند.
با استفاده از منابع آموزشی خوب و راهنمایی افرادی که در این زمینه دارای تجربه حرفهای هستند، حتماً موفق خواهید شد.
🆔 @FPGA0
⚡️ نحوهی عملکرد تابع resize در سناریوهای مختلف (قسمت اول)
🔷 گاهی برای رعایت قوانین ارجاع در زبان VHDL نیاز است که عرض بیت سیگنالها را تغییر دهیم.
🔷 برای مثال، در ارجاع ساده، باید سیگنالهای دو طرف ارجاع، عرض بیت یکسانی داشته باشند.
✅ برای این کار، میتوانیم از تابع resize استفاده کنیم.
🔷 مثلاً در ارجاع سادهی سیگنال چهاربیتی B به سیگنال هفت بیتی A، بهصورت زیر عمل میکنیم:
A <= resize (B, 7);
🔷 به این ترتیب، تعداد بیتهای سیگنال B به هفت بیت افزایش مییابد و قابل ارجاع به سیگنال A است.
✅ تابع resize، بسیار مفید و پرکاربرد است و با فراخوانی پکیج numeric_std میتوانید از آن استفاده کنید.
❓ اما این تابع به چه ترتیب عمل میکند؟
🔷 برای استفاده از تابع resize حالات مختلفی وجود دارد.
🔷 بهکمک این تابع هم میتوان تعداد بیتها را افزایش و هم میتوان کاهش داد.
🔷 از طرفی، سیگنالی که وارد تابع resize میشود میتواند علامتدار یا بدون علامت باشد.
✅ بنابراین، با توجه به علامتدار یا بدون علامت بودن عدد و عملیات کاهش یا افزایش بیت، چهار حالت مختلف برای استفاده از تابع resize وجود دارد.
✅ بنابراین، با توجه به علامتدار یا بدون علامت بودن عدد و عملیات کاهش یا افزایش بیت، چهار حالت مختلف برای استفاده از تابع resize وجود دارد.
❇️ من در پست دیگری، تابع resize و حالات مختلف آن را توضیح خواهم داد؛ اما قبل از آن بد نیست خودتان را به کمک یک کوئیز ساده تست کنید و ببینید چقدر با این تابع آشنا هستید.
ادامه دارد...
🆔 @FPGA0
🔷 گاهی برای رعایت قوانین ارجاع در زبان VHDL نیاز است که عرض بیت سیگنالها را تغییر دهیم.
🔷 برای مثال، در ارجاع ساده، باید سیگنالهای دو طرف ارجاع، عرض بیت یکسانی داشته باشند.
✅ برای این کار، میتوانیم از تابع resize استفاده کنیم.
🔷 مثلاً در ارجاع سادهی سیگنال چهاربیتی B به سیگنال هفت بیتی A، بهصورت زیر عمل میکنیم:
A <= resize (B, 7);
🔷 به این ترتیب، تعداد بیتهای سیگنال B به هفت بیت افزایش مییابد و قابل ارجاع به سیگنال A است.
✅ تابع resize، بسیار مفید و پرکاربرد است و با فراخوانی پکیج numeric_std میتوانید از آن استفاده کنید.
❓ اما این تابع به چه ترتیب عمل میکند؟
🔷 برای استفاده از تابع resize حالات مختلفی وجود دارد.
🔷 بهکمک این تابع هم میتوان تعداد بیتها را افزایش و هم میتوان کاهش داد.
🔷 از طرفی، سیگنالی که وارد تابع resize میشود میتواند علامتدار یا بدون علامت باشد.
✅ بنابراین، با توجه به علامتدار یا بدون علامت بودن عدد و عملیات کاهش یا افزایش بیت، چهار حالت مختلف برای استفاده از تابع resize وجود دارد.
✅ بنابراین، با توجه به علامتدار یا بدون علامت بودن عدد و عملیات کاهش یا افزایش بیت، چهار حالت مختلف برای استفاده از تابع resize وجود دارد.
❇️ من در پست دیگری، تابع resize و حالات مختلف آن را توضیح خواهم داد؛ اما قبل از آن بد نیست خودتان را به کمک یک کوئیز ساده تست کنید و ببینید چقدر با این تابع آشنا هستید.
ادامه دارد...
🆔 @FPGA0
همانطور که در پست قبل دیدید، گاهی برای رعایت قوانین ارجاع در زبان VHDL، نیاز به تغییر عرض بیت رجیسترها داریم که برای این کار، از تابع resize استفاده میکنیم.
به نظر شما، تابع resize به چه صورت عمل میکند؟
به نظر شما، تابع resize به چه صورت عمل میکند؟
Anonymous Quiz
31%
این تابع صرفاً عرض بیت رجیستر را تغییر میدهد و مقدار آن را تغییر نمیدهد.
37%
اگر از تابع resize برای کاهش عرض بیت یک رجیستر استفاده کنیم، ممکن است مقدار آن تغییر کند.
33%
اگر از تابع resize برای تغییر عرض بیت یک عدد علامتدار استفاده کنیم، مقدار آن تغییر میکند.
⚡️ نحوهی عملکرد تابع resize در سناریوهای مختلف (قسمت دوم)
🔷 در پست قبل گفتم که برای رعایت قوانین ارجاع در زبان VHDL گاهی نیاز است که عرض بیت سیگنالها را تغییر دهیم که برای این کار از تابع resize استفاده میکنیم.
🔷 مسئلهی مهمی که وجود دارد این است که بسیاری از افراد حتی پس از سالها کار با زبان VHDL، اشراف دقیقی نسبت به اینکه تابع resize در حالتهای مختلف چگونه عمل میکند، ندارند.
🔷 در این پست، به همین مسئله، یعنی نحوهی عملکرد تابع resize در حالتهای مختلف میپردازم.
❇️ حالت اول: افزایش تعداد بیتهای یک سیگنال بدون علامت
🔷 فرض کنید میخواهیم سیگنال پنجبیتی با مقدار 10100 را به یک سیگنال هفتبیتی تبدیل کنیم؛ در این حالت، تابع resize بهصورت زیر عمل میکند:
10100
0010100
🔷 در واقع، این تابع تعداد دو صفر به سمت چپ عدد اضافه میکند. بنابراین، مقدار عدد تغییری نمیکند.
❇️ حالت دوم: کاهش تعداد بیتهای یک عدد بدون علامت
🔷 اکنون فرض کنید که میخواهیم سیگنال هفتبیتیبا مقدار 1001110 را به یک سیگنال پنجبیتی تبدیل کنیم؛ در این حالت، تابع resize بهصورت زیر عمل میکند:
1001110
01110
🔷 در این حالت، این تابع دو بیت از سمت چپ عدد حذف میکند!
🔷 همانطور که ملاحظه میکنید با این کار، مقدار عدد ممکن است تغییر کند و در محاسبات شما خطا ایجاد کند.
✅ بنابراین، باید به مسئلهی تغییر مقدار عدد توجه داشته باشید و اگر در کاربردی خاص، به کاهش بیت نیاز داشتید و این عملکرد مشکلی برای مدار شما ایجاد نمیکرد، میتوانید از تابع resize استفاده کنید.
❇️ حالت سوم: افزایش تعداد بیتهای یک عدد علامتدار
🔷 در این حالت، sign extension انجام میشود؛ یعنی تابع resize، علامت عدد را تکرار میکند. به این ترتیب، مقدار عدد تغییری نمیکند. مثلاً:
10100
1110100
❇️ حالت چهارم: کاهش تعداد بیتهای یک عدد علامتدار
در این حالت، تابع resize، از سمت چپ عدد، بیت علامت را کنار میگذارد و از بیتهای بعدی شروع به حذف میکند. مثلاً:
1001110
11110
در واقع، بیت علامت ثابت مانده است و از سمت چپ، دومین و سومین بیت حذف شدهاند.
✅ بنابراین، بسیار مهم است که عملکرد دقیق تابع resize در حالتهای مختلف را در ذهن داشته باشید تا در صورت نیاز، به نحو مناسبی از آن استفاده کنید.
🆔 @FPGA0
🔷 در پست قبل گفتم که برای رعایت قوانین ارجاع در زبان VHDL گاهی نیاز است که عرض بیت سیگنالها را تغییر دهیم که برای این کار از تابع resize استفاده میکنیم.
🔷 مسئلهی مهمی که وجود دارد این است که بسیاری از افراد حتی پس از سالها کار با زبان VHDL، اشراف دقیقی نسبت به اینکه تابع resize در حالتهای مختلف چگونه عمل میکند، ندارند.
🔷 در این پست، به همین مسئله، یعنی نحوهی عملکرد تابع resize در حالتهای مختلف میپردازم.
❇️ حالت اول: افزایش تعداد بیتهای یک سیگنال بدون علامت
🔷 فرض کنید میخواهیم سیگنال پنجبیتی با مقدار 10100 را به یک سیگنال هفتبیتی تبدیل کنیم؛ در این حالت، تابع resize بهصورت زیر عمل میکند:
10100
0010100
🔷 در واقع، این تابع تعداد دو صفر به سمت چپ عدد اضافه میکند. بنابراین، مقدار عدد تغییری نمیکند.
❇️ حالت دوم: کاهش تعداد بیتهای یک عدد بدون علامت
🔷 اکنون فرض کنید که میخواهیم سیگنال هفتبیتیبا مقدار 1001110 را به یک سیگنال پنجبیتی تبدیل کنیم؛ در این حالت، تابع resize بهصورت زیر عمل میکند:
1001110
01110
🔷 در این حالت، این تابع دو بیت از سمت چپ عدد حذف میکند!
🔷 همانطور که ملاحظه میکنید با این کار، مقدار عدد ممکن است تغییر کند و در محاسبات شما خطا ایجاد کند.
✅ بنابراین، باید به مسئلهی تغییر مقدار عدد توجه داشته باشید و اگر در کاربردی خاص، به کاهش بیت نیاز داشتید و این عملکرد مشکلی برای مدار شما ایجاد نمیکرد، میتوانید از تابع resize استفاده کنید.
❇️ حالت سوم: افزایش تعداد بیتهای یک عدد علامتدار
🔷 در این حالت، sign extension انجام میشود؛ یعنی تابع resize، علامت عدد را تکرار میکند. به این ترتیب، مقدار عدد تغییری نمیکند. مثلاً:
10100
1110100
❇️ حالت چهارم: کاهش تعداد بیتهای یک عدد علامتدار
در این حالت، تابع resize، از سمت چپ عدد، بیت علامت را کنار میگذارد و از بیتهای بعدی شروع به حذف میکند. مثلاً:
1001110
11110
در واقع، بیت علامت ثابت مانده است و از سمت چپ، دومین و سومین بیت حذف شدهاند.
✅ بنابراین، بسیار مهم است که عملکرد دقیق تابع resize در حالتهای مختلف را در ذهن داشته باشید تا در صورت نیاز، به نحو مناسبی از آن استفاده کنید.
🆔 @FPGA0
برای پیادهسازی کدامیک از مدارهای زیر در FPGA به استفاده از IP نیاز داریم؟
Anonymous Quiz
18%
ضرب دو رجیستر
73%
تقسیم دو رجیستر
6%
جمع دو رجیستر
4%
تفریق دو رجیستر
🔹 آیا میدانید در بعضی از کاربردهای خاص و حیاتی، تمهیداتی در سیستمهای دیجیتال در نظر گرفته میشود تا در صورت بروز خطا، سیستم بتواند به کار خود ادامه دهد؟
🔹 در این کتاب، مفهوم soft error در FPGAها معرفی میشود و توضیح داده میشود که چطور میتوان از آن در کاربردهای بسیار حساس مثل هوافضا استفاده کرد.
🔹 اثر سیگنالهای رادیویی شدید بر FPGAها میتواند منجر به بروز انواع خاصی از خطا در عملکرد FPGA شود. در این کتاب، با انواع تکنیکها برای مقابله با چنین خطاهایی آشنا میشوید.
🔹 در این کتاب، مفهوم soft error در FPGAها معرفی میشود و توضیح داده میشود که چطور میتوان از آن در کاربردهای بسیار حساس مثل هوافضا استفاده کرد.
🔹 اثر سیگنالهای رادیویی شدید بر FPGAها میتواند منجر به بروز انواع خاصی از خطا در عملکرد FPGA شود. در این کتاب، با انواع تکنیکها برای مقابله با چنین خطاهایی آشنا میشوید.
🆔 @FPGA0
📚 عنوان: FPGAs and Parallel Architectures for Aerospace Applications
👤 ویرایش کنندگان: F. Kastensmidt, P. Rech
📅 سال انتشار: 2016
🖨 ناشر: Springer
📥 لینک دانلود: https://goo.gl/GHKjcM
📚 عنوان: FPGAs and Parallel Architectures for Aerospace Applications
👤 ویرایش کنندگان: F. Kastensmidt, P. Rech
📅 سال انتشار: 2016
🖨 ناشر: Springer
📥 لینک دانلود: https://goo.gl/GHKjcM