همانطور که پیشتر اشاره شد، تبدیل یک عدد باینری خالص به فرم BCD (Binary Coded Decimal) یک عملیات مهم در طراحی سیستمهای دیجیتال با FPGA است، به خصوص در مواردی که خروجیهای دهدهی برای نمایش به کاربر یا رابطهای دیگر مورد نیاز باشد. پیادهسازی این تبدیل در سختافزار FPGA نیازمند یک رویکرد سیستماتیک است که اجزای مختلف منطقی و حافظهای را درگیر میکند.
1. الگوریتم Shift-and-Add-3 به عنوان پایه پیادهسازی
روش غالب و کارآمد برای تبدیل باینری به BCD در FPGA، الگوریتم “Shift-and-Add-3” یا “Double-Dabble” است. این الگوریتم به صورت سریالی، یعنی بیت به بیت، عمل میکند و نیازمند چندین مرحله پردازش متوالی است. در FPGA، این مراحل متوالی به معنی مصرف چندین سیکل کلاک است.
2. اجزای سختافزاری در FPGA برای پیادهسازی
برای پیادهسازی الگوریتم Shift-and-Add-3 در FPGA، به ترکیبی از عناصر منطقی و حافظهای نیاز داریم که هماهنگ با یکدیگر کار کنند:
الف. ثباتهای ذخیرهسازی (Registers / Flip-Flops)
- ثبات باینری ورودی: این ثبات برای نگهداری عدد باینری اولیه که قرار است تبدیل شود، استفاده میشود. به تعداد بیتهای عدد باینری، فلیپفلاپهای D-Type نیاز دارد. در هر سیکل شیفت، محتوای این ثبات به سمت چپ شیفت داده میشود.
- ثباتهای BCD خروجی: برای نگهداری ارقام BCD حاصل از تبدیل، به یک سری ثبات 4 بیتی نیاز داریم. هر ثبات 4 بیتی، یک رقم دهدهی (0 تا 9) را در فرم BCD ذخیره میکند. تعداد این ثباتها بستگی به حداکثر مقدار عدد باینری ورودی دارد. به عنوان مثال، برای یک عدد 8 بیتی باینری که میتواند تا 255 باشد، سه ثبات BCD برای یکان، دهگان و صدگان مورد نیاز است.
ب. منطق ترکیبی (Combinational Logic - با استفاده از LUTs)
- مدارهای مقایسهکننده: برای هر یک از ثباتهای BCD، یک مدار مقایسهکننده لازم است تا تشخیص دهد آیا مقدار فعلی آن ثبات (رقمی که در آن ذخیره شده) از عدد 4 بزرگتر است یا خیر. این مقایسهکنندهها با استفاده از Look-Up Table (LUT) های موجود در FPGA پیادهسازی میشوند.
- مدارهای جمعکننده: در صورتی که یک ثبات BCD حاوی رقمی بزرگتر از 4 باشد، نیاز است که عدد 3 به آن اضافه شود. برای هر ثبات BCD، یک مدار جمعکننده 4 بیتی (Adder) پیادهسازی میشود که قابلیت اضافه کردن 3 را دارد. این جمعکنندهها نیز با استفاده از LUTها و Carry Chainهای اختصاصی در FPGA ساخته میشوند.
- مالتیپلکسرها: بعد از هر مرحله مقایسه و احتمالاً جمعکردن 3، یک مالتیپلکسر وظیفه انتخاب بین مقدار اصلی ثبات BCD و مقدار اصلاحشده (اضافه شده با 3) را بر عهده دارد. انتخاب توسط خروجی مدار مقایسهکننده کنترل میشود.
- منطق شیفتکننده: این بخش شامل سیمکشی و گیتهای منطقی است که امکان جابجایی بیتها را در ثبات باینری ورودی و بین ثباتهای BCD فراهم میکند.
ج. شمارنده (Counter)
یک شمارنده برای ردیابی تعداد مراحل شیفت و اصلاح استفاده میشود. این شمارنده با هر سیکل کلاک یک واحد افزایش مییابد تا زمانی که به تعداد بیتهای عدد باینری ورودی برسد و نشان دهد که فرآیند تبدیل کامل شده است.
د. ماشین حالت محدود (Finite State Machine - FSM)
FSM نقش “مغز” کنترلکننده کل فرآیند را ایفا میکند. این ماشین حالت مراحل مختلف الگوریتم را مدیریت میکند:
- حالت اولیه (Idle/Reset): در این حالت، سیستم منتظر ورودی جدید است و تمامی ثباتها (باینری و BCD) را صفر میکند.
- حالت بارگذاری (Load): عدد باینری ورودی در ثبات باینری بارگذاری میشود.
- حالت پردازش (Process/Shift-Add): این حالت هسته الگوریتم است. در هر سیکل کلاک، FSM سیگنالهای کنترلی لازم را برای انجام موارد زیر تولید میکند:
- فعالسازی مقایسهکنندهها و جمعکنندههای +3 برای هر ثبات BCD.
- فعالسازی مالتیپلکسرها برای انتخاب مقادیر صحیح در ثباتهای BCD.
- فعالسازی منطق شیفت برای جابجایی بیتها.
- افزایش شمارنده.
- حالت پایان (Done): پس از اتمام تمامی شیفتها (وقتی شمارنده به مقدار نهایی رسید)، FSM وارد این حالت میشود و یک سیگنال “تبدیل کامل شد” را تولید میکند.
3. جریان عملیات در FPGA
هنگامی که سیگنال شروع تبدیل دریافت میشود:
- FSM به حالت بارگذاری میرود و عدد باینری را در ثبات مربوطه قرار میدهد.
- سپس وارد حالت پردازش میشود و برای هر بیت از عدد باینری (مثلاً N بیت، پس N سیکل کلاک):
- در ابتدای هر سیکل، منطق ترکیبی بررسی میکند که آیا هر یک از ارقام BCD (که در ثباتهای BCD ذخیره شدهاند) بزرگتر از 4 هستند یا خیر.
- اگر بله، مدار جمعکننده 3 را به آن رقم BCD اضافه میکند.
- سپس، تمامی بیتها در ثبات باینری به سمت چپ شیفت داده میشوند و بیت خروجی از ثبات باینری، به عنوان بیت ورودی به کمارزشترین ثبات BCD وارد میشود.
- همزمان، بیتهای MSB هر ثبات BCD به LSB ثبات BCD بعدی (با ارزش بالاتر) منتقل میشوند.
- شمارنده یک واحد افزایش مییابد.
- پس از N سیکل، FSM به حالت پایان میرود و خروجیهای BCD نهایی در ثباتهای BCD آماده استفاده خواهند بود.
4. ملاحظات طراحی در FPGA
- مصرف منابع: پیادهسازی Shift-and-Add-3 اگرچه کارآمد است، اما با افزایش تعداد بیتهای باینری و ارقام BCD، تعداد LUTها، فلیپفلاپها و جمعکنندههای مورد نیاز افزایش مییابد.
- تأخیر (Latency): این یک عملیات سریالی است و زمان لازم برای تبدیل مستقیماً متناسب با تعداد بیتهای ورودی باینری است (N سیکل کلاک).
- فرکانس کاری (Throughput): اگرچه تأخیر بالاست، اما پس از هر N سیکل، یک خروجی BCD جدید تولید میشود.
- زمانبندی (Timing): طراحی باید اطمینان حاصل کند که تمام سیگنالهای کنترلی و دادهها در زمانهای مناسب (با توجه به فرکانس کلاک) به ثباتها میرسند تا از خطاهای زمانبندی جلوگیری شود.
با ترکیب دقیق این اجزای سختافزاری و کنترل آنها توسط یک FSM، میتوان تبدیل باینری به BCD را به صورت مؤثر و با رعایت محدودیتهای FPGA انجام داد.
کلیدواژه ها : FPGA-تبدیل باینری به BCD-Shift-and-Add-3-Double-Dabble-ثباتها-فلیپفلاپ-منطق ترکیبی-LUTs-شمارنده-ماشین حالت محدود-FSM-طراحی سختافزار-پیادهسازی در FPGA-عملیات سریالی-زمانبندی-مصرف منابع