Sisoog مرجع متن باز الکترونیک-سیسوگ
7.47K subscribers
328 photos
153 videos
5 files
1.51K links
لذت اشتراک گذاری به سبک سیسوگ

Sisoog.com
موتورجستجوی قطعات الکترونیک آی سی ISee
Isee.sisoog.com
پالت انبار مازاد قطعات الکترونیک
pallet.sisoog.com
@Pallet_sisoog

Twitter.com/sisoog
instagram.com/Sisoog.os

Admin: @sisoogOs
E-Shop:shop.Sisoog.com
Download Telegram
📌 پروگرامر USB برای FPGA به همراه سورس و شماتیک
👈#سیسوگ #معرفی #FPGA

🔴ساخت پروگرامر CPLD و FPGA:

با توجه به نیاز استفاده از کنترلر های FPGA و CPLD بر آن شدیم برای بالا بردن سطح آموزش و سهولت دسترسی برد پروگرامری برای این کنترلر ها ارائه کنیم. برای این منظور از چیپ پرکاربرد FT232 استفاده میکنیم.

چیپ های خانواده FTDI تنوع زیادی دارند و کارایی راحت و خوبی را ارائه می‌کنند. در این خانواده چند چیپ وجود دارد که میتوان از آنها برای پروگرام کردن نیز استفاده کرد ” مثل FT232RL و یا FT2232″ .

در این مقاله قصد داریم کنترلر های CPLD و FPGA را به کمک چیپ FT232RL برنامه ریزی کنیم .
چیپ FT232RL

✔️نقشه ساخت پروگرامر و نیاز های آن:

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

✔️پروگرامر FPGA با چیپ FT232

سخت افزار پروگرامر:

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

✔️برد پروگرامر CPLD با آی سی FT232

برنامه پروگرامر CPLD و FPGA :
برای پروگرام کردن FPGA و یا CPLD هم از نزم افزار FT232 SVF میتوانید استفاده کنید.

این برنامه به کمک چیپ FT232دیتا را از بستر SPI به FPGA و یا CPLD انتقال می‌دهد. فایل های پروگرام با پسوند SVF برای برنامه قابل قبول است.

ادامه مطلب به همراه دانلود برنامه و شماتیک در ادامه👇

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش FPGA قسمت اول: FPGA چیست؟
👈#سیسوگ #سیسوگی_ها #آموزش #آموزش_FPGA #FPGA #پردازش_سنکرون #پردازش_موازی #تفاوت_FPGA_و_پردازنده #تفاوت_FPGA_و_میکروکنترلر

🖋 نویسنده : #Phoenix

🤓 سخت یا آسون؟

اصولا ما آدما اگر در اون لحظه سنگی به سرمون نخورده باشه سعی می کنیم که همیشه تو زندگیمون آسون ترین راه را انتخاب کنیم. اجازه بدید یه مثال براتون بزنم، فرض کنید یک سیستم مهندسی داریم و باید این سیستم را با یک معادله ی ریاضی توصیف کنیم و دو راه حل برای توصیف این سیستم وجود دارد:

🔹 توصیف سیستم با یک معادله جبری

🔹 توصیف سیستم با یک معادله ی دیفرانسیل


😁 واضح و مبرهن است که ما راه اول را انتخاب خواهیم کرد. چرا؟ چون هنوز داغ انواع روش های شناخته شده و شناخته نشده حل معادلات دیفرانسیل تازست ولی ما مهندسا دیگه اینقدر پوستمون کلفت شده که از یک معادله جبری نمی ترسیم.


😩 حالا فرض کنید که یک معادله جبری نمی تواند این سیستم مهندسی را به طور کاملا صحیحی توصیف کند، چاره چیست؟ چاره ای نیست جز اینکه برویم سراغ توصیف این سیستم با یک معادله ی دیفرانسیل، بالاخره همیشه که دو راه یا چند راه وجود ندارد بعضی وقتا پیش میاد که یک راه و راه دیگری نیست.


🔦 دیگه وقتشه که از مقدمه گذر کنیم و بریم سراغ اصل مطلب، ولی قبلش اینو بدونید راهی که ما انتخاب کردیم، راه دوم یعنی سخت ترین راه می باشد، بعدا خودتون دلیلش رو خواهید فهمید.


💠 اسم این مسیری که ما انتخاب کردیم و ظاهرا هم ترسناک به نظر میاد (نگران نباشید بعدا متوجه خواهید شد که اونقدرا هم ترسناک نیست) موجودی است به نام FPGA یا به طور دقیق تر Field Programmable Gate Array.


⁉️ پس دلیلش چیه که بخواهیم از این موجود بهره ببریم؟ شاید باورتون نشه تنها یک دلیل، فقط یک دلیل وجود داره که ما را مجبور به استفاده از این موجود می کنه و اون دلیل چیزی نمیتونه باشه جز سرعت بسیار بالای این نوع تراشه ها.


💡 نتیجه کلی که می توان گرفت این است که در پردازنده ها در هر لحظه از زمان تنها یک دستور می تواند اجرا شود اما در FPGA در هر لحظه از زمان چندین عملیات منطقی به صورت مستقل از هم و موازی می تواند انجام شود.


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

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

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش FPGA قسمت دوم: چرا و چگونه FPGA را انتخاب کنیم؟
👈#سیسوگ آموزش #آموزش_FPGA #FPGA #پردازش_سنکرون #پردازش_موازی #تفاوت_FPGA_و_پردازنده #تفاوت_FPGA_و_میکروکنترلر

