تبدیل دادههای موازی به سریال که اغلب با عنوان PISO (Parallel In, Serial Out) شناخته میشود، فرآیندی است که در آن یک کلمه داده N بیتی موازی (که تمام بیتهای آن همزمان در دسترس هستند) به یک جریان پیوسته از بیتها تبدیل میشود که یکی پس از دیگری بر روی یک خط واحد ارسال میشوند. این عملیات در FPGAها بسیار رایج است و با استفاده از رجیسترهای شیفت و ماشینهای حالت محدود (FSM) پیادهسازی میشود.
1. ضرورت تبدیل موازی به سریال
- ارتباط با پروتکلهای سریال: بسیاری از رابطهای ارتباطی خارجی (مانند UART, SPI, I2C, USB, Ethernet, PCIe) از انتقال سریال استفاده میکنند. دادههای تولید شده یا پردازش شده در داخل FPGA معمولاً به صورت موازی (مثلاً 32 بیت یا 64 بیت در یک سیکل کلاک) هستند. برای ارسال این دادهها از طریق این پروتکلها، لازم است که آنها به فرمت سریال تبدیل شوند.
- صرفهجویی در پینهای FPGA و سیمکشی: همانطور که پیشتر توضیح داده شد، انتقال سریال به تعداد پینهای ورودی/خروجی (I/O) بسیار کمتری نیاز دارد، که در طراحی PCB و کاهش پیچیدگی و هزینه سیستم بسیار مؤثر است.
- فواصل طولانیتر و فرکانسهای بالاتر: حذف مشکل “Skew” بین بیتها در انتقال سریال، امکان ارسال داده در فواصل طولانیتر و با فرکانسهای کلاک بسیار بالاتر را فراهم میکند.
2. بلوکهای سازنده اصلی
پیادهسازی یک مبدل موازی به سریال در FPGA عمدتاً بر پایه دو جزء اصلی است:
الف) رجیستر شیفت (Shift Register)
- نقش: رجیستر شیفت قلب عملیات PISO است. این یک مدار ترتیبی است که میتواند دادههای موازی را بارگذاری (Load) کند و سپس آنها را بیت به بیت به صورت سریال خارج (Shift Out) کند.
- نحوه عملکرد:
- بارگذاری موازی (Parallel Load): در یک سیکل کلاک، تمام N بیت داده موازی به صورت همزمان وارد N فلیپفلاپ داخلی رجیستر شیفت میشوند.
- شیفت سریال (Serial Shift): پس از بارگذاری، در هر سیکل کلاک بعدی، محتوای رجیستر به اندازه یک بیت به یک سمت (مثلاً به سمت راست) شیفت داده میشود. بیتی که از انتهای رجیستر خارج میشود، همان خروجی سریال ماست. این فرآیند N بار تکرار میشود تا تمام N بیت ارسال شوند.
- در FPGA: رجیسترهای شیفت میتوانند به طور کارآمد با استفاده از فلیپفلاپها و مدارهای منطقی عمومی FPGA پیادهسازی شوند. بسیاری از FPGAها دارای منابع اختصاصی به نام SRL (Shift Register Look-up Table) هستند که امکان پیادهسازی رجیسترهای شیفت با عمق بالا را به صورت بهینه و با استفاده از LUTها (جدولهای جستجو) فراهم میکنند و به جای چندین فلیپفلاپ، از یک واحد LUT استفاده میکنند.
ب) ماشین حالت محدود (Finite State Machine - FSM)
- نقش: FSM وظیفه کنترل و هماهنگسازی فرآیند بارگذاری و شیفت دادهها را بر عهده دارد. این FSM وضعیت فعلی مبدل (آیا آماده بارگذاری است، آیا در حال شیفت دادن است، و چند بیت شیفت داده شدهاند) را ردیابی میکند و سیگنالهای کنترلی لازم را تولید میکند.
- حالتهای معمول:
- Idle: منتظر داده موازی جدید برای ارسال.
- Load_Data: دادههای موازی را در رجیستر شیفت بارگذاری میکند.
- Shift_Data: به تعداد بار دادهها را به صورت سریال شیفت میدهد.
- شمارنده (Counter): FSM معمولاً شامل یک شمارنده نیز میشود که تعداد بیتهای شیفت داده شده را پیگیری میکند. وقتی شمارنده به N (عمق کلمه داده) رسید، FSM به حالت Idle بازمیگردد یا منتظر بارگذاری داده جدید میشود.
3. ملاحظات کلاک (Clocking Considerations)
یکی از جنبههای کلیدی در طراحی PISO، مدیریت کلاکها است:
- کلاک بارگذاری موازی (Parallel Load Clock): این کلاک با نرخ کلاک سیستمی که دادههای موازی را تولید میکند، مطابقت دارد.
- کلاک شیفت سریال (Serial Shift Clock): این کلاک معمولاً بسیار سریعتر از کلاک بارگذاری موازی است و N برابر سریعتر از آن است (اگر N بیت در یک دوره کلاک موازی ارسال شود). به عنوان مثال، اگر داده موازی 8 بیتی با فرکانس 100MHz تولید شود، کلاک سریال برای ارسال آن باید 800MHz باشد تا در یک دوره کلاک موازی تمام 8 بیت ارسال شوند.
- مدیریت کلاک:
- اگر کلاک سریال دقیقاً ضریبی از کلاک موازی باشد و هر دو از یک منبع مشتق شده باشند (مثلاً از یک PLL یا MMCM در FPGA)، مدیریت آنها نسبتاً ساده است.
- اگر کلاکها از دامنههای کلاک کاملاً متفاوت و نامرتبط باشند، نیاز به مکانیزمهای همگامسازی (Synchronization) برای انتقال سیگنالهای کنترلی بین دامنههای کلاک وجود دارد (که این خود یک مبحث پیچیده در طراحی FPGA است).
4. مراحل پیادهسازی مفهومی در FPGA
- تعریف عرض داده (N): مثلاً برای یک بایت، .
- ورودیها:
parallel_data_in: داده موازی N بیتی.load_enable: سیگنالی که نشان میدهد داده موازی جدید آماده بارگذاری است.parallel_clock: کلاک دامنهای که داده موازی در آن تولید میشود.serial_clock: کلاک دامنهای که داده سریال با آن شیفت داده میشود (معمولاً سریعتر است).
- خروجی:
serial_data_out: خروجی تک بیتی سریال.data_valid: (اختیاری) سیگنالی که نشان میدهد بیت خروجی معتبر است.busy: (اختیاری) سیگنالی که نشان میدهد PISO در حال ارسال داده است.
- طراحی رجیستر شیفت: یک رجیستر N بیتی که قابلیت بارگذاری موازی و شیفت سریال را دارد.
- هنگامی که
load_enableفعال است و لبه بالاروندهparallel_clockرخ میدهد،parallel_data_inدر رجیستر بارگذاری میشود. - در هر لبه بالارونده
serial_clock، محتویات رجیستر شیفت داده میشود و یک بیت از آن به عنوانserial_data_outخارج میشود.
- طراحی FSM:
- حالت Idle: منتظر
load_enableبرای بارگذاری داده. - حالت Shift: پس از بارگذاری، N بار در هر سیکل
serial_clock، یک بیت را شیفت میدهد. یک شمارنده از 0 تا تعداد شیفتها را پیگیری میکند. پس از N شیفت، به حالت Idle بازمیگردد.
5. بلوکهای اختصاصی SERDES (Serializer/Deserializer) در FPGA
برای کاربردهای بسیار پرسرعت (گیگابیت اترنت، PCIe, DisplayPort و غیره)، FPGAهای مدرن (مانند سریهای Kintex, Virtex, Stratix, Arria) دارای بلوکهای سختافزاری اختصاصی و بهینه شدهای به نام SERDES (SERializer/DESerializer) هستند. این بلوکها:
- قادر به کار در فرکانسهای چند گیگاهرتز هستند.
- شامل PLL/CDR (Clock Data Recovery) داخلی برای بازیابی کلاک از جریان داده سریال میباشند.
- از استانداردهای صنعتی مختلف (مانند 8B/10B encoding) پشتیبانی میکنند.
- پیادهسازی یک مبدل PISO/SIPO با این بلوکها نیازمند استفاده از IP Coreهای شرکت سازنده FPGA است و نیازی به طراحی رجیستر شیفت با منطق عمومی نیست.
تفاوت پیادهسازی با منطق عمومی و SERDES:
در حالی که میتوان یک مبدل PISO پایه را با رجیسترهای شیفت و FSM در منطق عمومی FPGA پیادهسازی کرد (مناسب برای سرعتهای پایینتر تا متوسط)، برای سرعتهای بسیار بالا (مثلاً > چند صد مگابیت بر ثانیه)، استفاده از بلوکهای SERDES اختصاصی ضروری و کارآمدتر است، زیرا آنها برای آن فرکانسها به صورت بهینه سختافزاری شدهاند و مشکلات مربوط به یکپارچگی سیگنال (Signal Integrity) در سرعتهای بالا را مدیریت میکنند.
کلیدواژه ها : تبدیل موازی به سریال، PISO، FPGA، رجیستر شیفت، Shift Register، FSM، ماشین حالت محدود، کلاک، Clock Domain Crossing، SERDES، سریالایزر، دیسریالایزر، I/O، پین، پروتکل سریال، Skew، Parallel In Serial Out.