Як працює симулятор

Зміст

Наступна

Як працює симулятор

При роботі на VHDL програміст програмує паралельні оператори, які виконуються на деякій віртуальній паралельній обчислювальній системі. Нижній рівень програмістської моделі утворює архітектура віртуального процесорного елемента (ВПЕ), що виконує один паралельний оператор, а верхній рівень – велика кількість ВПЕ, об’єднаних запрограмованою системою міжпроцесорних зв’язків, по яких пересилаються сигнали.

Модель обчислювача з погляду програміста не може бути реалізована у вигляді реальної багатопроцесорної обчислювальної системи через надмірно високі апаратні витрати. З іншого боку, мова VHDL розроблялася з метою реалізації в симуляторах дискретних систем. Власне, IEEE Standard VHDL Language Reference Manual являє собою опис синтаксису конструкцій мови і як вони повинні виконуватися в симуляторі. Такий симулятор, як правило, реалізований на однопроцесорній ЕОМ. Розглянемо архітектуру обчислювача VHDL з погляду розробника симулятора.

На рис. умовно показана архітектура симулятора VHDL.

У даній моделі кожний ВПЕ реалізований як окремий обчислювальний процес (ОП). Всі обчислювальні процеси розділяють у часі той самий апаратний ресурс – центральний процесорний елемент (ЦПЕ) мікропроцесора ПЕОМ.

Всі ОП розділені на три підмножини – черга процесів, що сплять, черга готових процесів і процес, що виконується. Більшість ОП відноситься до числа тих, що сплять, тобто до ОП, для виконання яких немає готових вхідних даних. Наприклад, такий ОП очікує який-небуть вхідний сигнал, зі списку чутливості свого оператора wait. При надходженні такого сигналу цей ОП переноситься в чергу готових до виконання ОП. Один з готових ОП, що обраний довільно, пересилається в кеш-ОЗП мікропроцесора для виконання. ОП, що виконується, виконує свої оператори відповідно до семантики функціонування ВПЕ на ресурсах ЦПЕ мікропроцесора і алгоритмами відповідних бібліотек процедур. При досягненні оператора wait ОП зупиняється. Вироблені ним сигнали запам’ятовуються та пересилаються іншим ОП, які є приймачами цих сигналів. Потім даний ОП пересилається в чергу процесів, що сплять.

Один особливий ОП, що виконується, служить диспетчером для інших процесів. Він називається ядром симулятора й формує черги ОП, які сплять, і готових до виконання ОП, а також вибирає ОП для виконання. Він також розсилає сигнали від ОП, що виконується, до інших ОП. Крім того, він веде лічильник часу моделювання ОС, виконує зв’язок з консоллю, обслуговує звертання до дискової пам’яті і пам’яті глобальних змінних.

Для моделювання програміст створює проект – каталог з файлами VHDL, що має назву проекту. Після компіляції в проекті створюється бібліотека проекту, що має назву проекту й містить всі скомпільовані об’єкти проекту. Після запуску програми на моделювання спершу виконується зв’язування об’єктів проекту і присвоєння початкових значень змінним та сигналам (elaboration).

Потім запускається власне моделювання. При цьому обрані програмістом сигнали записуються в окремій області пам’яті у своєму розвитку і можуть бути відображені на дисплеї у вигляді таблиць або графіків.

Для того, щоб зберегти семантику виконання великої кількості паралельних процесів, таку саму як у системи з ВПЕ, у кожному циклі моделювання, крім початкового, симулятор виконує наступні кроки:

  • Кожний зупинений ОП, для якого відбулася подія в попередньому циклі моделювання, яка очікує відповідний оператор wait, запускається на виконання; у ОП, зупинених для очікування затримки перевіряється закінчення цієї затримки і, якщо затримка минула, ці ОП також запускаються.
  • Кожний запущений ОП виконується до своєї зупинки на операторі wait. При цьому обчислюються нові значення сигналів в операторах присвоювання сигналам.
  • Обчислюється нове значення поточного часу Тb як найближчий момент часу, у який буде запущений який-небудь ОП, зупинений на операторі wait очікування закінчення затримки або момент часу наступної активації джерел сигналу.
  • Лічильник часу приймає нове значення Тc = Тb .
  • Кожному сигналу, для якого було обчислено нове значення, присвоюється це значення; ці зміни сигналів перевіряються, чи є вони подіями для якихось ОП.

Якщо в наступному циклі моделювання не запускається ОП по закінченню заданої затримки або активація джерел сигналу відбувається без затримки, то в даному циклі лічильник часу Тс зберігає своє колишнє значення, вимірюване у фемта- або пікосекундах. У цьому випадку вважається, що час моделювання збільшився на дельта-затримку.

Моделювання має таку особливість, що серія, яка включає від нуля до декількох циклів з дельта-затримкою замінюється одним циклом з конкретною затримкою. Звичайно таких циклів у серії 0-10. Якщо моделюється комбінаційна схема з n рівнів, кожний з яких заданий процесом без затримки, то буде n циклів у серії. Якщо програма неправильна і зациклюється, тоді циклів у серії буде значно більше. Так, симулятор Active HDL зупиняється, якщо циклів у ланцюжку більше 1000.

Припустимо, що в моделі перебувають два процеси, що обмінюються однією глобальною змінною. Тоді порядок обміну цієї змінної не контролюється програмістом, тому що він не знає який із цих процесів спрацює першим у серії циклів з дельта-затримкою. Для того, щоб ці процеси були запущені не в довільному, а саме в останньому циклі із серії циклів, з дельта-затримкою, причому після всіх процесів, потрібно такі процеси позначити як відкладені, тобто в програмі перед словом process поставити ключове слово postponed.

При складанні VHDL-програм бажано мати на увазі наступне:

  • Навіть невеликий процес займає в пам’яті кілька кілобайт. А максимальна кількість процесів у скомпільованій програмі визначається об’ємом динамічної пам’яті комп’ютера.
  • Зміна одного ОП іншим ОП являє собою зміну контексту в роботі ЦПЕ, що може тривати кілька тисяч його тактів. Отже, чим менше процесів і взагалі – паралельних операторів – тим швидше моделювання.
  • Найбільшу частину часу займає виконання ОП ядра симулятора, що зростає нелінійно зі збільшенням числа ОП і числа сигналів у списках чутливості їхніх операторів wait. Тому, знову ж таки, чим менше процесів у відкомпільованій програмі і сигналів у списках чутливості – тим швидше виконується ця програма в симуляторі.
  • Не слід програмувати процес без оператора wait (або без списку чутливості), тому що після того, як цей процес стане активним, він монопольно захопить ресурси ЦПЕ і симулятор зависне.

Наскільки важливо додержуватися цих рекомендацій? Це справа смаку. В одній з перших моїх VHDL- моделей я вставив модель ПЗП у вигляді:

А(0)<= X"12";
. . .
А(4095)<= X"EF";

І довго дивувався, чому ініціалізація моделі тривала кілька хвилин, а модель такого простенького ПЗП займала в пам'яті більше 6 Мбайт. Розуміння прийшло, коли довідався, що кожному такому рядку відповідає окремий ОП. При заміні масиву-сигналу на масив-змінну моделювання істотно прискорилося, а модель ПЗП почала займати 0,6 Мбайт. А коли ПЗП було закодовано константою, то місце в ОЗП для його моделі зменшилося до 0,13 Мбайт і, відповідно, прискорилося моделювання.

Анатолій Сергієнко
E-mail: aser@comsys.kpi.ua