Lavr wrote:Мне это почему-то напомнило:
ACHTUNG!!! 
Поэтому я и написал, что "не очень понял этот возглас..."

Переводчики иногда могут быть забавными.
Все хорошо, пока никто не обижается.
Неправильное толкование может стать проблемой при переводе.
Shaos wrote:> PS. А я уже не патрон... PayPal ушел из Росии...
пост сдал - пост принял
P.S. Может кто-то объяснить подробно в чём отличие эмуляции процов старой и новой версии? Почему решили переписать с потерей совместимости?
Во-первых: большое спасибо за вашу поддержку!
Потеря совместимости не велика.
Но есть несколько причин, чтобы сделать некоторые глубокие изменения.
Я постараюсь сделать краткое объяснение наиболее важных моментов:
Ограничения, относящиеся к движку моделирования:
- 0.x.x: симуляция на основе "тикания часов":
Это подход, используемый большинством симуляторов.
Схема обновляется через определенные промежутки времени. Например, каждый 1 нас.
Это означает, что за время 1,5 мкс ничего не может произойти.
Вы можете уменьшить шаг по времени настолько, насколько хотите, но тогда количество шагов увеличивается, замедляя скорость моделирования.
Если вы хотите разрешение 1 пс, то вы должны запустить симуляцию с временным шагом 1 пс. это 1e12 шагов в секунду.
Вы представляете, насколько медленным может быть моделирование?
Это имеет много последствий, например, вы не можете запустить тактовый сигнал с периодом = 1,482 мкс, используя временной шаг 1 мкс.
- 1.x.x: симуляция на основе "событий":
Я не знаю ни одного симулятора схемы, использующего этот подход (но может быть и есть).
Элементы схемы сообщают механизму моделирования, что они хотят что-то сделать в определенное время с разрешением ps.
Например, логический вентиль может зарегистрировать «событие» по адресу: текущее_время + 10421 пс.
Это означает, что схема обновляется только тогда, когда «что-то происходит».
Вы можете запустить тактовый сигнал с точным периодом = 1,000000001 мс, и он будет обновляться только 1000 раз в секунду: быстрая симуляция.
Ограничения, относящиеся к моделированию микроконтроллера:
- 0.x.x: использует внешние симуляторы: Gpsim для PIC и Simavr для AVR.
Эти тренажеры не предназначены для интеграции в другую программу.
Взаимодействие с этими программами сложное и требует множества хаков:
Simavr: написан на C, а не на C++. Он использует своего рода систему связи сигнал-слот, так что почти невозможно понять, что происходит. Найти проблему - это кошмар. Найти место для взаимодействия с ним — кошмар.
Gpsim: довольно сложный, иерархия классов глубокая, он использует классы для всего, даже для сохранения тактовой частоты есть класс. Каждая инструкция — это класс. Каждый регистр — это класс. Функциональность не основана на модулях, она реализована в классах регистров. и т.д. и т.п... Поиск проблемы - это кошмар. Найти место для интерфейса с ним — кошмар.
И Gpsim, и Simavr хранят информацию об устройствах в исходном коде:
Если есть ошибка, например, в регистрационном имени или адресе, вам необходимо исправить ее и перекомпилировать (не удобно для пользователя).
Размер исполняемого файла значительно увеличивается, когда у вас много устройств (не поддерживает кеширование).
Simulide 1.0.0 использует файлы xml для хранения информации об устройствах:
Пользователи могут исправить проблемы.
Пользователи могут модифицировать, добавлять новые устройства или создавать собственные версии некоторых устройств для определенных целей.
Меньший исполняемый файл.
Gpsim — это более 100 тысяч строк кода (с графическим интерфейсом).
Simavr — это около 50 тысяч строк кода (без графического интерфейса).
SimulIDE 1.0.0 состоит примерно из 55 тысяч строк кода. С:
PIC, AVR, 8051 и около 100 компонентов (примитивов), включая некоторые сложные, такие как осциллограф и логический анализатор.
Редактор/компилятор/отладчик.
Система для подсхем, плат и экранов.
Симулятор цепи.
графический интерфейс
Ограничения, относящиеся к системе собственности:
- 0.x.x: использует QProperty.
Это имеет много ограничений, поэтому была необходима пользовательская система свойств.
Это приводит к новому формату файлов для файлов схемы (от .simu до .sim1).
Новый формат файла имеет некоторые преимущества, например, он намного быстрее загружается (заметно на больших цепях).
На всякий случай вот текст на английском:
First: thank you very much for your support!!
There is not much loss of compatibility.
But there are several reasons to do some deep changes.
I will try to do a brief explanation of the most relevant points:
Limitations referred to the simulation engine:
- 0.x.x: simulation based on "clock tick":
This is the approach used by most simulators.
The circuit updates at defined time steps. For example, every 1 us.
This means that nothing can happen at time 1.5 us.
You can reduce the time step as much as you want, but then the number of steps increases, slowing down the simulation speed.
If you want a resolution of 1 ps, then you must run the simulation at 1 ps time step. this is 1e12 steps per second.
Can you imagine how slow the simulation can be?
This has a lot of consequences, for example you can't run a clock signal with a period = 1.482 us using a time step of 1 us.
- 1.x.x: simulation based on "events":
I don't know about any circuit simulator using this approach (but could be some out there).
Elements in the circuit tell the simulation engine that they want to do something at a certain time with ps resolution.
For example a logic gate can register an "event" at: current_time + 10421 ps.
This means that the circuit is updated only when "something happens".
You can run a clock signal with an exact period = 1.000000001 ms, and it will update only 1000 times per second: fast simulation.
Limitations referred to the Microcontroller simulation:
- 0.x.x: uses external simulators: Gpsim for PIC and Simavr for AVR.
These simulators are not designed to be integrated in another program.
Interfacing with these programs is complex and requires lots of hacks:
Simavr: is written in C, not C++. It uses a kind of signal-slot communicaton system, so it's almost impossible to know what is happening. Finding a problem is a nightmare. Finding a place to interface with it is a nightmare.
Gpsim: is quite complex, class hierarchies are deep, it uses classes for everything, even to keep the clock frequency there is a class. Every instruction is a class. Every register is a class. Functionality is not based in modules, it is implemented in the register classes. etc. etc... Finding a problem is a nightmare. Finding a place to interface to it is a nightmare.
Both, Gpsim and Simavr store information about devices in the source code:
If there is an error, for example in a register name or address, you need to fix it and recompile (not user friendly).
The executable size increases a lot when you have many devices (not cache friendly).
Simulide 1.0.0 uses xml files to store information about devices:
Users can fix problems.
Users can modify, add new devices or create their own versions of some device for specific purposes.
Smaller executable.
Gpsim is more than 100k lines of code (with GUI).
Simavr is around 50k lines of code (no GUI).
SimulIDE 1.0.0 is around 55k lines of code. With:
PIC, AVR, 8051 and around 100 components (primitives), including some complex ones like Oscilloscope and Logic Analyzer.
Editor/Compiler/Debugger.
System for Subcircuits, Boards and Shields.
Circuit simulator.
GUI.
Limitations referred to the property system:
- 0.x.x: uses QProperty.
This has many limitations, so a custom property system was needed.
This leads to a new file format for circuit files (.simu to .sim1)
The new file format has some advantages, for example it is much faster to load (noticeable in big circuits).