آموزش FPGA قسمت نوزدهم: شیفت رجیستر (بخش دوم)

آموزش FPGA قسمت نوزدهم: شیفت رجیستر (بخش دوم)

آموزش FPGA قسمت نوزدهم: شیفت رجیستر (بخش دوم)
آموزش FPGA قسمت نوزدهم: شیفت رجیستر (بخش دوم)

for;

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

اما اگر می‌خواستیم عرض بیت شیفت رجیستر را افزایش بدهیم با یک مشکل جدی روبه‌رو بودیم، و باید تعداد خطوط کدی که می‌نوشتیم بیشتر و بیشتر می‌شد که این موضوع برای شیفت رجیسترهایی با تعداد بیت زیاد اذیت‌کننده است.

چندین راه برای اینکه بتوانیم این مشکل را هموار کنیم وجود دارد یک راه استفاده از عملگرهاست، اما چون هنوز با عملگرها در زبان VHDL آشنا نیستیم نمی‌توانیم از آن‌ها استفاده کنیم. شما بعدا که با این عملگرها آشنا شدید، می‌توانید خودتان کد موردنظر را بنویسید.

راه دیگر استفاده از ساختار for در زبان VHDL می‌باشد که ابتدا باید با این ساختار آشنا شویم و پس از اینکه با عملکرد این ساختار آشنا شدیم کدهای قسمت قبل را با این ساختار توصیف کنیم.

ساختار for در زبان VHDL

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

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

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

ما نیز قصد داریم که با همین ایده کدهای جلسه قبل را بهینه‌تر کنیم و تا هر مقدار که بخواهیم با تغییراتی بسیار کوچکی عرض بیت شیفت رجیستر را افزایش بدهیم.

برای دسترسی به الگوی ساختار for در زبان VHDL می‌توانیم همانند تصویر زیر در نرم‌افزار ISE، ابتدا روی علامت لامپ روشن کلیک کنید و سپس طبق تصویر، For Loop را از دسته Loops انتخاب کنید تا به الگویی که در ادامه کد آن آورده می‌شود برسید.

ساختار for در زبان vhdl

در کد بالا به جای variable_name، باید از یک اندیس استفاده کنیم که عمل شمارش را برای ما انجام می‌دهد.

به این دلیل مشخصا اسم اندیس را به کار می‌بریم و نمی‌گوییم متغیر یا سیگنال، چون که قرار نیست variable_name در ابتدای کد به عنوان سیگنال یا متغیر تعریف شود و بعد در ساختار For Loop از آن استفاده کنیم، فقط و فقط به جای variable_name یک اندیس قرار می‌دهیم و در هیچ کجای کد این اندیس نه تعریف می‌شود و نه مقداردهی.
حال شاید برایتان سوال پیش آمده باشد که در زبان‌های برنامه‌نویسی ما اندیس‌ها یا همان شمارنده‌هایی که در حلقه‌ها به کار می‌بردیم را باید از قبل به عنوان متغیر تعریف می‌کردیم، اما چرا اینجا اینکار را نمی‌کنیم؟ به صورت خیلی خلاصه جواب این سوال برمی‌گردد به ساختار FPGA و CPU و کد نهایی که برای FPGA و CPU تولید می‌شود، اما چون این مبحث از حوصله‌ی این مقاله خارج است، پیدا کردن پاسخ را بر عهده خودتان می‌گذاریم. 

معمولا اسم این اندیس را i می‌گذاریم و بعدا در کد اصلی از همین اندیس کمک خواهیم گرفت.

به جای lower_limit از یک عدد صحیح مثبت به عنوان کران پایین اندیس i و به جای upper_limit از یک عدد صحیح مثبت به عنوان کران بالای اندیس i استفاده می‌کنیم.

statementها هم همان ارجاعات هستند.

در ادامه کدهای قسمت هجدهم را با ساختار for بازنویسی خواهیم کرد تا موضوعات بیان شده را به خوبی درک کنید.

کد زیر همان شیفت رجیستری است که در قسمت قبل عمل شیفت به راست را انجام می‌داد:

کد زیر همان شیفت رجیستری است که در قسمت قبل عمل شیفت به چپ را انجام می‌داد.

کدهای بالا را با استفاده از generic می‌توانید بهینه‌تر نیز بنویسید که این موضوع را چون قبلا به آن پرداختیم به عهده خودتان می‌گذاریم. در قسمت بیستم در مورد عملگرها صحبت خواهیم کرد.

حمایت از سپهر

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

دیدگاه ها

5 دیدگاه

  • Fatem
    ۸ دی ۱۳۹۸

    سلام ممنونم از توضيحاتتون
    عالي بود
    ميشه لطفا دوتا اموزش ديگه رو هم بذارين؟
    خيلي بهشون نياز دارم😭

    • Phoenix
      ۹ دی ۱۳۹۸

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

  • نفیسه
    ۴ دی ۱۳۹۸

    سلام با تشکر از سایت خوب و توضیحات عالیتون
    لطفا درس بعدی رو قرار بدید من کم کم امتحان fpga دارم
    خوشحال میشم یک -دو درس دیگه تا آخر دی قرار بدید
    تا همین جا هم این سایت کلی به من کمک کرد
    باتشکر

    • Phoenix
      ۵ دی ۱۳۹۸

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

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

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

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

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

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

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک