Проверьте комбинацию HDL-кода, написанного вручную и сгенерированного

Этот пример использует симуляцию HDL-косимуляции и Цикл (FIL), чтобы проверить HDL- проекта, содержащий сгенерированный и устаревший HDL-код. Термин «наследие» используется здесь для указания кода, который мог быть написан вручную, приобретен у третьей стороны или сгенерирован для другого проекта и сохранен для повторного использования в этом проекте.

Унаследованный код в этом примере реализует конечный конечный автомат (FSM), который является подмодулем декодера Multiple Входа - Multiple Выхода (MIMO), предназначенного для использования в беспроводной коммуникационной системе. Большая часть декодера MIMO была разработана в Simulink, и HDL-код для него будет сгенерирован HDL Coder. FSM принадлежит внутри того проекта Simulink. Унаследованный код для FSM будет интегрирован с моделью Simulink и включен в реализацию FPGA посредством процесса генерации кода.

В примере показано, как конструктор или инженер верификация могут использовать мастер косимуляции HDL Verifier для интеграции унаследованного FSM с моделью Simulink и проверки его. HDL Cosimulation обеспечивает полную видимость и контроль, обеспечивая отладку и верификацию кода.

После успешного интегрирования унаследованного FSM, блок косимуляции автоматически включает в себя унаследованный код, когда HDL-код генерируется из модели Simulink, что приводит к полной реализации FPGA декодера MIMO. Наконец, весь проект проверяется на фактическом FPGA с помощью цикл.

Контур примера

  1. Используйте мастер косимуляции, чтобы импортировать устаревший HDL-код в модель Simulink

  2. Проверьте унаследованный HDL-код путем его косимуляции и сравнения результатов с поведенческой моделью

  3. Сгенерируйте HDL-код для всего декодера MIMO с помощью блока косимуляции в Blackbox

  4. Проверьте декодер MIMO с FPGA-в Цикл

Требования и необходимые условия

Для косимуляции и цикл вам понадобится следующее программное и оборудование:

  • Один из поддерживаемых Симуляторов HDL. Для поддерживаемых симуляторов см. «Требования к косимуляции».

  • Программное обеспечение для проекта ПЛИС

  • Одна из поддерживаемых плат разработки FPGA. Для поддерживаемого оборудования смотрите Поддерживаемые устройства FPGA для верификации FPGA.

  • Для подключения с использованием Ethernet: Gigabit Ethernet Adapter, установленный на хост-компьютер, перекрестный кабель Gigabit Ethernet

  • Для подключения с использованием JTAG: USB Blaster I или II кабель и драйвер для плат Intel FPGA. Кабель Digilent ® JTAG и драйвер для плат Xilinx FPGA.

MATLAB ® и программное обеспечение для проекта FPGA могут быть либо локально установлены на вашем компьютере, либо на сетевом доступном устройстве. Если вы используете программное обеспечение из сети, вам понадобится второй сетевой адаптер, установленный на вашем компьютере, чтобы обеспечить частную сеть для платы разработки FPGA. Чтобы узнать, как установить сетевой адаптер, обратитесь к руководствам по оборудованию и сетям вашего компьютера.

Примечание: Пример включает генерацию кода. Если у вас нет доступа к программному обеспечению HDL Coder, вы можете пропустить шаг генерации кода в этом примере и использовать файлы HDL, предоставленный вам вместе с мастером FIL, чтобы симулировать их с FPGA-в Цикл.

Создайте образец модели для конечного конечного автомата

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

Первым шагом в проверке унаследованного HDL-кода в этом примере является создание образца модели для этой части проекта. Это уже сделано для ФШМ. Откройте модель behavioral_mimo.slx. Дважды кликните в подсистему MIMO Decoder, и вы увидите, что подсистема FSM содержит блок MATLAB function, который реализует поведение FSM. Этот образец модели будет использоваться для проверки унаследованного HDL-кода для FSM.

1. Используйте Cosimulation Wizard для импорта унаследованного HDL-кода

Активируйте мастер косимуляции, набрав в командной строке MATLAB следующее:

cosimWizard

Выберите HDL-косимуляцию с Simulink и предпочтительным Симулятором HDL из раскрывающегося списка. Если симулятор HDL отсутствует в системном пути, укажите путь и нажмите кнопку Далее.

