exponenta event banner

Проверка цифрового повышающего преобразователя с помощью FPGA-in-the-Loop

В этом примере показано, как с помощью моделирования FPGA-in-the-Loop проверить конструкцию цифрового повышающего преобразователя, созданного с помощью Coder™ HDL Filter Design.

Требования

Инструменты, необходимые для этого примера:

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

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

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

  • Для подключения с использованием JTAG: кабель JTAG с USB Blaster I или II, драйвер USB Blaster

  • Для подключения с использованием PCI Express ®: плата FPGA установлена в слот PCI Express хост-компьютера.

Создание каскадного фильтра для DUC

Цифровой повышающий преобразователь (DUC) - это цифровая схема, которая преобразует цифровой сигнал основной полосы в сигнал полосы пропускания. DUC состоит из трех стадий фильтрации; каждый каскад фильтрует входной сигнал фильтром интерполяции нижних частот с последующим изменением частоты дискретизации. В этом примере DUC представляет собой каскад из двух фильтров интерполяции FIR и фильтра интерполяции CIC, как описано в примере цифрового повышающего преобразователя HDL (DUC).

1. Создайте два фильтра FIR и CIC.

pfir = [0.0007    0.0021   -0.0002   -0.0025   -0.0027    0.0013    0.0049    0.0032 ...
     -0.0034   -0.0074   -0.0031    0.0060    0.0099    0.0029   -0.0089   -0.0129 ...
     -0.0032    0.0124    0.0177    0.0040   -0.0182   -0.0255   -0.0047    0.0287 ...
      0.0390    0.0049   -0.0509   -0.0699   -0.0046    0.1349    0.2776    0.3378 ...
      0.2776    0.1349   -0.0046   -0.0699   -0.0509    0.0049    0.0390    0.0287 ...
     -0.0047   -0.0255   -0.0182    0.0040    0.0177    0.0124   -0.0032   -0.0129 ...
     -0.0089    0.0029    0.0099    0.0060   -0.0031   -0.0074   -0.0034    0.0032 ...
      0.0049    0.0013   -0.0027   -0.0025   -0.0002    0.0021    0.0007 ];
hpfir = dsp.FIRInterpolator(2, pfir);
hpfir.FullPrecisionOverride = false;
hpfir.CoefficientsDataType = 'Custom';
hpfir.CustomCoefficientsDataType = numerictype([],16);
hpfir.ProductDataType = 'Custom';
hpfir.CustomProductDataType = numerictype([],31,31);
hpfir.AccumulatorDataType = 'Custom';
hpfir.CustomAccumulatorDataType = numerictype([],16,15);
hpfir.OutputDataType = 'Custom';
hpfir.CustomOutputDataType = numerictype([],16,15);
hpfir.RoundingMethod = 'Nearest';
cfir = [-0.0007   -0.0009    0.0039    0.0120    0.0063   -0.0267   -0.0592   -0.0237 ...
       0.1147    0.2895    0.3701    0.2895    0.1147   -0.0237   -0.0592   -0.0267 ...
       0.0063    0.0120    0.0039   -0.0009   -0.0007];
hcfir = dsp.FIRInterpolator(2, cfir);
hcfir.FullPrecisionOverride = false;
hcfir.CoefficientsDataType = 'Custom';
hcfir.CustomCoefficientsDataType = numerictype([],16);
hcfir.ProductDataType = 'Custom';
hcfir.CustomProductDataType = numerictype([],31,31);
hcfir.AccumulatorDataType = 'Custom';
hcfir.CustomAccumulatorDataType = numerictype([],16,15);
hcfir.OutputDataType = 'Custom';
hcfir.CustomOutputDataType = numerictype([],16,15);
hcfir.RoundingMethod = 'Nearest';
hcic = dsp.CICInterpolator(32, 1, 5);
hcic.FixedPointDataType = 'Minimum section word lengths';
hcic.OutputWordLength = 20;

2. Создайте каскадный фильтр, используя эти фильтры.

hduc = dsp.FilterCascade(hpfir, hcfir, hcic);

Частотная характеристика каскадного фильтра показана на следующем рисунке.

