exponenta event banner

Сопоставление часов HDL и сбросов с временем образца Simulink

В этом примере показано отношение времени выборки Simulink ® к тактам HDL и сбросам с помощью Verifier™ HDL для косимуляции простого синхронного модуля проверки четности Verilog. Пример также содержит следующее:

  • Объясняет, как итерации дельта-времени в имитаторе ЛПВП (ModelSim ® или Incisive ®) могут влиять на результаты косимуляции

  • Показывает использование панели часов в блоке Cosimulation HDL для управления тактовыми сигналами в HDL

  • Показывает, как можно точно сравнить результаты косимуляции, принимая во внимание логические задержки сброса HDL

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

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

Синхронный модуль контроля четности (paritychecker_clk_dut.v) принимает 8-битный вход, выводит 1 четный бит четности и включается на каждом растущем фронте тактового сигнала.

Влияние изменения времени образца Simulink в косимуляции

При использовании ModelSim или QuestaSim parity_check_clk.slx модели должен быть открыт. При использовании Insive или Xcelium закройте модель ModelSim и откройте parity_check_clk_in.slx модели.

В модели мы используем 8-битный счетчик для предоставления входных данных в код HDL через блок косимуляции HDL и его эквивалентный алгоритм Simulink. Область используется для просмотра их результатов и сравнения результатов. В модели показано, как частота выборки Simulink влияет на косимуляцию с модулем HDL. Доступные для щелчка аннотации можно использовать для изменения времени выборки выходного порта блока косимуляции HDL (Tout).

Обратите внимание, что входы синхронизации и сброса для тестируемого проекта генерируются в модуле драйвера HDL, (paritychecker_clk_driver.v). Сброс поддерживается на высоком уровне для первых 16n и после этого является низким. Тактовый сигнал имеет период 8ns и устанавливается таким образом, что его первый передний фронт возникает в 4ns. Следовательно, модуль способен обновлять свой выходной сигнал с максимальной скоростью 8 нс, то есть на каждом переднем фронте тактового сигнала.

1. Запустить ModelSim или Incisive

Перед запуском модели необходимо запустить имитатор ЛПВП. Для этого используйте команду запуска, предоставленную в модели.

2. Соблюдать настройки на панели «Порты» блока Cosimulation HDL

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

  • Время выборки выходного порта (parity_out1) имеет значение Tout. Существует множество способов задания значения Tout. Мы установили начальное значение Ts в модели PreLoadFcn обратный вызов (см. раздел Создание обратных вызовов модели (Simulink)). Новые значения Tout задаются с помощью любой из доступных для щелчка аннотаций, предоставленных в модели. Значение Taut также можно задать в командной строке MATLAB ®.

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

Модель содержит три допускающие щелчок аннотации для установки времени выборки выходных портов блока Cosimulation HDL) Tout = 32ns, 8ns и 4ns.

3. Запуск модели со всеми тремя версиями Tout

Tout = 32ns

  • Выход модуля ЛПВП отбирается Simulink каждые 32 нс

  • Частота дискретизации выходного порта ниже тактовой частоты, Tout = 4x (тактовый период HDL)

  • Выходной сигнал блока Cosimulation HDL является недостаточным, в результате чего и parity_out1 сигнал в имитаторе ЛПВП не соответствует результату объема Simulink

Tout = 8ns

  • Выход модуля ЛПВП отбирается Simulink через каждые 8 нс

  • Частота дискретизации выходного порта полностью соответствует тактовой частоте, Tout = (тактовый период HDL)

  • Ни один из выходов не пропущен, и формы сигналов сравнения совпадают

Tout = 4ns

  • Выход модуля ЛПВП отбирается Simulink через каждые 2n

  • Частота дискретизации выше тактовой частоты, Ts = 0.5x (тактовый период HDL)

  • Выход избыточно дискретизирован, и более высокая частота выборки не приносит здесь никаких дивидендов

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

4. Наблюдайте за результатами в области Simulink, когда Tout = 8ns

Вы заметите, что выходные данные алгоритма Simulink совпадают с выходными данными, полученными из блока косимуляции ЛПВП (помеченного как 2 на изображении), за исключением первых 24n (помеченного как 1 на изображении). Начальные значения двух выходов не совпадают из-за логики сброса, используемой в HDL (о которой Simulink не знает и не включает в свой алгоритм). Мы обсудим это подробно позже в примере.

Влияние часов на модуль ЛПВП и условия гонки

