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

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

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

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

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

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

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

  • Бесконечный импульсный ответ (IIR) раздела второго порядка (SOS) Прямая Форма I

  • БИХ SOS Прямая Форма я транспонировал

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

  • БИХ SOS Прямая Форма 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 диалогового окна Generate HDL задает, как испытательный стенд тестирует сгенерированный интерфейс памяти.

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

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

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

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

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

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В последний раз масштабируйте значение