fvtool(hduc,'Arithmetic','fixed');

Создание кода HDL

Когда каскадный фильтр будет готов, создайте код HDL для DUC с помощью функции Filter Design HDL Coder. generatehdl, со свойством AddPipelineRegists, имеющим значение on.

generatehdl(hduc, 'Name', 'hdlduc', 'AddPipelineRegisters', 'on', 'InputDataType', numerictype(1,16,15));

Эта опция вставляет регистры конвейера между ступенями фильтра и позволяет синтезировать сгенерированный фильтр с более высокой тактовой частотой.

Если у вас нет кодера HDL Filter Design, можно использовать предварительно созданные файлы HDL в текущей папке.

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

Перед использованием FPGA-in-the-Loop убедитесь, что системная среда правильно настроена для доступа к программному обеспечению FPGA. Функцию hdlsetuptoolpath можно использовать для добавления программного обеспечения FPGA к системному пути для текущего сеанса MATLAB.

Конфигурирование и построение FPGA-in-the-Loop

Мастер FIL помогает настроить параметры, необходимые для построения FPGA-in-the-Loop. Запустите мастер с помощью следующей команды:

filWizard

1. В разделе «Параметры оборудования» выберите плату разработки FPGA, подключенную к компьютеру. При необходимости можно также настроить IP-адрес платы и MAC-адрес в разделе Дополнительные параметры. Нажмите кнопку * Далее "для продолжения.

2. В окне Исходные файлы добавьте следующие сгенерированные файлы HDL для DUC в таблицу исходных файлов с помощью кнопки Обзор.

hdlduc.vhd
hdlduc_stage1.vhd
hdlduc_stage2.vhd
hdlduc_stage3.vhd

Установите флажок верхнего уровня рядом с hdlduc.vhd. Нажмите кнопку * Далее "для продолжения.

3. В портах ввода/вывода DUT входная и выходная информация порта, например имя порта, направление, ширина и тип порта, автоматически генерируется из файла HDL. Типы портов, такие как часы и данные, генерируются на основе имен портов; при необходимости можно изменить выделенный фрагмент. В этом примере сгенерированные типы портов верны, и можно нажать кнопку Далее.

4. В окне «Параметры построения» укажите папку для выходных файлов FIL. В этом примере можно использовать значение по умолчанию. Нажмите кнопку Сборка. При нажатии кнопки Сборка Мастер FIL создает все необходимые файлы для моделирования FPGA-in-the-Loop и выполняет следующие действия:

  • Создание блока FIL в новой модели Simulink ®

  • Открытие окна командной строки для компиляции проекта FPGA и создания файла программирования FPGA

Процесс компиляции проекта FPGA занимает несколько минут. По завершении процесса появится запрос на закрытие окна командной строки. Закройте это окно сейчас.

Конфигурирование блока FIL

Чтобы подготовиться к моделированию FPGA-in-the-Loop, выполните следующие действия для конфигурирования блока FIL.

1. Нажмите кнопку Open Model (открыть модель), чтобы открыть модель испытательного стенда и скопировать созданный блок FIL в модель.

2. Дважды щелкните блок FIL, чтобы открыть маску блока. Нажмите Загрузить, чтобы запрограммировать FPGA с созданным файлом программирования.

3. В разделе Параметры выполнения измените коэффициент оверклокинга на 128. Это указывает на то, что входное значение дискретизируется тактовым сигналом FPGA 128 раз до изменения входного значения.

4. На маске блока FIL щелкните вкладку Атрибуты сигнала (Signal Attributes). Изменение типа данных для filter_out на fixdt(1,20,-1) для соответствия типу данных блока поведенческого фильтра.

5. Нажмите кнопку ОК, чтобы закрыть маску блока.

Проверить созданный фильтр

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

Запустить моделирование. Просмотрите выходные формы сигналов из блока поведенческого фильтра, блока FIL и поля ошибок. Поскольку блок поведенческого фильтра не имеет конвейерных регистров, существуют небольшие различия между выходом блока поведенческого фильтра и выходом блока FIL. Эти ошибки находятся в пределах поля ошибок.

На этом пример завершается.