Этот пример иллюстрирует различные настройки Timescale в блоке HDL Cosimulation и объясняет, как они влияют на временную зависимость Simulink® и симулятора HDL. Мы используем простую модель проверки четности Verilog, чтобы показать временную зависимость Simulink и симулятора HDL (ModelSim® или Incisive®) используемый в cosimulation.
parity_check.mdl (ModelSim) или (Острый) parity_check.mdl иллюстрируют cosimulation реализации HDL простого генератора четности. Эта модель демонстрирует различные варианты, доступные в панели Масштабов времени блока HDL Cosimulation. Можно переключиться между этими режимами с помощью активируемых кликом мыши аннотаций в модели.
Проверка четности является методом добавления бита четности к потоку данных для того, чтобы проверять что данные на любые ошибки. В этом примере мы будем использовать "схему" бита четности, в которой бит четности установлен в 1, если количество единиц в данном наборе битов является нечетным (создание общего количества из единиц, включая бит четности, даже).
Мы выбираем вход к средству проверки четности, чтобы быть 8 битов и вывести как 1 бит. Код Verilog, используемый в этом примере, является paritychecker.v.
Для того, чтобы провести вас по различным шагам этого примера, мы обеспечили пронумерованные шаги, которые можно выполнить. Каждый пронумерованный шаг выполнен кратким объяснением того же самого.
1. Запустите ModelSim/Incisive
Прежде, чем запустить модель, необходимо сначала запустить симулятор HDL. Используйте команду запуска, обеспеченную в модели для этого. Это также устанавливает разрешение симулятора HDL 1 нс.
2. Наблюдайте настройки в панели Портов блока HDL Cosimulation
Дважды кликните на блоке HDL Cosimulation, чтобы отредактировать cosimulation параметры. Выберите панель Портов.
Шаг расчета выходного сигнала установлен в Ts - который является уровнем выборки модели. Существуют многочисленные способы задать значение Ts. Мы установили Ts для этой модели в коллбэке PreLoadFcn модели. Можно установить значение Ts в Командной строке MATLAB® также.
Обратите внимание на то, что опция для разрешения прямого сквозного соединения проверялась - это вызвано тем, что, наш код Verilog является чисто комбинационным.
Эта модель приступается к работе в трех режимах синхронизации: Абсолютный, Относительный, и Автоматический Масштаб времени. Можно читать больше об этих режимах в Руководстве пользователя HDL Verifier™ на странице Understanding the Representation of Simulation Time.
Абсолютный режим синхронизации позволяет вам задать временную зависимость между Simulink и симулятором HDL в терминах абсолютных единиц измерения времени и масштабного коэффициента.
3. Нажмите на Абсолютную аннотацию Режима в модели, чтобы установить следующее:
Шаг расчета Ts = 10
Панель Масштабов времени набора блока HDL Cosimulation к "1 с в Simulink соответствует 1 нс в симуляторе HDL":
set_param('parity_check/HDL Cosimulation','TimingMode','ns'); set_param('parity_check/HDL Cosimulation','TimingScaleFactor','1');
Абсолютные единицы измерения времени в этом случае являются 'нс', и масштабный коэффициент равняется '1'.
4. Запустите модель
Форма волны симулятора HDL показывает симуляцию, запущенную для 100 нс, тогда как Осциллограф Simulink изображает, как модель запускалась в течение 100 с. Это ожидается для установки Timescale 1 с в Simulink = 1 нс в симуляторе HDL.
Относительный режим синхронизации позволяет вам задать временную зависимость между Simulink и симулятором HDL в относительном выражении - то есть, как некоторое количество меток деления симулятора HDL.
5. Перезапустите симуляцию, запущенную в симуляторе HDL - опция 'Перезапуска' использования:
6. Нажмите на Относительную аннотацию Режима в модели, чтобы установить следующее:
Шаг расчета Ts = 10
Панель Масштабов времени набора блока HDL Cosimulation к "1 с в Simulink соответствует 1 Метке деления в симуляторе HDL":
set_param('parity_check/HDL Cosimulation','TimingMode','Tick'); set_param('parity_check/HDL Cosimulation','TimingScaleFactor','1');
Единицы измерения времени в этом случае являются метками деления симулятора HDL, и масштабный коэффициент равняется '1'.
7. Запустите модель
Форма волны симулятора HDL показывает симуляцию, запущенную для 100 нс, тогда как Осциллограф Simulink изображает, как модель запускалась в течение 100 с. Это ожидается для установки Timescale 1 с в Simulink = 1 Метка деления в симуляторе HDL (и разрешение средства моделирования установлено в 1 нс). Полученные формы волны похожи на тех, мы вошли в абсолютный timescaling режим.
8. Измените разрешение симулятора HDL
Если необходимо было установить разрешение симулятора HDL к 1 пикосекунде и запустить вышеупомянутую модель, вы найдете, что симулятор HDL запустился бы в течение 100 пикосекунд (поскольку Масштаб времени установлен в 1 с в Simulink = 1 Метка деления в симуляторе HDL). Обратите внимание на то, что для того, чтобы попробовать это в ModelSim, необходимо будет перезагрузить симуляцию в симуляторе HDL с соответствующими командами Tcl (чтобы быть выполненными в симуляторе HDL):
quit -sim #quit simulation vsimulink work.paritychecker -t 1ps #reload code for cosimulation & set resolution add wave /paritychecker/* # add signals to wave window
и в Остром необходимо будет закрыть все окна симулятора HDL и изменить следующую строку кода в paritycmds_in.m:
'exec ncelab -64bit -TIMESCALE 1ns/1ns -access +wc paritychecker',... % Elaborate design
к:
'exec ncelab -64bit -TIMESCALE 1ps/1ps -access +wc paritychecker',... % Elaborate design
Для того, чтобы продолжить этот пример, закройте симулятор HDL и запустите новый экземпляр средства моделирования (с набором разрешения к 1 нс) использование команды Запуска, обеспеченной в модели:
Для ModelSim: vsim('tclstart',paritycmds)
Для острого: nclaunch('tclstart',paritycmds_in)
В панели Масштабов времени блока HDL Cosimulation кнопка Determine Timescale Now вычисляет временную зависимость между Simulink и симулятором HDL. Обратите внимание на то, что ссылка должна найти разрешение симулятора HDL, и следовательно у вас должны будут быть симулятор HDL и выполнение.
Когда вы позволяете программному обеспечению ссылки задавать временную зависимость, оно пытается установиться коэффициент масштаба времени между симулятором 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.