exponenta event banner

Программируемые коэффициенты фильтра для фильтров FIR

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

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

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

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

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

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

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

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

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

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

  • Fully parallel

  • Fully serial

  • Partly serial

  • Cascade serial

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

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

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

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

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

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

  • Параметр «Коэффициент стимулирования» на панели «Испытательный стенд» диалогового окна «Генерировать ЛПВП» определяет, как испытательный стенд проверяет сгенерированный интерфейс памяти.

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

Создание тестового стенда для программируемых коэффициентов КИХ

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

  • Fully serial

  • Partly serial

  • Cascade serial

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

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

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

  • Фильтр является фильтром FIR.

  • Для параметра «Источник коэффициентов» установлено значение Processor interface.

  • Вы устанавливаете для Architecture значение Fully serial, Partly serial, или Cascade serial.

На рисунке показана опция «Коэффициент памяти» для фильтра FIR с полной последовательностью. Выбрать опцию можно с помощью раскрывающегося списка.

В таблице представлены параметры памяти коэффициентов.

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

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

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

Dual Port RAMs

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

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

Соображения по времени

В последовательной реализации фильтра FIR частота системных синхросигналов (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.