Timescales: Абсолютный, Относительный и Автоматический

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

Введение

Модель иллюстрирует косимуляцию реализации простой проверки четности в HDL и показывает различные опции, доступные на панели Timescales блока HDL Cosimulation. На этой панели время Simulink связано с Симулятором HDL временем или в абсолютном, или в относительном смысле. Можно задать отношение явным образом или автоматически выбрать отношение в любом режиме, основанном на знаниях о проектах Simulink и 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. Используйте для этого команду запуска, предусмотренную в модели, или запустите команду simulator-specific ниже. Это также устанавливает разрешение Симулятора HDL равным 1ns.

Для Modelsim/Questasim:

vsim('tclstart', paritycmds('1ns'));

Для резкого/Xcelium:

nclaunch('tclstart', paritycmds_in('1ns'));

2. Наблюдайте настройки на панели Порты блока косимуляции

Дважды кликните блок HDL Cosimulation, чтобы отредактировать параметры косимуляции. Выберите панель Порты (Ports).

  • Шаг расчета сигнала выхода устанавливается на Ts - что является частота дискретизации модели. Существует множество способов задать значение Ts. Мы установили Ts из обратного коллбэка PreLoadFcn модели (см. «Создание коллбэков модели» (Simulink)). Можно также задать значение Ts в базовом рабочем пространстве в командной строке MATLAB ®.

  • Обратите внимание, что опция разрешения прямого сквозного соединения была проверена - это потому, что наш код Verilog является чисто комбинационным.

Эта модель настроена на работу в трех режимах синхронизации: Absolute, Relative и Auto Timescale. Подробнее об этих режимах можно прочитать в разделе руководства пользователя, Simulation Timescales.

Абсолютная шкала времени

Режим абсолютного времени позволяет вам задать отношение времени между Simulink и Симулятором HDL с точки зрения абсолютных временных модулей и шкалы фактора.

3. Щелкните на аннотации Абсолютный режим (Absolute Mode) в модели, чтобы задать следующее:

  • Шаг расчета Ts = 10

  • Установите панель Timescales блока HDL Cosimulation на «1s in Simulink соответствует 1n в Симулятор HDL»

Или активируйте следующую функцию:

paritytimescale('absolute');

Абсолютные временные модули в этом случае являются 'ns', а масштабный коэффициент - '1'.

4. Запустите модель

Сигнал симулятора HDL показывает запуск симуляции в течение 100 нс, в то время как осциллограф Simulink изображает, как модель работает в течение 100-х годов. Это ожидается для значения Timescale 1s в Simulink = 1ns в Симулятор HDL.

Относительный временной шкала

Относительный режим синхронизации позволяет вам задать отношение синхронизации между Simulink и Симулятором HDL в относительных терминах - то есть как некоторое количество Симулятора HDL тактов.

5. Щелкните на аннотации Относительный режим (Relative Mode) в модели, чтобы задать следующее:

  • Шаг расчета Ts = 10

  • Установите панель Timescales блока HDL Cosimulation на «1s in Simulink соответствует 1 Tick in the симулятор HDL»:

paritytimescale('relative');

Единицами времени в этом случае являются такты HDL-симулятора, и масштабный коэффициент равен '1'.

6. Перезапустите симуляцию HDL.

Для ModelSim: Вы можете вызвать перезапуск из симулятора HDL.

vsim> restart

Для Incisive: Сначала закройте все окна Симулятора HDL и перезапустите симулятор.

nclaunch('tclstart',paritycmds_in('1ns'));

7. Запустите модель

Сигнал симулятора HDL показывает запуск симуляции в течение 100 нс, в то время как осциллограф Simulink изображает, как модель работает в течение 100-х годов. Это ожидается при установке Timescale 1s в Simulink = 1 такт в симуляторе HDL (и разрешение симулятора устанавливается равным 1ns). Полученные формы волны аналогичны тем, что мы получили в абсолютном временном режиме.

8. Изменение Симулятора HDL разрешения

Теперь мы увидим эффект от изменения разрешения Симулятора HDL на 1ps. Закройте все окна Симулятора HDL и перезапустите с помощью разрешения 1ps timescale.

Для Modelsim/Questasim:

vsim('tclstart',paritycmds('1ps'));

Для резкого/Xcelium:

nclaunch('tclstart',paritycmds_in('1ps'));

Запустите модель Simulink для тех же 10 выборок. Симулятор HDL запускается в течение 100ps, так как Timescale установлен на 1s в Simulink = 1 такт в HDL симуляторе.

Автоматическая шкала времени

В панель Timescales блока HDL Cosimulation кнопка Determine Timescale Now вычисляет отношение времени между Simulink и Симулятором HDL. Обратите внимание, что ссылка должна найти разрешение симулятора HDL, и, следовательно, вам нужно будет запустить и запустить симулятор HDL.

Перезапустите Симулятор HDL с помощью 1ns Разрешение

Сначала закройте все открытые Симуляторы HDL окна. Затем:

Для ModelSim:

vsim('tclstart',paritycmds('1ns'));

Для резкого:

nclaunch('tclstart',paritycmds_in('1ns'));

Когда вы позволяете программному обеспечению ссылки задать временную зависимость, он пытается задать коэффициент временной шкалы между Симулятором HDL и Simulink как можно ближе к 1 секунде в Симулятор HDL = 1 секунде в Simulink (режиме абсолютной временной шкалы). Если эта настройка невозможна, HDL Verifier пытается установить скорость сигнала на порте модели Simulink на самое низкое возможное количество тактов симулятора HDL (относительный режим шкалы времени).

Теперь мы будем использовать Auto Timescale в модели, как показано на следующем шаге:

9. Нажмите кнопку Determine Timescale Now на панели Timescales

Это предложит установить Timescale на «1s in Simulink = 1e-10 s in the симулятор HDL». Отобразится информационная панель:

Программа HDL Verifier попыталась вначале достичь 1:1 значения timescale, но не смогла сделать это, поскольку разрешение симулятора HDL установлено на 1ns, и значение Ts = 10 секунд составит 10e9 число тактов, что больше допустимого значения 2 ^ 31 - 1 (= 2 .1475e9). Число 2 ^ 31 - 1 является максимальным значением для int32.

Как только HDL Verifier не может установить абсолютную шкалу времени 1:1, он переключается в относительный режим шкалы времени, в котором он приравнивает основной шаг расчета (Ts = 10s) к 1 такту. Следовательно, 10s в Simulink будет соответствовать 1 HDL такту, то есть 1s в Simulink соответствует 0.1 такт в симуляторе HDL.

Применить изменения, предложенные блоком HDL Cosimulation.

11. Запустите модель

Формы волны внутри Симулятора HDL и от Осциллографа Simulink показаны ниже. Обратите внимание, как Симулятор HDL прогрессирует через 10 нс, в то время как модель Simulink запусков на 100-е годы:

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

12. Установите иррациональное время дискретизации (Ts = pi * 1e-9)

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

13. Установите Timescale на '1s в Simulink = 1s в Симулятор HDL'

В порядок понять, почему отношение 1:1 невозможно, установите значение Timescale на '1s в Simulink = 1s в Симулятор HDL' и запустите модель (после перезапуска симуляции в Симулятор HDL). Отношение времени 1:1 в этом случае невозможно, поскольку pi является иррациональным числом и не является интегралом, кратным 1n (разрешение симулятора HDL). Simulink выдаст вам сообщение об ошибке в этом случае, как показано на следующем изображении:

Примечание. Каждый раз, когда вы изменяете настройку Timescale в блоке HDL Cosimulation, вам нужно будет перезапустить прогон симуляции в Симулятор HDL.