Этот пример иллюстрирует различные настройки шкалы времени в блоке Cosimulation HDL и объясняет, как они влияют на отношения синхронизации Simulink ® и имитатора HDL. Мы используем простую модель проверки четности Verilog, чтобы показать взаимосвязь синхронизации Simulink и имитатора HDL (ModelSim ® или Incisive ®), используемого для косимуляции.
Модель иллюстрирует косимуляцию реализации HDL простого средства контроля четности и демонстрирует различные опции, доступные на панели «Временные шкалы» блока косимуляции HDL. На этой панели время симулятора связано с временем симулятора ЛПВП в абсолютном или относительном смысле. Можно задать связь явно или автоматически выбрать связь в любом режиме на основе знаний о конструкциях Simulink и HDL.
При использовании ModelSim или QuestaSim parity_check_mq.slx модели должен быть открыт. При использовании Insive или Xcelium закройте модель ModelSim и откройте parity_check_in.slx модели.
% For ModelSim: modelName = 'parity_check_mq'; open_system(modelName);
% For Incisive: modelName = 'parity_check_in'; open_system(modelName);


Проверка четности - это способ добавления бита четности в поток данных, чтобы проверить эти данные на наличие ошибок. В этом примере мы будем использовать схему «четного бита четности», в которой бит четности установлен в 1, если количество единиц в данном наборе битов нечетно (делая общее количество единиц, включая бит четности, четным).
Мы выбираем вход в средство контроля четности как 8 бит и выводим как 1 бит. В этом примере используется код Verilog paritychecker.v.
Для ознакомления с различными шагами этого примера мы предоставили нумерованные шаги, которые вы можете выполнить. За каждым пронумерованным шагом следует краткое его объяснение.
1. Запуск ModelSim/Incisive
Перед запуском модели необходимо запустить имитатор ЛПВП. Используйте для этого команду запуска, предоставленную в модели, или выполните команду, специфичную для симулятора. При этом разрешение имитатора HDL также устанавливается равным 1ns.
Для Modelsim/Questasim:
vsim('tclstart', paritycmds('1ns'));
Для резца/кселия:
nclaunch('tclstart', paritycmds_in('1ns'));
2. Соблюдать настройки на панели «Порты» блока Cosimulation HDL
Дважды щелкните блок косимуляции HDL, чтобы отредактировать параметры косимуляции. Выберите панель «Порты».

Время выборки выходного сигнала устанавливается в Ts - это частота дискретизации модели. Существует множество способов задания значения Ts. Мы установили Ts из обратного вызова PreLoadFcn модели (см. Создание обратных вызовов модели (Simulink)). Также можно задать значение Ts в базовом рабочем пространстве в командной строке MATLAB ®.
Обратите внимание, что была проверена возможность прямого прохождения - это потому, что наш код Verilog является чисто комбинационным.
Эта модель настроена для работы в трех режимах синхронизации: Абсолютный (Absolute), Относительный (Relative) и Автоматическая шкала времени (Auto Timescale). Для получения дополнительной информации об этих режимах см. раздел Руководство пользователя Simulation Timescales.
Режим абсолютной синхронизации позволяет определить зависимость синхронизации между Simulink и имитатором HDL в единицах абсолютного времени и масштабном коэффициенте.
3. Щелкните аннотацию Абсолютный режим (Absolute Mode) в модели, чтобы задать следующее.
Время выборки Ts = 10
Установите для панели «Timescales» блока Cosimulation HDL значение «1s in Simulink соответствует 1n в имитаторе HDL»
Или вызовите следующую функцию:
paritytimescale('absolute');

В этом случае абсолютными единицами времени являются «ns», а масштабным коэффициентом - «1».
4. Запустить модель
Форма сигнала имитатора ЛПВП показывает прогон моделирования для 100 нс, в то время как область применения Simulink показывает, как модель работала для 100-х годов. Это ожидается для настройки шкалы времени 1 в Simulink = 1ns в имитаторе ЛПВП.


Относительный режим синхронизации позволяет определить отношение синхронизации между Simulink и имитатором HDL в относительных терминах, то есть по мере того, как некоторое количество имитаторов HDL засечено.
5. Щелкните аннотацию Относительный режим (Relative Mode) в модели, чтобы задать следующее.
Время выборки Ts = 10
Установите для панели Timescales блока Cosimulation HDL значение «1s in Simulink соответствует 1 галочке в имитаторе HDL»:
paritytimescale('relative');

