برای طراحی یک تقسیم کننده با vhdl هدف اصلی پیاده سازی به صورت کاملا ترکیبی است اما از آنجایی که پیاده سازی کاملا ترکیبی بسیار مشکل است الگوریتنهای برای تقسیم ارایه میشود که معروفترین آن تقسیم کننده ی شیفت و تفریق است.راه حل ساده تری که در ابتدا به ذهن میرسد تقیبم بر اساس یک کانتر و تفریق متوالی است که تفریق متوالی هم میتواند یک راه حل باشد ولی از آنجایی که این روش روش طولانی است به الگوریتمهای جدید تر روی می آوریم تا تعداد کلاک لازم را برای انجام یک تفریق کاهش دهیم.
طراحی یک تقسیم کننده در vhdl :
هر چند vhdl خودش توانایی پیاده سازی هر نوع تقسیم کننده را با اپرند تقسیم / را دارد و میتوان حتی به صورت کاملا ترتکیبی و بدون حتی یک عدد فلیپ فلاپ پیاده نماید ولی دراینجا هدف پیاده سازی بهینه تر بر اساس الگوریتم خودمان است.
الگوریتم تقسیم کننده ی 8 بیتی:
این تقسیم کننده شامل در بخش اصلی شیفت دهنده و تفریق کننده است که به شکل زیر به هم متصل هستند.الگوریتم تقسیم کننده به این شکل است که هر بار بیت 7 ام از مقسوم به بیت اول باقی مانده شیفت داده میشود.این شیفت به چپ ادامه دارد تا زمانی که مقدار باقی مانده از مقدار خارج قسمت بیشتر یا مساوی شود که در این صورت مقدار خارج قسمت از مقدارباقیمانده کم خواهد شد.این چرخه فقط 8 کلاک زمان خواهد برد.یعنی در این روش با چند شیفت و تفریق به مقدار تقسیم دست خواهیم یافت.
نکات رعایت شده در این برنامه:
- در این برنامه برای تفریق یک جمع کننده 8 بیتی با بهره گیری از 8 عدد جمع کننده ایجاد شده است و هر بار بخش شیفت دهنده مقادیر شیفت داده شده را به بخش جمع کننده میدهد و در جمع کننده مقدار باقی مانده با مقدار NOT خارج قسمت +1 جمع میگردد که در واقع حاصل این جمع همان تفریق دو عدد است.
- نکته ی دوم طراحی بخشهای شیفت دهنده و تفریق کننده به صورت کاملا ترکیبی است که اتصال این بخش ها به هم بسیار مشکل بوده.
- مقادیر محاسبه شده با توجه به یک شمارنده به خروجی داده میشوند.این شمارنده نشان میدهد که چه زمانی نتیجه تقسیم آماده شده است.
- باید توجه کرد که شمارنده در دو حالت که 9 و 10 است برای ما مهم است چرا که در این دو حالت دو جواب داریم و هنگامی که شمارنده 9 باشد و باقیمانده غیر صفر باشد جواب همینجاست ولی اگر این نبااشد جواب در شماره بعدی خواهد بود و باقی مانده نیز صفر خواهد بود.
در شکل بالا مشخص ایت که نتایج تقسیم در کلاک 11 و 10 کانتر آپدیت شده است.
توضحات کامپوننتهای تقسیم کننده ی 8 بیتی با VHDL:
من سعی کردم تا سنبلها را به نحوی طراحی کنم تا در محیط شماتیک بتوان آنها را به هم متصل نمود یعنی هر کامپوننت به صورت جداگانه و مستقل از دیگری عمل میکند و میتوان با ساخت سنبل شماتیکی از هر کدام و اتصال آنها به هم یک مدار شماتیکی نیز طراحی کرد.و در واقع این سخت اقزار طراحی شده به صورت کامل قابل پیاده سازی روی FPGA است.
همانطور که در شکل بالا مشخص است در کل سه عدد کامپوننت داریم که با یک TOP به هم وصل شده اند.کامپوننت ADD-SUB کامپوننت SHIFTER و کامپوننت COUNTER .که خود کامپوننت ADDR از 8 عدد جمع کننده ی کامل تشکیل شده است.
حداقل اشتراک | محتویات | زمان ایجاد | حجم فایل | تعداد دانلودها |
یک ماهه (VIP) | FPGA | یکشنبه, 13 تیر 1395 22:15 | 482.15 KB | 2 |
تنها کاربران عضو یا دارای مجوز میتوانند دانلود نمایند |