Языки моделирования обычно содержат и операторы, обслуживающие время. Например, в том же языке VHDL имеется оператор ожидания WAIT, позволяющий имитировать взаимодействие асинхронно протекающих процессов. Кстати, с его помощью легко описать временную диаграмму изменения любого сигнала. Например, фрагмент временной диаграммы для сигнала сброса RESET может выглядеть так:
RESET: process
begin
RESET <= ‘0’;
wait for 100ns;
RESET <= ‘1’;
wait for 50ns;
RESET <= ‘0’;
wait;
end process;
Ещё одна особенность языков моделирования заключается в том, что они позволяют описывать параллельно протекающие процессы. Например, в ситуации:
Y <= A and B;
Z <= Y or B;
на языке VHDL определены два параллельных процесса (прохождение сигналов через логические элементы and и or). При изменении сигнала B они запустятся одновременно.
Если бы в приведённых выражениях использовались операторы присваивания (такие как в процедурных языках программирования), то значение Z было бы вычислено для нового, только что полученного в предыдущем выражении значения Y. Типичный последовательный алгоритм, как если бы элементы срабатывали один за другим. Понятно, что результат изменится, если мы поменяем местами оба выражения.
Использование в ЯМ операторов назначения «<=» коренным образом меняет ситуацию. Теперь новое значение Y (хотя оно уже вычислено) не доступно моделятору в текущем цикле его работы. Поэтому при вычислении Z будет использовано старое значение Y, что создаёт иллюзию одновременно протекающих процессов. Теперь порядок следования операторов не влияет на результат, что и характерно для параллельных процессов.
Многие ЯМ, предназначенные для имитации вероятностных процессов, имеют, как правило, встроенные датчики случайных чисел и генераторы типовых воздействий и средства для статистической обработки результатов экспериментов.
Справедливости ради заметим, что в таких языках программирования как ПЛ/1 и Алгол-68 реализованы некоторые из перечисленных выше особенностей, в частности, возможность описания параллельных процессов.
Процедурная ориентация языков моделирования наводит на мысль о том, что их можно строить на основе какого-либо многоцелевого языка программирования, используя последний в качестве базового. При этом ЯМ может быть построен как подмножество базового языка или как его расширение (что более очевидно).
Преимущество названного подхода (в отличие от третьей возможности создания автономного ЯМ с собственным синтаксисом) заключается в том, что такие языки мобильны и легко переносятся вместе базовой системой программирования на любую другую вычислительную систему.
Если ЯМ вложен в базовый язык, то в простейшем случае он включает обращения к подпрограммам, входящим в систему моделирования и написанным на базовом языке. Хорошим примером сказанному является ЯМ ГАСП-4, который полностью вложен в универсальный язык программирования Фортран-4.
Здесь можно также назвать язык процессов SIMULATION, определённый как класс универсального языка программирования СИМУЛА-67. Достоинство рассмотренного подхода в том, что он не требует разрабатывать собственный транслятор с языка моделирования.
Если к базовому языку добавляется некоторое число новых конструкций, необходимых для моделирования, то такой приём называют расширением языка. Теперь уже без препроцессора моделирования не обойтись. Исходное описание на ЯМ придётся сначала транслировать на уровень базового языка, а уже затем с помощью стандартных средств базовой системы программирования – в объектный код. Иногда этот метод называют «раскруткой».
Примером такого подхода является язык СИМПЛ/1, являющийся расширением многоцелевого языка ПЛ/1. Он относится к языкам процессов и используется для цифрового моделирования.
Препроцессорная программа тоже может быть мобильной, если она программируется на базовом языке.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.