🖋 نویسنده : #Phoenix

چه موقع سراغ FPGA برویم؟

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

✳️به زبان ساده می توان گفت که سرعت رابطه ای بین حجم الگوریتم و زمان لازم برای به پایان رساندن این الگوریتم است.✳️

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

✔️ما در اینجا سعی می کنیم با یک مثال به توضیح این مسئله بپردازیم.

فرض کنید ما یک رادار داریم که قرار است پس از مشاهده جسم متخاصم به یک سیستم دیگر خبر دهد، حتما حدس خواهید زد که قرار است با چه تاخیری به سیستم دیگر خبر دهد؟ در پاسخ باید گفت تنها عاملی که بعدا ما با استفاده از آن سرعت را مشخص خواهیم کرد همین مقدار تاخیر می باشد. پس تا اینجا ما علاوه بر الگوریتم مورد نظر، زمان تاخیر را نیز در دسترس داریم، حال باید با توجه به داده هایی که داریم سرعتی که خواسته مسئله را برآورده می کند پیدا کنیم و ببینیم که با چه ابزاری قابل پیاده سازی می باشد.


فرض کنید که الگوریتم ما دارای 10 میلیون دستور می باشد که هر دستور در یک کلاک به اتمام می رسد و زمانی که جسم متخاصم برای اولین بار ظاهر شد، رادار حداکثر 10 میلی ثانیه وقت دارد تا سیستم دیگر را خبر کند.......................

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌قسمت چهارم آموزش FPGA: مدار های ترکیبی و ترتیبی
👈#سیسوگ #آموزش #آموزش_FPGA #FPGA

🖋 نویسنده : #Phoenix

در قسمت سوم از مجموعه آموزشی FPGA با نرم افزار ISE آشنا شدیم و در حد یک آشنایی اولیه توانستیم یک پروژه ایجاد کنیم، و یک کد بسیار ساده را نیز پیاده سازی کردیم.
اکنون در این قسمت از آموزش FPGA قصد داریم که در ابتدا با ساختار و محیط های مختلفی، که ما برای تولید سخت افزار، در این محیط ها، کد می نویسیم آشنا شویم و در نهایت یک مدار ترکیبی را با استقاده از کد توصیف کنیم. پس از اینکه در قسمت های قبل به صورت مفصل در مورد ساختار FPGA صحبت کردیم و در قسمت قبلی نیز فقط به نوشتن یک کد ساده بسنده کردیم، دیگر وقتش رسیده است که به قسمت های جذاب داستان نزدیک و نزدیک تر شویم.
تقریبا از همین قسمت است که شما از حالت گنگ بودن و نا مفهومی که شاید به خاطر آشنایی اولیه با FPGA و زبان VHDL است، رهایی خواهید جست، و دست و پنجه نرم کردن با این موجود به ظاهر خشک و عجیب و غریب برایتان هیجان انگیز خواهد بود. پس اجازه بدهید بدون فوت وقت به موضوع اصلی مورد بحث در این مقاله بپردازیم و با مدارات ترکیبی و ترتیبی در محیط های Concurrent و Sequential آشنا شویم.

انواع مدار دیجیتال

مدارهای دیجیتال شامل دو دسته کلی ترکیبی و ترتیبی (ترتیبی سنکرون و ترتیبی آسنکرون) هستند. مدارهای ترکیبی مداراتی هستند که خروجی های مدار فقط به ورودی های مدار در همان لحظه بستگی دارند. اما مدارهای ترتیبی مداراتی هستند که خروجی های مدار علاوه بر ورودی های مدار در همان لحظه، به ورودی های لحظات قبل تر نیز وابسته هستند.

در FPGA نیز محیط هایی برای طراحی اینگونه مدار ها در نظر گرفته شده است که این انتخاب و انعطاف را به ما بدهد که در مواقع لزوم و بر حسب کارایی بتوانیم مدار مورد نظر را طراحی کنیم. اگر توجه کرده باشید امروزه تقریبا تمامی مداراتی که ما با آن ها برخورد می کنیم مدارات ترتیبی هستند، و کمتر پروژه ای را می بینیم که حداقل نوعی از حافظه، که خود نشانگر ترتیبی بودن مدار می باشد در آن به کار نرفته باشد. ما نیز از این قاعده مستثنی نخواهیم بود و در نهایت همه مداراتی که پیاده سازی می کنیم از نوع ترتیبی، و البته ترتیبی سنکرون خواهند بود. اما برای اینکه از اول شروع این مجموعه قرار بر این بود که از سطح مبتدی و از پایه مطالب بیان گردد، و تا حد امکان تمامی سرفصل ها آموزش داده شوند، ابتدا با مدارها ی ترکیبی و نحوه پیاده سازی آن ها آشنا خواهیم شد ولی در نهایت ما تقریبا در هیچ یک از پیاده سازی ها یک مدار مطلقا ترکیبی نخواهیم داشت. همانطور که در بالا اشاره شد مدارهای نهایی ما از نوع ترتیبی سنکرون هستند. ترتیبی سنکرون چیست؟

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

✳️الگو و ساختار کد در زبان VHDL:

الگوی کلی یک کد به صورت مختصر در بالا نمایش داده شده است. تصویر بالا به خوبی محیط های مختلف و کاربرد آن ها را نشان می دهد، اما به صورت کامل تر و دقیق تر در زیر به توضیح هر کدام خواهیم پرداخت:

✔️اسم فایل: محلی که ما باید یک اسم دلخواه برای فایل VHDL (نه اسم پروژه) تعریف کنیم و دقیقا همان نام را در دو مکان دیگر، که در تصویر مشخص کردیم دوباره بنویسیم. البته اگر از Wizard استفاده کرده باشیم این کار به صورت خودکار انجام خواهد گرفت.

✔️محل تعریف پورت ها: در این محل ما باید ورودی-خروجی هایی را که در نهایت قرار است به پین های FPGA متصل شوند تعریف می کنیم.............

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش FPGA قسمت پنجم: اضافه کردن زیرماژول به ماژول اصلی

👈#سیسوگ #آموزش_FPGA #FPGA

🖋 نویسنده : #Phoenix

در قسمت چهارم از مجموعه آموزشی FPGA با مدارات ترکیبی و ترتیبی آشنا شدیم. در نهایت توابع یک، نیم جمع کننده را استخراج و آن ها را به کد VHDL تبدیل کردیم. شاید سوالی که ذهنتان را درگیر کرده باشد، این است که آیا قرار است ما تا ابد، اگر خواستیم مداری را در FPGA پیاده سازی کنیم، باید مشقت استخراج توابع منطقی، جسممان را عذاب بدهد و روحمان را مثل خوره بخورد و بتراشد و تازه پس از این همه عذاب، توابع منطقی استخراج شده را تبدیل به کد VHDL کنیم؟

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

✔️اگر موافق باشید اجالتا اجازه بدهید یک بار دیگه، فقط یک بار دیگه، مدار دیگری را به صورت سطح پایین و بیت به بیت بررسی کنیم. برای این کار، توابع مدار تمام جمع کننده ی چهار بیتی را استخراج و سپس آن ها را به کد VHDL تبدیل می کنیم. در این حین نیز نکات زیادی را به شما آموزش خواهیم داد. پس از اینکه مدار مورد نظر را به صورت سطح پایین و بیت به بیت تحلیل و پیاده سازی کردیم، این کار را به عنوان هنر می بوسیم و می زاریم کنار و با خیال راحت از روشی که در انتهای همین مقاله به شما معرفی خواهیم کرد استفاده می کنیم.

قبل از اینکه بخواهیم مدار تمام جمع کننده چند بیتی را طراحی کنیم باید مقدماتی را بیان کرد.

انواع پورت ها
پورت ها از دو جهت مورد بررسی قرار می گیرند:

✳️مسیر یا جهت
✳️نوع

مسیر یا جهت مشخص می کند که جهت دیتا در کدام سمت خواهد بود. در کل سه جهت برای دیتا وجود خواهد داشت:
ا In
ا Out
ا Inout
وقتی قرار باشد دیتا وارد FPGA بشود از حالت In و هنگام خروج دیتا از FPGA از حالت Out استفاده می کنیم. احتمالا حدس خواهید زد وقتی که بخواهیم به نحوی مجموعی از این دو حالت را داشته باشیم، از حالت Inout استفاده می کنیم.....

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌ساخت ماینر با FPGA و ARM

👈#سیسوگ #FPGA #Miner #ماینر

🖋 نویسنده : #Zeus

✔️چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته!

در ضمن وقتی بحث بیت کوین مطرح میشه مطمئنا بحث ماینر نیز به عنوان یک سخت افزار خاص و ویژه جهت استخراج ارز دیجیتال نیز مطرح میشه و همون موقع هست که صحبت از مهندسین برق و الکترونیک میشه که :

این سخت افزار دقیقا چی هست؟
چرا ما خودمون نمیسازیم؟
و نکته مهمتر من مهندس برق و الکترونیک کجای این تجارت پرسود میتونم باشم؟

بگذارید موارد بالا را هم به زبان و دید یک مهندس برق مرور کنیم!

✔️فلسفه بیت کوین چیه و از کجا اومده؟
✔️چطور بیت کوین استخراج کنیم (ماینینگ) ؟
✔️بلاک چین کجای قضیه است ؟


✳️چطور بیت کوین استخراج کنیم ؟

خوب کم کم داریم به قسمت جالب مقاله می رسیم ؛ جاهایی که داره الکترونیک وارد ماجرا میشه ! همانطور که قبلا گفتیم ؛ برای این که قادر باشید یک بلاک بیت کوین استخراج کنید لازمه که الگوریتمی رو محاسبه کنید و با سعی و خطا سعی کنید که ورودی مناسب را برای الگوریتم پیدا کنید ؛

خوب این الگوریتم بر پایه هش sha256 بنا شده ؛ یعنی اگر شما سخت افزاری داشته باشید که هرچه بیشتر قادر باشه این هش رو انجام بده یعنی میتونید در تعداد بیشتری ورودی در ثانیه بهش بدید تا محاسبه کنید در نتیجه زودتر به جواب مورد نظر خواهید رسید. عبارت هش بر ثانیه از همین جا میآد ؛ تعداد باری که قادر هستید این الگوریتم رو در واحد ثانیه انجامش بدید.

میخوایم این تست رو روی برد های مختلف انجام بدهیم ببینیم که چقدر قادر هستیم که درامد داشته باشیم.

