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

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

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

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

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

شیفت رجیستر

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

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

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

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

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

شیفت به راست

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

شیفت به چپ

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

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

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

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

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

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

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

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

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

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

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

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

همچنین می‌توانید گیف زیر را که از این لینک دانلود شده است نیز مشاهده کنید.

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

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

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

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

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

0 نفر

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

توجه

دیدگاه ها

16 دیدگاه

  • حسن
    ۲۷ اسفند ۱۳۹۸

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

    • Phoenix
      ۲۸ اسفند ۱۳۹۸

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

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

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

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

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

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

      • حسن
        ۲۸ اسفند ۱۳۹۸

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

        • Phoenix
          ۲۸ اسفند ۱۳۹۸

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

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

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

          • حسن
            ۲۹ اسفند ۱۳۹۸

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

            0
          • Phoenix
            ۲ فروردین ۱۳۹۹

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

            0
          • حسن
            ۱۱ فروردین ۱۳۹۹

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

            0
          • Phoenix
            ۱۳ فروردین ۱۳۹۹

            سلام.

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

            0
  • iman
    ۲۹ آبان ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۲ آذر ۱۳۹۸

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

      • Iman
        ۲ آذر ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۲ آذر ۱۳۹۸

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

  • آموزش FPGA قسمت نوزدهم: شیفت رجیستر (بخش دوم) - سیسوگ - Sisoog
    ۱۱ آبان ۱۳۹۸

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

  • علیرضا
    ۷ آبان ۱۳۹۸

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

    • Phoenix
      ۸ آبان ۱۳۹۸

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

  • آموزش FPGA قسمت هفدهم: توصیف حافظه‌های چند بیتی (رجیستر یا ثبات) - سیسوگ - Sisoog
    ۸ مهر ۱۳۹۸

    […] که به خوبی این موضوع ساده را فرا گرفته باشید. در قسمت هجدهم به توصیف شیفت رجیستر خواهیم […]

پر بحث ترین ها

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

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

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

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

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

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

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

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

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

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

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

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

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

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

Mahdi.h   Mahdi.h  
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

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

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

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