در این آموزش از سری آموزشهای گام به گام نرم افزار Hspice در مورد مدار اکومولاتور یا انباره که کاربرد وسیعی در مدارهای مجتمع دیجیتال به خصوص در cpu کامپیوترهای خانگی و صنعتی دارد توضیحات مختصری خواهیم داشت و آن را در سطح بلوک دیاگرامی بررسی کرده و به تشریح مدارهای داخلی آن خواهیم پرداخت و در انتها یک مدار اکومولاتور ۸ بیتی را در محیط نرم افزار اچ اس پایس شبیه سازی نموده و صحت عملکرد مدار را با استفاده از شبیه ساز مورد بررسی قرار خواهیم داد.
اکومولاتور یا انباره چیست؟
مدار اکومولاتور یا انباره به صورت یک انتگرال گیر عمل می کند و دائم بیت های ورودی را با ورودی های قبلی اش جمع می کند و حاصل جمع را دوباره با ورودی جدید جمع خواهد نمود و به این ترتیب به کار خود ادامه می دهد تا زمانی که سرریز یا Over flow اتفاق می افتد که در این حالت ریست فعال شده و مدار اکومولاتور دوباره کار خود را از سر خواهد گرفت.
شکل زیر بلوک دیاگرام مدار اکومولاتور را نشان می دهد همانطور که می بینیم هسته اصلی مدار اکومولاتور یک جمع کننده است و با آمدن هر پالس ساعت ورودی هشت بیتی A را با خروجی S جمع خواهد کرد.
برای اینکه درک بهتری از عملکرد مدار اکومولاتور داشته باشیم فرض کنید رجیسترهای ورودی و خروجی در ابتدا ریست هستند ، با این حساب ورودی ها و خروجی های جمع کننده تا قبل از آمدن پالس ساعت صفر منطقی خواهند بود. به محض اینکه لبه CLK فعال شود (لبه بالارونده یا پایین رونده بستگی به نوع رجیستر دارد) رجیستر ورودی A فعال شده و ۸ بیتی که در ورودی رجیستر منتظر هستند ، به خروجی رجیستر یعنی ورودی جمع کننده خواهند رسید.
ورودی دوم جمع کننده هم که از خروجی رجیستر پایینی می آید و همانطور که گفتیم مقدارش صفر است. پس اولین عدد باینری ۸ بیتی ورودی با ۸ بیت صفر (رجیستر خروجی) جمع خواهد شد و چون صفر تاثیری در مقدار جمع ندارد پس نتیجه خروجی S در اولین سیکل برابر ورودی A می شود. در سیکل بعدی ورودی جدید A مجدداً با خروجی S که مقدارش برابر ورودی قبلی A بود جمع می شود.
و این روند ادامه خواهد یافت تا زمانی که حاصل جمع متوالی ورودی ها به حدی برسد که سرریز اتفاق بیفتد که در این حالت فرمان ریست مدار اکومولاتور صادر خواهد شد.
نکته۱: منظور از سرریز یا Over flow در یک مدار اکومولاتور این است که با ارزش ترین بیت جمع کننده یعنی رقم نقلی آخرین بیت برابر یک شود. در این مثال که جمع کننده ۸ بیتی است یک شدن بیت C8 یک سرریز را مشخص می کند.
نکته۲: رجیستر ورودی می تواند بیت های کمتری داشته باشد مثلاً ۶ بیت که در این صورت باید دو بیت با ارزش تر ورودی اول جمع کننده (ورودی A) به زمین وصل شود. به هر حال تعداد بیت های رجیستر خروجی و جمع کننده مشخص می کند که اکومولاتور چند بیتی است.
نکته۳: رجیسترهای استفاده شده در اینجا که به صورت D-ff فلیپ فلاپ های موازی ، کنار هم قرار می گیرند پالس ساعت مشترکی دارند و به طور همزمان ورودی ها را به خروجی منتقل خواهند کرد.
سرعت یک مدار اکومولاتور توسط تاخیر ایجاد شده به وسیله مدارات جمع کننده و رجیستر محدود خواهد شد و پریود پالس ساعت باید بیشتر از مجموع تاخیر جمع کننده و رجیستر باشد و مدار فرصت کافی برای تصمیم گیری داشته باشد بنابراین برای اینکه یک اکومولاتور پر سرعت داشته باشیم باید جمع کننده های سریعتر مانند tree adder یا CLA و رجیستر های سریع مانند رجیستر داینامیک استفاده کنیم.
در اینجا هدف فقط آشنایی با نحوه کار مدار اکومولاتور است و از ساده ترین مدارات ممکن که قبلاً در مورد آنها صحبت کردیم برای شبیه سازی ها استفاده می کنیم. مدار جمع کننده استفاده شده در اینجا یک جمع کننده رقم نقلی موجی است که در جلسه چهارم به طور کامل مورد بررسی قرار گرفت و همچنین رجیستر استاتیک که در بخش مربوط به شمارنده ها در مورد آن بحث شد را در اینجا نیز به کار خواهیم برد.
برای کسب اطلاعات بیشتر در مورد اکومولاتورها کتاب معماری کامپیوتر موریس مانو را مطالعه کنید.
کد نویسی و شبیه سازی مدار یک اکومولاتور هشت بیتی
نحوه کد نویسی بدنه اصلی برنامه مدار اکومولاتور هشت بیتی به شکل زیر است.
بعد از مشخص نمودن زیر مدارات و تعریف آنها در ابتدای برنامه در بخش main program آنها را فراخوانی خواهیم کرد. بر طبق تعاریفی که از مدار اکومولاتور داشتیم و شکل قبلی که مربوط به بلوک های تشکیل دهنده یک اکومولاتور بود ، به دو رجیستر ۸ بیتی و یک جمع کننده ۸ بیتی و یک تک رجیستر (D-ff) برای نشان دادن سرریز نیاز خواهیم داشت و همانطور که از ساختار برنامه اصلی مشخص است همگی این موارد در بدنه اصلی برنامه گنجانده شده است.
رجیسترهای ورودی که بیتهای ورودی را به جمع کننده می رسانند شامل XR1-XR8 هستند ، رجیسترهای خروجی شامل XR9-XR16 ، رجیستر تک بیتی سرریز با XR17 ، جمع کننده ۸ بیتی که یک جمع کننده سربار نردبانی هست و در جلسه چهارم به طور مفصل در مورد آن بحث شد با Xadd1-Xadd8 تعریف شده اند.
بعد از فراخوانی تمامی زیر مدارات برای تست مدار اکومولاتور و اطمینان از صحت عملکرد آن ورودی های رجیستر ورودی را با V1-V8 تعریف می کنیم. که می توانیم آن را به دلخواه تغییر داده و به ازای ورودی های مختلف خروجی ها را چک کنیم در اینجا به ورودی ها یک عدد ثابت می دهیم و برای اطمینان کافی از درستی کار مدار اکومولاتور به ازای دو ورودی متفاوت خروجی ها را بررسی خواهیم نمود ابتدا ورودی را در حالت ۰۰۰۰۰۰۰۱ باینری یعنی عدد یک دهدهی قرار می دهیم و خروجی را مشاهده خواهیم کرد.
نتیجه شبیه سازی را در شکل زیر مشاهده می کنید.
در اینجا دوره پریود پالس ساعت را ۲۰usec انتخاب کرده ایم پس انتظار داریم که بعد از ۸^۲ پالس ساعت که معادل ۵٫۱۲ms می شود مدار اکومولاتور سرریز کند که این اتفاق را در نتیجه شبیه سازی به وضوح می بینیم.
تذکر: پالس ساعت در اینجا یک تاخیر ۵۰usec ثانیه ای دارد برای همین ورودی اولین فلیپ فلاپ رجیستر ۸ بیتی (a0) مقداری با تاخیر به خروجی (aa0) می رسد.
برای اینکه از درستی کار مدار اکومولاتور اطمینان کافی کسب کنیم به ازای ورودی ها مختلف می توانیم خروجی را چک کنیم ، مثلاً اگر ورودی باینری a7-a0 را به صورت ۰۰۰۰۰۰۱۱ تعریف کنیم انباره زودتر پر شده و سرریز هم به تبع آن زودتر اتفاق می افتد.
همانطور که می بینیم وقتی عدد ورودی سه برابر بزرگتر می شود زمان سرریز نیز به ۱/۳ تقلیل می یابد. و اینجا در زمانی حدود ۱٫۷msec مدار اکومولاتور پر شده و سرریز می کند.
برای دریافت مشاوره انجام پروژه های دانشگاهی وارد صفحه انجام پروژه hspice سایت استاد راهنما شوید.