✳️برد رزبری پای
اولین تست رو با برد زربری پای مدل B+ انجام میدیم ؛ این برد داری پردازنده BCM2835 که یک پردازنده تک هسته ای 700 مگاهرتزی است ؛ برای انجام تست از برنامه cpuminer استفاده می کنیم که الگوریتم sha256 با استفاده از cpu پیاده سازی کرده ؛ البته از ورژن بهینه شده برای پردازنده های ARM استفاده می کنیم که سورسش رو هم میتوانید توی GitHub ببینید.

در ادامه متن میتوانید نتایج تست بر روی بردهای رزبری پای,برد اورنج پای (Orange pi) و FPGA مشاهده کنید .....

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش میکروبلیز: مقدمه
👈#سیسوگ #MicroBlaze #FPGA #PicoBlaze #Xilinx

🖋 نویسنده : #BLOOM

بسم الله الرحمن الرحیم

😍در این سری از آموزش ها می خواهیم شما را (البته مخاطبان مبحث FPGA) با میکروبلیز و همینطور نحوه اصولی برنامه نویسی زبان C آشنا کنیم. دلیل آماده سازی این مقاله و مقالات بعدی در این زمینه این است که تقریبا می توان گفت هیچ منبع متن باز فارسی در این زمینه وجود ندارد و اگر هم در سایت های خارجی سرچ کنید مطالب بسیار اندکی در این زمینه پیدا خواهید کرد. حال هدفی که در این آموزش داریم، توضیح کامل و جامع میکروبلیز به همراه زبان C است.

📢📢توصیه ای که داریم لطفا مقالات را از ابتدا تا انتها مطالعه کنید(درصدی فکرش رو نکنید که پراکنده مطالعه کنید چون بخش به بخش این سری از آموزش ها از اهمیت بسیار زیادی برخوردار است و مقاله طوری نوشته شده که برای شما یک ترتیب ذهنی ایجاد می کند البته به شرطی که گفتیم.)


همانطور که از اسم مقاله مشخص شده قصد داریم ابتدا به توضیح کلی میکروبلیز با یک مثال بپردازیم و بعد از این توضیح به آموزش زبان قدرتمند C و در نهایت توضیح میکروبلیز به همراه سوالات متفاوتی که امکان دارد برای شما تا کنون ایجاد شده باشد بپردازیم.

آ🧐 فرض کنید پروژه ای تحت عنوان "خواندن عکس های متعدد از SD CARD را با FPGA" به شما پیشنهاد کرده اند. و می خواهند شما را به عنوان یک مهندس محک بزنند، ماجرا اینگونه است که شما باید برای کارفرما مدت زمان انجام پروژه را به همراه راه حل ارائه کنید. در اینجا پاسخ افراد را به صورت کلی می توان به سه دسته تقسیم کرد.

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


🙈دسته دوم: پاسخی که خواهند داد این است که، پروژه کاملا شدنی است اما راه حل آن ها استفاده از یک میکروکنترلر جانبی واسط (AVR، ARM و ...) کنار FPGA است و مدت زمان تعیین شده را هم حدودا 2 هفته تا 1 ماه تعیین می کنند. که در اینجا کارفرما می گوید این کار باید بدون دستگاهی واسط صورت گیرد چون از لحاظ هزینه ای برای تولید انبوه مقرون به صرفه نخواهد بود. و در این لحظه دسته دوم هم پاسخ دسته اول را به کارفرما می دهند.

🔴اگر به مثال دقت کرده باشید باید به یک نتیجه کلی برسید. "برای انجام کار های متوسط که سرعت بالایی نیاز ندارند، نیازی نیست که حتما و حتما خودتان را ملزم به نوشتن و پیاده سازی آن روی FPGA بدون استفاده از میکروبلیز کنید."

حال سوالی که پیش خواهد آمد این است که، کار های متوسط شامل چه چیز هایی می شوند؟ کار های متوسط یعنی پیاده سازی کار هایی که به راحتی بتوانیم با یک میکروکنترلر انجام دهیم. دقیقا مثال بالا نمونه ای از انجام کار های متوسط است.

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

آیا نیاز به یادگیری زبان HDL است؟ اگر صرفا یادگیری و پیاده سازی میکروبلیز باشد. خیر نیاز چندانی ندارید و به راحتی می توانید کار خود را انجام دهید اما مسله اینجا است کسی که به صورت کلی سمت یادگیری FPGA می آید تسلط بر این زبان ها یعنی یکی از زبان های VHDL یا Verilog دارد. اگر هم برای کار خودمان بخواهیم مثالی بزنیم. انجام پروژه های تلفیقی است که بدون تسلط به HDL امکان پذیر نخواهد بود.

📢📢توصیه ای که ما به شما داریم حتما و حتما به یکی از زبان های VHDL یا Verilog تسلط داشته باشید.( برای یادگیری این مباحث هم به سری آموزش های FPGA سایت مراجعه کنید.)

برای انجام پروژه های تلفیقی از کدام زبان توصیف سخت افزار استفاده می کنید؟ زبانی که ما در این سری از آموزش ها استفاده می کنیم، زبان VHDLاست.

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش میکروبلیز: آموزش زبان برنامه‌نویسی C (قسمت اول)
👈#سیسوگ #FPGA #MicroBlaze #آموزش_زبان_C #آموزش_میکروبلیز