Важно понимать, что механизм Simulink не работает в дельта-временных циклах и, следовательно, Simulink запрашивает выходной порт блока косимуляции HDL через определенные дискретные временные интервалы. С другой стороны, имитатор ЛПВП не дает никаких гарантий в отношении порядка изменения значения по сравнению с некоторым другим назначением блокирующего сигнала. Таким образом, если значения Simulink приводятся в действие/дискретизируются одновременно с активным фронтом синхронизации в ЛПВП, существует условие гонки. Чтобы избежать таких условий гонки, важно, чтобы значения Simulink не приводились в действие/не отбирались одновременно с активным фронтом синхронизации в ЛПВП.

В коде Verilog paritychecker_clk_driver.v обратите внимание, как положительный фронт часов (который является активным фронтом) был намеренно смещен на половину его периода, чтобы избежать потенциального состояния гонки.

Случай задержки 24 нс

Код Verilog приводится в действие таким образом, что модуль сбрасывается для первых 16n. Однако несоответствие выходных данных, отображаемое в области применения Simulink, составляет 24 нс. Чтобы лучше понять, почему происходит эта задержка, мы захватили снимок формы сигнала имитатора ЛПВП (с дельта-временными задержками и расширенными событиями), когда моделирование выполнялось с Tout = 8ns:

На выходе 16ns parity_out1 внутри имитатора ЛПВП по-прежнему сохраняет свое предыдущее состояние, поскольку выход предназначен только для изменения на переднем фронте тактового сигнала. Следовательно, Simulink производит выборку предыдущего состояния выходного сигнала в 16 нс. Следует также отметить, что даже если в Simulink установлено Ts = Tout = 8ns, механизм Simulink не знает, как имитатор HDL будет выполнять итерации дельта-времени. Следовательно, выходные сигналы могут выбираться Simulink в пределах дельта-временных диапазонов (обозначенных 1), показанных на изображении выше.

Часы для удобства

Вместо создания собственного кода драйвера (testbench) для модуля HDL можно использовать удобные часы блока Cosimulation HDL для генерации входного сигнала синхронизации. Можно указать тактовый период (T) и его активный край на панели «Часы» блока косимуляции HDL. Этот тактовый сигнал, генерируемый блоком Cosimulation HDL, имеет преднамеренную задержку T/2, применяемую к первому активному фронту тактового сигнала (который вы указываете) - во избежание расовых условий. Чтобы показать, как использовать эти часы, мы предоставили модели, parity_check_convclk.slx (ModelSim) и parity_check_convclk_in.slx (Incisive), которые используют часы, созданные блоком косимуляции HDL, в качестве управляющего сигнала для модифицированной версии модулей четного контроля четности (paritychecker_convclk.v).

Панель «Часы» блоков косимуляции HDL устанавливается, как показано на рисунке ниже. Обратите внимание на то, как активный фронт синхросигнала поднимается:

Запуск модели и наблюдение за выходными данными

Результаты аналогичны полученным в примере Timescales: Absolute, Relative и Automatic. Выходной сигнал имитатора ЛПВП фиксируется на следующем изображении:

Обратите внимание, как начальный фазовый сдвиг T/2 применяется к первой активной кромке clk - отображается меткой 1 на изображении.

Учет задержки сброса для сравнения результатов косимуляции

Simulink не знает о какой-либо логике сброса, которую может иметь модуль HDL, и не включает такую логику сброса в свой алгоритм. Следовательно, результаты косимуляции ЛВП будут не синхронизированы с алгоритмом (подсистемой) Simulink.

Теперь, если необходимо сравнить выходные данные блока Cosimulation HDL с результатами, полученными из алгоритма Simulink, необходимо убедиться, что оба этих моделирования синхронизированы. Существует ряд способов достижения этого, один из которых показан в parity_check_reset.slx (ModelSim) и parity_check_reset_in.slx (Incisive).

Здесь мы используем tclstart аргументы для запуска имитатора ЛПВП в течение 16 нс (период сброса) сразу после того, как верификатор ЛПВП установит канал косимуляции. Поэтому перед началом моделирования в Simulink модуль HDL работает в течение 16 нс.

Запустите модель и просмотрите выходные данные области

Ключевые моменты, которые необходимо отметить:

  • Все значения времени выборки порта и характеристики тактового сигнала находятся во времени Simulink. Например, если в Simulink установлена шкала времени «1 s соответствует 1 s в имитаторе HDL», период синхронизации должен быть T = 8ns. Однако, если в Simulink установлена шкала времени «1 s соответствует 1 n в имитаторе ЛПВП», период синхронизации должен быть T = 8 s. Это объясняется в примере Timescales: Absolute, Relative и Automatic

  • Часы, генерируемые на панели часов, предназначены только для управления кодом HDL

  • Все сигналы, передаваемые с панели РУД или в tclstart команды запуска имитатора ЛПВП находятся во времени ЛПВП

  • Все сигналы, передаваемые из кода HDL, находятся во времени HDL