Проверьте цифровой преобразователь с использованием FPGA-в цикле

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

Требования

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

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

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

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

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

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

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

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

1. Создайте две конечные импульсные характеристики и 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, со свойством 'AddPipelineRegisters', установленным на ' on '.

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

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

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

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

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

Сконфигурируйте и создайте цикл

Мастер FIL поможет вам в настройке параметров, необходимых для создания FPGA-в цикле. Запустите мастер с помощью следующей команды:

filWizard

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

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

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

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

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

4. В опциях сборки укажите папку для выходных файлов FIL. Для этого примера можно использовать значение по умолчанию. Нажмите кнопку Build. При нажатии кнопки Build Мастер FIL генерирует все необходимые файлы для симуляции цикл и выполняет следующие действия:

  • Генерирует блок FIL в новой модели Simulink ®

  • Открывает окно командной строки, чтобы скомпилировать проект FPGA и сгенерировать файл программирования FPGA

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

Сконфигурируйте блок FIL

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

1. Откройте кнопку Open Model, чтобы открыть тестовую модель и скопировать сгенерированный блок FIL в модель.

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

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

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

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

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

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

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

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