🖋 نویسنده : ##BLOOM

بسم الله الرحمن الرحیم

اگر قسمت قبل آموزش میکروبلیز: مقدمه را خوانده باشید در واقع یک مقدمه ای از میکروبلیز و اهمیت آن در FPGA اشاره شده بود که توصیه می کنم اگر قسمت قبل را مطالعه نکرده اید حتما این کار را انجام دهید چون یک دید کلی از مبحث میکروبلیز به همراه نقشه راه این سری از مقالات بدست خواهید آورد. که فکر می کنیم شاید خیلی از سوالات شما در این زمینه حل شود و به یک دید نسبتا خوبی در این زمینه برسید.

🤔اگر بخواهیم به زبان ساده تر بگوییم میکروبلیز را هم دقیقا یک میکروکنترلر درنظر بگیرید(فارغ از نوع ساختار و خیلی از مسائل دیگری که این میکرو را از سایر متمایز می کند که در بخش خودش به این موارد خواهیم پرداخت ان شالله). و همانطوری که می دانید برای ارتباط با یک میکروکنترلر باید بتوانیم به زبان آن نوع میکروکنترلر خاص صحبت کنیم حال در این مقاله و چند مقاله بعدی می خواهیم به قواعد و دستورات اولیه زبان C بپردازیم.

شاید این سوال ذهن شما را درگیر کرده باشد که چرا از همان ابتدا به آموزش میکروبلیز نمی پردازید؟ در جواب باید بگوییم فرض کنید الان دقیقا این آموزش ها را یادگرفته اید و دقیقا وارد صفحه برنامه نویسی در محیط SDK (به توضیح مفصل این نرم افزار خواهیم پرداخت) شدیم خب اگر این اصول را ندانید که چطور باید در این محیط برنامه نویسی کنید ممکن است که یک سری از کار ها را بتوانید انجام دهید مثل راه اندازی سخت افزار های جانبی و ... اما اگر به هر دلیلی خواستید برنامه ای بنویسید که در هر FPGA با مشخصات خاصی که برای میکروبلیز کار کند راه حل چیست؟ و یا اگر از شما انجام یک پروژه تلفیقی (ترکیب چند بخش از با یک دیگر) خواسته شد چه کاری را باید انجام دهید؟ و یا ...

🔴قوانین برنامه نویسی در زبان C چیست؟

هر زبان برنامه نویسی از یک سری اصول پیروی می کند زبان برنامه نویسی C هم از این مستثنی خارج نیست. حال می خواهیم برخی از این اصول را بیان کنیم تا با فراگیری این اصول از برخی خطاهای احتمالی در کامپایلر ها جلوگیری کنیم.

حساس بودن به حروف بزرگ و کوچک

قرار دادن سمی کالون(;) در انتهای دستور C البته به جز دستورات ماکرو (define)

برای کامنت یک خط از کد دستور // و برای کامنت چندین خط از برنامه از علامت /*...*/ استفاده می کنیم.

🔴قاعده کلی برنامه نویسی در زبان C چیست؟

قاعده ی کلی که در برنامه نویسی وجود دارد و می توان تشخیص داد که چه کدی حرفه ای است یا خیر؟ شامل چندین مورد می باشد. که در ادامه به مهم ترین این شرط ها می پردازیم.

📢اگر کدی سه شرطی را که در ادامه قرار می دهیم داشته باشد. می توانید بگویید که تقریبا این کد اصولی نوشته شده است.

شرط اول: خوانایی کد.

شرط دوم: درک صحیح و درست از عملکرد کد.

شرط سوم: بهینه بودن کد.

🤔مستلزم پیاده سازی شرایط بالا جز با آشنایی دستورات C مثل دستورات ماکرو، ساختار Struct و... بدست نخواهد آمد ( اگر مواردی که ذکر شد با آن ها آشنایی ندارید نگران نباشید چون در قسمت های بعد البته به شرط حیات به تمامی این موارد خواهیم پرداخت).

🔴برنامه نویسی اصولی در زبان C چیست؟

دسته اول: این دسته از افراد، دقیقا افرادی هستند که نتیجه مطلوب را به کارفرما می دهند و دقیقا خواسته کارفرما را برآورده می کنند اما اگر برنامه ای را که نوشته اند کارفرما بخواهد تغییراتی را در آن اعمال کند و با کد دیگری تلفیق کند بسیار اذیت خواهد شد به این دلیل که کد هیچ طبقه بندی مشخصی ندارد و باعث گمراهی خواننده برنامه خواهد شد. در نتیجه این افراد با اینکه پروژه را با موفقیت انجام داده اند اما شانس کمتری را دارند که مورد تایید کارفرما قرار بگیرند.


دسته دوم: این دسته از افراد هم دقیقا مثل دسته اول از کد جواب می گیرند اما با این تفاوت که مشکلات دسته اول را ندارند و دقیقا کدی که نوشته اند از یک قالب کلی پیروی می کند و باعث سردرگمی خواننده کد نمی شود و در برنامه های دیگر هم قابلیت تلفیق برنامه وجود دارد که اصطلاحا به این نوع برنامه ها و این مدل برنامه نویسی Portable می گویند. و نکته ای که وجود دارد این است که، این افراد شانس بیشتری برای مورد تایید قرارگرفتن کارفرما دارند.
البته این مژده را هم به مخاطبین سیسوگی دهیم که به زودی آموزش زبان C بر محوریت میکروکنترلر ها را منتشر خواهیم کرد که توصیه می کنیم علاوه بر مطالعه این سری از مقالات، حتما مقاله ای که به زودی خواهیم گذاشت را مطالعه کنید چون دید خوبی به شما همینطور به علاقه مندان میکروبلیز خواهد داد.

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش میکروبلیز قسمت سوم: آموزش زبان برنامه‌نویسی C

