Программируемые коэффициенты фильтра для конечная импульсная характеристика

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

Для прямых фильтров конечной импульсной характеристики формы кодер предоставляет опции UI и соответствующие свойства командной строки, которые позволяют вам:

  • Сгенерируйте интерфейс для загрузки коэффициентов из памяти. Коэффициенты, хранящиеся в памяти, называются programmable coefficients.

  • Протестируйте интерфейс.

Программируемые коэффициенты фильтра поддерживаются для следующих типов конечных импульсных характеристик прямой формы:

  • Прямая форма

  • Прямая форма симметричная

  • Прямая антисимметричная форма

Чтобы использовать программируемые коэффициенты, для сущности или модуля фильтра генерируется интерфейс порта (называемый processor interface). Загрузка коэффициентов принята под управлением микропроцессора, который является внешним по отношению к сгенерированному фильтру. Фильтр использует загруженные коэффициенты для обработки входных выборок.

Программируемые коэффициенты фильтра поддерживаются для следующих архитектур фильтра:

  • Fully parallel

  • Fully serial

  • Partly serial

  • Cascade serial

При выборе архитектуры последовательной конечной импульсной характеристики фильтра можно также указать, как хранятся коэффициенты. Можно выбрать двухпортовую или однопортовую ОЗУ или файл регистра. Смотрите программируемые коэффициенты фильтра для конечная импульсная характеристика.

Можно также сгенерировать интерфейс процессора для загрузки коэффициентов БИХ. Смотрите программируемые коэффициенты фильтра для БИХ.

Опции пользовательского интерфейса для программируемых коэффициентов

Следующие опции пользовательского интерфейса позволяют вам задать программируемые коэффициенты:

  • Список Coefficient source в диалоговом окне Generate HDL позволяет вам выбрать, получены ли коэффициенты от объекта фильтра и жестко закодированы (Internal), или из памяти (Processor interface). Значение по умолчанию является Internal.

    Соответствующее свойство командной строки CoefficientSource.

  • Опция Coefficient stimulus на панели Test Bench диалогового окна Генерация HDL определяет, как испытательный стенд тестирует сгенерированный интерфейс памяти.

    Соответствующее свойство командной строки TestBenchCoeffStimulus.

Генерация Испытательного стенда для программируемых коэффициентов конечной импульсной характеристики

В этом разделе описывается, как использовать TestBenchCoeffStimulus свойство, чтобы указать, как испытательный стенд управляет портами коэффициентов. Для этой цели можно также использовать опцию Coefficient stimulus.

Когда для фильтра был сгенерирован интерфейс памяти коэффициентов, порты коэффициентов имеют сопоставленные тестовые векторы. The TestbenchCoeffStimulus свойство определяет, как испытательный стенд управляет портами коэффициентов.

The TestBenchStimulus свойство определяет входные стимулы фильтра.

The TestbenchCoeffStimulus свойство выбирает из двух типов испытательных стендов. TestbenchCoeffStimulus принимает вектор аргумент. Допустимые значения:

  • []: Пустой вектор. (по умолчанию)

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

  • [coeff1, coeff2... coeffN]: Вектор N коэффициенты, где N определяется следующим образом:

    • Для симметричных фильтров, N должен равняться ceil(length(filterObj.Numerator)/2).

    • Для антисимметричных фильтров, N должен равняться floor(length(filterObj.Numerator)/2).

    • Для других фильтров N должен равняться длине объекта фильтра.

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

Примечание

Если интерфейс памяти коэффициентов не был ранее сгенерирован для фильтра, TestbenchCoeffStimulus свойство проигнорировано.

Для получения примера смотрите Испытательный стенд для конечной импульсной характеристики фильтра с программируемыми коэффициентами.

Использование программируемых коэффициентов с последовательной конечной импульсной характеристикой фильтром Архитектур

В этом разделе рассматриваются особые факторы по использованию программируемых коэффициентов фильтра с конечная импульсная характеристика, которые имеют одну из следующих последовательных архитектур:

  • Fully serial

  • Partly serial

  • Cascade serial

