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

با سلام، قطعا برای مشاهده ی نحوه ی عملکرد برنامه هایمان به زبان vhdl نیاز به شبیه سازی آنها داریم و باید در شبیه سازی مقادیر ورودی را به صورت دستی وارد کنیم و سپس خروجی ها را مشاهده کنیم. البته روش دیگری هم وجود دارد و آن استفاده از test bench است که دیگر نیاز به وارد کردن دستی مقادیر نیست و این کار به صورت اتوماتیک در test bench انجام میشود. در این پست قصد داریم تا نحوه نوشتن یک test bench ساده برای برنامه هایتان را به شما آموزش دهیم.

بگذارید با یک مثال آموزش شروع را کنیم
فرض کنید که شما یک half adder به زبان vhdl در برنامه modelsim نوشته اید که کد آن به صورت زیر است :

الان اصلا به نحوه کار کردن کد کار نداریم
فقط میدانیم که کد تعداد ورودیی دریافت کرده و بر اساس آن ها تعدادی خروجی به ما میدهد.

خب حالا میرویم سراغ نوشتن test bench برای کد.در نرم افزار modelsim یک فایل vhdl با نام دلخواه (HalfAdder_TB) ایجاد میکنیم مانند تمام برنامه های دیگر ساختار test bench دارای entity و architecture است. از آنجایی که قرار است داخل برنامه به مقادیر ورودی مقدار دهیم درنتیجه ما از سیگنال استفاده میکنیم و به سیگنال های تعریف شده مقدار میدهیم و آن ها را به برنامه اصلی پورت میکنیم، پس در test bench نیاز به تعریف ورودی و خروجی نداریم و فقط سیگنال داریم. کار دیگر که برای پورت کردن نیاز است تعریف کردن برنامه ی خود به عنوان کامپوننت در test bench است. بعد از آن یک نمونه از کامپوننت را به test bench پورت میکنیم خب پس تا اینجا داریم :

میبینید که برای تمامی ورودی و خروجی های برنامه سیگنال تعریف کردیم مهم نیست که نام سیگنال ها با ورودی خروجی های کامپوننت یکی باشد یا نه ولی نوع آن ها حتما باید مثل هم باشد یعنی همه نظیر به نظیر bit یا std_logic باشند.

تا اینجای کار فقط آماده سازی test bench بود قسمت اصلی هنوز مانده. از اینجا به بعد بسته به برنامه ای که شما میخواهید برای آن test bench بنویسید فرق میکند مثلا برای این half adder که دو ورودی دارد ما میخوایم مقادیر ۰۰، ۰۱، ۱۰ و ۱۱ را به ترتیب به ورودی بدهیم و در هر حالت خروجی را مشاهده کنیم.

باید به این صورت عمل کنیم که مقدار سیگنال های وردی را در طول زمان طوری تغیر دهیم که تمامی حالات مورد نظر ما را در بر بگیرد. فرض کنید ابتدا به دو سیگنال A و B مقدار ۰ میدهیم (حالت ۰۰) بعد از مدتی مقدار A باید به ۱ تغییر کند (حالت ۰۱) بعد از مدتی مقدار A باید به ۰ و B به ۱ تغییر کند (حالت ۱۰) در آخر هم A دوباره باید به ۱ تغییر حالت دهد (حالت ۱۱) در نهاید باید بعد از مدتی به حالت اولیه بازگشت
حالا اگر این مدت گفته شده را مثلا ۲۰ نانو ثانیه در نظر بگیریم تغییرات سیگنال A به صورت زیر میشود
ابتدای برنامه ۰ و بعد از ۲۰ns تغییر به ۱ بعد از ۴۰ns (از ابتدای شروع برنامه حساب میشود) تبدیل به ۰ و در نهایت بعد از ۶۰ns تغییر به ۱ و بعد از ۸۰ns به حالت اولیه یعنی ۰
برای B نیز باتوجه به تغییرات، به صورت مشابه میتوان مقادیر را در طول زمان حساب کرد.فکر کنم به اندازه کافی توضیح داده ام بهتر است به کد نهایی نگاهی بیاندازیم.

بعد از شبیه سازی و اجرای test bench در برنامه modelsim شکل موج را به صورت زیر مشاهده خواهیم کرد.(امتحان کنید)

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

خب این یک روش نسبتا ساده برای نوشتن test bench برای برنامه ها بود و بیشتر برای برنامه های ساده کاربرد دارد. در برنامه های پیچیده و برنامه هایی که نیاز به کلاک دارند بهتر است از این نوع test bench استفاده نکیم برای آن برنامه ها روش های دیگری وجود دارد که در آینده آموزش خواهم داد.

موفق باشید 😉