👈#سیسوگ #FPGA #MicroBlaze #آموزش_زبان_C #آموزش_میکروبلیز

🖋 نویسنده : #BLOOM

اگر قسمت دوم آموزش میکروبلیز قسمت دوم: آموزش زبان برنامه نویسی C را مطالعه کرده باشید به مسائلی همچون اصول اولیه و قواعد کلی برنامه نویسی زبان C اشاره کردیم که توصیه می کنیم قبل از خواندن این قسمت حتما قسمت قبل را مطالعه کنید چون حتی اگر یک برنامه نویس حرفه ای هم باشید حداقل می تواند به عنوان یادآوری برای شما خالی از لطف نباشد. همانطوری که گفته بودیم تا چند قسمت آینده به زبان C خواهیم پرداخت و پس از آن وارد مبحث میکروبلیز خواهیم شد (مطمئنا برای خیلی از دوستان که به زبان C مسلط هستند این قسمت ها کسل کننده است اما ما تلاش می کنیم مقالات را به گونه ای بنویسیم که اگر فردی هم هیچ اطلاعاتی در این زمینه نداشت نیاز نباشد که منابع دیگری را مطالعه کند بلکه با خواندن همین سری از مقالات به یک درک و یک تسلط نسبی در این زمینه برسد).

در این مقاله می خواهیم به تعریف اصولی متغیر در زبان برنامه نویسی C بپردازیم. این مبحث به قدری اهمیت دارد که تصمیم گرفتیم یک مقاله صرفا برای تعریف اصولی متغیر در نظر بگیریم.
موضوعاتی که در آموزش این قسمت به اون اشاره میکنیم!

متغیر چیست؟
استفاده از متغیر ها به صورت اصولی در برنامه نویسی C
الگوریتم حل مسئله
تعریف متغیر به صورت اصولی در برنامه نویسی C
کلاس حافظه چیست؟
انواع کلاس حافظه چیست؟
کلاس حافظه اتوماتیک
کلاس حافظه خارجی
کلاس حافظه استاتیک
کلاس حافظه ثبات

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش میکروبلیز قسمت چهارم: آموزش زبان برنامه‌نویسی C
👈#سیسوگ #FPGA #MicroBlaze #آموزش_زبان_C #آموزش_میکروبلیز

🖋 نویسنده : #BLOOM

اگر قسمت سوم آموزش میکروبلیز " آموزش میکروبلیز قسمت سوم: آموزش زبان برنامه نویسی C " را مطالعه کرده باشید به بحث جذاب متغیر ها با شناسایی کلاس های حافظه و همینطور به نحوه اصولی تعریف متغیر به همراه کلاس های حافظه پرداختیم.
☺️ حال در این قسمت می خواهیم ابتدا به تعریف اولیه عملگر ها و در ادامه به انواع مختلف عملگر ها به همراه تقدم آن ها در برنامه نویسی به همراه مثال های متعدد بپردازیم.


🔴عملگر (Operator) در برنامه نویسی به ساختاری گفته می شود که رفتاری مشابه با تابع دارد اما از نظر سازمان گرامری با آن متفاوت می باشد.

از سوی دیگر در اکثر زبان های برنامه نویسی، اجازه تعریف توابع به برنامه نویس داده می شود اما ممکن است تنها استفاده از عملگرهای از پیش تعریف شده در کدنویسی مجاز باشد. به علاوه تعداد عملوندها برخلاف تعداد پارامترهای توابع محدود هستند.
🤔اغلب عملگرها در زبان های برنامه نویسی تنها یک یا دو عملوند دارند و تعداد اندکی از عملگرها از تعداد بیشتری عملوند برخوردار هستند (به عنوان مثال عملگر?: در زبان C یک عملگر سه عملوندی به شمار می رود در ادامه به این عملگر را بیشتر توضیح می دهیم). با وجود این تفاوت ها می توان بسیاری از عملگرها نظیر عملگر باقی مانده ی تقسیم یک عدد بر عددی دیگر را با یک تابع دو پارامتری که چنین عملی را انجام می دهد معادل دانست.

🔴 انواع عملگر ها در برنامه نویسی زبان C

عملگر های ریاضی ( Arithmetic Operators)

عملگر های منطقی ( Logical Operators)

عملگر های بیتی ( Bitwise Operators)

عملگر های انتسابی (Assignment Operators)

عملگر های رابطه ای (Relational Operators)

عملگر های متفرقه (Misc Operators)


x = 7 + 3 * 2;

🤔 به نظر شما جواب چه عددی است؟ خیر اشتباه حدس زدید جواب 13 است نه 20. دلیل این اتفاق هم چیزی جز رعایت نکردن این اولویت بندی ها نیست چون اگر به تصویر بالا دقت کنید تقدم عمل * بیشتر از + است در نهایت اتفاقی که می افتد ابتدا عمل ضرب صورت می گیرد و در نهایت جمع می شود.

