قبل از اینکه درباره انواع شبیه سازی صحبت کنیم، فرض کنید قراره یک پروژه را با سخت افزار طراحی کنید و زمان هم محدود هست، جهت عیب یابی برنامه نوشته شده چه می کنید؟
شاید پاسخ بعضی از مهندسان این باشه که پس از طراحی با اضافه کردن ip هایی (مثل ILA که میتواند سیگنال های درون FPGA را برامون رسم کنه) به عیب یابی برنامه می پردازیم.
باید گفت پاسخ درسته اما اگه زمان پروژه سه برابر بشه! “با این روش پس از ساعتها طراحی و اجرای برنامه و مشاهده ی نتیجه در سخت افزار، متوجه یک خطا میشیم بعد دوباره تغییر طراحی و باز متوجه خطای بعدی میشیم و بالاخره قبل از رسیدن به نتیجه وقت تمام میشه..” اینجا چاره چیه ؟
راهش اینه که بیاییم کدهای نوشته شده رو قبل از هر چیزی شبیه سازی کنیم و ببینیم پاسخ درستی دارن یا نه که خوشبختانه نرم افزار VIVADO واقعا در این قسمت قدرتمند عمل کرده. خود ویوادو یه شبیه ساز داره به نام XSIM که مخفف Xilinx Simulator هست علاوه بر اون از شبیه ساز هایی مثل Questa ، VCS ،Aldec و… هم پشتیبانی میکنه.
شبیه سازیِ برنامه ها هم دوحالت کلی داره که باید حتما بهش توجه کرد: زمانی و غیرزمانی (رفتاری)
در این نوع، فقط منطق برنامه مورد بررسی قرار میگیره که آیا درست نوشته شده یا نه. در این مورد فرض میکنیم که هیچ تاخیری در گیت ها و مسیرها نیست، اما شبیه سازیِ زمانی علاوه بر رفتار مدار، بررسی میکنه که تاخیر گیت ها و مسیرها تا چه فرکانس کاری را برای مدار جواب میده و آیا با فرکانسی که ما تعیین کردیم مدار درست کار میکنه یا خیر.
ممکنه یک مدار با شبیه سازی رفتاری درست کار کنه اما توی شبیه سازی زمانی به خطا بخوره که باید به نحوه ی سنتز مدار دقت کرد و طراحی رو بهینه کرد که در پست های گذشته به بخش سنتز هم اشاره شده.
یکی دیگه از شبیه سازی هایی که انجام میگیره این هست که یک فایل SAIF طراحی میشه تا ببینیم میزان توان مصرفی چقدر هست که مخصوصا برای پروژه های مخابراتی که با باتری و به صورت بیسیم به مدت طولانی کار میکنند خیلی مهم هست.
اگر بخواهیم به جزئیات شبیه سازی بپردازیم، باید گفت که سه بخش دارد:
تفسیر کدهای نوشته شده به زبان های Verilog ، VHDL و SystemVerilog
تولید یک برنامه واحد از کدهای تفسیر شده
شبیه سازیِ سیگنال ها و خروجی مدار با استفاده از برنامه ی مرحله قبل و ورودی های شبیه سازی