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

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

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

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

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

Схема примера

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

  2. Проверьте устаревший HDL-код cosimulating это и сравнением результатов с поведенческой моделью

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

  4. Подтвердите декодер MIMO с FPGA в цикле

Требования и предпосылки

Требуемый и рекомендуемый запустить этот пример:

  • HDL Verifier™

  • HDL Coder™ (рекомендуемый для дополнительного шага генерации кода)

  • Communications Toolbox™

Продукты выше требуют MATLAB®, Simulink®, Fixed-Point Designer™.

Кроме того, для cosimulation и FPGA в цикле вам будет нужно следующее программное и аппаратное обеспечение:

  • Один из поддерживаемых симуляторов HDL

  • Программное обеспечение проекта FPGA

  • Одна из поддерживаемых макетных плат FPGA и аксессуаров

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

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

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

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

Создайте эталонную модель для конечного автомата

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

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

Скопируйте устаревшие файлы HDL-кода в текущий каталог путем выполнения следующей команды:

copyFILDemoFiles('verify_legacy');

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

Если бы вы уже знакомы с cosimulation мастером и хотели бы пропустить этот шаг, открыть cosim_mimo_mq модель, если вы используете ModelSim или симулятор HDL Questa или cosim_mimo_in модель, если вы используете Острый симулятор HDL и скачок к Шагу 2.

Вызовите cosimulation мастер путем ввода следующего в командной строке MATLAB:

cosimWizard

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

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

Нажмите Далее на следующих 2 панелях, чтобы принять значения по умолчанию и прибыть в панель Портов ввода/вывода. В списке Input port выберите следующие значения Типа порта из выпадающих списков для первых 3 портов:

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

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

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

В Выходном порту панель Деталей совершенствовали тип данных для каждого выхода. В случае этого проекта выходные порты должны быть интерпретированы можно следующим образом. Обратите внимание на то, что существует несколько скалярных портов в 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

На наборе панелей Деталей Часов/Сброса следующие значения:

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

Нажмите Далее, чтобы перейти к панели Выравнивания Времени начала и установить "время HDL запускать cosimulation (не уточнено)" к 40.

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

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

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

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

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

2. Cosimulate, чтобы проверить устаревший HDL-код

В вашей cosimulation модели дважды кликают блок "Launch HDL Simulator", чтобы запустить ваш выбранный симулятор HDL. Кликните по кнопке воспроизведения в Simulink, чтобы запустить cosimulation и заметить, что предупреждающие сообщения отображены в окне MATLAB. Они указывают на несоответствия на выходных сигналах из-за несоответствия между ссылочной моделью FSM и реализацией HDL.

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

Зафиксируйте рукописный HDL-код и повторно выполненный Cosimulation

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

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

Перекомпилируйте Устаревший HDL-код путем двойного клика по блоку "Compile HDL Design". Выйдите из симулятора HDL, если это все еще открыто следующий за предыдущим выполнением cosimulation, и повторно запустите симулятор HDL, затем воспроизведите cosimulation. Вы не должны наблюдать несоответствия на этот раз.

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

Установите программную среду проекта FPGA

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

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

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

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

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

Если требуется пропустить редактирование, и шаги Черного ящика открывают fil_codegen_mimo модель и переходят непосредственно к шагу 3.

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

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

  • в MIMO подсистема Декодера удаляют функциональный блок Embedded_Controller

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

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

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

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

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

  • щелкните правой кнопкой по новой cosimulation подсистеме и выберите HDL Code and HDL Block Properties

  • выберите Architecture = BlackBox

  • введите FSMSubsystem как Имя Сущности

  • OK диалоговое окно свойств HDL Block

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

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

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

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

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

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

  • Шаг 4.2: щелкните правой кнопкой по шагу 4.2 рабочего процесса в дереве левой панели навигации и выберите "Run to this task". Этот шаг может занять несколько минут, потому что он включает шаги, чтобы синтезировать, сопоставить, и направить проект для устройства FPGA.

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

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

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

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

Выберите "Load", чтобы загрузить файл программирования FPGA на устройство на вашей плате.

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

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

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

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

Следующая команда скопирует предсгенерированные файлы HDL в вашу рабочую папку:

copyFILDemoFiles('verify_legacy_gen');

Теперь можно создать файл программирования FPGA для FPGA в цикле с помощью мастера FIL. мастер FIL также создаст блок FIL, который можно отбросить, потому что модель FIL предусмотрела этот пример, уже содержит блок FIL.

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

filWizard
  • В Опциях FIL выбирают вашу макетную плату FPGA из списка.

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

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

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

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

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

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

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

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

Это завершает пример Использования HDL Cosimulation и FPGA в цикле, чтобы Проверить Проекты HDL.