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

شیفت رجیسترها بر اساس نحوه ورود و خروج داده به چهار دسته اصلی تقسیم می‌شوند: Serial In, Serial Out (SISO)، Serial In, Parallel Out (SIPO)، Parallel In, Serial Out (PISO)، و Parallel In, Parallel Out (PIPO). در این بخش، تمرکز اصلی ما بر روی طراحی و پیاده‌سازی شیفت رجیستر Serial In, Serial Out (SISO) در FPGA خواهد بود.

مفهوم و عملکرد شیفت رجیستر Serial In, Serial Out (SISO)

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

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

اصول عملکرد در هر پالس ساعت (لبه فعال کلاک):

  1. بیت موجود در ورودی Din در اولین فلیپ‌فلاپ ذخیره می‌شود.
  2. محتوای اولین فلیپ‌فلاپ به دومین فلیپ‌فلاپ منتقل می‌شود.
  3. محتوای دومین فلیپ‌فلاپ به سومین فلیپ‌فلاپ منتقل می‌شود.
  4. این فرآیند تا آخرین فلیپ‌فلاپ ادامه می‌یابد.
  5. محتوای آخرین فلیپ‌فلاپ از طریق Dout به عنوان خروجی سریال ظاهر می‌شود.

نتیجه این فرآیند این است که هر بیت ورودی، پس از N پالس ساعت، از خروجی رجیستر N بیتی SISO خارج خواهد شد. این ویژگی باعث می‌شود SISO به طور مؤثر به عنوان یک خط تأخیر دیجیتال عمل کند.

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

شیفت رجیسترهای SISO با وجود سادگی، کاربردهای حیاتی در طراحی سیستم‌های دیجیتال دارند:

  • ایجاد تأخیر (Delay Line): مهم‌ترین کاربرد SISO، ایجاد تأخیر زمانی دقیق و قابل کنترل برای سیگنال‌های دیجیتال است. این قابلیت در همگام‌سازی سیگنال‌ها در مدارهای پیچیده بسیار مفید است.
  • بافرینگ سریال (Serial Buffering): برای ذخیره‌سازی موقت رشته‌های بیتی سریال قبل از پردازش یا انتقال به سایر بخش‌های سیستم.
  • پروتکل‌های ارتباطی: در برخی پروتکل‌های ارتباط سریال ساده، می‌توان از SISO برای ارسال یا دریافت داده‌ها به صورت بیت به بیت استفاده کرد.
  • مولدهای دنباله: با افزودن یک شبکه فیدبک مناسب، می‌توان از شیفت رجیسترهای SISO برای ایجاد مولدهای دنباله شبه تصادفی (Pseudo-Random Sequence Generators) استفاده کرد.

پیاده‌سازی Serial in Serial Out در FPGA

طراحی و پیاده‌سازی شیفت رجیستر SISO در FPGA (Field-Programmable Gate Array) یکی از وظایف رایج و بهینه است. FPGAها به طور طبیعی از منابع سخت‌افزاری غنی‌ای مانند فلیپ‌فلاپ‌ها و Look-Up Tables (LUTs) برخوردارند که برای پیاده‌سازی مدارهای ترتیبی مانند شیفت رجیسترها ایده‌آل هستند. فلیپ‌فلاپ‌های داخلی FPGA معمولاً بخشی از بلوک‌های منطقی قابل تنظیم (CLB - Configurable Logic Block) یا برش‌ها (Slices) هستند.

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

مراحل مفهومی پیاده‌سازی:

  1. تعریف فضای ذخیره‌سازی: در HDL، یک سیگنال یا متغیر داخلی از نوع وکتور (مثلاً std_logic_vector در VHDL یا reg در Verilog) تعریف می‌شود که به عنوان فضای ذخیره‌سازی برای بیت‌های شیفت رجیستر عمل می‌کند. اندازه این وکتور، تعداد بیت‌های شیفت رجیستر (N) را تعیین می‌کند.
  2. تعیین ورودی و خروجی: یک ورودی برای داده سریال (serial_in) و یک خروجی برای داده سریال (serial_out) تعریف می‌شود. همچنین، یک ورودی کلاک (clk) و یک ورودی ریست (reset) نیز مورد نیاز است.
  3. توصیف رفتار شیفت: در یک بلاک process (در VHDL) یا always (در Verilog) که به لبه فعال کلاک حساس است، منطق شیفت تعریف می‌شود. در هر لبه فعال کلاک (مثلاً لبه بالارونده):
  • بیت ورودی جدید (serial_in) به موقعیت اول (یا آخر، بسته به جهت شیفت) وکتور داخلی تخصیص داده می‌شود.
  • بقیه بیت‌های وکتور داخلی یک موقعیت به سمت خروجی شیفت داده می‌شوند. 
  • خروجی سریال (serial_out) به آخرین بیت وکتور داخلی (shift_reg(N-1)) متصل می‌شود.
  1. منطق ریست (اختیاری): یک منطق ریست همزمان (Synchronous Reset) یا غیرهمزمان (Asynchronous Reset) برای مقداردهی اولیه شیفت رجیستر به یک حالت مشخص (معمولاً صفر) در نظر گرفته می‌شود.

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

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