Установка памяти для программируемых коэффициентов

По умолчанию интерфейс процессора для программируемых коэффициентов загружает коэффициенты из файла регистра. Раскрывающееся меню Coefficient memory позволяет вам задать альтернативное хранилище на основе оперативной памяти для программируемых коэффициентов.

Можно задать Coefficient memory, когда:

  • Фильтр является конечная импульсная характеристика.

  • Вы устанавливаете Coefficient source равной Processor interface.

  • Вы устанавливаете Architecture равной Fully serial, Partly serial, или Cascade serial.

Рисунок показывает опцию Coefficient memory для полностью последовательного фильтра конечной импульсной характеристики. Выбрать опцию можно с помощью раскрывающегося списка.

В таблице результирующие опции Coefficient memory.

Coefficient memory выбораОписание
Registersпо умолчанию: Сохраните программируемые коэффициенты в файле регистра.
Single Port RAMs

Сохраните программируемые коэффициенты в однопортовой ОЗУ.

Кодер записывает каждую ОЗУ и свой интерфейс в отдельный файл. Количество сгенерированных ОЗУ зависит от разбиения фильтра.

Dual Port RAMs

Сохраните программируемые коэффициенты в двухпортовой ОЗУ.

Кодер записывает каждую ОЗУ и свой интерфейс в отдельный файл. Количество сгенерированных ОЗУ зависит от разбиения фильтра.

Факторы о синхронизации

В последовательной реализации конечной импульсной характеристики скорость системных часов (clk) обычно является произведением скорости входных данных (частоты дискретизации фильтра). Точная связь между тактовой частотой и скоростью передачи данных зависит от вашего выбора последовательной архитектуры и опций разбиения.

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

  • Когда write_enable утверждает, загружает коэффициенты из coeffs_in порт в память коэффициентов по адресу, заданному write_address.

  • write_done может утверждать для любого числа тактов. Если write_done утверждает по меньшей мере два clk циклы до прихода следующего входного значения данных, новые коэффициенты будут применяться к следующей выборке данных. В противном случае для данных после следующей выборки будут применены новые коэффициенты.

Эти два примера иллюстрируют, как последовательное разбиение влияет на время загрузки коэффициента.

Создайте фильтр прямой формы с 11 коэффициентами.

rng(13893,'v5uniform');
b = rand(1,11);
filt = dsp.FIRFilter('Numerator',b,'Structure','Direct form');

Сгенерируйте код VHDL для filt, использование частично последовательной архитектуры с последовательным разделом [7 4]. Задайте CoefficientSource для генерации интерфейса процессора.

generatehdl(filt,'InputDataType',numerictype(1,16,15), ...
    'SerialPartition',[7 4],'CoefficientSource','ProcessorInterface');
### Clock rate is 7 times the input sample rate for this architecture.
### HDL latency is 3 samples

Это разбиение результатов в тактовой частоте, которая в семь раз превышает вход частоту выборки.

Временная схема иллюстрирует скорость загрузки коэффициента относительно скорости выборок входных данных. Пока write_enable задано, загружены 11 значений коэффициентов, через coeffs_in, по 11 последовательным адресам памяти. На следующем clk цикл, write_enable отключается и write_done устанавливается в течение одного тактового периода. Операция загрузки коэффициента завершается в течение двух циклов входа данных, позволяя 2 clk циклы, которые проходят до прихода значения данных 07FFF. Поэтому вновь загруженные коэффициенты применяются к этой выборке данных.

Теперь задайте последовательный раздел [6 5] для того же фильтра. Этот раздел результатов с более медленной тактовой частотой, в шесть раз больше, чем вход скорость выборки.

generatehdl(filt,'InputDataType',numerictype(1,16,15), ...
    'SerialPartition',[6 5],'CoefficientSource','ProcessorInterface');
### Clock rate is 6 times the input sample rate for this architecture.
### HDL latency is 3 samples

Временная схема иллюстрирует, что write_done слишком поздно, чтобы коэффициенты применялись к полученному значению данных 278E. Они применяются вместо этого к следующей выборке, 7FFF.