В этом примере используется косимуляция HDL и моделирование FPGA-in-the-Loop (FIL) для проверки конструкции HDL, содержащей сгенерированный и унаследованный код HDL. Термин «устаревший» используется здесь для обозначения кода, который мог быть написан вручную, приобретен у третьей стороны или сгенерирован для другого проекта и сохранен для повторного использования в этой конструкции.
Унаследованный код в этом примере реализует конечный автомат (FSM), который является субмодулем декодера множественных входов - множественных выходов (MIMO), предназначенного для использования в системе беспроводной связи. Большая часть декодера MIMO была разработана в Simulink, и код HDL для него будет генерироваться кодером HDL. FSM входит в конструкцию Simulink. Унаследованный код для FSM будет интегрирован с моделью Simulink и включен в реализацию FPGA посредством процесса генерации кода.
В этом примере показано, как разработчик или инженер по проверке может использовать мастер косимуляции HDL Verifier для интеграции устаревшей FSM с моделью Simulink и ее проверки. HDL Cosimulation обеспечивает полную видимость и контроль, позволяя отладку и проверку кода.
После успешной интеграции унаследованного FSM блок косимуляции автоматически включает в себя унаследованный код, когда код HDL генерируется из модели Simulink, что приводит к полной реализации FPGA декодера MIMO. Наконец, вся конструкция проверяется на фактическом FPGA с помощью FPGA-in-the-Loop.
Использование мастера косимуляции для импорта устаревшего кода HDL в модель Simulink
Проверка устаревшего кода HDL путем его косимуляции и сравнения результатов с поведенческой моделью
Создание кода HDL для всего декодера MIMO с использованием блока косимуляции в Blackbox
Проверка декодера MIMO с помощью FPGA-in-the-Loop
Для косимуляции и FPGA-in-the-Loop потребуется следующее программное и аппаратное обеспечение:
Один из поддерживаемых имитаторов ЛПВП. Информацию о поддерживаемых симуляторах см. в разделе Требования к косимуляции.
Программное обеспечение для проектирования FPGA
Одна из поддерживаемых плат разработки FPGA. Для получения информации о поддерживаемых аппаратных средствах см. раздел Поддерживаемые устройства FPGA для проверки FPGA.
Для подключения с использованием Ethernet: Gigabit Ethernet адаптер, установленный на хост-компьютере, Gigabit Ethernet кросс-кабель
Для подключения с использованием кабеля JTAG: USB Blaster I или II и драйвера для плат Intel FPGA. Кабель и драйвер Digilent ® JTAG для плат Xilinx FPGA.
Программное обеспечение MATLAB ® и FPGA можно установить на компьютере или на сетевом устройстве. Если вы используете программное обеспечение из сети, вам потребуется второй сетевой адаптер, установленный на вашем компьютере, чтобы предоставить частную сеть для платы разработки FPGA. Чтобы узнать, как установить сетевой адаптер, обратитесь к руководству по оборудованию и сети для компьютера.
Примечание.Пример включает создание кода. Если у вас нет доступа к программному обеспечению HDL Coder, можно пропустить шаг создания кода в этом примере и использовать файлы HDL, предоставленные вместе с мастером FIL, для моделирования их с помощью FPGA-in-the-Loop.
Ссылочная модель - это имитационная модель поведения, ожидаемого от реализации. Обычно он используется при проверке ЛПВП путем создания экземпляра вместе с реализацией ЛПВП, предоставления одинаковых входных данных для обоих и сравнения их выходных данных. Преимущества эталонных моделей в верификации заключаются в том, что они могут быть разработаны независимо от реализации (часто другим человеком), обеспечивая независимую валидацию ожидаемого поведения, их легче создать, чем фактическую реализацию (не требующую синтеза или фактического времени устройства), и они обычно работают быстро при моделировании.
Первым шагом при проверке унаследованного кода HDL в этом примере является создание ссылочной модели для этой части конструкции. Это уже сделано для ФШМ. Откройте модель behavioral_mimo.slx. Дважды щелкните подсистему декодера MIMO, и вы увидите, что подсистема FSM содержит функциональный блок MATLAB, который реализует поведение FSM. Эта эталонная модель будет использоваться для проверки унаследованного кода HDL для FSM.
Вызовите мастер косимуляции, введя в командной строке MATLAB следующее:
cosimWizard
Выберите в раскрывающемся списке косимуляцию ЛПВП с помощью Simulink и предпочтительный имитатор ЛПВП. Если имитатор HDL отсутствует в системном пути, укажите путь и нажмите кнопку Далее.
Добавьте файлы FSMSubsystem.vhd, FSMSubsystem_pkg.vhd и Embedded_Controller.vhd (находящиеся в папке «verify_legacy_hdlsrc») с помощью кнопки cosimWizard's Add и переупорядочите список, чтобы поместить FSMSubsystem.vhd внизу и FSMSubsystem_pkg.vhd в верхней части списка, для правильной компиляции. Затем нажмите кнопку Далее.
Щелкните Далее (Next) на следующих 2 панелях, чтобы принять значения по умолчанию и перейти на панель Порты ввода/вывода (Input/Output Ports). В списке Input Ports выберите следующие значения Port Type из раскрывающихся списков для первых 3 портов:
clk : Port Type = clock reset : Port Type = reset clk_enable : Port Type = reset
Эта идентификация типов портов заставляет блок косимуляции принудительно передавать эти сигналы в имитатор ЛПВП, а не требовать, чтобы они управлялись на диаграмме Simulink. В этом примере порт clk_enable рассматривается как еще один сброс для косимуляции. Прежде чем перейти к следующему шагу, аналогичным образом выберите «неиспользуемый» для ce_out, чтобы исключить его из блока косимуляции, так как он не нужен в Simulink.
Мастер косимуляции автоматически идентифицирует входы и выходы в коде HDL и создает блок косимуляции для Simulink на основе обнаруженных там портов. Существуют некоторые сведения о портах вывода, которые не могут быть извлечены из кода HDL. В коде HDL выходы представляют собой просто наборы битов без указания того, как вы хотите интерпретировать эти биты в Simulink. Необходимо указать мастеру косимуляции, должны ли эти биты рассматриваться как подписанные или неподписанные значения, и, если они должны интерпретироваться как числа с фиксированной точкой, куда следует поместить точку radix.
На панели «Сведения о выходном порте» уточните тип данных для каждого вывода. В этом случае выходные порты должны интерпретироваться следующим образом. Обратите внимание, что в коде 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
Нажмите кнопку Next (Далее), чтобы перейти к панели Start Time Alignment (Выравнивание времени запуска), и установите для параметра «HDL time to start cosimulation (ns)» значение 40.
Перейдите к последнему шагу и снимите флажок «Автоматически определять временную шкалу в начале моделирования». Для этого примера известно, что шкала времени для косимуляции должна составлять 1 секунду в Simulink соответствует 10 нс в имитаторе HDL. Для получения информации об использовании функции автоматической настройки шкалы времени для других проектов см. документацию по HDL Verifier. Установите вышеупомянутую шкалу времени и нажмите Готово.
Блок косимуляции будет создан для импорта унаследованного кода HDL в модель Simulink. Вновь созданный блок косимуляции и 2 блока команд удобства можно перетащить в модель Simulink внутри блока FSMSubsystem и подключить его к портам вывода FSMSubsystem. Для этого примера была представлена модель косимуляции с компараторами и блоками утверждения внутри подсистемы декодера MIMO. Компараторы и блоки подтверждения были добавлены, чтобы предупредить вас о любых несоответствиях между выходами эталонной модели для встроенного контроллера и устаревшей реализацией HDL.
Используйте следующую команду для изменения размера созданного блока косимуляции, чтобы упростить его вставку в модель косимуляции.
set_param('untitled/fsmsubsystem', 'Position', [0 0 165 852]);
Откройте модель cosim_mimo.slx. Перетащите новый блок и блоки команд удобства, созданные cosimWizard, в модель косимуляции, заменив подсистему-заполнитель в подсистеме MIMODecoder.
В модели косимуляции дважды щелкните блок «Launch HDL Simulator», чтобы запустить выбранный имитатор HDL. Нажмите кнопку Play в Simulink, чтобы запустить косимуляцию и убедиться, что в окне MATLAB отображаются предупреждающие сообщения. Они указывают на несовпадение выходных сигналов из-за расхождения между эталонной моделью FSM и реализацией HDL.
Теперь можно использовать функции отладки симулятора Simulink и HDL, чтобы изолировать проблему и устранить ошибку. В этом случае ошибки возникают из-за пропуска дуги перехода состояния в реализации ЛПВП. Заметьте на дисплее формы сигнала имитатора ЛПВП, что состояние FSM застряло на очень ранней стадии моделирования.
Для этого примера был предоставлен исправленный код HDL. Используйте следующую команду, чтобы скопировать новый код в рабочую папку, перезаписав неверную версию Embedded_Controller.vhd:
copyfile(fullfile('verify_legacy_hdlsrc', 'fixed_hdl', 'Embedded_Controller.vhd'), 'verify_legacy_hdlsrc', 'f');
Перекомпилируйте унаследованный код HDL, дважды щелкнув на блоке «Compile HDL Design». Выйдите из имитатора ЛПВП, если он все еще открыт после предыдущего выполнения косимуляции, и перезапустите имитатор ЛПВП, а затем повторите косимуляцию. На этот раз вы не должны наблюдать несоответствий.
Теперь, после отладки и проверки устаревшего кода HDL для встроенного контроллера, можно выполнить проверку всего MIMODecoder с помощью FPGA-in-the-Loop.
Перед использованием FPGA-in-the-Loop убедитесь, что системная среда правильно настроена для доступа к программному обеспечению FPGA. Функцию hdlsetuptoolpath можно использовать для добавления программного обеспечения FPGA к системному пути для текущего сеанса MATLAB.
Для подготовки модели FPGA-in-the-Loop, включающей унаследованный код HDL и генерирующей новый код HDL для оставшейся части декодера MIMO, необходимо выполнить 2 действия для завершения реализации FPGA:
отредактировать модель косимуляции, чтобы удалить ссылочный проект FSM
использовать Blackbox кодера HDL для включения унаследованного HDL в модель для генерации кода
Если требуется выполнить все шаги для подготовки модели к созданию кода HDL с помощью Blackbox HDL, сохраните модель косимуляции с другим именем и продолжите подготовку модели следующим образом:
1. отредактировать модель косимуляции, чтобы удалить ссылочный проект FSM
внутри подсистемы декодера MIMO удалить функциональный блок Embedded_Controller
удалить блоки «from», которые управляют входами Embedded_Controller, за исключением входа enablecoder
удалить компараторы и блоки утверждения на выходах
повторно подсоединить выходы блока косимуляции к входам DelaySubsystem1
2. использовать Blackbox кодера HDL для включения унаследованного HDL в модель для генерации кода
выберите блок косимуляции и введите control-G для создания подсистемы
щелкните правой кнопкой мыши по новой подсистеме косимуляции и выберите «HDL Code» и «HDL Block Properties»
select Architecture = BlackBox
введите FSMSubsystem в параметре EntityName
введите 0 в параметре ImplementateLatency
Диалоговое окно «Свойства блока HDL»
3. повторно запустите моделирование, чтобы обновить схему.
дважды щелкните блок «Launch HDL Simulator» для запуска имитатора HDL
нажмите кнопку Play в Simulink, чтобы запустить косимуляцию
сохранить модель
Для этого шага требуется кодер HDL. Если у вас нет этого программного обеспечения, вы можете использовать предварительно созданные файлы HDL для моделирования FIL. Перейдите непосредственно к шагу 5. Моделирование FIL с помощью мастера файлов.
Если требуется выполнить процесс создания файлов HDL, возвращающихся на верхний уровень модели, щелкните правой кнопкой мыши подсистему MIMODecoder и в разделе «Код HDL» запустите помощник по рабочему процессу кодера HDL.
Шаг 1.1: выберите FPGA-in-the-Loop Target Workflow, выберите из раскрывающегося списка предпочтительную плату разработки FPGA и определите доступный для записи каталог для хранения сгенерированного кода HDL.

