بررسی معماری داخلی شبیهسازها، ساخت قطعات مجازی و طراحی مدلهای رفتاری
بخش سوم: از تعریف یک قطعه جدید تا ساخت موتور شبیهسازی
مقدمه
در دو بخش قبلی مقاله بررسی کردیم که شبیهسازهای الکترونیکی چگونه مدارها را تحلیل میکنند و چگونه میتوانند یک میکروکنترلر واقعی مانند ESP32 یا STM32 را در محیطی کاملاً مجازی اجرا کنند.
در بخش اول یاد گرفتیم که قطعات الکترونیکی در نرمافزارهایی مانند Proteus فقط تصاویر گرافیکی نیستند، بلکه هر قطعه دارای یک مدل ریاضی و رفتاری است که عملکرد واقعی آن را تعریف میکند.
در بخش دوم نیز دیدیم که شبیهسازی میکروکنترلرها نیازمند بازسازی یک سیستم کامل شامل CPU، حافظه، رجیسترها، GPIO و واحدهای جانبی است.
اما یک سؤال مهم باقی میماند:
اگر بخواهیم خودمان یک قطعه جدید بسازیم یا حتی یک شبیهساز مشابه Proteus طراحی کنیم، از کجا باید شروع کنیم؟
چگونه نرمافزار میفهمد که یک قطعه چند پایه دارد؟
چگونه تشخیص میدهد که پایه شماره یک ورودی است یا خروجی؟
چگونه رفتار یک سنسور، رله، نمایشگر یا میکروکنترلر جدید را تعریف میکنیم؟
پاسخ این پرسشها در معماری داخلی شبیهسازها و مفهوم مهمی به نام Component Modeling یا مدلسازی قطعات قرار دارد.
معماری کلی یک شبیهساز حرفهای
یک نرمافزار مانند Proteus یا Wokwi معمولاً از چند بخش اصلی تشکیل شده است.
ساختار کلی:
User Interface
↓
Circuit Editor
↓
Netlist Generator
↓
Simulation Scheduler
↓
Simulation Engine
↓
Component Models Library
↓
Graphic Rendering
هر بخش وظیفه خاصی دارد.
۱– رابط کاربری (User Interface)
اولین بخش، محیطی است که کاربر مدار را در آن طراحی میکند.
مانند:
- قرار دادن قطعات
- کشیدن سیمها
- تغییر مقدار مقاومت
- انتخاب میکروکنترلر
- اتصال ابزار اندازهگیری
اما نکته مهم این است که این محیط فقط ظاهر کار است.
وقتی کاربر یک مقاومت روی صفحه قرار میدهد، نرمافزار در پشت صحنه یک نمونه از یک مدل مقاومت ایجاد میکند.
مثلاً:
Component ID:
R1
Type:
Resistor
Value:
1000 Ohm
Pins:
1 , 2
۲– کتابخانه قطعات (Component Library)
قلب یک شبیهساز، کتابخانه قطعات آن است.
هر قطعه شامل چند بخش است:
اطلاعات ظاهری
مانند:
- شکل قطعه
- اندازه
- نام پایهها
- رنگ
- Symbol
اطلاعات الکتریکی
مانند:
- تعداد پایهها
- نوع پایه
- محدوده ولتاژ
- مدل رفتار
مدل اجرایی
یعنی کدی که رفتار قطعه را کنترل میکند.
برای مثال یک LED:
Input:
Voltage
Process:
if Voltage > Threshold
State = ON
else
State = OFF
ساخت یک قطعه ساده در شبیهساز
فرض کنید میخواهیم یک سنسور دما بسازیم.
این قطعه سه پایه دارد:
Temperature Sensor
VCC
|
|
DATA
|
|
GND
ابتدا پایهها را تعریف میکنیم:
Pin 1:
Power
Pin 2:
Output
Pin 3:
Ground
سپس رفتار آن را مشخص میکنیم:
مثلاً:
اگر دما ۲۵ درجه باشد:
Output = 2.5V
اگر دما ۵۰ درجه شود:
Output = 5V
پس مدل قطعه میشود:
Temperature
↓
Voltage Calculation
↓
Output Pin
مدل رفتاری (Behavioral Model) چیست؟
یکی از مهمترین مفاهیم در طراحی شبیهسازها، مدل رفتاری است.
در این روش لازم نیست تمام جزئیات فیزیکی قطعه را شبیهسازی کنیم.
بلکه فقط رفتار قابل مشاهده آن را مدل میکنیم.
مثلاً یک رله واقعی شامل:
- سیمپیچ
- میدان مغناطیسی
- هسته فلزی
- کنتاکت مکانیکی
است.
اما در شبیهساز ممکن است فقط این رفتار کافی باشد:
اگر ورودی فعال شد:
خروجی وصل شود
یعنی:
Input HIGH
↓
Switch ON
↓
Output Connected
این روش باعث افزایش سرعت شبیهسازی میشود.
مدلسازی دقیق در مقابل مدل رفتاری
دو روش اصلی برای ساخت مدل قطعات وجود دارد.
روش اول: مدل فیزیکی (Physical Modeling)
در این روش تلاش میشود رفتار واقعی قطعه با جزئیات زیاد شبیهسازی شود.
مثلاً یک ترانزیستور:
- جریان پایه
- جریان کلکتور
- ظرفیت داخلی
- اثر دما
در نظر گرفته میشود.
مزیت:
دقت بسیار بالا
معایب:
- سرعت کمتر
- پیچیدگی زیاد
روش دوم: مدل رفتاری (Behavioral Modeling)
در این روش فقط رفتار ورودی و خروجی مهم است.
مثلاً:
یک سنسور:
Input:
Temperature
Output:
Voltage
مزایا:
- سریع
- ساده
- مناسب سیستمهای دیجیتال
معایب:
- جزئیات فیزیکی کمتر
موتور زمانبندی (Simulation Scheduler)
یکی از پیچیدهترین بخشهای شبیهساز، Scheduler است.
وظیفه آن مدیریت زمان در محیط مجازی است.
فرض کنید:
یک مدار شامل:
- CPU
- LED
- سنسور
- تایمر
است.
هر بخش سرعت متفاوتی دارد.
CPU ممکن است:
80MHz
کار کند.
اما LED تغییر وضعیت آنی ندارد.
Scheduler باید تصمیم بگیرد:
چه چیزی؟
چه زمانی؟
بهروزرسانی شود.
مثلاً:
زمان صفر:
CPU دستور اجرا میکند
زمان 10ns:
GPIO تغییر میکند
زمان 20ns:
LED مدل جدید را دریافت میکند
زمان 30ns:
نمایشگر بهروزرسانی میشود
Event Queue چگونه کار میکند؟
برای مدیریت اتفاقات، بسیاری از شبیهسازها از Event Queue استفاده میکنند.
ساختار:
Event Queue
1:
GPIO Change
Time = 10ns
2:
Timer Interrupt
Time = 20ns
3:
UART Receive
Time = 30ns
موتور شبیهسازی همیشه نزدیکترین رویداد را اجرا میکند.
ارتباط بین قطعات چگونه مدیریت میشود؟
در یک مدار واقعی، سیمها ارتباط الکتریکی ایجاد میکنند.
در شبیهساز، سیمها در واقع Node هستند.
مثلاً:
ESP32 GPIO2
|
Wire
|
LED Input
در داخل نرمافزار:
Node 105
Connected:
ESP32.Pin2
LED.Pin1
هر تغییری در Node به تمام قطعات متصل منتقل میشود.
چگونه یک میکروکنترلر جدید به شبیهساز اضافه میشود؟
فرض کنید میخواهیم یک میکروکنترلر جدید به Proteus اضافه کنیم.
مراحل:
مرحله اول: تعریف معماری CPU
باید مشخص شود:
- نوع پردازنده
- مجموعه دستورها
- تعداد رجیسترها
- نحوه اجرای دستورها
مثلاً:
CPU:
32-bit RISC
Registers:
R0-R15
Clock:
120MHz
مرحله دوم: طراحی حافظه
مشخص میکنیم:
Flash:
4MB
RAM:
512KB
مرحله سوم: تعریف Peripheralها
مانند:
- GPIO
- UART
- SPI
- I2C
- ADC
- PWM
مرحله چهارم: اتصال پایهها
مثلاً:
Pin 1:
VCC
Pin 2:
GPIO0
Pin 3:
TX
Pin 4:
RX
ساخت یک شبیهساز ساده از صفر
اگر بخواهیم یک شبیهساز کوچک بسازیم، معماری اولیه میتواند این باشد:
GUI
|
Circuit Database
|
Simulation Core
|
Component Objects
|
Physics Engine
هر قطعه یک Object خواهد بود:
مثلاً:
class Resistor
{
Voltage input;
Resistance value;
calculateCurrent();
};
یا:
class LED
{
bool state;
update();
};
زبانهای برنامهنویسی مورد استفاده در شبیهسازها
نرمافزارهای حرفهای معمولاً با زبانهایی ساخته میشوند که سرعت اجرای بالا داشته باشند.
رایجترین آنها:
C++
به دلیل:
- سرعت زیاد
- کنترل حافظه
- مناسب برای موتور شبیهسازی
Python
معمولاً برای:
- ابزارهای کمکی
- تحلیل داده
- تست مدلها
SystemC
برای مدلسازی سیستمهای سختافزاری پیچیده.
Verilog و VHDL
برای توصیف سختافزار دیجیتال.
این زبانها در طراحی FPGA و شبیهسازی تراشهها بسیار مهم هستند.
نقش SPICE در ساخت شبیهسازها
اگر هدف شبیهسازی دقیق مدارهای آنالوگ باشد، معمولاً از موتورهای SPICE استفاده میشود.
SPICE وظیفه دارد:
- معادلات مدار را تشکیل دهد
- جریانها را محاسبه کند
- ولتاژ نقاط مختلف را تعیین کند
برای مثال:
یک مدار شامل:
R + C + Voltage Source
به مجموعهای از معادلات تبدیل میشود.
سپس حلکننده ریاضی آنها را حل میکند.
چرا ساخت شبیهساز مانند Proteus سخت است؟
زیرا باید چند دنیای مختلف را ترکیب کند:
دنیای الکترونیک
- ولتاژ
- جریان
- قطعات آنالوگ
دنیای دیجیتال
- بیت
- کلاک
- منطق
دنیای کامپیوتر
- CPU
- حافظه
- دستور ماشین
دنیای گرافیک
- نمایش مدار
- انیمیشن
- تعامل کاربر
به همین دلیل یک شبیهساز حرفهای نتیجه همکاری چندین حوزه مهندسی است.
آینده شبیهسازی مدارها
در سالهای اخیر، شبیهسازی مدارها به سمت هوشمندتر شدن حرکت کرده است.
فناوریهایی مانند:
- هوش مصنوعی
- مدلسازی خودکار قطعات
- Digital Twin
- شبیهسازی ابری
باعث شدهاند طراحی مدار سریعتر شود.
در آینده ممکن است مهندس فقط توضیح دهد:
«یک کنترلر موتور با ESP32 و سنسور دما طراحی کن»
و سیستم به صورت خودکار:
- مدار بسازد
- قطعات انتخاب کند
- برنامه بنویسد
- شبیهسازی انجام دهد
جمعبندی نهایی مقاله
شبیهسازهای مدار مانند Proteus و Wokwi در واقع ترکیبی از چند فناوری بزرگ هستند:
- مدلسازی ریاضی قطعات
- حل معادلات الکتریکی
- امولیشن پردازنده
- مدیریت زمان مجازی
- موتور رویداد
- کتابخانه قطعات
- موتور گرافیکی
هر قطعهای که در محیط شبیهسازی مشاهده میکنیم، دارای یک هویت نرمافزاری است:
- پایهها تعریف شدهاند.
- رفتار آن مشخص شده است.
- قوانین عملکرد آن نوشته شده است.
- ارتباط آن با سایر قطعات مدیریت میشود.
برای ساخت یک قطعه جدید، کافی نیست فقط شکل آن را طراحی کنیم؛ باید بدانیم قطعه در برابر ورودیها چگونه واکنش نشان میدهد و این رفتار را به زبان قابل فهم برای موتور شبیهسازی تبدیل کنیم.
در نهایت، یک شبیهساز حرفهای مانند Proteus در حقیقت یک آزمایشگاه الکترونیکی مجازی است که در آن قوانین فیزیک، معماری کامپیوتر و برنامهنویسی سیستمهای نهفته در یک محیط واحد ترکیب شدهاند.