خب سوالی که شاید برای خیلی از شماها پیش آید این است که باید ترتیب این اولویت بندی ها را باید حفظ باشیم؟ خیر هیچ نیازی نیست بلکه راه حل این است که از پرانتز() برای اولویت بندی در برنامه ها استفاده کنیم دلیل این کار هم این است که، پرانتز () بالاترین تقدم را نسبت به همه عملگر ها دارد. به طور مثال اجازه دهید که برنامه بالا را تصحیح کنیم.

x = (7 + 3) * 2;
🤓 خب حالا به نظر شما جواب چند است؟ بله درست حدس زدید 20 جواب درست است. دلیل هم این است که تقدم پرانتز بیشتر از عمل ضرب است پس اتفاقی که می افتد این است که ابتدا محاسبات داخل پرانتز صورت می گیرد و در نهایت عمل ضرب صورت می گیرد.

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش میکروبلیز قسمت پنجم : آموزش زبان برنامه‌نویسی C
👈#سیسوگ #FPGA #MicroBlaze #آموزش_زبان_C #آموزش_میکروبلیز

🖋 نویسنده : #BLOOM

☺️اگر سری آموزش های میکروبلیز را تا کنون دنبال کرده باشید به مطالبی چون تعریف اصولی متغیر و عملگر ها در زبان برنامه نویسی C پرداختیم که برای دیدن این سری از آموزش ها می توانید اینجا کلیک کنید. در این قسمت می خواهیم به توضیح اصولی و دقیق کاراکتر ها، رشته ها و آرایه ها به همراه مثال در هر بخش بپردازیم.

آرایه در زبان برنامه نویسی C چیست؟

آرایه (Array)، تعدادی عنصر از یک نوع خاص هستند که با یک دیگر تعریف می شوند و با استفاده از اندیس های (در ادامه توضیح می دهیم) متناظر آنها، می توانیم به آنها اشاره نماییم.

📢📢نکته طلایی: باید و حتما نوع اشاره گر ها با یک دیگر یکی باشد به طور مثال نوع P و Balance هر دو از نوع Double هستند.

🔴نوشتن توابع بر حسب آرایه ها

این بخش خود شامل سه قسمت است که به صورت زیر تقسیم می شوند.(البته هنوز در مورد توابع صحبت نکرده ایم که در ادامه مقالات به طور مفصل به این مبحث خواهیم پرداخت نگران نباشید)

تابع اشاره گر با آرایه ها

تابع آرایه با اندازه محدود

تابع آرایه با اندازه نامحدود

رشته در زبان برنامه نویسی C چیست؟

🔴رشته، آرایه ای از کاراکترها است. پس برای تعریف رشته باید مانند تعریف آرایه عمل کرد.
معرفی توابع کاربردی کتابخانه String.h

🔴تابع strcmp

این تابع کار مقایسه بین دو مقدار S1 و S2 را انجام می دهد که خروجی آن از سه حالت زیر خارج نیست.

⬅️حالت اول (0>):

زمانیکه مقدار S1 کوچکتر از مقدار S2 باشد که در این حالت خروجی نادرست است.

⬅️حالت دوم (0):

زمانیکه مقدار S1 و S2 برابر باشند که در این حالت مقدار خروجی درست است.

⬅️حالت سوم (0<):

زمانیکه مقدار S1 بزرگتر از مقدار S2 باشد که در این حالت هم خروجی نادرست است.

برای درک بهتر به مثال زیر دقت کنید.
در این مثال یک رشته که نام آن apple انتخاب شده است در اول برنامه تعریف شده است و در نهایت برنامه ای نوشته شده است که در صورتیکه رشته ای برابر با apple وارد شود در خروجی عبارتی مبنی بر صحیح بودن جواب می بینیم در غیر اینصورت پاسخی مبنی بر صحیح بودن جواب دریافت نخواهیم کرد.

دقت کنید که برای اینکه درک بهتری از کتابخانه های استفاده شده در زبان C داشته باشید توصیه میکنیم روی ادامه مطلب کلیک کنید.

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آموزش میکروبلیز قسمت ششم : آموزش زبان برنامه‌نویسی C
👈#سیسوگ #FPGA #MicroBlaze #آموزش_زبان_C #آموزش_میکروبلیز

🖋 نویسنده : #BLOOM

☺️اگر تاکنون این سری از آموزش ها را دنبال کرده باشید به مباحثی از زبان برنامه نویسی C از جمله

🔴 متغیر ها

🔴 کلاس های حافظه

🔴 عملگر ها

🔴 رشته ها

🔴 آرایه ها

🔴 کاراکتر ها
پرداختیم که توصیه می کنم حتما مقالاتی که نوشته شده اند حتی در صورتیکه فکر می کنید به این مباحث مسلط هستید مجددا بخوانید (یاداوریش که ضرر نداره). حال در این مقاله می خواهیم به مبحث بسیار کاربردی و همینطور خطرناک حلقه ها بپردازیم. حالا چرا خطرناک؟ برای جواب به این سوال توصیه می کنم که این مقاله را تا انتها بخوانید.


حلقه در زبان برنامه نویسی C چیست؟

