شیفت رجیستر (Shift Register) یکی از بلوک‌های سازنده اساسی در مدارهای منطقی ترتیبی (Sequential Logic Circuits) است که برای ذخیره‌سازی و جابجایی داده‌های دودویی (بیت‌ها) طراحی شده است. هسته اصلی یک شیفت رجیستر، مجموعه‌ای از فلیپ‌فلاپ‌ها (Flip-Flops) است که به صورت آبشاری به یکدیگر متصل شده‌اند و تحت کنترل یک سیگنال ساعت مشترک (Clock) عمل می‌کنند.

عملکرد اصلی یک شیفت رجیستر، همانطور که از نامش پیداست، “جابجایی” یا “شیفت” بیت‌های داده است. در هر پالس ساعت، بیت‌های موجود در رجیستر یک موقعیت مشخص (به راست یا چپ) جابجا می‌شوند. این قابلیت جابجایی، شیفت رجیسترها را به ابزاری قدرتمند برای وظایف مختلف در سیستم‌های دیجیتال تبدیل کرده است، از جمله تبدیل داده‌های سریال به موازی یا برعکس، و ایجاد تأخیرهای زمانی کنترل‌شده.

شیفت رجیسترها را می‌توان بر اساس نحوه ورود و خروج داده به چهار دسته اصلی تقسیم کرد:

  1. Serial In, Serial Out (SISO): داده‌ها به صورت بیت به بیت و متوالی وارد می‌شوند و پس از ذخیره‌سازی و جابجایی، به صورت بیت به بیت و متوالی نیز از خروجی خارج می‌شوند.
  2. Serial In, Parallel Out (SIPO): داده‌ها به صورت سریال وارد می‌شوند، اما پس از کامل شدن ورود، می‌توانند به صورت همزمان و موازی از تمام بیت‌های رجیستر خوانده شوند.
  3. Parallel In, Serial Out (PISO): داده‌ها به صورت همزمان و موازی وارد رجیستر می‌شوند و سپس به صورت بیت به بیت و متوالی از خروجی خارج می‌گردند.
  4. Parallel In, Parallel Out (PIPO): داده‌ها هم به صورت موازی وارد می‌شوند و هم به صورت موازی از خروجی قابل دسترس هستند. این نوع اساساً یک رجیستر موازی ساده است که قابلیت شیفت نیز دارد.

شیفت رجیستر Serial In, Serial Out (SISO)

شیفت رجیستر Serial In, Serial Out (SISO) ابتدایی‌ترین نوع شیفت رجیستر است و مبنای بسیاری از عملیات‌های ارتباطی و پردازشی سریال را تشکیل می‌دهد. در یک SISO، بیت‌های داده به صورت متوالی (یک بیت در هر پالس ساعت) از طریق یک ورودی واحد (Serial In) وارد می‌شوند. این بیت‌ها به ترتیب در فلیپ‌فلاپ‌های رجیستر ذخیره و در هر سیکل ساعت یک موقعیت به جلو شیفت داده می‌شوند. در نهایت، همین بیت‌ها نیز به صورت متوالی و یک به یک از طریق یک خروجی واحد (Serial Out) از رجیستر خارج می‌شوند.

مهم‌ترین ویژگی شیفت رجیستر SISO، ایجاد یک خط تأخیر (Delay Line) برای داده‌های سریال است. اگر یک رجیستر SISO شامل N فلیپ‌فلاپ باشد، هر بیت داده‌ای که از طریق ورودی وارد می‌شود، دقیقاً پس از N پالس ساعت از خروجی ظاهر خواهد شد. این تأخیر کنترل‌شده، کاربردهای فراوانی در همگام‌سازی سیگنال‌ها، تبدیل فرمت‌های داده‌ای و پیاده‌سازی حافظه‌های موقت دارد.

کاربردهای شیفت رجیستر SISO:

  • ایجاد تأخیر: برای تأخیر دادن به سیگنال‌های دیجیتال در مدارهایی که نیاز به همگام‌سازی زمانی دقیق دارند.
  • بافرینگ سریال: ذخیره‌سازی موقت رشته‌های بیتی سریال قبل از پردازش یا انتقال بیشتر.
  • مدارهای تست: استفاده در مدارهای تست مانند اسکن چین (Scan Chain) برای تست یکپارچگی تراشه‌ها.
  • مولدهای شبه تصادفی: با افزودن منطق فیدبک، می‌توان از SISO برای تولید دنباله‌های بیتی شبه تصادفی استفاده کرد.

اصول عملکرد SISO

یک شیفت رجیستر SISO N بیتی از N عدد فلیپ‌فلاپ نوع D (D-Flip-Flop) تشکیل شده است که به صورت آبشاری به هم متصل شده‌اند. خروجی Q هر فلیپ‌فلاپ به ورودی D فلیپ‌فلاپ بعدی متصل می‌شود. ورودی سریال (Serial In) به D اولین فلیپ‌فلاپ متصل است، و خروجی سریال (Serial Out) از Q آخرین فلیپ‌فلاپ گرفته می‌شود. تمامی فلیپ‌فلاپ‌ها یک سیگنال کلاک مشترک CLK دریافت می‌کنند.

