⚡️ قوانین ارجاع در زبان VHDL (قسمت دوم)
🔷 در قسمت قبل، با قانون ارجاع ساده و ارجاع جمع در زبان VHDL آشنا شدیم. در این قسمت، با دو قانون ارجاع دیگر آشنا خواهیم شد.
3⃣ قانون ارجاع ضرب
🔷 عملگر ضرب در زبان VHDL تعریف شده است و ما میتوانیم به راحتی از آن استفاده کنیم.
🔷 وقتی بین دو سیگنال، علامت ستاره (*) را قرار میدهید، این عملگر برای نرمافزار پیادهساز شناخته شده است و عملیات ضرب را پیادهسازی میکند.
🔷 طبق قانون ارجاع ضرب در زبان VHDL باید عرض بیت سیگنال سمت چپ با مجموع عرض بیتهای سیگنالهای سمت راست برابر باشد.
🔷 برای مثال، در کد زیر باید عرض بیت سیگنال A، با مجموع عرض بیتهای سیگنالهای B و C برابر باشد.
A <= B * C;
4⃣ قانون ارجاع Concatenation
🔷 همانطور که احتمالاً میتوانید حدس بزنید، قانون ارجاع concatenation کاملاً مشابه قانون ارجاع ضرب است.
🔷 به عبارت دیگر، مجموع عرض بیت سیگنالهایی که با هم concat میکنید، باید برابر با عرض بیت سیگنال سمت چپ باشد.
✅ یادآوری: به طور کلی، در هر نوع ارجاعی، باید نوع یا تایپ تمامی سیگنالهای حاضر در ارجاع یکسان باشد.
✅ برای مثال، همهی سیگنالهای موجود در یک ارجاع باید از نوع بدون علامت، علامتدار و یا STD_Logic_Vector باشند.
🆔 @FPGA0
🔷 در قسمت قبل، با قانون ارجاع ساده و ارجاع جمع در زبان VHDL آشنا شدیم. در این قسمت، با دو قانون ارجاع دیگر آشنا خواهیم شد.
3⃣ قانون ارجاع ضرب
🔷 عملگر ضرب در زبان VHDL تعریف شده است و ما میتوانیم به راحتی از آن استفاده کنیم.
🔷 وقتی بین دو سیگنال، علامت ستاره (*) را قرار میدهید، این عملگر برای نرمافزار پیادهساز شناخته شده است و عملیات ضرب را پیادهسازی میکند.
🔷 طبق قانون ارجاع ضرب در زبان VHDL باید عرض بیت سیگنال سمت چپ با مجموع عرض بیتهای سیگنالهای سمت راست برابر باشد.
🔷 برای مثال، در کد زیر باید عرض بیت سیگنال A، با مجموع عرض بیتهای سیگنالهای B و C برابر باشد.
A <= B * C;
4⃣ قانون ارجاع Concatenation
🔷 همانطور که احتمالاً میتوانید حدس بزنید، قانون ارجاع concatenation کاملاً مشابه قانون ارجاع ضرب است.
🔷 به عبارت دیگر، مجموع عرض بیت سیگنالهایی که با هم concat میکنید، باید برابر با عرض بیت سیگنال سمت چپ باشد.
✅ یادآوری: به طور کلی، در هر نوع ارجاعی، باید نوع یا تایپ تمامی سیگنالهای حاضر در ارجاع یکسان باشد.
✅ برای مثال، همهی سیگنالهای موجود در یک ارجاع باید از نوع بدون علامت، علامتدار و یا STD_Logic_Vector باشند.
🆔 @FPGA0
❓ سوال:
ايا برای يادگيري و تسلط بالاي هفتاد درصد به fpga نياز به يادگيري arm, avr, dsp هست؟ اگه هست تا چه حد؟
اين سوال من و خيلي از هم کلاسيانم هست،ممنون.
🆔 @FPGA0
ايا برای يادگيري و تسلط بالاي هفتاد درصد به fpga نياز به يادگيري arm, avr, dsp هست؟ اگه هست تا چه حد؟
اين سوال من و خيلي از هم کلاسيانم هست،ممنون.
🆔 @FPGA0
📝 جواب:
برای یادگیری و تسلط بر FPGA نیاز به یادگیری هیچکدام از پردازندههایی که ذکر کردید نیست. تنها پیش نیاز لازم، آشنایی عمومی با مدارات منطقی هست.
برای افزایش تسلط به FPGA نیاز به تمرین و پیادهسازی مدارات پیچیدهتر دارید. مطالعه کدهای خوب و معتبر نوشته شده توسط افراد با تجربه نیز میتواند در این زمینه به شما کمک کند.
🆔 @FPGA0
برای یادگیری و تسلط بر FPGA نیاز به یادگیری هیچکدام از پردازندههایی که ذکر کردید نیست. تنها پیش نیاز لازم، آشنایی عمومی با مدارات منطقی هست.
برای افزایش تسلط به FPGA نیاز به تمرین و پیادهسازی مدارات پیچیدهتر دارید. مطالعه کدهای خوب و معتبر نوشته شده توسط افراد با تجربه نیز میتواند در این زمینه به شما کمک کند.
🆔 @FPGA0
❓ سوال:
من میخواستم FPGA را با زبان وریلاگ یاد بگیرم درحد پردازش تصاویر. به نظر شما اولا راهش چیه؟ بعد شما توی کانال فقط زبان VHDL رو کار میکنید؟ آیا در ادامه وریلاگ هم کار میکنید؟ اگر امکان داره نرم افزارها رو هم توی کانال آپلود کنید.
🆔 @FPGA0
من میخواستم FPGA را با زبان وریلاگ یاد بگیرم درحد پردازش تصاویر. به نظر شما اولا راهش چیه؟ بعد شما توی کانال فقط زبان VHDL رو کار میکنید؟ آیا در ادامه وریلاگ هم کار میکنید؟ اگر امکان داره نرم افزارها رو هم توی کانال آپلود کنید.
🆔 @FPGA0
📝 جواب:
برای پیادهسازی الگوریتمهای پردازش تصویر، ابتدا باید یک زبان توصیف سختافزاری را به خوبی یاد بگیرید و به آن مسلط شوید. هر کدام از زبانهای VHDL و Verilog برای این کار مناسب هستند و هیچ تفاوتی از لحاظ قدرت پیادهسازی ندارند.
برای آشنایی با زبان VHDL میتوانید برنامههای ویدئویی زیر را ببینید:
🌎 http://goo.gl/ex5MTg
🌎 http://goo.gl/2ejGNO
بعد از آن باید به FPGA، ساختار آن و منابع دیجیتالی موجود در آن و نحوهی مناسب بکارگیری آنها مسلط شوید. برای آشنایی با ساختار و ماهیت FPGAها میتوانید برنامههای ویدئویی زیر را ببینید:
🌎 http://bit.ly/What-is-FPGA-1
🌎 http://bit.ly/What-is-FPGA-2
و نهایتاً باید با الگوریتمهای مورد نظرتان و به طور کلی نحوهی پیادهسازی الگوریتمهای پردازش سیگنال در FPGAها آشنا شوید.
ما در دورههای تخصصی آموزشگاه فراد اندیش، زبان VHDL را آموزش میدهیم.
لینک نرمافزار ISE را قبلاً برای دانلود در پست زیر قرار دادم:
🌎 http://goo.gl/czypdO
🆔 @FPGA0
برای پیادهسازی الگوریتمهای پردازش تصویر، ابتدا باید یک زبان توصیف سختافزاری را به خوبی یاد بگیرید و به آن مسلط شوید. هر کدام از زبانهای VHDL و Verilog برای این کار مناسب هستند و هیچ تفاوتی از لحاظ قدرت پیادهسازی ندارند.
برای آشنایی با زبان VHDL میتوانید برنامههای ویدئویی زیر را ببینید:
🌎 http://goo.gl/ex5MTg
🌎 http://goo.gl/2ejGNO
بعد از آن باید به FPGA، ساختار آن و منابع دیجیتالی موجود در آن و نحوهی مناسب بکارگیری آنها مسلط شوید. برای آشنایی با ساختار و ماهیت FPGAها میتوانید برنامههای ویدئویی زیر را ببینید:
🌎 http://bit.ly/What-is-FPGA-1
🌎 http://bit.ly/What-is-FPGA-2
و نهایتاً باید با الگوریتمهای مورد نظرتان و به طور کلی نحوهی پیادهسازی الگوریتمهای پردازش سیگنال در FPGAها آشنا شوید.
ما در دورههای تخصصی آموزشگاه فراد اندیش، زبان VHDL را آموزش میدهیم.
لینک نرمافزار ISE را قبلاً برای دانلود در پست زیر قرار دادم:
🌎 http://goo.gl/czypdO
🆔 @FPGA0
⚡️ چگونه عملیات تقسیم را در 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