Шаг 4.1: в разделе Set FPGA Options (Настройка параметров FPGA) выберите «Add» (Добавить) и используйте браузер для перехода к файлам HDL EmbeddedController, скопированным в рабочую папку на шаге 1 и измененным с помощью фиксированного кода HDL на шаге 3.

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

Результатом будет файл программирования FPGA для моделирования FPGA-in-the-Loop подсистемы декодера MIMO и новая модель, содержащая исходную модель (включая унаследованный HDL для FSM) декодера наряду с блоком FPGA-in-the-Loop. Он также будет иметь компараторы с блоками утверждения для идентификации несоответствующих сигналов, аналогичных тем, которые мы видели в модели косимуляции.
Поскольку созданная модель проверки включает в себя косимуляцию для FSMSubsystem, для запуска всей модели FIL необходимо использовать имитатор HDL. Убедитесь, что имитатор ЛПВП из предыдущей косимуляции выключен, и перезапустите имитатор ЛПВП.
В модели FPGA-in-the-Loop, созданной на шаге 3, откройте блок FIL.
Выберите «Load» для загрузки файла программирования FPGA на устройство на плате.
Щелкните Воспроизведение (Play) в модели Simulink, чтобы запустить моделирование FPGA-in-the-Loop.
Просмотрите результаты в областях сравнения и вычислении ErrorRate в модели. Результаты моделирования FIL должны точно соответствовать ссылочной модели.
Этот шаг является альтернативой шагу 4 для тех, у кого нет программного обеспечения HDL Coder. Если вы завершили шаг 4, вам не нужно продолжать этот шаг.
Предварительно созданные файлы HDL находятся в папке «verify_legacy_gen_hdlsrc». Файл программирования FPGA для FPGA-in-the-Loop можно создать с помощью мастера FIL. Мастер FIL также создаст блок FIL, который можно отменить, поскольку модель FIL, представленная в этом примере, уже содержит блок FIL.
Откройте мастер FIL, введя следующую команду:
filWizard
В окне FIL Options выберите плату разработки FPGA из списка.
В разделе Исходные файлы выберите Добавить и выберите все файлы в папке 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-in-the-Loop.
Просмотрите результаты в областях сравнения и вычислении ErrorRate в модели. Результаты моделирования FIL должны точно соответствовать ссылочной модели.
На этом завершается пример использования косимуляции ЛПВП и FPGA-in-the-Loop для проверки конструкций ЛПВП.