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

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

Для прямых КИХ-фильтров формы кодер предоставляет возможности пользовательского интерфейса и соответствующие свойства командной строки, которые позволяют вам:

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

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

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

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

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

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

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

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

  • Fully parallel

  • Fully serial

  • Partly serial

  • Cascade serial

Когда вы выбираете последовательную КИХ-архитектуру фильтра, можно также задать, как коэффициенты хранятся. Можно выбрать двухпортовый или однопортовый RAM или регистровый файл. Смотрите Программируемые Коэффициенты Фильтра для КИХ-Фильтров.

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

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

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

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

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

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

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

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

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

Когда содействующий интерфейс памяти был сгенерирован для фильтра, содействующие порты сопоставили тестовые векторы. 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 свойство проигнорировано.

Для примера смотрите Испытательный стенд для КИХ-Фильтра с Программируемыми Коэффициентами.

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

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

  • Fully serial

  • Partly serial

  • Cascade serial

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

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

Можно установить Coefficient memory когда:

  • Фильтр является КИХ-фильтром.

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

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

Фигура показывает вариант Coefficient memory для полностью последовательного КИХ-фильтра. Можно выбрать опцию с помощью выпадающего списка.

Таблица суммирует опции Coefficient memory.

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

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

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

Dual Port RAMs

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

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

Синхронизация факторов

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

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

  • Когда write_enable утверждает, содействующая загрузка из coeffs_in порт в содействующую память в адресе задан write_address.

  • write_done может утверждать для anynumber тактов. Если 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 deasserted и 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 deasserts слишком поздно для коэффициентов, которые будут применены к прибывающему значению данных 278E. Они применяются вместо этого к следующей выборке, 7FFF.