⚡️ نحوهی پیدایش زبان VHDL و ساختار آن
🔷 نام VHDL، مخفف عبارت VHSIC Hardware Description Language است.
🔷 حرف V خود مخفف Very High Speed Integrated Circuit است.
✅ بنابراین، VHDL مخفف زبان توصیف سختافزاری مدارات مجتمع با سرعت بسیار زیاد است.
🔷 زبان VHDL ابتدا توسط وزارت دفاع آمریکا ابداع شد.
🔷 در آن زمان، هدف از ابداع این زبان، پیادهسازی یک سیستم دیجیتال نبود؛ بلکه قصد داشتند بهکمک آن، مداراتی که قبلاً پیادهسازی کرده بودند را مستندسازی کنند.
🔷 هدف دیگر، انجام مدلسازیهای مدارات دیجیتال بود.
🔷 اما بعدها، از این زبان برای پیادهسازی سیستمهای دیجیتال استفاده شد.
✅ نهایتاً، این زبان توسط سازمان IEEE استانداردسازی شد و زبان VHDL فعلی که ما در حال استفاده از آن هستیم، زبان استاندارد شده در سازمان IEEE است.
🔷 همانطور که در پست قبل گفتم، زبان VHDL یک زبان برنامهنویسی نیست؛ بلکه زبانی است که بهکمک آن میتوانیم یک طرح سختافزاری را توصیف کنیم.
🔷 بهطور کلی، میتوان یک مدار دیجیتال را به دو بخش تقسیم کرد:
1⃣ بخش پایهها، پینها یا پورتهای ورودی-خروجی
2⃣ بخش مدار داخلی
✅ هر کد VHDL نیز از دو بخش تشکیل شده است؛ بخش Entity و بخش Architecture
🔷 در اصطلاحِ VHDL، به پایهها یا پورتهای ورودی-خروجی مدار، Entity و به مدار داخلی Architecture گفته میشود.
🔷 در بخش Entity از کد، پورتهای مدار را تعریف میکنیم.
🔷 در واقع، ابتدا برای هر پورت نامی تعیین میکنیم.
🔷 سپس، مشخص میکنیم که آن پورت، ورودی، خروجی یا دو طرفه است.
🔷 پس از آن، نوع دادهای که میتوان درون پورت قرار گیرد را مشخص میکنیم.
✅ اما بخش اصلی یک کد VHDL، بخش Architecture است که یک مدار دیجیتال را در آن توصیف میکنیم.
✅ برای مطالعهی نکات اصلی زبان VHDL، به مجموعه مقالات زیر از سایت فراد اندیش مراجعه کنید:
🌎 http://bit.ly/VHDL-1
🌎 https://bit.ly/VHDL-2
🌎 https://bit.ly/VHDL-3
🌎 https://bit.ly/VHDL-4
🆔 @FPGA0
🔷 نام VHDL، مخفف عبارت VHSIC Hardware Description Language است.
🔷 حرف V خود مخفف Very High Speed Integrated Circuit است.
✅ بنابراین، VHDL مخفف زبان توصیف سختافزاری مدارات مجتمع با سرعت بسیار زیاد است.
🔷 زبان VHDL ابتدا توسط وزارت دفاع آمریکا ابداع شد.
🔷 در آن زمان، هدف از ابداع این زبان، پیادهسازی یک سیستم دیجیتال نبود؛ بلکه قصد داشتند بهکمک آن، مداراتی که قبلاً پیادهسازی کرده بودند را مستندسازی کنند.
🔷 هدف دیگر، انجام مدلسازیهای مدارات دیجیتال بود.
🔷 اما بعدها، از این زبان برای پیادهسازی سیستمهای دیجیتال استفاده شد.
✅ نهایتاً، این زبان توسط سازمان IEEE استانداردسازی شد و زبان VHDL فعلی که ما در حال استفاده از آن هستیم، زبان استاندارد شده در سازمان IEEE است.
🔷 همانطور که در پست قبل گفتم، زبان VHDL یک زبان برنامهنویسی نیست؛ بلکه زبانی است که بهکمک آن میتوانیم یک طرح سختافزاری را توصیف کنیم.
🔷 بهطور کلی، میتوان یک مدار دیجیتال را به دو بخش تقسیم کرد:
1⃣ بخش پایهها، پینها یا پورتهای ورودی-خروجی
2⃣ بخش مدار داخلی
✅ هر کد VHDL نیز از دو بخش تشکیل شده است؛ بخش Entity و بخش Architecture
🔷 در اصطلاحِ VHDL، به پایهها یا پورتهای ورودی-خروجی مدار، Entity و به مدار داخلی Architecture گفته میشود.
🔷 در بخش Entity از کد، پورتهای مدار را تعریف میکنیم.
🔷 در واقع، ابتدا برای هر پورت نامی تعیین میکنیم.
🔷 سپس، مشخص میکنیم که آن پورت، ورودی، خروجی یا دو طرفه است.
🔷 پس از آن، نوع دادهای که میتوان درون پورت قرار گیرد را مشخص میکنیم.
✅ اما بخش اصلی یک کد VHDL، بخش Architecture است که یک مدار دیجیتال را در آن توصیف میکنیم.
✅ برای مطالعهی نکات اصلی زبان VHDL، به مجموعه مقالات زیر از سایت فراد اندیش مراجعه کنید:
🌎 http://bit.ly/VHDL-1
🌎 https://bit.ly/VHDL-2
🌎 https://bit.ly/VHDL-3
🌎 https://bit.ly/VHDL-4
🆔 @FPGA0
❇️ برگزاری مجدد سمینار آنلاین...
⚡️ ۷ گام پیادهسازی الگوریتمهای پردازش سیگنال در FPGA
🔹 با توجه به عدم موفقیت بسیاری از ثبتنام کنندگان در سمینار آنلاین هفته پیش برای شرکت در آن، این سمینار آنلاین مجددا روز چهارشنبه ۱۵ مرداد تکرار خواهد شد.
♦️ ثبتنام رایگان 👇
🌏 https://faradandish.com/lp/signal-processing-webinar
🆔 @FPGA0
⚡️ ۷ گام پیادهسازی الگوریتمهای پردازش سیگنال در FPGA
🔹 با توجه به عدم موفقیت بسیاری از ثبتنام کنندگان در سمینار آنلاین هفته پیش برای شرکت در آن، این سمینار آنلاین مجددا روز چهارشنبه ۱۵ مرداد تکرار خواهد شد.
♦️ ثبتنام رایگان 👇
🌏 https://faradandish.com/lp/signal-processing-webinar
🆔 @FPGA0
روش بهینه برای پیادهسازی اعداد علامتدار در FPGA کدام است؟
Anonymous Quiz
24%
روش sign & magnitude
12%
روش one's complement
65%
روش tow's complement
♨️ در مجموعه پست زیر با روشهای مختلف پیادهسازی اعداد علامتدار و ویژگیهای هر کدام آشنا میشوید: 👇👇👇
https://t.me/fpga0/811
https://t.me/fpga0/812
https://t.me/fpga0/817
🆔 @FPGA0
https://t.me/fpga0/811
https://t.me/fpga0/812
https://t.me/fpga0/817
🆔 @FPGA0
⚡️ تبدیل انواع داده به یکدیگر در زبان VHDL (قسمت اول)
🔷 در پیادهسازی مدارات دیجیتال به کمک زبان VHDL گاهی نیاز دارید انواع داده را به یکدیگر ارجاع دهید.
🔷 از طرف دیگر، با توجه به قوانین ارجاع در زبان VHDL، نوع (type) تمام سیگنالهای حاضر در یک ارجاع باید یکسان باشد.
🔷 بنابراین، در کدنویسی VHDL نیاز دارید از قابلیت «تبدیل نوع» یا «Type Conversion» استفاده کنید.
✅ به طور کلی، در زبان VHDL چهار نوع دادهی برداری داریم:
1⃣ نوع std_logic_vector
2⃣ نوع بدون علامت (unsigned)
3⃣ نوع علامتدار (signed)
4⃣ نوع integer
✅ در پستهای آینده، دربارهی نحوهی تبدیل این دادههای برداری به یکدیگر صحبت خواهم کرد.
ادامه دارد...
🆔 @FPGA0
🔷 در پیادهسازی مدارات دیجیتال به کمک زبان VHDL گاهی نیاز دارید انواع داده را به یکدیگر ارجاع دهید.
🔷 از طرف دیگر، با توجه به قوانین ارجاع در زبان VHDL، نوع (type) تمام سیگنالهای حاضر در یک ارجاع باید یکسان باشد.
🔷 بنابراین، در کدنویسی VHDL نیاز دارید از قابلیت «تبدیل نوع» یا «Type Conversion» استفاده کنید.
✅ به طور کلی، در زبان VHDL چهار نوع دادهی برداری داریم:
1⃣ نوع std_logic_vector
2⃣ نوع بدون علامت (unsigned)
3⃣ نوع علامتدار (signed)
4⃣ نوع integer
✅ در پستهای آینده، دربارهی نحوهی تبدیل این دادههای برداری به یکدیگر صحبت خواهم کرد.
ادامه دارد...
🆔 @FPGA0
⚡️ موقعیت شغلی جدید در مرکز تهران...
🔹 در یک شرکت دانش بنیان به چند کارشناس برق به صورت تمام وقت یا نیمه وقت در حوزههای زیر نیاز است:
1️⃣ شبیهسازی الگوریتمها و پردازش سیگنال و سنسورها (کارشناسی یا ارشد برق)
2️⃣ کدنویسی ARM و FPGA و طراحی PCB (حوزه الکترونیک یا الکترونیک قدرت) (کارشناسی یا ارشد برق)
3️⃣ مونتاژ، تست و راه اندازی برد (دیپلم یا کارشناسی برق)
🔺 با بیمه
🏢 محل کار: دانشکده فنی دانشگاه تهران
❇️ اگر فکر میکنید مهارت و علاقه شما حداقل با یکی از موارد بالا تطبیق دارد، لطفا رزومهتان را به ایمیل زیر ارسال کنید.:
📭 edu@faradandish.com
☎️ رزومه شما به شرکت مورد نظر ارسال خواهد شد و آنها پس از بررسی، در صورت نیاز با شما تماس خواهند گرفت.
🆔 @FPGA0
🔹 در یک شرکت دانش بنیان به چند کارشناس برق به صورت تمام وقت یا نیمه وقت در حوزههای زیر نیاز است:
1️⃣ شبیهسازی الگوریتمها و پردازش سیگنال و سنسورها (کارشناسی یا ارشد برق)
2️⃣ کدنویسی ARM و FPGA و طراحی PCB (حوزه الکترونیک یا الکترونیک قدرت) (کارشناسی یا ارشد برق)
3️⃣ مونتاژ، تست و راه اندازی برد (دیپلم یا کارشناسی برق)
🔺 با بیمه
🏢 محل کار: دانشکده فنی دانشگاه تهران
❇️ اگر فکر میکنید مهارت و علاقه شما حداقل با یکی از موارد بالا تطبیق دارد، لطفا رزومهتان را به ایمیل زیر ارسال کنید.:
📭 edu@faradandish.com
☎️ رزومه شما به شرکت مورد نظر ارسال خواهد شد و آنها پس از بررسی، در صورت نیاز با شما تماس خواهند گرفت.
🆔 @FPGA0
⚡️ تبدیل انواع داده به یکدیگر در زبان VHDL (قسمت دوم)
✅ در پست قبلی گفتیم که برای رعایت قوانین ارجاع در زبان VHDL، باید تمامی سیگنالهای حاضر در یک ارجاع، نوع یکسان داشته باشند.
✅ در این مجموعه پست، روشهای تبدیل انواع داده به یکدیگر را در سه دسته بیان خواهم کرد.
❇️ دستهی اول: این دسته شامل تبدیل نوع std_logic_vector ،unsigned و signed به یکدیگر است.
◀️ مثال. ارجاع زیر را در نظر بگیرید:
B <= A;
🔹 فرض کنید:
سیگنال A: از نوع std_logic_vector
سیگنال B: از نوع علامتدار
🔹 با توجه به قانون ارجاع ساده، چنین ارجاعی قابل انجام نیست و حتما باید تبدیل نوع انجام دهیم.
✅ طبق قواعد زبان VHDL، همیشه باید نوع سیگنالی که قرار است به سیگنال دیگر منتقل شود را تغییر دهیم.
🔹 بنابراین، در این مثال باید نوع سیگنال A را به signed تغییر دهیم؛ برای این کار به صورت زیر عمل میکنیم:
B <= signed (A);
ادامه دارد...
🆔 @FPGA0
✅ در پست قبلی گفتیم که برای رعایت قوانین ارجاع در زبان VHDL، باید تمامی سیگنالهای حاضر در یک ارجاع، نوع یکسان داشته باشند.
✅ در این مجموعه پست، روشهای تبدیل انواع داده به یکدیگر را در سه دسته بیان خواهم کرد.
❇️ دستهی اول: این دسته شامل تبدیل نوع std_logic_vector ،unsigned و signed به یکدیگر است.
◀️ مثال. ارجاع زیر را در نظر بگیرید:
B <= A;
🔹 فرض کنید:
سیگنال A: از نوع std_logic_vector
سیگنال B: از نوع علامتدار
🔹 با توجه به قانون ارجاع ساده، چنین ارجاعی قابل انجام نیست و حتما باید تبدیل نوع انجام دهیم.
✅ طبق قواعد زبان VHDL، همیشه باید نوع سیگنالی که قرار است به سیگنال دیگر منتقل شود را تغییر دهیم.
🔹 بنابراین، در این مثال باید نوع سیگنال A را به signed تغییر دهیم؛ برای این کار به صورت زیر عمل میکنیم:
B <= signed (A);
ادامه دارد...
🆔 @FPGA0
⚡️ تبدیل انواع داده به یکدیگر در زبان VHDL (قسمت سوم)
🔷 در پست قبلی به دستهی اول از روشهای تبدیل انواع داده به یکدیگر پرداختم.
✅ در این پست، دستهی دوم را بررسی میکنیم.
❇️ دستهی دوم: این دسته شامل تبدیل سیگنالهای unsigned و signed به integer است.
🔷 فرض کنید سیگنال هشت بیتی X در کد ما وجود دارد و با توجه به مقدار سیگنال سه بیتی i که ورودی مدار و از نوع unsigned است میخواهیم بیت iام سیگنال X را به سیگنال تک بیتی Y ارجاع دهیم.
🔷 این کار را میتوانیم به کمک تابع ()to_integer به صورت زیر انجام دهیم:
Y <= X(to_integer(i));
🔷 در این کد، نوع سیگنال i را به کمک تابع ()to_integer از unsigned به integer تغییر دادهایم چون نوع اندیس یا آرگومان یک سیگنال حتما باید integer باشد.
ادامه دارد...
🆔 @FPGA0
🔷 در پست قبلی به دستهی اول از روشهای تبدیل انواع داده به یکدیگر پرداختم.
✅ در این پست، دستهی دوم را بررسی میکنیم.
❇️ دستهی دوم: این دسته شامل تبدیل سیگنالهای unsigned و signed به integer است.
🔷 فرض کنید سیگنال هشت بیتی X در کد ما وجود دارد و با توجه به مقدار سیگنال سه بیتی i که ورودی مدار و از نوع unsigned است میخواهیم بیت iام سیگنال X را به سیگنال تک بیتی Y ارجاع دهیم.
🔷 این کار را میتوانیم به کمک تابع ()to_integer به صورت زیر انجام دهیم:
Y <= X(to_integer(i));
🔷 در این کد، نوع سیگنال i را به کمک تابع ()to_integer از unsigned به integer تغییر دادهایم چون نوع اندیس یا آرگومان یک سیگنال حتما باید integer باشد.
ادامه دارد...
🆔 @FPGA0
⚡️ تبدیل انواع داده به یکدیگر در زبان VHDL (قسمت چهارم)
🔷 در دو پست قبل، دستهی اول و دوم از روشهای تبدیل انواع داده به یکدیگر را معرفی کردم.
✅ در این پست، دستهی سوم را بررسی خواهیم کرد.
❇️ دستهی سوم: این گروه از تبدیلها، تبدیل نوع integer به نوع unsigned و signed است که بسیار پرکاربرد است.
🔷 یکی از کاربردهای پرتکرار آن، مقداردهی سیگنالهای علامتدار و بدون علامت است.
◀️ فرض کنید میخواهیم مقدار ۴۴ را به سیگنال بدون علامت و ۱۳ بیتی X ارجاع دهیم.
✅ روش اصولی برای مقداردهی سیگنال، استفاده از تبدیل نوع integer به unsigned است:
X <= to_unsigned(44,13);
✅ در واقع، تبدیل to_unsigned، یک عدد integer را به یک عدد بدون علامت تبدیل میکند. در این مثال، عدد ۱۳ بیانگر عرض بیت سیگنال است.
✅ برای آشنایی بیشتر با جزئیات تبدیل نوع در زبان VHDL و بررسی چند مثال مفصلتر، پیشنهاد میکنم مقاله "کاربردهای تبدیل انواع داده در کدنویسی به زبان VHDL" را در سایت فراد اندیش مطالعه کنید 👇
🆔 @FPGA0
🔷 در دو پست قبل، دستهی اول و دوم از روشهای تبدیل انواع داده به یکدیگر را معرفی کردم.
✅ در این پست، دستهی سوم را بررسی خواهیم کرد.
❇️ دستهی سوم: این گروه از تبدیلها، تبدیل نوع integer به نوع unsigned و signed است که بسیار پرکاربرد است.
🔷 یکی از کاربردهای پرتکرار آن، مقداردهی سیگنالهای علامتدار و بدون علامت است.
◀️ فرض کنید میخواهیم مقدار ۴۴ را به سیگنال بدون علامت و ۱۳ بیتی X ارجاع دهیم.
✅ روش اصولی برای مقداردهی سیگنال، استفاده از تبدیل نوع integer به unsigned است:
X <= to_unsigned(44,13);
✅ در واقع، تبدیل to_unsigned، یک عدد integer را به یک عدد بدون علامت تبدیل میکند. در این مثال، عدد ۱۳ بیانگر عرض بیت سیگنال است.
✅ برای آشنایی بیشتر با جزئیات تبدیل نوع در زبان VHDL و بررسی چند مثال مفصلتر، پیشنهاد میکنم مقاله "کاربردهای تبدیل انواع داده در کدنویسی به زبان VHDL" را در سایت فراد اندیش مطالعه کنید 👇
🆔 @FPGA0
🆔 @FPGA0
#مقاله۱۱
🎓 کاربردهای انواع داده در کدنویسی به زبان VHDL
📚 نوشته فاطمه مشاک
📥 در سایت فراد اندیش بخوانید 👇👇👇👇
🌎 https://bit.ly/VHDLTypeConversion
#مقاله۱۱
🎓 کاربردهای انواع داده در کدنویسی به زبان VHDL
📚 نوشته فاطمه مشاک
📥 در سایت فراد اندیش بخوانید 👇👇👇👇
🌎 https://bit.ly/VHDLTypeConversion
معیارهای انتخاب تکنولوژی مناسب برای پیادهسازی یک پروژه چه مواردی هستند؟
Anonymous Quiz
5%
هزینه تکنولوژی
2%
سرعت تکنولوژی
2%
سهولت پیادهسازی
91%
همه موارد
♨️ برای آشنایی با نحوهی انتخاب تکنولوژی مناسب یک پروژه به مجموعه پست زیر مراجعه کنید:👇👇👇
https://t.me/fpga0/808
https://t.me/fpga0/809
https://t.me/fpga0/810
🆔 @FPGA0
https://t.me/fpga0/808
https://t.me/fpga0/809
https://t.me/fpga0/810
🆔 @FPGA0
⚡️ مراحل پیادهسازی یک مدار دیجیتال در FPGA (قسمت اول)
🔷 در پست قبلی گفته شد که کد VHDLای که توصیفکنندهی یک مدار دیجیتال است، از دو بخش تشکیل میشود:
❇️ در بخش Entity، پورتهای ورودی/خروجی مدار دیجیتال توصیف میشوند.
❇️ در بخش Architecture نیز مدار دیجیتال موردنظر توصیف میشود.
🔷 معمولاً، مدار دیجیتال، مقادیر را از پورتهای ورودی دریافت کرده و پس از انجام عملیات منطقی، حاصل را به پورتهای خروجی ارسال میکند.
❇️ مراحل پیادهسازی مدار در FPGA
🔷 برای پیادهسازی یک طرح دیجیتال بهکمک FPGA، مراحل مختلفی وجود دارد که باید بهدقت انجام شوند. نرمافزارهای مخصوص این کار، کمک بزرگی به انجام این روند میکنند. در ادامه، مراحل پیادهسازی یک مدار دیجیتال در FPGA را بررسی میکنم.
1⃣ ورود طرح و کامپایل
🔷 اولین مرحله، ورود طرح به نرمافزار است. همانطور که در یکی از پستهای قبل گفته شد، برای این کار دو روش وجود دارد:
۱. توصیف مدار بهکمک شماتیک
۲. استفاده از یک زبان توصیف سختافزاری مانند VHDL یا Verilog
🔷 معمولاً برای ورود طرح، از روش دوم، یعنی از یک زبان HDL استفاده میکنیم.
🔷 پس از وارد کردن طرح و بررسی خطاهای احتمالی در نوشتن آن (syntax error)، باید آن را کامپایل کرد.
🔷 کامپایل کردن بهمعنی تبدیل توصیف HDL به مجموعهای از معادلات منطقی است.
2⃣ شبیهسازی منطقی
🔷 برای ارزیابی صحت طرح، معمولاً آن را شبیهسازی میکنند. شبیهسازی در این مرحله را شبیهسازی منطقی (Functional) یا رفتاری (Behavioral) مینامند؛ زیرا آنچه را در این مرحله میتوان شبیهسازی کرد فقط منطق طرح است و مواردی مثل تأخیر گیتها و مسیرها هنوز برای ابزار طراحی شناخته شده نیست.
✅ برای آشنایی با نحوهی شبیهسازی بهکمک نرمافزار ISim به مقالهی زیر از سایت فراداندیش مراجعه کنید:
🌎 https://bit.ly/Simulation-ISim
ادامه دارد...
🆔 @FPGA0
🔷 در پست قبلی گفته شد که کد VHDLای که توصیفکنندهی یک مدار دیجیتال است، از دو بخش تشکیل میشود:
❇️ در بخش Entity، پورتهای ورودی/خروجی مدار دیجیتال توصیف میشوند.
❇️ در بخش Architecture نیز مدار دیجیتال موردنظر توصیف میشود.
🔷 معمولاً، مدار دیجیتال، مقادیر را از پورتهای ورودی دریافت کرده و پس از انجام عملیات منطقی، حاصل را به پورتهای خروجی ارسال میکند.
❇️ مراحل پیادهسازی مدار در FPGA
🔷 برای پیادهسازی یک طرح دیجیتال بهکمک FPGA، مراحل مختلفی وجود دارد که باید بهدقت انجام شوند. نرمافزارهای مخصوص این کار، کمک بزرگی به انجام این روند میکنند. در ادامه، مراحل پیادهسازی یک مدار دیجیتال در FPGA را بررسی میکنم.
1⃣ ورود طرح و کامپایل
🔷 اولین مرحله، ورود طرح به نرمافزار است. همانطور که در یکی از پستهای قبل گفته شد، برای این کار دو روش وجود دارد:
۱. توصیف مدار بهکمک شماتیک
۲. استفاده از یک زبان توصیف سختافزاری مانند VHDL یا Verilog
🔷 معمولاً برای ورود طرح، از روش دوم، یعنی از یک زبان HDL استفاده میکنیم.
🔷 پس از وارد کردن طرح و بررسی خطاهای احتمالی در نوشتن آن (syntax error)، باید آن را کامپایل کرد.
🔷 کامپایل کردن بهمعنی تبدیل توصیف HDL به مجموعهای از معادلات منطقی است.
2⃣ شبیهسازی منطقی
🔷 برای ارزیابی صحت طرح، معمولاً آن را شبیهسازی میکنند. شبیهسازی در این مرحله را شبیهسازی منطقی (Functional) یا رفتاری (Behavioral) مینامند؛ زیرا آنچه را در این مرحله میتوان شبیهسازی کرد فقط منطق طرح است و مواردی مثل تأخیر گیتها و مسیرها هنوز برای ابزار طراحی شناخته شده نیست.
✅ برای آشنایی با نحوهی شبیهسازی بهکمک نرمافزار ISim به مقالهی زیر از سایت فراداندیش مراجعه کنید:
🌎 https://bit.ly/Simulation-ISim
ادامه دارد...
🆔 @FPGA0
⚡️ مراحل پیادهسازی یک مدار دیجیتال در FPGA (قسمت دوم)
🔷 در پست قبل، به مرحلهی اول و دوم پیادهسازی یک مدار دیجیتال در FPGA پرداختم؛ در این پست مراحل کار را پی میگیریم.
3⃣ سنتز طرح و شبیهسازی زمانی
🔷 پس از اینکه بهکمک شبیهسازی منطقی از صحت عملکرد طرح اطمینان حاصل شد، با یک کلیک، به نرمافزار پیادهساز دستور میدهیم که آن را سنتز کند.
🔷 عملیات سنتز در FPGA، یعنی پیادهسازی معادلات و روابط منطقی حاصل از مرحلهی کامپایل، بهکمک منابع سختافزاری موجود در FPGA.
🔷 به عبارت دیگر، نرمافزار پیادهساز باید بتواند بهکمک منابعی که در یک FPGA خاص وجود دارد، مثل LUTها، مالتیپلکسرها، ضربکنندهها و غیره، توصیف سختافزاری موردنظر را پیادهسازی کند.
🔷 بنابراین، نرمافزار پیادهساز نسبت به منابع سختافزاری موجود در FPGAای که برای آن تعیین میکنید آگاهی کامل دارد و سنتز طرح را بر اساس آن انجام میدهد.
🔷 در مرحلهی سنتز، تأخیر گیتها و منابع سختافزاری دیگر که در طراحی بهکار میروند محاسبه و در نظر گرفته میشود.
🔷 بنابراین، بعد از مرحلهی سنتز میتوان مجدداً طرح را شبیهسازی کرد. تفاوت این شبیهسازی که به آن شبیهسازی زمانی (Timing Simulation) گفته میشود، با شبیهسازی منطقی در این است که تأخیرهای انتشار (Propagation Delays) منابع بهکار گرفته شده در طرح نیز در شبیهسازی دخیل میشوند و درنتیجه، شبیهسازی به آنچه در عمل رخ میدهد نزدیکتر است.
4⃣ جانمایی طرح
🔷 مرحله مهم بعدی در طراحی دیجیتال بهکمک FPGA، جانمایی (Placement) است.
🔷 با توجه به اینکه منابع سختافزاری موجود در هر FPGA، در مکانهای مشخص و ثابتی درون آن قرار دارند، باید مشخص شود که منابع بهکار گرفته شده در مرحلهی سنتز، دقیقاً در چه مکانهایی از FPGA هستند.
🔷 نرمافزار پیادهساز، این کار را با توجه به معیارهای مختلفی انجام میدهد؛ یکی از مهمترین معیارها این است که منابع را از نقاطی از FPGA انتخاب کند که بتواند با مسیرهای کوتاهتری آنها را به هم متصل نماید.
5⃣ مسیریابی و شبیهسازی زمانی
🔷 مرحله بسیار مهم دیگر در پیادهسازی طرح، مسیریابی (Routing) است.
🔷 در این مرحله، نرمافزار پیادهساز بهکمک الگوریتمهای پیچیدهای سعی در یافتن بهترین مسیرها برای اتصال منابع بهکار گرفته شده در طرح مورد نظر دارد.
🔷 با توجه به اینکه خود مسیرها (سیمها) دارای تأخیر هستند، میتوان در این مرحله نیز مجدداً طرح را شبیهسازی زمانی کرد.
🔷 در این شبیهسازی که به آن شبیهسازی بعد از جانمایی و مسیریابی (Post-Place & Rout Simulation) میگویند، نه تنها تأخیر گیتها و منابع دیجیتالی دیگر، بلکه تأخیر مربوط به سیمهای متصلکنندهی منابع دیجیتالی به یکدیگر نیز در نظر گرفته میشود.
ادامه دارد...
🆔 @FPGA0
🔷 در پست قبل، به مرحلهی اول و دوم پیادهسازی یک مدار دیجیتال در FPGA پرداختم؛ در این پست مراحل کار را پی میگیریم.
3⃣ سنتز طرح و شبیهسازی زمانی
🔷 پس از اینکه بهکمک شبیهسازی منطقی از صحت عملکرد طرح اطمینان حاصل شد، با یک کلیک، به نرمافزار پیادهساز دستور میدهیم که آن را سنتز کند.
🔷 عملیات سنتز در FPGA، یعنی پیادهسازی معادلات و روابط منطقی حاصل از مرحلهی کامپایل، بهکمک منابع سختافزاری موجود در FPGA.
🔷 به عبارت دیگر، نرمافزار پیادهساز باید بتواند بهکمک منابعی که در یک FPGA خاص وجود دارد، مثل LUTها، مالتیپلکسرها، ضربکنندهها و غیره، توصیف سختافزاری موردنظر را پیادهسازی کند.
🔷 بنابراین، نرمافزار پیادهساز نسبت به منابع سختافزاری موجود در FPGAای که برای آن تعیین میکنید آگاهی کامل دارد و سنتز طرح را بر اساس آن انجام میدهد.
🔷 در مرحلهی سنتز، تأخیر گیتها و منابع سختافزاری دیگر که در طراحی بهکار میروند محاسبه و در نظر گرفته میشود.
🔷 بنابراین، بعد از مرحلهی سنتز میتوان مجدداً طرح را شبیهسازی کرد. تفاوت این شبیهسازی که به آن شبیهسازی زمانی (Timing Simulation) گفته میشود، با شبیهسازی منطقی در این است که تأخیرهای انتشار (Propagation Delays) منابع بهکار گرفته شده در طرح نیز در شبیهسازی دخیل میشوند و درنتیجه، شبیهسازی به آنچه در عمل رخ میدهد نزدیکتر است.
4⃣ جانمایی طرح
🔷 مرحله مهم بعدی در طراحی دیجیتال بهکمک FPGA، جانمایی (Placement) است.
🔷 با توجه به اینکه منابع سختافزاری موجود در هر FPGA، در مکانهای مشخص و ثابتی درون آن قرار دارند، باید مشخص شود که منابع بهکار گرفته شده در مرحلهی سنتز، دقیقاً در چه مکانهایی از FPGA هستند.
🔷 نرمافزار پیادهساز، این کار را با توجه به معیارهای مختلفی انجام میدهد؛ یکی از مهمترین معیارها این است که منابع را از نقاطی از FPGA انتخاب کند که بتواند با مسیرهای کوتاهتری آنها را به هم متصل نماید.
5⃣ مسیریابی و شبیهسازی زمانی
🔷 مرحله بسیار مهم دیگر در پیادهسازی طرح، مسیریابی (Routing) است.
🔷 در این مرحله، نرمافزار پیادهساز بهکمک الگوریتمهای پیچیدهای سعی در یافتن بهترین مسیرها برای اتصال منابع بهکار گرفته شده در طرح مورد نظر دارد.
🔷 با توجه به اینکه خود مسیرها (سیمها) دارای تأخیر هستند، میتوان در این مرحله نیز مجدداً طرح را شبیهسازی زمانی کرد.
🔷 در این شبیهسازی که به آن شبیهسازی بعد از جانمایی و مسیریابی (Post-Place & Rout Simulation) میگویند، نه تنها تأخیر گیتها و منابع دیجیتالی دیگر، بلکه تأخیر مربوط به سیمهای متصلکنندهی منابع دیجیتالی به یکدیگر نیز در نظر گرفته میشود.
ادامه دارد...
🆔 @FPGA0
⚡️ مراحل پیادهسازی یک مدار دیجیتال در FPGA (قسمت سوم)
🔷 در پستهای قبل، مراحل پیادهسازی یک مدار دیجیتال در FPGA را تا مرحلهی مسیریابی بررسی کردم؛ در این پست به دو مرحلهی نهایی خواهم پرداخت.
6⃣ ساخت فایل پیکربندی
🔷 مرحله بعدی پیادهسازی، ساخت فایل پیکربندی (Configuration File) است.
🔷 این فایل که یک فایل باینری است، حاصل تمام مراحل طراحی را بهکمک مجموعهای از صفرها و یکها برای ارسال به FPGA آماده میکند.
🔷 اینکه کدامیک از منابع سختافزاری در FPGA استفاده میشود، داخل LUTها چگونه پر میشوند و مسیرها چگونه به یکدیگر متصل میشوند، همگی درون این فایل باینری قرار دارند.
✅ برای آشنایی با نحوه ساخت فایل پیکربندی و پروگرام کردن FPGA، مقاله زیر از سایت فراداندیش را ملاحظه کنید:
🌎 https://bit.ly/FPGA-Configuration
7⃣ پیکربندی یا پروگرام کردن FPGA
🔷 آخرین مرحله، پیکربندی FPGA است.
🔷 در این مرحله، بهکمک یک پروگرامر و رابط Jtag موجود در FPGA، فایل باینری پیکربندی درون FPGA بارگذاری میشود.
🔷 بعد از بارگذاری این فایل، FPGA تبدیل به سختافزاری که بهکمک زبان HDL توصیف کرده بودیم میشود.
✅ برای مشاهدهی فلوچارت مراحل پیادهسازی و جزئیات بیشتر، مقالهی زیر از سایت فراداندیش را ببینید 👇👇👇👇
🌎 https://bit.ly/Steps-to-Configure-FPGA
🆔 @FPGA0
🔷 در پستهای قبل، مراحل پیادهسازی یک مدار دیجیتال در FPGA را تا مرحلهی مسیریابی بررسی کردم؛ در این پست به دو مرحلهی نهایی خواهم پرداخت.
6⃣ ساخت فایل پیکربندی
🔷 مرحله بعدی پیادهسازی، ساخت فایل پیکربندی (Configuration File) است.
🔷 این فایل که یک فایل باینری است، حاصل تمام مراحل طراحی را بهکمک مجموعهای از صفرها و یکها برای ارسال به FPGA آماده میکند.
🔷 اینکه کدامیک از منابع سختافزاری در FPGA استفاده میشود، داخل LUTها چگونه پر میشوند و مسیرها چگونه به یکدیگر متصل میشوند، همگی درون این فایل باینری قرار دارند.
✅ برای آشنایی با نحوه ساخت فایل پیکربندی و پروگرام کردن FPGA، مقاله زیر از سایت فراداندیش را ملاحظه کنید:
🌎 https://bit.ly/FPGA-Configuration
7⃣ پیکربندی یا پروگرام کردن FPGA
🔷 آخرین مرحله، پیکربندی FPGA است.
🔷 در این مرحله، بهکمک یک پروگرامر و رابط Jtag موجود در FPGA، فایل باینری پیکربندی درون FPGA بارگذاری میشود.
🔷 بعد از بارگذاری این فایل، FPGA تبدیل به سختافزاری که بهکمک زبان HDL توصیف کرده بودیم میشود.
✅ برای مشاهدهی فلوچارت مراحل پیادهسازی و جزئیات بیشتر، مقالهی زیر از سایت فراداندیش را ببینید 👇👇👇👇
🌎 https://bit.ly/Steps-to-Configure-FPGA
🆔 @FPGA0
طبق توصیهی شرکت Xilinx، برای پیادهسازی اعداد بهصورت tow's complement در FPGA، باید از کدام نوع داده استفاده کنیم؟
Anonymous Quiz
34%
std_logic_vector
66%
signed
♨️ برای اطلاعات بیشتر درباره نحوه پیادهسازی اعداد علامتدار در FPGA به مجموعه پست زیر مراجعه کنید👇👇👇
https://t.me/fpga0/811
https://t.me/fpga0/812
https://t.me/fpga0/817
🆔 @FPGA0
https://t.me/fpga0/811
https://t.me/fpga0/812
https://t.me/fpga0/817
🆔 @FPGA0
⚡️ منابع سختافزاری درون FPGA (قسمت اول)
🔷 تسلط واقعی به پیادهسازی مدارات دیجیتال بهکمک FPGA نیاز به یادگیری دو مهارت مهم دارد:
1⃣ کدنویسی اصولی به یک زبان توصیف سختافزاری، مانند VHDL یا Verilog
2⃣ آشنایی با استفادهی اصولی از منابع سختافزاری درون FPGA
🔷 بسیاری از افراد، فقط روی مهارت اول متمرکز میشوند. در حالی که آشنایی با منابع سختافزاری درون FPGA و نحوهی استفاده اصولی از آنها، مهمترین مهارتی است که برای پیادهسازی بهینه مدارات دیجیتال بر روی FPGA باید بر آن مسلط شوید.
❓ اگر این امکان وجود داشت که یک تراشه FPGA را باز میکردید و داخل آن را میدیدید، دقیقاً با چه منابع سختافزاری مواجه میشدید؟
✅ در این مجموعه پست، شما را با منابع سختافزاری درون FPGA و کاربرد هر کدام آشنا میکنم.
❇️ LUT:
🌀 هر FPGA، از هزاران LUT تشکیل شده است که بهکمک آنها میتوانیم مدارهای بزرگ را پیادهسازی کنیم.
🌀 هر تابع منطقی را میتوانیم بهکمک یک Look-Up Table یا LUT پیادهسازی کنیم.
🌀 در واقع، مدارهای بزرگتر به توابع کوچکتر تقسیم میشوند و هر کدام بهکمک یک LUT پیادهسازی میشود.
🌀 سپس، باید این LUTها را به هم متصل کنیم تا مدار اصلی تشکیل شود.
🌀 برای این کار، سیمهای زیادی بین LUTها تعبیه شده است تا بتوانیم با اتصال مناسب آنها به یکدیگر، مدار اصلی را تشکیل دهیم.
🌀 در اصطلاح، به عمل سیمبندی بین LUT ها، Routing گفته میشود.
❇️ Routing Matrix:
🌀 این سختافزار شامل سیمها و شبکهی اتصالات قابل برنامهریزی (سوئیچها) است.
🌀 میتوانیم منابع دیجیتالی مختلف، از جمله LUTها را بهکمک این سیمها به یکدیگر متصل کنیم.
❇️ Logic Block:
🌀 تراشهی FPGA از دریایی از logic blockها تشکیل شده است.
🌀 در واقع، logic blockها مجموعهای شامل LUTها و فلیپفلاپها هستند که منابع عمومی سختافزاری درون FPGA را تشکیل میدهند.
🌀 معمولاً به Logic Blockها، Logic Cell نیز گفته میشود.
🌀 با استفاده از فلیپفلاپهای درون Logic Blockها میتوانید مدارات سنکرون را طراحی کنید.
🌀 برای طراحی مدارات سنکرون، نیاز دارید که تغییرات مدار را همزمان با یک سیگنال خارجی، که به آن کلاک گفته میشود انجام دهید که این کار توسط فلیپفلاپ انجام میشود.
ادامه دارد...
🆔 @FPGA0
🔷 تسلط واقعی به پیادهسازی مدارات دیجیتال بهکمک FPGA نیاز به یادگیری دو مهارت مهم دارد:
1⃣ کدنویسی اصولی به یک زبان توصیف سختافزاری، مانند VHDL یا Verilog
2⃣ آشنایی با استفادهی اصولی از منابع سختافزاری درون FPGA
🔷 بسیاری از افراد، فقط روی مهارت اول متمرکز میشوند. در حالی که آشنایی با منابع سختافزاری درون FPGA و نحوهی استفاده اصولی از آنها، مهمترین مهارتی است که برای پیادهسازی بهینه مدارات دیجیتال بر روی FPGA باید بر آن مسلط شوید.
❓ اگر این امکان وجود داشت که یک تراشه FPGA را باز میکردید و داخل آن را میدیدید، دقیقاً با چه منابع سختافزاری مواجه میشدید؟
✅ در این مجموعه پست، شما را با منابع سختافزاری درون FPGA و کاربرد هر کدام آشنا میکنم.
❇️ LUT:
🌀 هر FPGA، از هزاران LUT تشکیل شده است که بهکمک آنها میتوانیم مدارهای بزرگ را پیادهسازی کنیم.
🌀 هر تابع منطقی را میتوانیم بهکمک یک Look-Up Table یا LUT پیادهسازی کنیم.
🌀 در واقع، مدارهای بزرگتر به توابع کوچکتر تقسیم میشوند و هر کدام بهکمک یک LUT پیادهسازی میشود.
🌀 سپس، باید این LUTها را به هم متصل کنیم تا مدار اصلی تشکیل شود.
🌀 برای این کار، سیمهای زیادی بین LUTها تعبیه شده است تا بتوانیم با اتصال مناسب آنها به یکدیگر، مدار اصلی را تشکیل دهیم.
🌀 در اصطلاح، به عمل سیمبندی بین LUT ها، Routing گفته میشود.
❇️ Routing Matrix:
🌀 این سختافزار شامل سیمها و شبکهی اتصالات قابل برنامهریزی (سوئیچها) است.
🌀 میتوانیم منابع دیجیتالی مختلف، از جمله LUTها را بهکمک این سیمها به یکدیگر متصل کنیم.
❇️ Logic Block:
🌀 تراشهی FPGA از دریایی از logic blockها تشکیل شده است.
🌀 در واقع، logic blockها مجموعهای شامل LUTها و فلیپفلاپها هستند که منابع عمومی سختافزاری درون FPGA را تشکیل میدهند.
🌀 معمولاً به Logic Blockها، Logic Cell نیز گفته میشود.
🌀 با استفاده از فلیپفلاپهای درون Logic Blockها میتوانید مدارات سنکرون را طراحی کنید.
🌀 برای طراحی مدارات سنکرون، نیاز دارید که تغییرات مدار را همزمان با یک سیگنال خارجی، که به آن کلاک گفته میشود انجام دهید که این کار توسط فلیپفلاپ انجام میشود.
ادامه دارد...
🆔 @FPGA0
⚡️ منابع سختافزاری درون FPGA (قسمت دوم)
✅ در پست قبل، تعدادی از منابع سختافزاری درون FPGA را معرفی کردم. در این پست، به معرفی موارد دیگری از این منابع میپردازم.
❇️ IO Block:
🌀 هر کدام از پایههای IOی FPGA به مداری بهنام IO Block متصل است که این مدار قابلیتهایی را ایجاد میکند.
🌀 تبدیل هر پایه IO به ورودی، خروجی، یا IOی دوطرفه، یکی از قابلیتهای این بلوک است.
🌀 همچنین، شما بهوسیلهی IO Block میتوانید انواع استانداردهای I/O را برای این پایهها تعریف کنید.
🌀 مثلاً، میتوانید مقدار جریاندهی پایههای خروجی را تعریف کنید، یا سطح ولتاژ پایههای ورودی-خروجی را تعیین کنید. بهکمک این قابلیت میتوانید پایههای FPGA را به انواع مختلف قطعات جانبی وصل کنید.
❇️ حافظههای بلوکی:
🌀 معمولاً در مدارات دیجیتال، به مقداری حافظه موقت نیز نیاز است.
🌀 ممکن است محاسباتی در سیستم انجام شود و بخواهید از نتیجهی آن در مراحل بعدی استفاده کنید.
🌀 یا ممکن است سیگنالی در حال نمونهبرداری باشد و بخواهید آن را به کامپیوتر یا به سیستم دیگری ارسال کنید.
✅ در هر صورت، نیاز دارید که مقادیری را بهصورت موقت در جایی ذخیره کنید.
✅ برای این کار، در FPGAها حافظههایی بهصورت بلوک سختافزاری طراحی شده است.
❇️ ضربکنندهها:
🌀 در تمام FPGAهای شرکت Xilinx، ضرب کنندهها بخش بسیار مهمی هستند که علاوه بر عملیات ضرب، قابلیتهای بسیار زیاد دیگری نیز دارند.
🌀 عمل ضرب در بسیاری از پیادهسازیهای دیجیتال، خصوصاً پیادهسازی الگوریتمهای پردازش سیگنال دیجیتال کاربرد بسیار زیادی دارد.
🌀 اگر ضربکنندههای از پیش ساخته شده در FPGA وجود نداشت، شما مجبور بودید از LUTها استفاده کنید و بهکمک آنها ضربکنندهها را پیادهسازی کنید.
ادامه دارد...
🆔 @FPGA0
✅ در پست قبل، تعدادی از منابع سختافزاری درون FPGA را معرفی کردم. در این پست، به معرفی موارد دیگری از این منابع میپردازم.
❇️ IO Block:
🌀 هر کدام از پایههای IOی FPGA به مداری بهنام IO Block متصل است که این مدار قابلیتهایی را ایجاد میکند.
🌀 تبدیل هر پایه IO به ورودی، خروجی، یا IOی دوطرفه، یکی از قابلیتهای این بلوک است.
🌀 همچنین، شما بهوسیلهی IO Block میتوانید انواع استانداردهای I/O را برای این پایهها تعریف کنید.
🌀 مثلاً، میتوانید مقدار جریاندهی پایههای خروجی را تعریف کنید، یا سطح ولتاژ پایههای ورودی-خروجی را تعیین کنید. بهکمک این قابلیت میتوانید پایههای FPGA را به انواع مختلف قطعات جانبی وصل کنید.
❇️ حافظههای بلوکی:
🌀 معمولاً در مدارات دیجیتال، به مقداری حافظه موقت نیز نیاز است.
🌀 ممکن است محاسباتی در سیستم انجام شود و بخواهید از نتیجهی آن در مراحل بعدی استفاده کنید.
🌀 یا ممکن است سیگنالی در حال نمونهبرداری باشد و بخواهید آن را به کامپیوتر یا به سیستم دیگری ارسال کنید.
✅ در هر صورت، نیاز دارید که مقادیری را بهصورت موقت در جایی ذخیره کنید.
✅ برای این کار، در FPGAها حافظههایی بهصورت بلوک سختافزاری طراحی شده است.
❇️ ضربکنندهها:
🌀 در تمام FPGAهای شرکت Xilinx، ضرب کنندهها بخش بسیار مهمی هستند که علاوه بر عملیات ضرب، قابلیتهای بسیار زیاد دیگری نیز دارند.
🌀 عمل ضرب در بسیاری از پیادهسازیهای دیجیتال، خصوصاً پیادهسازی الگوریتمهای پردازش سیگنال دیجیتال کاربرد بسیار زیادی دارد.
🌀 اگر ضربکنندههای از پیش ساخته شده در FPGA وجود نداشت، شما مجبور بودید از LUTها استفاده کنید و بهکمک آنها ضربکنندهها را پیادهسازی کنید.
ادامه دارد...
🆔 @FPGA0