По умолчанию кодер получает коэффициенты фильтра от объекта фильтра и жестко кодирует их в сгенерированный код. Реализация 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 ... S | 000 | Значение шкалы сечения |
S S ... S | 001 | Коэффициент числителя: b1 |
S S ... S | 010 | Коэффициент числителя: b2 |
S S ... S | 011 | Коэффициент числителя: b3 |
S S ... S | 100 | Коэффициент знаменателя: a2 |
S S ... S | 101 | Коэффициент знаменателя: a3 (если порядок = 2; в противном случае не используется) |
S S ... S | 110 | Неиспользованный |
0 0 ... 0 | 111 | Последнее значение шкалы |