فرآیند شیفت داده‌ها:

  1. ورود اولین بیت: در لبه فعال اولین پالس ساعت، اولین بیت داده از ورودی سریال (Din) به اولین فلیپ‌فلاپ وارد شده و ذخیره می‌شود. سایر فلیپ‌فلاپ‌ها هنوز حاوی داده‌های قبلی (یا صفر) هستند.
  2. شیفت به جلو: در لبه فعال پالس ساعت دوم، بیت موجود در اولین فلیپ‌فلاپ به دومین فلیپ‌فلاپ منتقل می‌شود، و بیت جدید دوم از Din به اولین فلیپ‌فلاپ وارد می‌گردد. این فرآیند ادامه می‌یابد.
  3. خروج داده: پس از N پالس ساعت (برای یک رجیستر N بیتی)، اولین بیتی که وارد رجیستر شده بود، به آخرین فلیپ‌فلاپ می‌رسد و از طریق خروجی سریال (Dout) ظاهر می‌شود. هر پالس ساعت بعدی، بیت بعدی را از خروجی خارج می‌کند.

به عبارت دیگر، در هر لبه فعال کلاک، هر فلیپ‌فلاپ، مقدار فلیپ‌فلاپ قبلی (یا ورودی Din برای اولین فلیپ‌فلاپ) را دریافت و ذخیره می‌کند. این باعث می‌شود که داده‌ها به صورت یکنواخت و هماهنگ با ساعت، از ابتدا تا انتهای رجیستر “شیفت” پیدا کنند.

پیاده‌سازی شیفت رجیستر SISO در FPGA

پیاده‌سازی شیفت رجیستر SISO در FPGA (Field-Programmable Gate Array) بسیار کارآمد و متداول است. FPGAها به دلیل ساختار گرانولار خود که شامل تعداد زیادی فلیپ‌فلاپ داخلی (که بخشی از Slice یا CLB – Configurable Logic Block هستند) هستند، برای پیاده‌سازی مدارهای ترتیبی ایده‌آل می‌باشند.

هنگام طراحی در FPGA با استفاده از زبان‌های توصیف سخت‌افزار (مانند VHDL یا Verilog)، شما به صورت مستقیم فلیپ‌فلاپ‌ها را رسم نمی‌کنید، بلکه رفتار مدار را توصیف می‌کنید. ابزارهای سنتز (Synthesis Tools) FPGA وظیفه نگاشت این توصیف رفتاری را به منابع سخت‌افزاری موجود در FPGA بر عهده دارند.

برای پیاده‌سازی یک شیفت رجیستر SISO در FPGA، معمولاً یک سیگنال یا متغیر داخلی از نوع آرایه بیتی (مثلاً یک وکتور از std_logic در VHDL یا reg در Verilog) تعریف می‌شود که به عنوان خود شیفت رجیستر عمل می‌کند.

مفهوم پیاده‌سازی در FPGA (بدون کد مستقیم):

فرض کنید می‌خواهیم یک شیفت رجیستر 8 بیتی SISO برای FPGA طراحی کنیم. ما یک سیگنال داخلی به نام data_buffer از نوع 8 بیتی (مثلاً std_logic_vector(7 downto 0)) تعریف می‌کنیم.

در هر لبه فعال سیگنال کلاک، منطق پیاده‌سازی به این صورت خواهد بود:

  • بیت ورودی جدید (serial_in) به موقعیت اولین بیت data_buffer (مثلاً data_buffer(0)) وارد می‌شود.
  • محتوای بقیه بیت‌های data_buffer به یک موقعیت بالاتر (یا پایین‌تر، بسته به جهت شیفت) منتقل می‌شوند.
  • data_buffer(7) مقدار data_buffer(6) را می‌گیرد.
  • data_buffer(6) مقدار data_buffer(5) را می‌گیرد.
  • data_buffer(1) مقدار data_buffer(0) (قدیمی) را می‌گیرد.
  • خروجی سریال (serial_out) از آخرین بیت data_buffer (مثلاً data_buffer(7)) گرفته می‌شود.

ابزارهای سنتز FPGA، این توصیف را به مجموعه‌ای از فلیپ‌فلاپ‌های D واقعی در FPGA ترجمه می‌کنند که به صورت متوالی به هم متصل شده‌اند و یک شیفت رجیستر سخت‌افزاری بهینه را تشکیل می‌دهند. این رویکرد تضمین می‌کند که از منابع سخت‌افزاری FPGA (مانند فلیپ‌فلاپ‌های اختصاصی) به بهترین شکل ممکن استفاده شود.

کلیدواژه ها : شیفت رجیستر-Shift Register-SISO-Serial In Serial Out-FPGA-مدار ترتیبی-Sequential Circuit-فلیپ‌فلاپ-Flip-Flop-خط تأخیر-Delay Line-پیاده‌سازی FPGA-Hardware Description Language-VHDL-Verilog-رجیستر شیفتی-انتقال داده سریال-FPGA Design-Clocked Logic