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

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

Для БИХ кодер предоставляет опции UI и соответствующие свойства командной строки, которые позволяют вам:

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

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

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

Следующие типы БИХ поддерживают программируемые коэффициенты фильтра:

  • Секция второго порядка (SOS) бесконечной импульсной характеристики (БИХ) Прямая форма I

  • Прямая транспонированная форма SOS IIR I

  • SOS БИХ Прямая форма II

  • Прямая форма SOS IIR II транспонирована

Ограничения

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

  • Сгенерированный интерфейс принимает, что коэффициенты хранятся в файле регистра.

  • Когда вы генерируете интерфейс процессора для БИХ, OptimizeScaleValues свойство должно находиться между 1 и 0. Для примера:

    filt.OptimizeScaleValues = 0
    Проверьте, что фильтр все еще имеет необходимый ответ, используя fvtool и filter, команды. Отключение filt.OptimizeScaleValues может добавить квантование на входах и выходах сечения.

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

Сгенерируйте интерфейс процессора для программируемого БИХ

Вы можете задать интерфейс процессора с помощью меню Coefficient source в диалоговом окне Generate HDL.

  • Список 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 является пустым вектором, испытательный стенд загружает коэффициенты от объекта фильтра, а затем форсирует входные стимулы. Этот тест показывает ответ на входные стимулы и проверяет, что интерфейс записывает один набор коэффициентов в память, не сталкиваясь с ошибкой.

  • Массив ячеек, содержащий следующие элементы:

    • New_filt.ScaleValues: вектор-столбец значений шкалы для БИХ

    • New_filt.sosMatrix: матрица секции второго порядка (SOS) для БИХ

    Можно задать элементы массива ячеек в следующих формах:

    • {New_filt.ScaleValues,New_filt.sosMatrix}

    • {New_filt.ScaleValues;New_filt.sosMatrix}

    • {New_filt.sosMatrix,New_filt.ScaleValues}

    • {New_filt.sosMatrix;New_filt.ScaleValues}

    • {New_filt.ScaleValues}

    • {New_filt.sosMatrix}

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

    Если вы опускаете New_filt.ScaleValues, испытательный стенд использует значения шкалы, загруженные из объекта фильтра дважды. Точно так же, если вы опускаете New_filt.sosMatrix, испытательный стенд использует матрицу SOS, загруженную из объекта фильтра дважды.

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

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

Каждый тип коэффициента имеет одинаковый размер слова, но может иметь различные дробные длины.

Адрес для каждого коэффициента разделен на два поля:

  • Адрес раздела: Ширина ceil(log2N) биты, где N количество разделов.

  • Адрес коэффициента: Ширина составляет три бита.

Общая ширина write_address поэтому порт ceil(log2N) + 3биты.

Адрес разделаАдрес коэффициента Описание
S S ... S000Значение шкалы сечения
S S ... S001Коэффициент числителя: b1
S S ... S010Коэффициент числителя: b2
S S ... S011Коэффициент числителя: b3
S S ... S100Коэффициент знаменателя: a2
S S ... S101Коэффициент знаменателя: a3 (если порядок = 2; в противном случае не используется)
S S ... S110Неиспользованный
0 0 ... 0111Последнее значение шкалы