Добавьте файлы FSMSubsystem.vhd, FSMSubsystem_pkg.vhd и Embedded_Controller.vhd (расположенные в папке «verify_legacy_hdlsrc») с помощью кнопки Add мастера cosimWizard и переупорядочьте список, чтобы разместить FSMSubsystem.vhd внизу и FSMSubsystem_pkg.vhd в верхней части списка, для правильного упорядоченного расположения компиляции. Затем нажмите кнопку Далее.

Нажмите кнопку Далее (Next) на следующих 2 панелях, чтобы принять значения по умолчанию и перейти на панель Входные/Выходные порты (Input/Output Ports). В списке Входа Ports выберите следующие значения Port Type из выпадающих списков для первых 3 портов:

clk        : Port Type = clock
reset      : Port Type = reset
clk_enable : Port Type = reset

Эта идентификация типов портов заставляет блок косимуляции форсировать эти сигналы в симуляторе HDL, а не требовать, чтобы они управлялись в схеме Simulink. В этом примере мы рассматриваем порт clk_enable как еще один сброс для косимуляции. Прежде чем вы перейдете к следующему шагу, аналогично выберите «неиспользованный» для ce_out, в результате чего он будет опущен из блока косимуляции, поскольку он не нужен в Simulink.

Мастер косимуляции автоматически идентифицирует входы и выходы в HDL-коде и создает блок косимуляции для Simulink на основе найденных там портов. Есть некоторые подробности о портах выхода, которые он не может узнать из HDL-кода. В HDL-коде выходы являются просто наборами битов без указания того, как вы хотели бы интерпретировать эти биты в Simulink. Вы должны сообщить мастеру косимуляции, хотите ли вы видеть эти биты как значения со знаком или без знака, и, если они должны быть интерпретированы как числа с фиксированной точкой, где поместить точку радиуса.

На панели «Сведения о выходном порте» уточните тип данных для каждого выхода. В случае этого проекта выходные порты должны интерпретироваться следующим образом. Обратите внимание, что есть несколько скалярных портов в HDL-коде для портов вектора (out_1, out_6, out_9, out_10, out_11, out_12):

out_1  : Signed,   Fraction Length = 0 (4 scalar ports)
out_2  : Unsigned, Fraction Length = 0
out_3  : Unsigned, Fraction Length = 0
out_4  : Unsigned, Fraction Length = 0
out_5  : Signed,   Fraction Length = 10
out_6  : Signed,   Fraction Length = 10 (3 scalar ports)
out_7  : Signed,   Fraction Length = 2
out_8  : Unsigned, Fraction Length = 0
out_9  : Signed,   Fraction Length = 0 (4 scalar ports)
out_10 : Signed,   Fraction Length = 0 (4 scalar ports)
out_11 : Signed,   Fraction Length = 10 (4 scalar ports)
out_12 : Signed,   Fraction Length = 10 (4 scalar ports)
out_13 : Unsigned, Fraction Length = 0
out_14 : Signed,   Fraction Length = 0

На вкладке Clock/Reset Details набора панелей следующие значения:

clk Period = 10 ns, Active Edge = Rising
reset Initial Value = 1, Duration = 27 ns
clk_enable Initial Value = 0, Duration = 37 ns

Нажмите кнопку Далее, чтобы перейти на панель Start Time Alignment и установить значение «HDL time to start cosimulation (ns)» равным 40.

Перейдите к заключительному шагу и снимите флажок «Автоматическое определение шкалы времени в начале симуляции». В этом примере мы знаем, что шкала времени для косимуляции должна быть 1 секунду в Simulink, соответствует 10 нс в Симулятор HDL. Для получения информации об использовании функции автоматического задания шкалы времени для других проектов см. документацию HDL Verifier. Установите вышеупомянутые нажатия кнопки шкалы времени и Конца.

Блок косимуляции будет сгенерирован для импорта унаследованного HDL-кода в модель Simulink. Можно перетащить вновь сгенерированный блок косимуляции и 2 командных блока удобства в модель Simulink, внутри блока FSMSubsystem и соединить его с выходными портами FSMSubsystem. Для этого примера была предоставлена модель косимуляции со компараторами и блоками утверждения внутри подсистемы MIMO Decoder. Компараторы и блоки утверждения были добавлены, чтобы предупредить вас о любых несоответствиях между выходами образца модели для Embedded Контроллера и устаревшей реализацией HDL.

