Масштабы времени: абсолютный, относительный и автоматический

Этот пример иллюстрирует различные настройки Timescale в блоке HDL Cosimulation и объясняет, как они влияют на временную зависимость Simulink® и симулятора HDL. Мы используем простую модель проверки четности Verilog, чтобы показать временную зависимость Simulink и симулятора HDL (ModelSim® или Incisive®) используемый для cosimulation.

Функциональность модели

parity_check.mdl (ModelSim) или (Острый) parity_check.mdl иллюстрируют cosimulation реализации HDL простого генератора четности. Эта модель демонстрирует различные варианты, доступные в панели Масштабов времени блока HDL Cosimulation. Можно переключиться между этими режимами с помощью активируемых кликом мыши аннотаций в модели.

Код Verilog, используемый для Cosimulation

Проверка четности является методом добавления бита четности к потоку данных в порядке проверять что данные на любые ошибки. В этом примере мы будем использовать "схему" бита четности, в которой бит четности установлен в 1, если количество единиц в данном наборе битов нечетно (создание общего количества из единиц, включая бит четности, даже).

Мы выбираем вход к средству проверки четности, чтобы быть 8 битов и вывести как 1 бит. Код Verilog, используемый для этого примера, является paritychecker.v.

Подготовка модели для Cosimulation

В порядке провести вас по различным шагам этого примера, мы обеспечили пронумерованные шаги, которые можно выполнить. Каждый пронумерованный шаг выполнен кратким объяснением того же самого.

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.