فرستنده UART (Universal Asynchronous Receiver/Transmitter) یک واحد سختافزاری است که دادههای موازی را به فرمت سریال تبدیل کرده و برای انتقال از طریق یک خط ارتباطی ارسال میکند. این پروتکل ناهمگام است، به این معنی که از کلاک مشترک استفاده نمیکند.
1. فرمت فریم (Frame Format)
دادهها در قالب “فریم” ارسال میشوند که شامل بخشهای زیر است:
- Start Bit (بیت شروع): همیشه
0است و آغاز فریم را نشان میدهد. - Data Bits (بیتهای داده): معمولاً 5 تا 9 بیت (8 بیت رایجتر است) که حاوی اطلاعات اصلی هستند. (معمولاً LSB اول ارسال میشود).
- Parity Bit (بیت توازن - اختیاری): برای تشخیص خطاهای ساده (زوجیت یا فردیت).
- Stop Bit (بیت توقف): همیشه
1است و پایان فریم را نشان میدهد (میتواند 1، 1.5 یا 2 بیت باشد). - Idle State: خط در حالت استراحت
1است.
مثال: فریم 8N1 (8 بیت داده، بدون توازن، 1 بیت توقف)
[0 (Start)] [D0] [D1] ... [D7] [1 (Stop)]
2. پارامترهای کلیدی
برای کارکرد صحیح، فرستنده و گیرنده باید با پارامترهای یکسانی پیکربندی شوند:
- Baud Rate (نرخ باود): سرعت انتقال بیتها در ثانیه (مثلاً 9600، 115200).
- Data Bits (تعداد بیتهای داده): 5-9 بیت.
- Parity (توازن): None, Even, Odd.
- Stop Bits (بیتهای توقف): 1, 1.5, 2.
3. بلوکهای سازنده در FPGA
یک فرستنده UART در FPGA معمولاً از سه بلوک اصلی تشکیل شده است:
-
ژنراتور نرخ باود (Baud Rate Generator):
-
هدف: تولید پالسهای با فرکانس نرخ باود (baud_tick) از کلاک سیستم.
-
پیادهسازی: یک شمارنده که فرکانس کلاک سیستم را بر مقدار مشخصی (بر اساس نرخ باود) تقسیم میکند.
-
Max_Count = (System_Clock_Frequency / Baud_Rate) - 1 -
رجیستر شیفت (Shift Register):
-
هدف: نگهداری و سریالسازی فریم داده.
-
پیادهسازی: یک رجیستر که دادههای موازی را بارگذاری کرده و در هر پالس
baud_tick، یک بیت را به خروجی سریال (uart_tx_out) شیفت میدهد. -
ماشین حالت محدود (Finite State Machine - FSM):
-
هدف: کنترل کل فرآیند ارسال، شامل ترتیب ارسال بیتها و مدیریت حالتهای فرستنده.
-
حالتهای اصلی:
-
IDLE: انتظار برای دستور ارسال، خط
uart_tx_outدر حالت1. -
START_BIT: ارسال
0. -
DATA_BITS: ارسال بیتهای داده یکی پس از دیگری.
-
PARITY_BIT (اختیاری): ارسال بیت توازن.
-
STOP_BIT: ارسال
1، پس از آن بازگشت به حالتIDLE.
4. سیگنالهای ورودی/خروجی (مثال)
- ورودیها:
clk,reset,tx_data_in(داده موازی),tx_start(پالس شروع). - خروجیها:
uart_tx_out(خط سریال),tx_busy(نشاندهنده مشغول بودن).
5. ملاحظات مهم
- دقت کلاک: پایداری و دقت ژنراتور نرخ باود برای جلوگیری از خطای ارتباطی ضروری است.
- همخوانی پارامترها: فرستنده و گیرنده باید با پارامترهای یکسانی (Baud Rate, Data Bits, …) کار کنند.
- FIFO: برای ارسال پیوسته چندین بایت، معمولاً یک بافر FIFO قبل از فرستنده UART قرار داده میشود.
طراحی فرستنده UART یک پایه اساسی برای ارتباطات سریال در سیستمهای مبتنی بر FPGA است و به طور گسترده در کاربردهای مختلف استفاده میشود.
کلیدواژه ها : بافر سه وضعیته-Tri-state buffer-FPGA-افپیجیای-High-Z-های زد-باس مشترک-Shared bus-IOB-آی او بی-MUX-مالتی پلکسر-Bus Contention-تداخل باس-HDL-اچدیال-Verilog-وریلاگ-inout-این اوت-پین خروجی-Output pin-طراحی دیجیتال-Digital design