В этом случае единицами времени являются деления имитатора ЛПВП, а масштабный коэффициент равен «1».
6. Перезапустите моделирование HDL.
Для ModelSim: можно вызвать перезапуск из имитатора HDL.
vsim> restart
Для Incisive: Сначала закройте все окна имитатора HDL и перезапустите симулятор.
nclaunch('tclstart',paritycmds_in('1ns'));
7. Запустить модель
Форма сигнала имитатора ЛПВП показывает прогон моделирования для 100 нс, в то время как область применения Simulink показывает, как модель работала для 100-х годов. Это ожидается для параметра Timescale, равного 1 s в Simulink = 1 Tick в имитаторе HDL (и разрешение симулятора равно 1ns). Полученные формы сигналов аналогичны тем, которые мы получили в режиме абсолютной временной шкалы.
8. Изменение разрешения имитатора ЛПВП
Теперь мы увидим эффект изменения разрешения имитатора HDL на 1ps. Закройте все окна имитатора HDL и перезапустите его, используя разрешение по шкале времени 1 пс.
Для Modelsim/Questasim:
vsim('tclstart',paritycmds('1ps'));
Для резца/кселия:
nclaunch('tclstart',paritycmds_in('1ps'));
Запустите модель Simulink для тех же 10 образцов. Имитатор ЛПВП работает в течение 100 с, так как в Simulink = 1 галочка в имитаторе ЛПВП для шкалы времени установлено значение 1 с.


На панели Шкала времени (Timescales) блока Cosimulation ЛПВП кнопка Определить шкалу времени (Define Timescale Now) вычисляет отношение времени между Simulink и имитатором ЛПВП. Обратите внимание, что ссылка должна найти разрешение имитатора ЛПВП, и, следовательно, вы должны будете включить и запустить имитатор ЛПВП.
Перезапустите имитатор ЛПВП, используя разрешение 1ns
Сначала закройте все открытые окна имитатора ЛПВП. Затем:
Для ModelSim:
vsim('tclstart',paritycmds('1ns'));
Для резцового:
nclaunch('tclstart',paritycmds_in('1ns'));
Когда программное обеспечение линии связи позволяет определить отношение синхронизации, оно пытается установить коэффициент шкалы времени между имитатором HDL и Simulink как можно ближе к 1 секунде в имитаторе HDL = 1 секунде в Simulink (режим абсолютной шкалы времени). Если этот параметр невозможен, средство проверки HDL пытается установить скорость передачи сигнала в модельном порту Simulink на минимально возможное количество отметок имитатора HDL (режим относительной шкалы времени).
Теперь мы будем использовать автоматическую шкалу времени в модели, как показано на следующем шаге:
9. Нажмите кнопку Определить шкалу времени в области Шкала времени
Это предложит установить шкалу времени «1 s in Simulink = 1e-10 s в имитаторе ЛПВП». Появится информационная панель:

Программа HDL Verifier попыталась сначала установить 1:1 шкалу времени, но не смогла сделать это, так как разрешение имитатора HDL установлено в 1ns, и представление Ts = 10 секунд составило бы 10e9 делений, что больше допустимого предела 2 ^ 31 - 1 (= 2 .1475e9). Число 2 ^ 31 - 1 является максимальным значением для параметра int32.
Как только верификатор HDL не может установить абсолютную временную шкалу 1:1, он переключается в режим относительной временной шкалы, в котором он приравнивает основное время выборки (Ts = 10 с) к 1 отметке HDL. Следовательно, 10s в Simulink будет соответствовать 1 отметке HDL, то есть 1s в Simulink соответствует 0.1 отметке в имитаторе HDL.
Примените изменения, предложенные блоком косимуляции HDL.
11. Запустить модель
Формы сигналов в имитаторе ЛПВП и из объема Simulink показаны ниже. Обратите внимание, как имитатор ЛПВП проходит через 10n, в то время как модель Simulink работает в течение 100 с:


Важно понимать, почему программа HDL Verifier не выбрала сопоставление 1:1. Если установить для параметра Timescales значение «1s in Simulink соответствует 1s в симуляторе HDL», применить это изменение и запустить модель, Simulink выдаст следующую ошибку:

12. Установить время иррациональной выборки (Ts = pi * 1e-9)
При использовании нерационального времени выборки в Simulink, например, Ts = pi * 1e-9, автоматическая шкала времени не сможет поддерживать точную взаимосвязь между моделированием Simulink и временем моделирования HDL. В этом случае, хотя результаты косимуляции верны, временные оси области видимости Simulink и имитатора HDL не будут иметь отношения 1:1.

13. Установить шкалу времени «1 s in Simulink = 1 s in HDL simulator»
Чтобы понять, почему связь 1:1 невозможна, установите для параметра Timescale значение '1s in Simulink = 1s in HDL simulator' и запустите модель (после перезапуска моделирования в HDL simulator). Зависимость синхронизации 1:1 в этом случае невозможна, так как pi является иррациональным числом и не является интегральным кратным 1ns (разрешение имитатора ЛПВП). Simulink выдаст сообщение об ошибке в этом случае, как показано на следующем рисунке:

Примечание.При каждом изменении параметров шкалы времени в блоке косимуляции ЛПВП необходимо перезапустить прогон моделирования в симуляторе ЛПВП.