Используйте следующую команду, чтобы изменить размер сгенерированного блока косимуляции, чтобы облегчить его вставку в модель косимуляции:

set_param('untitled/fsmsubsystem', 'Position', [0 0 165 852]);

Откройте модель cosim_mimo.slx. Перетащите новый блок и командные блоки удобства, созданные cosimWizard, в модель косимуляции, заменяя подсистему-заполнитель внутри подсистемы MIMODecoder.

2. Cosimulate для проверки унаследованного HDL-кода

В вашей модели косимуляции дважды кликните блок «Launch Симулятора HDL», чтобы запустить выбранный Симулятор HDL. Нажмите кнопку Play в Simulink, чтобы запустить косимуляцию и увидеть, что предупреждающие сообщения отображаются в окне MATLAB. Это указывает на несоответствие выходных сигналов из-за расхождения между эталонной моделью FSM и реализацией HDL.

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

Исправьте HDL-код, написанный вручную, и повторно запустите косимуляцию

Исправленный HDL-код был предоставлен для этого примера. Используйте следующую команду, чтобы скопировать новый код в рабочую директорию, перезаписав плохую версию Embedded_Controller.vhd:

copyfile(fullfile('verify_legacy_hdlsrc', 'fixed_hdl', 'Embedded_Controller.vhd'), 'verify_legacy_hdlsrc', 'f');

Повторно скомпилируйте HDL-код Legacy, дважды кликнув по блоку «Compile HDL Design». Выйдите из симулятора HDL, если он все еще открыт после предыдущего выполнения косимуляции и перезапустите симулятор HDL, затем повторите косимуляцию. Вы не должны наблюдать никаких несоответствий в этот раз.

Теперь, когда вы отлажили и проверили устаревший HDL-код для встраиваемого контроллера, вы можете продолжить, чтобы проверить весь MIMODecoder с цикл.

Настройка окружения программного обеспечения Проект

Перед использованием цикл убедитесь, что ваше системное окружение настроено правильно для доступа к программному обеспечению проекта FPGA. Можно использовать функцию hdlsetuptoolpath, чтобы добавить программное обеспечение проекта FPGA к системному пути для текущего сеанса работы с MATLAB.

Подготовьте модель для генерации HDL-кода

Чтобы подготовить модель для цикл, включающую устаревший HDL-код и генерирующую новый HDL-код для оставшейся части MIMO Decoder, вам нужно сделать 2 вещи, чтобы завершить реализацию FPGA:

  1. отредактируйте модель косимуляции, чтобы удалить FSM исходного проекта

  2. используйте HDL Coder Blackbox, чтобы включить устаревший HDL в модель генерации кода

Если вы хотите следовать всем шагам, чтобы подготовить модель к генерации HDL-кода с помощью HDL Blackbox, сохраните модель косимуляции с другим именем и продолжите оставшуюся часть подготовки модели следующим образом:

1. отредактируйте модель косимуляции, чтобы удалить FSM исходного проекта

  • внутри подсистемы MIMO Decoder удалите блок Embedded_Controller функции

  • удалите блоки «from», которые управляют Embedded_Controller входами за исключением входных параметров enablecoder

  • исключить компараторы и блоки утверждений на выходах

  • повторно соедините выходы блока косимуляции с входами DelaySubsystem1

2. используйте HDL Coder Blackbox, чтобы включить устаревший HDL в модель генерации кода

  • выберите блок косимуляции и введите control-G, чтобы создать подсистему

  • щелкните правой кнопкой мыши на новой подсистеме косимуляции и выберите HDL-код и свойства HDL- Блока

  • выберите архитектура = BlackBox

  • введите FSMSubsystem в параметр EntityName

  • введите 0 в параметре ImplementationLatency

  • ОК диалоговое окно свойств блока»

3. перезапустите симуляцию, чтобы обновить схему.

  • дважды кликните блок «Launch Симулятора HDL», чтобы запустить Симулятор HDL

  • нажмите кнопку Play в Simulink, чтобы начать косимуляцию

  • сохранить модель

3. Сгенерируйте HDL-код и цикл

