آموزش طراحی نیم جمع کننده Half Adder به زبان VHDL

سلام،امروز قصد داریم تا یک نیم جمع کننده (Half Adder) به زبان VHDL طراحی کنیم. برای طراحی از نرم افزار مودل سیم (Modelsim) استفاده میکنم تا بعد از اتمام کار بتوانیم کد های خود را شبیه سازی کنیم.

یک نیم جمع کننده در واقع دو عدد تک بیتی (A , B) از ورودی دریافت کرده و جمع آنها را به صورت یک بیت مجموع (Sum) و یک بیت کری (Cout) محاسبه میکند.طبق چیزی که گفتیم برای طراحی Entity نیم جمع کننده باید دو ورودی از نوع بیت و دو خروجی از نوع بیت تعریف کرده و برای هر کدام از آن ها نامی مشخص کنیم که کدمان به صورت زیر میشود :

دستور entity
دستور entity در واقع مشخص کننده شکل ظاهری و فرم کلی (پایه های ورودی و خورجی) مدار ماست

هنوز نحوه کار کردن مداز نیم جمع کننده مانده است. برای توضیح بهتر از از شکل زیر کمک بگیریم

آموزش طراحی نیم جمع کننده

اگر جدول درستی نیم جمع کننده را بکشیم میبینیم که به ازای ۴ حالت ورودی، خروجی ها ماند شکل بالا خواهند بود.طبق جدول، Sum زمانی ۱ خواهد شد که فقط یکی از ورودی ها ۱ باشد که میتوان نتیجه گرفت از xor استفاده میشوذ و برای Cout (کری خروجی) تنها در حالتی ۱ داریم که هر دو عدد ۱ باشند، پس از گیت and استفاده میشود.

پس همه چیز تمام است حالا فقط باید نحوه کار کردن را در Architecture برنامه پیاده سازی کنیم که کد آن به صورت زیر میشود :

دستور architecture
دستور architecture در واقع مشخص کننده رفتار و کارکرد برنامه ی ماست

کد نهایی برنامه بعد از اضافه کردن کتابخانه های مورد نیاز به صورت زیر است:

در پایان کار به یک تست بنچ برای شبیه سازی و مشاهده نحوه کار کردن برنامه خود نیاز داریم که البته بدون تست بنچ و به صورت دستی هم میتوان مدار خود را شبیه سازی کنیم.کد test bench به صورت زیر است :

آموزش نوشتن test bench را در پست قبل به صورت کامل توضیح داده ام که از لینک زیر میتوانید مشاهده کنید:

نحوه ی نوشتن Test Bench در VHDL

بعد از شبیه سازی مدار شکل موج به صورت زیر خواهد بود

آموزش طراحی نیم جمع کننده Half Adder به زبان VHDL

اینم هم یک تصویر گیف برای درک کامل نحوه کار مدار

آموزش طراحی نیم جمع کننده Half Adder به زبان VHDL