Проверьте цифровой повышающий преобразователь Используя FPGA в цикле

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

Требования

Продукты потребовали для этого примера:

  • MATLAB

  • Simulink

  • HDL Verifier

  • Fixed-Point Designer

  • Signal Processing Toolbox

  • DSP System Toolbox

  • (Дополнительный) Filter Design HDL Coder

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

  • Одна из поддерживаемых макетных плат FPGA и аксессуаров (плата ML403 не поддержана для этого примера),

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

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

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

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

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

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 в текущий каталог с помощью этой команды:

>> copyFILDemoFiles('duc');

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

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

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

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

>> filWizard

1. В Аппаратных Опциях выберите макетную плату FPGA, соединенную с вашим хостом - компьютером. При необходимости можно также настроить IP Совета и Мак адрес под Расширенными настройками. Щелкните *Затем", чтобы продолжиться.

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

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

Установите флажок верхнего уровня рядом с hdlduc.vhd. Щелкните *Затем", чтобы продолжиться.

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

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

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

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

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

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

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

1. Откройте тестовую модель fil_duc_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 выход. Эти ошибки в допуске на погрешность.

Это завершает пример.