Этот пример иллюстрирует отношение шагов расчета Simulink® к часам HDL и сбросу при помощи HDL Verifier™ к cosimulate простой синхронный модуль проверки четности Verilog. Пример также содержит следующее:
Объясняет, как разовые дельтой итерации в симуляторе HDL (ModelSim® или Incisive®) могут влиять на результаты cosimulation
Показывает использование панели Часов в блоке HDL Cosimulation, чтобы управлять сигналами часов в HDL
Показывает, как можно точно сравнить результаты cosimulation путем принятия задержек логики сброса HDL во внимание
Проверка четности является методом добавления бита четности к потоку данных в порядке проверять что данные на любые ошибки. В этом примере мы будем использовать "схему" бита четности. Модуль HDL разработан, чтобы быть синхронным и обновляет свое состояние на каждом возрастающем ребре часов.
Синхронный модуль Средства проверки Четности (paritychecker_clk_dut.v) принимает 8-битный вход, выходные параметры 1 бит четности, и управляется на каждом возрастающем фронте синхроимпульса.
В parity_check_clk.mdl (ModelSim) и (Остром) parity_check_clk.mdl, мы используем 8-битное в противоречии с, предоставляют входные данные HDL-коду через блок HDL Cosimulation и его эквивалентный алгоритм Simulink. Осциллограф используется, чтобы просмотреть их выходные параметры и сравнить результаты. Модель демонстрирует, как уровень выборки Simulink влияет на cosimulation с модулем HDL. Активируемые кликом мыши аннотации могут использоваться, чтобы изменить шаг расчета выходного порта блока HDL Cosimulation (Спекулянт).
Обратите внимание на то, что часы и входные параметры сброса для проекта под тестом сгенерированы в модуле драйвера HDL, (paritychecker_clk_driver.v). Сброс сохранен высоко для первых 16 нс и низкий после этого. Часы имеют период 8 нс и настраиваются таким образом, что его первое возрастающее ребро происходит на уровне 4 нс. Следовательно модуль способен к обновлению его вывода на максимальном уровне 8 нс, то есть, в каждом возрастающем ребре часов.
1. Запустите ModelSim или острый
Прежде, чем запустить модель, необходимо сначала запустить симулятор HDL. Используйте команду запуска, обеспеченную в модели для этого.
2. Наблюдайте настройки в панели Портов блока HDL Cosimulation
Дважды кликните на блоке HDL Cosimulation, чтобы отредактировать cosimulation параметры. Диалоговое окно Параметров блоков появляется. Выберите вкладку Ports.
Шаг расчета выходного порта (parity_out1
) собирается Рекламировать. Существуют многочисленные способы задать значение Спекулянта. Мы устанавливаем Спекулянта, использующего любую из активируемых кликом мыши аннотаций, предоставленных в модели. Начальное значение Спекулянта установлено в коллбэке PreLoadFcn модели. Можно установить значение Спекулянта в Командной строке MATLAB® также.
Обратите внимание на то, что опция для разрешения прямого сквозного соединения не проверялась - это вызвано тем, что, наш код Verilog не является чисто комбинационным.
Модель предоставляет три активируемых кликом мыши аннотации для установки времени выборки выходных портов блока HDL Cosimulation), Спекулянт = 32 нс, 8 нс и 4 нс.
3. Запустите модель со всеми тремя версиями Спекулянта
Рекламируйте = 32 нс
Вывод модуля HDL выбирается Simulink на уровне каждых 32 нс
Уровень выборки выходного порта ниже, чем тактовая частота, Спекулянт = 4x (период часов HDL)
Вывод блока HDL Cosimulation Субдискретизируется, в результате которого и сигнал parity_out1
в симуляторе HDL не совпадает с результатом Осциллографа Simulink
Рекламируйте = 8 нс
Вывод модуля HDL выбирается Simulink на уровне каждых 8 нс
Уровень выборки выходного порта отлично совпадает с тактовой частотой, Спекулянт = (период часов HDL)
Ни одни из выходных параметров не пропущены, и формы волны сравнения совпадают
Рекламируйте = 4 нс
Вывод модуля HDL выбирается Simulink на уровне каждых 2 нс
Уровень выборки выше, чем тактовая частота, Ts = 0.5x (период часов HDL)
Вывод Сверхдискретизирован, и выше выходной уровень выборки не выплачивает дивиденда здесь
Следовательно понимание уровня синхронизации синхронного модуля HDL может быть выгодным для cosimulation, если вы не хотите сверхдискретизировать или субдискретизировать вывод от HDL.
4. Наблюдайте результаты в Осциллографе Simulink когда Спекулянт = 8 нс
Вы заметите, что выходные параметры из алгоритма Simulink совпадают с выходными параметрами, полученными из блока HDL Cosimulation (маркированный как 2 в изображении), за исключением первых 24 нс (маркированный как 1 в изображении). Начальные значения этих двух выходных параметров не совпадают из-за логики сброса, используемой в HDL (о котором Simulink не знает и не включает в свой алгоритм). Мы обсудим это подробно позже в примере.
Важно понять, что механизм Simulink не работает в разовых дельтой циклах, и следовательно Simulink запрашивает выходной порт блока HDL Cosimulation в определенных интервалах дискретного времени. С другой стороны, симулятор HDL не делает гарантий относительно порядка изменения значения по сравнению с некоторым другим присвоением сигнала блокирования. Таким образом, если значения Simulink управляются/, выбранный в то же время, что и активный фронт синхроимпульса в HDL, существует состояние состязания. Во избежание таких условий состязания важно, чтобы значения Simulink не управлялись/, выбранный в то же время, что и активный фронт синхроимпульса в HDL.
В коде Verilog paritychecker_clk_driver.v отмечают, как положительное ребро часов (который является активным ребром) было намеренно смещено наполовину его период поэтому, как избегают потенциального состояния состязания.
Случай для задержки на 24 нс
Код Verilog управляется таким образом, что модуль сбрасывается для первых 16 нс. Однако выходное несоответствие, замеченное на Осциллографе Simulink, для 24 нс. По порядку, чтобы лучше понять, почему эта задержка происходит, мы получили снимок состояния формы волны симулятора HDL (с разовыми дельтой задержками и расширенными событиями), когда симуляция была запущена с Tout=8ns:
На уровне 16 нс вывод parity_out1
в симуляторе HDL все еще содержит свое предыдущее состояние, поскольку вывод только намечен, чтобы измениться в возрастающем ребре часов. Следовательно Simulink выбирает предыдущее состояние вывода на уровне 16 нс. Также обратите внимание на то, что даже при том, что мы установили Ts=Tout=8ns в Simulink, механизм Simulink не знает, как симулятор HDL выполнит свои разовые дельтой итерации. Следовательно выходные параметры могли быть выбраны Simulink в разовых дельтой областях значений (маркировал 1), показанный в изображении выше.
Часы удобства
Вместо того, чтобы создать ваш собственный код драйвера (испытательный стенд) для модуля HDL, можно использовать часы удобства блока HDL Cosimulation, чтобы сгенерировать вход синхронизации. Можно задать период часов (T), и это - активное ребро в панели Часов блока HDL Cosimulation. Эти часы, сгенерированные блоком HDL Cosimulation, имеют преднамеренную задержку T/2, применился к первому активному фронту синхроимпульса (который вы задаете) - во избежание условий состязания. В порядке показать, как использовать эти часы, мы предоставили модели, parity_check_convclk.mdl (ModelSim) и parity_check_convclk.mdl (Острый), которые используют часы, созданные блоком HDL Cosimulation как ведущий сигнал для измененной версии модулей средства проверки четности (paritychecker_convclk.v)
Панель Часов HDL, который блокирует Cosimulation, установлена как показано в изображении ниже. Заметьте, как активное ребро часов собирается повыситься:
Запустите модель и наблюдайте выходные сигналы
Результаты совпадают с полученными из parity_check.mdl (ModelSim) и (Острого) parity_check.mdl. Вывод формы волны симулятора HDL получен в изображении ниже:
Заметьте, как сдвиг начальной фазы T/2 применяется к первому активному ребру clk
- показанный маркировать 1 в изображении.
Simulink не знает ни о какой логике сброса, что модуль HDL может иметь в распоряжении и не включает такую логику сброса в свой алгоритм. Следовательно HDL cosimulation результаты будет вне синхронизации относительно алгоритма Simulink (подсистема).
Теперь, если необходимо сравнить вывод блока HDL Cosimulation с результатами, полученными из алгоритма Simulink, необходимо гарантировать, что синхронизируются обе этих симуляции. Существует много способов достигнуть этого, один из которых показаны в parity_check_reset.mdl (ModelSim) и (Остром) parity_check_reset.mdl.
Здесь мы используем аргументы Tclstart
, чтобы запустить симулятор HDL для 16 нс (период сброса) сразу после того, как HDL Verifier настроит ссылку cosimulation. Следовательно модуль HDL запускается для 16 нс, прежде чем вы запустите симуляцию в Simulink.
Запустите модель и наблюдайте вывод Scope
Ключевые пункты к Примечание:
Все шаги расчета порта и спецификации часов находятся во время Simulink. Например, если масштаб времени установлен в '1 с в Simulink, соответствует 1 с в симуляторе HDL', период часов должен быть T=8ns. Однако, если масштаб времени установлен в '1 с в Simulink, соответствует 1 нс в симуляторе HDL', период часов должен быть T=8s. Это объяснено в примере на Масштабах времени: Абсолютный, Относительный и Автоматический.
Часы, сгенерированные в панели часов, предназначаются, чтобы управлять HDL-кодом только
Все сигналы, управляемые от панели Tcl или в tclstart
команды запуска симулятора HDL, находятся во время HDL
Все сигналы, управляемые из HDL-кода, находятся во время HDL