در واقع اگر بخواهیم حلقه را تعریف کنیم. باید بگوییم یک گوی را که دارای یک نقطه شروع و پایان است، را در نظر بگیرد وسپس گوی را بچرخانید (با فرض چرخش محدود گوی). چیزی که مشاهد می کنید این است که این توپ دائما از نقطه شروع به نقطه پایان می رود و این کار به صورت مداوم در حال انجام است تا زمانیکه چرخش به اتمام رسد. در حلقه ها هم دقیقا همین امر صدق می کند دقیقا از یک نقطه شروع به کار می کنند تا زمانیکه به نقطه پایان برسند و مجددا این روند تکرار می شود. حال اگر تعداد تکرار در حلقه مشخص شده باشد که چه مقدار باید از نقطه شروع تا پایان، این تکرار صورت گیرد را، حلقه های محدود یا Finite می گوییم و اگر این تعداد تکرار در حلقه نامشخص باشد به این معنی که تعداد تکرار شروع و پایان محدود نباشد را حلقه Infinite یا بی نهایت (نامحدود) می گوییم (امیدوارم که تونسته باشیم این مفهوم رو به درستی انتقال داده باشیم). خب پس از اینکه با مفهوم حلقه و دلیل استفاده از آن در برنامه را متوجه شدیم نوبت به معرفی حلقه ها رسیده است.

🔴انواع حلقه ها در زبان برنامه نویسی C

حلقه While

حلقه For

حلقه do_while

حلقه های تودرتو (nested loops)


🔴حلقه While

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


🔴حلقه For

از این حلقه زمانی استفاده می کنیم که بخواهیم تعداد گام های شمارش را در حلقه مشخص کنیم و همچنین می توانیم یک شرط را به همراه مقدار دهی اولیه (مثل حلقه while ) تعیین کنیم.


🔴حلقه do_while

این حلقه هم دقیقا عملکردی مشابه حلقه while است با این تفاوت که ابتدا دستورات درون بدنه آن چک می شوند و در نهایت درستی یا نادرسی حلقه را برسی می کند. به عبارت دیگر بزرگترین تفاوت این حلقه با سایر حلقه ها این است که اگر بخواهیم یک دستور در برنامه به هر دلیلی ابتدا یک بار اجرا شود و در نهایت اگر شرط درون حلقه درست بود مجددا این عمل صورت گیرد و در صورتیکه نبود از آن خارج شود یکی از بهترین دستور ها که دقیقا این عمل را انجام می دهد دستور do_while می باشد.


🔴حالت های کنترل حلقه

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


🔴حلقه یا شمشیر دو لبه

حلقه را می توان به یک شمشیر دو لبه تشبیه کرد. سوالی که هست چرا شمشیر دولبه؟ فرض کنید یک شمشیر دو لبه را در دست خود گرفته اید در صورتیکه راه و روش استفاده از این شمشیر را ندانید اتفاقی که خواهد افتاد این است که اول از همه به خودتان آسیب می زنید. و در صورتیکه راه و روش استفاده از آن را بلد باشید. بدون اینکه به خودتان ضربه بزنید به راحتی می توانید از خودتان دفاع کنید(خب چه ربطی به حلقه داشت).

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
📌آرایه‌ها در VHDL
👈#سیسوگ #FPGA

🖋 نویسنده : #Phoenix

💭اگر با زبان های برنامه نویسی کار کرده باشید می دانید که انواع مختلف داده برای کارهای مختلف برای ما وجود دارد. از داده های اینتیجر، با علامت و بی علامت بگیرید تا ساختمان ها و بسیاری از داده های دیگر. در زبانی مانند زبان C انواع این داده ها وجود دارند. در این مقاله ما می خواهیم در رابطه با آرایه ها در زبان VHDL صحبت کنیم، اما ابتدا به توضیحاتی که در ادامه خواهیم داد توجه کنید.

🧐خیر حافظه های دیجیتال یا به صورت فلیپ فلاپ یا رجیستر هستند که یک یا چندین بیت را در خود جای می دهند و یا هم حافظه هایی مثل RAM هستند که ساختارشان کمی متفاوت است و با آدرس دهی به آن می توان به یک وکتور دسترسی داشت. پس در واقع چیزی به اسم حافظه های چند بعدی یا به صورت ماتریسی وجود ندارد.

👈اینکه ما در زبان های برنامه نویسی آرایه های چند بعدی داریم و یا ماتریس می توانیم تعریف کنیم دلیل بر این نیست که درون تراشه ها نیز همچین حافظه هایی وجود داشته باشد، بلکه این سبک کدنویسی برای راحت بودن کاربر و نزدیک بودن به دنیای قابل فهم برای کاربر می باشد.

🤔حافظه ها در FPGA
به صورت کلی در FPGAها به دو صورت می توانیم حافظه ها را توصیف کنیم. یکی استفاده از LUTها (شامل فلیپ فلاپ، مالتی پلکسر و یک سری ادوات دیگر می شود) و دیگری استفاده از RAM است. ما در این مقاله به RAM نخواهیم پرداخت و توضیحاتی در رابطه با ساختن حافظه با فلیپ فلاپ و LUT خواهیم داد.

😊در مثالی دیگر می خواهیم با استفاده از آرایه و تعریف نوع جدید، یک مالتی پلکسر را تعریف کنیم. البته ما در این قسمت با استفاده از ساختار شرطی مالتی پلکسر را تعریف کردیم. اکنون می خواهیم به روشی دیگر یک مالتی پلکسر تعریف کنیم.

ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