Этот шаг требует HDL Coder. Если у вас нет этого программного обеспечения, можно использовать предварительно сгенерированные HDL- файлов для симуляции FIL. Перейдите непосредственно к шагу 5. Симуляция FIL с использованием filWizard.

Если вы хотите следовать процессу, чтобы сгенерировать HDL файлов сами вернитесь на верхний уровень модели, прямо нажатие кнопки на подсистеме MIMODecoder и под «HDL-код» запустите HDL Coder Workflow Advisor.

  • Шаг 1.1: выберите Цикл Target Workflow, выберите предпочитаемую плату разработки FPGA из выпадающего списка и идентифицируйте записываемую директорию, чтобы сохранить сгенерированный HDL-код.

  • Шаг 4.1: в Set FPGA Опций выберите «Добавить» и используйте браузер, чтобы перейти к EmbeddedController HDL, файлы вы скопировали в рабочую папку на шаге 1 и изменили фиксированный HDL код на шаге 3.

  • Шаг 4.2: Щелкните правой кнопкой мыши по шагу 4.2 рабочего процесса в левом навигационном дереве и выберите «Выполнить эту задачу». Этот шаг может занять несколько минут, потому что он включает шаги для синтеза, отображения и маршрутизации проекта для устройства FPGA.

Результатом будет программный файл FPGA для симуляции FPGA в цикле подсистемы декодера MIMO и новая модель, содержащая исходную модель (включая устаревший HDL для FSM) декодера наряду с блоком FPGA в цикле. Это также будет иметь компараторы с блоками утверждения, чтобы идентифицировать сигналы несоответствия, подобные тем, которые мы видели в модели косимуляции.

4. Проверьте проект с помощью симуляции цикл

Поскольку сгенерированная модель верификации включает косимуляцию для FSMSubsystem, вам потребуется использовать Симулятор HDL, чтобы запустить целую модель FIL. Убедитесь, что Симулятор HDL из вашей предыдущей косимуляции выключен, и перезапустите Симулятор HDL.

В модели цикл, сгенерированной на шаге 3, откройте блок FIL.

Выберите «Загрузка», чтобы загрузить программный файл FPGA на устройство на вашей плате.

Нажмите Play в модели Simulink, чтобы запустить симуляцию цикл.

Наблюдайте результаты в возможностях сравнения и вычислении частоты ошибок в модели. Ваши результаты симуляции FIL должна точно совпадать с образцом модели.

5. Симуляция FIL с использованием Мастера FIL

Этот шаг является альтернативой шагу 4 для тех, кто не имеет программного обеспечения HDL Coder. Если вы завершили Шаг 4, вам не нужно продолжать этот шаг.

Предварительно сгенерированные HDL- файлов находятся в папке «verify_legacy_gen_hdlsrc». Можно создать файл программирования FPGA для цикл с помощью мастера FIL. Мастер FIL также создаст блок FIL, который можно удалить, поскольку модель FIL, представленная для этого примера, уже содержит блок FIL.

Откройте мастер FIL путем ввода следующей команды:

filWizard
  • В FIL Options выберите из списка плату разработки FPGA.

  • В Source Files выберите Add и выберите все файлы в папке verify_legacy_gen_hdlsrc и идентифицируйте MIMODecoder.vhd как файл верхнего уровня.

  • Примите значения по умолчанию для остальных опций filWizard

  • Дождитесь создания блока FIl и файла программирования FPGA. Это может занять несколько минут из-за времени, необходимого для синтеза и маршрутизации реализации FPGA.

  • Откройте модель gm_fil_codegen_mimo_fil.slx и перетащите вновь сгенерированный блок FIL в модель в указанном месте.

  • Откройте маску блока FIL, щелкните на вкладке Signal Attributes. Измените тип данных для каждого выхода rx_decoded на fixdt (1,6,0), чтобы соответствовать типу данных поведенческого блока.

  • Откройте маску блока FIL, нажмите на вкладку Main, выберите Load и дождитесь загрузки на устройство файла программирования FPGA.

  • Нажмите Play в модели Simulink, чтобы запустить FPGA-в цикле.

Наблюдайте результаты в возможностях сравнения и вычислении частоты ошибок в модели. Ваши результаты симуляции FIL должна точно совпадать с образцом модели.

На этом завершается пример использования HDL-косимуляции и FPGA-в цикле для проверки HDL- Проектов.