Этот пример иллюстрирует различные настройки Timescale в блоке HDL Cosimulation и объясняет, как они влияют на временную зависимость Simulink® и симулятора HDL. Мы используем простую модель проверки четности Verilog, чтобы показать временную зависимость Simulink и симулятора HDL (ModelSim® или Incisive®) используемый для cosimulation.
Модель иллюстрирует cosimulation реализации HDL простого средства проверки четности и демонстрирует различные варианты, доступные в панели Масштабов времени блока HDL Cosimulation. В той панели время Simulink связано со временем симулятора HDL или в абсолютном или относительном смысле. Можно установить отношение явным образом или иметь программное обеспечение, автоматически выбирают отношение в любом режиме на основе знания проектов HDL и Simulink.
Если вы используете ModelSim или QuestaSim, модель parity_check_mq.slx должна быть открыта. Если вы используете Incisive или 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. Используйте команду запуска, обеспеченную в модели для этого, или запустите специфичную для средства моделирования команду ниже. Это также устанавливает разрешение симулятора HDL 1 нс.
Для Modelsim/Questasim:
vsim('tclstart', paritycmds('1ns'));
Для Incisive/Xcelium:
nclaunch('tclstart', paritycmds_in('1ns'));
2. Наблюдайте настройки в панели Портов блока HDL Cosimulation
Дважды кликните на блоке HDL Cosimulation, чтобы отредактировать cosimulation параметры. Выберите панель Портов.
Шаг расчета выходного сигнала установлен в Ts - который является частотой дискретизации модели. Существуют многочисленные способы задать значение Ts. Мы установили Ts из коллбэка PreLoadFcn модели (см., Создают Коллбэки Модели (Simulink)). Можно установить значение Ts в базовом рабочем пространстве в Командной строке MATLAB® также.
Обратите внимание на то, что опция для разрешения прямого сквозного соединения проверялась - это вызвано тем, что, наш код Verilog является чисто комбинационным.
Эта модель приступается к работе в трех режимах синхронизации: Абсолютный, Относительный, и Автоматический Масштаб времени. Можно читать больше об этих режимах в разделе руководства пользователя, Масштабах времени Симуляции.
Абсолютный режим синхронизации позволяет вам задать временную зависимость между Simulink и симулятором HDL в терминах абсолютных единиц измерения времени и масштабного коэффициента.
3. Нажмите на Абсолютную аннотацию Режима в модели, чтобы установить следующее:
Шаг расчета Ts = 10
Панель Масштабов времени набора блока HDL Cosimulation к "1 с в Simulink соответствует 1 нс в симуляторе HDL"
Или вызовите следующую функцию:
paritytimescale('absolute');
Абсолютные единицы измерения времени в этом случае являются 'нс', и масштабный коэффициент равняется '1'.
4. Запустите модель
Форма волны симулятора HDL показывает симуляцию, запущенную для 100 нс, тогда как Осциллограф Simulink изображает, как модель запускалась в течение 100 с. Это ожидается для установки Timescale 1 с в Simulink = 1 нс в симуляторе HDL.
Относительный режим синхронизации позволяет вам задать временную зависимость между Simulink и симулятором HDL в относительном выражении - то есть, как некоторое количество меток деления симулятора HDL.
5. Нажмите на Относительную аннотацию Режима в модели, чтобы установить следующее:
Шаг расчета Ts = 10
Панель Масштабов времени набора блока HDL Cosimulation к "1 с в Simulink соответствует 1 Метке деления в симуляторе HDL":
paritytimescale('relative');
Единицы измерения времени в этом случае являются метками деления симулятора HDL, и масштабный коэффициент равняется '1'.
6. Перезапустите симуляцию HDL.
Для ModelSim: можно вызвать перезапуск из симулятора HDL.
vsim> restart
Для Острого: Закройте все окна симулятора HDL сначала и повторно запустите средство моделирования.
nclaunch('tclstart',paritycmds_in('1ns'));
7. Запустите модель
Форма волны симулятора HDL показывает симуляцию, запущенную для 100 нс, тогда как Осциллограф Simulink изображает, как модель запускалась в течение 100 с. Это ожидается для установки Timescale 1 с в Simulink = 1 Метка деления в симуляторе HDL (и разрешение средства моделирования установлено в 1 нс). Полученные формы волны похожи на тех, мы вошли в абсолютный timescaling режим.
8. Измените разрешение симулятора HDL
Теперь мы будем видеть эффект изменения разрешения симулятора HDL 1 пикосекунды. Закройте все окна симулятора HDL и перезапуск с помощью 1 разрешения масштаба времени пикосекунды.
Для Modelsim/Questasim:
vsim('tclstart',paritycmds('1ps'));
Для Incisive/Xcelium:
nclaunch('tclstart',paritycmds_in('1ps'));
Запустите модель Simulink для тех же 10 выборок. Запуски симулятора HDL в течение 100 пикосекунд начиная с Масштаба времени установлены в 1 с в Simulink = 1 Метка деления в симуляторе HDL.
В панели Масштабов времени блока HDL Cosimulation кнопка Determine Timescale Now вычисляет временную зависимость между Simulink и симулятором HDL. Обратите внимание на то, что ссылка должна найти разрешение симулятора HDL, и следовательно у вас должны будут быть симулятор HDL и выполнение.
Перезапустите симулятор HDL с помощью Разрешения на 1 нс
Закройте все открытые окна симулятора HDL сначала. То:
Для ModelSim:
vsim('tclstart',paritycmds('1ns'));
Для острого:
nclaunch('tclstart',paritycmds_in('1ns'));
Когда вы позволяете программному обеспечению ссылки задавать временную зависимость, оно пытается установиться коэффициент масштаба времени между симулятором HDL и Simulink, чтобы быть максимально близким к 1 секунде в симуляторе HDL = 1 секунда в Simulink (абсолютный режим масштаба времени). Если эта установка не возможна, HDL Verifier пытается установить уровень сигнала на порте модели Simulink к самому низкому количеству меток деления симулятора HDL (относительный режим масштаба времени).
Теперь мы будем использовать Автоматический Масштаб времени в модели как показано на следующем шаге:
9. Нажмите на кнопку Determine Timescale Now в панели Масштабов времени
Это предложит установить Масштаб времени на "1 с в Simulink = 1e-10-е в симуляторе HDL". Информационная панель будет отображена:
Программное обеспечение HDL Verifier попыталось сначала достигнуть 1:1 установка масштаба времени, но не удалось сделать так, потому что разрешение симулятора HDL установлено в 1 нс, и представляющий секунды Ts=10 составил бы 10e9 количество меток деления, которое больше 2^31 - 1 (=2.1475e9) допустимый предел. Номер 2^31 - 1 является максимальным значением для int32.
Если HDL Verifier не может установить абсолют 1:1 масштаб времени, который он переключает на относительный режим масштаба времени, в котором он приравняет основной шаг расчета (Ts=10s) с 1 меткой деления HDL. Следовательно 10-е в Simulink будут соответствовать 1 метке деления HDL, то есть, 1 с в Simulink соответствует 0.1 Меткам деления в симуляторе HDL.
Примените изменения, предложенные блоком HDL Cosimulation.
11. Запустите модель
Формы волны в симуляторе HDL и от Осциллографа Simulink показывают ниже. Отметьте, как симулятор HDL прогрессирует через 10 нс, тогда как модель Simulink запускается в течение 100 с:
Важно изучить, почему HDL Verifier не выбрал 1:1 отображение. Если необходимо было установить установку Timescales на "1 с в Simulink, соответствует 1 с в симуляторе HDL", применяется это изменение и запускает модель, Simulink даст вам следующую ошибку:
12. Установите иррациональное время выборки (Ts = pi*1e-9)
Если необходимо было использовать иррациональные шаги расчета в Simulink, например, Ts = pi*1e-9, Автоматический Масштаб времени не сможет поддерживать точные отношения между симуляцией Simulink и временем симуляции HDL. В этом случае, несмотря на то, что результаты cosimulation правильны, оси времени Осциллографа Simulink и симулятора HDL не будут иметь 1:1 отношение.
13. Установите Масштаб времени на '1 с в Simulink = 1 с в симуляторе HDL'
Для того, чтобы изучить, почему 1:1 отношение не возможно, установило Масштаб времени на '1 с в Simulink = 1 с в симуляторе HDL' и запускает модель (после перезапуска симуляции в симуляторе HDL). 1:1 временная зависимость не возможна в этом случае, когда пи является иррациональным числом и не является интегральным кратным 1 нс (разрешение симулятора HDL). Simulink даст вам сообщение об ошибке в этом случае, как показано в следующем изображении:
Примечание: Каждый раз, когда вы изменяете настройки Timescale в блоке HDL Cosimulation, необходимо будет перезапустить симуляцию, запущенную в симуляторе HDL.