FPGA, آموزش, توصیه شده, مقاله

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

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

شیفت رجیستر

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

نحوه‌ی عملکرد شیفت رجیسترها

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

شیفت به راست

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

شیفت به چپ

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

انواع شیفت رجیسترها

ورودی سریال-خروجی سریال (SISO)

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

ورودی سریال-خروجی موازی (SIPO)

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

ورودی موازی-خروجی موازی (PIPO)

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

ورودی موازی-خروجی سریال (PISO)

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

Shift Register شیفت رجیستر

همچنین می‌توانید گیف زیر را که از این لینک دانلود شده است نیز مشاهده کنید. در ادامه می‌خواهیم یک نوع از این شیفت رجیسترها را با استفاده از زبان VHDL توصف کنیم. اول کد مربوطه را خواهیم نوشت سپس به تشریح این کد خواهیم پرداخت. اگر به جزئیات کد توجه کنید متوجه خواهید شد که شیفت رجیستر توصیف شده از نوع SIPO می‌باشد و همچنین شیفت به راست انجام می‌دهد.
در کد بالا ما از یک سیگنال به اسم Middle نیز استفاده کردیم، دلیل آن چیست؟ تنها به این دلیل از سیگنال میانی استفاده کردیم که هم می‌خواهیم از آن بخوانیم و هم در آن بنویسم و این قابلیت در پورت تعریف شده از نوع out وجود ندارد که بخواهیم هم در آن بنویسیم و هم از آن بخوانیم. در پورت نوع out فقط می‌‎توانیم بنویسیم.
با تغییرات کوچکی می‌خواهیم همین نوع شیفت رجیستر را این بار با شیفت به چپ پیاده‌سازی کنیم. اکنون سوالی که شاید برایتان پیش بیاید این است که اگر بخواهیم عرض شیفت‌رجیستر را افزایش بدهیم، باید با همین سختی پشت سرهم یک بیت را به بیت دیگر ارجاع بدهیم؟ خیر، راه‌حل‌های ساده‌تری نیز وجود دارد که ما در قسمت‌های بعدی این راه‌حل‌ها را توضیح خواهیم داد، پس با ما همراه باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

16 دیدگاه در “آموزش FPGA قسمت هجدهم: شیفت رجیستر (بخش اول)

  1. حسن کاشف حسن گفت:

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

    1. Kamin Jalili Kamin Jalili گفت:

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

      چون مورد داشتیم باهامون تماس گرفتن گفتن که آموزش هاتون خیلی پایه‌ای هستن و و از بیس دارید اموزش میدید و چیزهایی ازشون یاد گرفتم. حالا این آقایی که این حرفو زده خودش تو یه شرکت مشغول کار fpga هستش و حتی پروژه های بیرون را هم انجام میده.

      حالا در نظر بگیرید کسی که برای اولین بار اسم fpga به گوشش خورده باید چقدر از اینا را بلد باشه. ما اتفاقا این اموزش را بر مبنای این تولیذ کردیم برای اینکه افرادی که هیچی از این موجود نمیدونن هم بتونن راه بیفتن

      به نظر خودم که مطالب پایه‌ای هستن و نه آسون.

      پروژه هم تو سایت چندتایی موجود هست سرچ کنید.

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

      1. حسن کاشف حسن گفت:

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

        1. Kamin Jalili Kamin Jalili گفت:

          سلام شاید چون زیاد باهاش کار نکردید متوجه نیستید که این موارد چقدر کاربردی هستند. یه پیشنهاد دارم براتون شما از همین امروز شروع کنید و با دقت هرچه تمام این بیست قسمت را بخوانید و بعد از آن سعی کنید که یک پروژه که به نظر خودتان واقعی و کاربردی هست را انجام بدهید ببینید همین بیست قسمت چقدر تو این پروژه به کارتون میاد. در واقع کل پروژه شما با همین چیزا پیاده‌سازی میشه و البته خلاقیت شما.

          مثلا میتونید یک اینترفیس را انتخاب کنید یا پردازش یک سیگنال ساده ولی خب در ابتدای کار پردازش سیگنال را پیشنهاد نمیکنم چون باید کلا تکنیک های که مربوط به تئوری سیگنال ها و سیستم اعداد است را بدانید.

          بیایید مثلا یک پروتکل مثل RS232 را انتخاب کنید و شروع به پیاده سازی کنید هر سوالی هم داشتید همینجا بپرسید من در خدمت شما هستم.

          1. حسن کاشف حسن گفت:

            یکی از مواردی که فکر میکنم خیلی کاربردی باشه Delay هست.
            برای درست کردن delay چی کار باید کرد؟
            در مورد همون RS232 که فرمودید، برای دریافت هر بیت، باید یک تاخیر زمانی مشخص داشته باشیم. مخصوصا زمانی که ارتباط آسنکرون باشه.

          2. Kamin Jalili Kamin Jalili گفت:

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

          3. حسن کاشف حسن گفت:

            سلام
            میشه در مورد قیدها و روش های بالا بردن سرعت عملکرد برنامه مون، هم توضیح بدید.
            اگه میشه یه مثال هم بیارید.
            ممنون.

          4. Kamin Jalili Kamin Jalili گفت:

            سلام.

            الان هاردوری دیزاین کردید که سرعتش از سرعت مورد انتظارت‌ون کمتر؟ و نیاز دارید با استفاده از قیود یا روش‌های دیگر سرعتش را افزایش دهید؟

  2. iman گفت:

    سلام چرا نوشته‌های شما قابلیت دانلود به صورت پی دی اف نداره؟

    1. زئوس Zeus زئوس Zeus گفت:

      واقعا چه کاربردی میتونه داشته باشه
      چون کاربردی براش متصور نبودیم به گذاشتنش هم فکر نکردیم
      واقعا چه کاربردی میتونه داشته باشه ؟
      ممنون از نظرتون

      1. Iman گفت:

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

        1. زئوس Zeus زئوس Zeus گفت:

          اوهوم – اجازه بدید بررسی کنیم ببینیم از نظر فنی چقدر تغییر لازمه که اظافه کنیم این قابلیت رو

  3. علیرضا گفت:

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

    1. Kamin Jalili Kamin Jalili گفت:

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