exponenta event banner

dsp. HDLFIRFilter

Фильтр конечной импульсной характеристики - оптимизирован для генерации кода HDL

Описание

dsp.HDLFIRFilter Система object™ моделирует архитектуры фильтров с конечным импульсом отклика, оптимизированные для генерации кода HDL. Объект принимает одну входную выборку за раз и предоставляет опцию для программируемых коэффициентов. Он обеспечивает аппаратный интерфейс с входными и выходными управляющими сигналами. Для обеспечения точного по циклу моделирования генерируемого кода HDL объектные модели архитектурных задержек, включая регистры конвейера и совместное использование ресурсов.

Объект имеет три структуры фильтров. Систолическая архитектура прямого вида обеспечивает полностью параллельную реализацию, которая обеспечивает эффективное использование блоков Intel ® и Xilinx ® DSP. Транспонированная архитектура прямой формы является полностью параллельной реализацией и подходит для приложений FPGA и ASIC. Частично последовательная систолическая архитектура обеспечивает конфигурируемую последовательную реализацию, которая обеспечивает эффективное использование блоков DSP FPGA. Для реализации фильтра, соответствующего множителям, регистрам конвейера и предварительным сумматорам конфигурации DSP поставщика FPGA, укажите целевое устройство при создании кода HDL.

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

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

Для фильтра FIR с многоканальными входами или входами на основе кадров используйте dsp.FIRFilter Системный объект вместо этого системного объекта.

Для фильтрации входных данных с помощью фильтра FIR, оптимизированного для HDL:

  1. Создать dsp.HDLFIRFilter и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

firFilt = dsp.HDLFIRFilter создает оптимизированный для HDL объект системы дискретного фильтра FIR, firFilt, со свойствами по умолчанию.

firFilt = dsp.HDLFIRFilter(num) создает фильтр с помощью Numerator свойство имеет значение num.

firFilt = dsp.HDLFIRFilter(___,Name,Value)задает свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки.

Например:

Numerator = firpm(10,[0,0.1,0.5,1],[1,1,0,0]);
fir = dsp.HDLFIRFilter(Numerator,'FilterStructure','Direct form transposed');
...
[dataOut,validOut] = fir(dataIn,validIn);

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Главный

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

Установка для этого свойства значения 'Input port (Parallel interface)' включает coeff аргумент и NumeratorPrototype собственность. Укажите прототип, чтобы объект мог оптимизировать реализацию фильтра в соответствии с симметрией коэффициентов. Использовать 'Input port (Parallel interface)', установите FilterStructure свойство для 'Direct form systolic'.

Дискретные коэффициенты КИХ-фильтра, заданные как вектор вещественных или комплексных значений. Можно также указать вектор как переменную рабочей области или как вызов функции проектирования фильтра. Когда входной тип данных является типом с плавающей запятой, объект переводит коэффициенты в тот же тип данных, что и входные. Если входной тип данных является целым типом или типом с фиксированной точкой, можно изменить тип данных коэффициента с помощью CoefficientsDataType собственность.

Пример: dsp.HDLFIRFIlter('Numerator',firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0])) определяет коэффициенты с помощью функции проектирования фильтра линейной фазы.

Зависимости

Чтобы включить это свойство, установите NumeratorSource кому 'Property'.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Коэффициенты фильтра прототипа, заданные как вектор вещественных или комплексных значений. Прототип задает вектор коэффициента выборки, который представляет расположение симметрии и нулевого значения ожидаемых входных коэффициентов. Если все векторы входных коэффициентов имеют одинаковые местоположения симметрии и нулевого значения, установите NumeratorPrototype к одному из этих векторов. Если коэффициенты неизвестны или не должны совместно использовать расположение симметрии или нулевого значения, установите NumeratorPrototype кому []. Объект использует прототип для оптимизации фильтра путем совместного использования множителей для симметричных или антисимметричных коэффициентов и удаления множителей для нулевых коэффициентов.

Оптимизация коэффициентов влияет на ожидаемый размер coeff входной аргумент. В качестве аргумента укажите только коэффициенты без дублирования. Например, если задать NumeratorPrototype свойство симметричного 14-отводного фильтра, объект совместно использует один множитель между каждой парой дублирующих коэффициентов, поэтому объект ожидает вектор из 7 значений для coeff аргумент. Необходимо по-прежнему указывать нули на входе coeff вектор для недубликатных нулевых коэффициентов.

Зависимости

Чтобы включить это свойство, установите NumeratorSource кому 'Input port (Parallel interface)'.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Архитектура фильтра HDL, указанная как одна из следующих структур:

  • 'Direct form systolic' - Эта архитектура обеспечивает реализацию полностью параллельного фильтра, что позволяет эффективно использовать блоки Intel и Xilinx DSP. Сведения об архитектуре и производительности см. в разделе Полностью параллельная систолическая архитектура.

  • 'Direct form transposed' - Эта архитектура является полностью параллельной реализацией, которая подходит для приложений FPGA и ASIC. Сведения об архитектуре и производительности см. в разделе Полностью параллельная транспонированная архитектура.

  • 'Partly serial systolic' - Эта архитектура обеспечивает реализацию последовательного фильтра и возможности для компромиссов между пропускной способностью и использованием ресурсов. Он эффективно использует блоки DSP Intel и Xilinx. Объект реализует последовательный фильтр L-коэффициентов с M умножителями и требует входных выборок, которые разнесены по меньшей мере на N циклов, так что L = N × M. Можно указать M или N. Для этой реализации объект обеспечивает выходной сигнал,ready, это указывает, когда объект готов к новым входным данным. Сведения об архитектуре и производительности см. в разделах Частично последовательная систолическая архитектура (1 < N < L) и Полностью последовательная систолическая архитектура (N ≥ L).

Все реализации совместно используют множители для симметричных и антисимметричных коэффициентов. 'Direct form systolic' и 'Direct form transposed' структуры также удаляют множители для нулевых коэффициентов.

Укажите правило, используемое объектом для сериализации фильтра:

  • 'Minimum number of cycles between valid input samples' - Укажите требование для синхронизации входных данных с помощью NumberOfCycles собственность.

  • 'Maximum number of multipliers' - Укажите требование к использованию ресурсов с помощью NumberOfMultipliers собственность.

Для фильтра с L коэффициентами объект реализует последовательный фильтр с не более чем М умножителями и требует входных выборок, которые разнесены по меньшей мере на N циклов, так что L = N × M. Объект применяет оптимизацию коэффициентов после сериализации, поэтому значения M или N конечной реализации фильтра могут быть ниже указанного значения.

Зависимости

Чтобы включить это свойство, установите FilterStructure кому 'Partly serial systolic'.

Требование сериализации для синхронизации ввода, указанное как положительное целое число. Это свойство представляет N, минимальное число циклов между допустимыми входными выборками. В этом случае объект вычисляет M = L/N. Для реализации полностью последовательной архитектуры установите NumberOfCycles до значения, большего длины фильтра, L или до Inf.

Объект применяет оптимизацию коэффициентов после сериализации, поэтому значения M и N конечного фильтра могут быть ниже указанного значения.

Зависимости

Чтобы включить это свойство, установите FilterStructure кому 'Partly serial systolic' и набор SerializationOption кому 'Minimum number of cycles between valid input samples'.

Требование сериализации для использования ресурсов, указанное как положительное целое число. Это свойство представляет М, максимальное количество множителей в реализации фильтра. В этом случае объект вычисляет N = L/M. Если входные данные сложны, объект распределяет floor(M/2) множители для действительной части фильтра и floor(M/2) множители для мнимой части фильтра. Для реализации полностью последовательной архитектуры установите NumberOfMultipliers кому 1 для реального ввода, или 2 для комплексного ввода.

Объект применяет оптимизацию коэффициентов после сериализации, поэтому значения M и N конечного фильтра могут быть ниже указанного значения.

Зависимости

Чтобы включить это свойство, установите значение FilterStructure кому 'Partly serial systolic', и установить SerializationOption кому 'Maximum number of multipliers'.

Типы данных

Метод округления для литья по типу выходных данных, указанный как 'Floor', 'Ceiling', 'Convergent', 'Nearest', 'Round', или 'Zero'. Метод округления используется при приведении выходных данных к типу данных, указанному OutputDataType собственность. Если входной тип данных - плавающая точка, объект игнорирует RoundingMethod собственность. Дополнительные сведения см. в разделе Режимы округления.

Обработка переполнения для литья по типу выходного сигнала, указанного как 'Wrap' или 'Saturate'. Обработка переполнения используется при приведении выходных данных к типу данных, указанному в OutputDataType собственность. Если входной тип данных - плавающая точка, объект игнорирует OverflowAction собственность. Дополнительные сведения см. в разделе Обработка переполнения.

Тип данных коэффициентов дискретного КИХ-фильтра, указанный как 'Same word length as input' или numerictype (Конструктор фиксированных точек). Чтобы указать numerictype объект, вызов numerictype(s,w,f), где:

  • s является 1 для подписанных и 0 для неподписанных.

  • w - длина слова в битах.

  • f - количество дробных битов.

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

Зависимости

Чтобы включить это свойство, установите NumeratorSource кому 'Property'.

Тип данных выхода дискретного КИХ фильтра, указанный как 'Same word length as input', 'Full precision', или numerictype (Конструктор фиксированных точек). Чтобы указать numerictype объект, вызов numerictype(s,w,f), где:

  • s является 1 для подписанных и 0 для неподписанных.

  • w - длина слова в битах.

  • f - количество дробных битов.

Тип объекта - приводит выход дискретного фильтра FIR к указанному типу данных. Квантование использует настройки RoundingMethod и OverflowAction свойства. Если входной тип данных - плавающая точка, объект игнорирует OutputDataType собственность.

Объект увеличивает длину слова для полной точности в каждом отводе фильтра и переводит окончательный вывод в заданный тип. Максимальный окончательный внутренний тип данных (WF) зависит от типа входных данных (WI), типа данных коэффициента (WC) и количества коэффициентов (L) и задается

WF = WI + WC + ceil(log2(L)).

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

Аргументы управления

Параметр для включения параметра reset input, указанный как true или false. При установке для этого свойства значения true, объект ожидает значение для reset входной аргумент. Сигнал сброса реализует локальный синхронный сброс регистров тракта данных.

Дополнительные сведения о сбросе см. в разделе Советы.

Опция подключения регистров тракта данных к сгенерированному сигналу глобального сброса HDL, указанная как true или false. Установить для этого свойства значение true для подключения сгенерированного сигнала глобального сброса HDL к регистрам тракта данных. Это свойство не изменяет аргументы объекта и поведение моделирования в MATLAB ®. При установке для этого свойства значенияfalseсгенерированный глобальный сброс HDL очищает только регистры тракта управления. Сгенерированный глобальный сброс HDL может быть синхронным или асинхронным в зависимости от настроек генерации кода HDL.

Дополнительные сведения о сбросе см. в разделе Советы.

Использование

Описание

[dataOut,validOut] = firFilt(dataIn,validIn) фильтрует входные данные только тогда, когда validIn является true.

пример

[dataOut,validOut,ready] = firFilt(dataIn,validIn) прибыль ready установить в значение true когда объект готов принять новые входные данные при следующем вызове.

Объект возвращает ready аргумент только при установке FilterStructure свойство для 'Partly serial systolic'. Например:

firFilt = dsp.HDLFIRFilter(Numerator,...
            'FilterStructure','Partly serial systolic',...
            'SerializationOption','Minimum number of cycles between valid input samples',...
            'NumberOfCycles',8)
...
for k=1:length(dataIn)
    [dataOut,validOut,ready] = firFilt(dataIn(k),validIn(k));

[dataOut,validOut] = firFilt(dataIn,validIn,coeff) фильтрует данные с помощью коэффициентов, coeff. Объект ожидает coeff аргумент только при установке NumeratorSource свойство для 'Input port (Parallel interface)'. Например:

firFilt = dsp.HDLFIRFilter(NumeratorSource,'Input Port (Parallel interface)')
...
for k=1:length(dataIn)
    Numerator = myGetNumerator();  %calculate coefficients
    [dataOut,validOut] = firFilt(dataIn(k),validIn(k),Numerator);

[dataOut,validOut] = firFilt(dataIn,validIn,reset) фильтрует данные при reset является false. Когда reset является trueобъект сбрасывает регистры фильтра. Объект ожидает reset аргумент только при установке ResetInputPort свойство для true. Например:

firFilt = dsp.HDLFIRFilter(Numerator,'ResetInputPort',true)
...
% reset the filter
firFilt(0,false,true);
for k=1:length(dataIn)
    [dataOut,validOut] = firFilt(dataIn(k),validIn(k),false);
Дополнительные сведения о сбросе см. в разделе Советы.

Входные аргументы

развернуть все

Входные данные, заданные как вещественный или комплексный скаляр. Если входной тип данных является целым типом или типом с фиксированной точкой, объект использует арифметику с фиксированной точкой для внутренних вычислений.

double и single типы данных поддерживаются для моделирования, но не для генерации кода HDL.

Типы данных: fi | single | double | int8 | int16 | int32 | uint8 | uint16 | uint32
Поддержка комплексного номера: Да

Достоверность входных данных, указанных как логический скаляр. dataIn аргумент действителен только тогда, когда validIn является 1 (true).

Типы данных: logical

Коэффициенты фильтра, заданные как вектор вещественных или комплексных значений. Входные коэффициенты можно изменить в любое время. Размер вектора зависит от размера и симметрии коэффициентов выборки, указанных в NumeratorPrototype собственность. Прототип задает вектор коэффициента выборки, который представляет расположение симметрии и нулевого значения ожидаемых входных коэффициентов. Объект использует прототип для оптимизации фильтра путем совместного использования множителей для симметричных или антисимметричных коэффициентов и удаления множителей для нулевых коэффициентов. Поэтому укажите в аргументе только коэффициенты без дублирования. Например, если задать NumeratorPrototype для симметричного 14-отводного фильтра объект ожидает вектор из 7 значений для coeff аргумент. Необходимо по-прежнему указывать нули на входе coeff вектор для недубликатных нулевых коэффициентов.

double и single типы данных поддерживаются для моделирования, но не для генерации кода HDL.

Зависимости

Чтобы включить этот аргумент, установите NumeratorSource свойство для 'Input port (Parallel interface)'.

Типы данных: fi | single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Когда reset аргумент - trueобъект останавливает текущий расчет и очищает внутреннее состояние фильтра. Сигнал сброса является синхронным и сбрасывает состояние тракта данных и управляющего тракта. Дополнительные сведения о сбросе см. в разделе Советы.

Зависимости

Чтобы включить этот аргумент, установите ResetInputPort свойство для true.

Типы данных: logical

Выходные аргументы

развернуть все

Отфильтрованные выходные данные, возвращаемые как вещественный или сложный скаляр. Когда входные данные являются данными с плавающей запятой, выходные данные наследуют тип данных входных данных. Если входные данные являются целочисленным типом или типом с фиксированной точкой, свойство OutputDataType определяет тип выходных данных.

Типы данных: fi | single | double
Поддержка комплексного номера: Да

Достоверность выходных данных, возвращаемых как логический скаляр. Наборы объектов validOut кому 1 (true) с каждой допустимой выходной информацией в dataOut аргумент.

Типы данных: logical

Индикация готовности объекта к новым входным данным, возвращаемым в виде логического скаляра. Объект устанавливает это значение как true указывает, что он готов принять новые входные данные при следующем вызове.

При использовании частично-последовательной архитектуры объект обрабатывает по одному образцу за раз. Если проект ожидает возврата объекта ready установить в значение false перед отменой утверждения validIn, то в объект поступает одно дополнительное значение ввода данных. Объект сохраняет эти дополнительные данные при обработке текущих данных, а затем не устанавливает ready кому true до обработки дополнительного ввода.

Зависимости

Объект возвращает это значение только в том случае, если FilterStructure свойство имеет значение 'Partly serial systolic'.

Типы данных: logical

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

getLatencyЗадержка фильтра FIR
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Создайте объект системы FIR-фильтра HDL с настройками по умолчанию.

firFilt = dsp.HDLFIRFilter;

Создание входного сигнала случайного шума и выделение памяти для выходных сигналов.

L = 100;
dataIn = randn(L,1);
dataOut = zeros(L,1);
validOut = false(L,1);

Вызовите объект по входному сигналу, утверждая, что входные данные всегда действительны. Объект одновременно обрабатывает одну выборку данных.

for k=1:L
    [dataOut(k),validOut(k)] = firFilt(dataIn(k),true);
end

В этом примере показано, как настроить dsp.HDLFIRFilter Система object™ как частично последовательный 31-отводной фильтр нижних частот.

Спроектируйте коэффициенты фильтра. Затем создайте объект системы фильтра FIR HDL. Установите FilterStructure кому 'Partly serial systolic'. По умолчанию SerializationOption свойство - 'Minimum number of cycles between valid input samples', и поэтому необходимо указать правило сериализации с помощью NumberOfCycles собственность. Чтобы разделить каждый множитель между 10 коэффициентами, установите значение NumberOfCycles до 10.

numerator = firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]);
numCycles = 10;
firFilt = dsp.HDLFIRFilter('Numerator',numerator, ...
    'FilterStructure','Partly serial systolic','NumberOfCycles',numCycles);

Эта реализация последовательного фильтра требует 10 временных шагов для вычисления каждого выходного сигнала. Создание входных сигналов dataIn и validIn таким образом, что новые данные применяются только каждый NumberOfCycles временные шаги.

L = 16;
x = fi(randn(L,1),1,16);
dataIn = zeros(L*numCycles,1,'like',x);
dataIn(1:numCycles:end) = x;
validIn = false(L*numCycles,1);
validIn(1:numCycles:end) = true;

Создать LogicAnalyzer объект для просмотра входных и выходных сигналов.

la = dsp.LogicAnalyzer('NumInputPorts',5, ...
    'SampleTime',1,'TimeSpan',length(dataIn));
tags = getDisplayChannelTags(la);
modifyDisplayChannel(la,tags{1},'Name','dataIn');
modifyDisplayChannel(la,tags{2},'Name','validIn');
modifyDisplayChannel(la,tags{3},'Name','dataOut');
modifyDisplayChannel(la,tags{4},'Name','validOut');
modifyDisplayChannel(la,tags{5},'Name','ready');

Вызовите объект filter System по входным сигналам и просмотрите результаты в логическом анализаторе. Объектные модели конвейера HDL регистрируют и совместно используют ресурсы, поэтому форма сигнала показывает начальную задержку, прежде чем объект возвращает действительные выходные выборки.

for k=1:length(dataIn)
    [dataOut,validOut,ready] = firFilt(dataIn(k),validIn(k));
    la(dataIn(k),validIn(k),dataOut,validOut,ready)
end

Чтобы создать код HDL из системного object™, создайте функцию, которая содержит объект и вызывает его.

Создать функцию

Напишите функцию, создающую и вызывающую 11-отводный объект системы фильтра FIR HDL. Из этой функции можно создать код HDL.

function [dataOut,validOut] = HDLFIR11Tap(dataIn, validIn)
%HDLFIR11Tap
% Process one sample of data by using the dsp.HDLFIRFilter System
% object. 
% dataIn is a fixed-point scalar value. 
% You can generate HDL code from this function.
    persistent fir
    if isempty(fir)
        Numerator = firpm(10,[0 0.1 0.5 1],[1 1 0 0]);
        fir = dsp.HDLFIRFilter('Numerator',Numerator);
    end
    [dataOut,validOut] = fir(dataIn,validIn);    
end


Создание тестового стенда для функции

Очистить рабочее пространство, создать входной сигнал случайного шума и выделить память для выходов.

clear variables
clear HDLFIR11Tap
L = 200;
dataIn = fi(randn(L,1),1,16);
validIn = ones(L,'logical');
dataOut = zeros(L,1);
validOut = false(L,1);

Вызовите функцию входного сигнала.

for k = 1:L
    [dataOut(k),validOut(k)] = HDLFIR11Tap(dataIn(k), validIn(k));
end

Постройте график сигналов с помощью логического анализатора.

la = dsp.LogicAnalyzer('NumInputPorts',3,'SampleTime',1,'TimeSpan',L);
tags = getDisplayChannelTags(la);
modifyDisplayChannel(la,tags{1},'Name','dataIn','Format','Analog','Height',50);
modifyDisplayChannel(la,tags{2},'Name','dataOut','Format','Analog','Height',50);
modifyDisplayChannel(la,tags{3},'Name','validOut');
la(dataIn,dataOut,validOut)

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

Создать dsp.HDLFIRFilter Система object™ и запрашивает задержку. Архитектура по умолчанию является полностью параллельной систолической. Тип данных по умолчанию для коэффициентов: 'Same word length as input'. Поэтому при вызове getLatency объектная функция, необходимо указать тип входных данных. Объект передает значения коэффициентов входному типу данных, а затем проверяет симметричные коэффициенты. Это Numerator имеет 31 симметричный коэффициент, поэтому объект оптимизирует совместно используемые коэффициенты и реализует 16 умножителей.

Numerator = firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]);
Input_type = numerictype(1,16,15); % object uses only the word length for coefficient type cast
hdlfir = dsp.HDLFIRFilter('Numerator',Numerator);
L_sysp = getLatency(hdlfir,Input_type)
L_sysp = 23

Проверьте задержку для частично последовательной систолической реализации того же фильтра. По умолчанию SerializationOption свойство - 'Minimum number of cycles between valid input samples', и поэтому необходимо указать правило сериализации с помощью NumberOfCycles собственность. Чтобы разделить каждый множитель между 8 коэффициентами, установите значение NumberOfCycles до 8. Затем объект оптимизируется на основе симметрии коэффициентов, так что существует 16 уникальных коэффициентов, разделяемых 8 раз каждый в 2 умножителя. Эта реализация последовательного фильтра требует входных выборок, действительных каждые 8 циклов.

hdlfir = dsp.HDLFIRFilter('Numerator',Numerator,'FilterStructure','Partly serial systolic','NumberOfCycles',8);
L_syss = getLatency(hdlfir,Input_type)
L_syss = 19

Проверьте латентность несимметричного полностью параллельного систолического фильтра. Numerator имеет 31 коэффициент.

Numerator = sinc(0.4*[-30:0]);
hdlfir = dsp.HDLFIRFilter('Numerator',Numerator);
L_sysp = getLatency(hdlfir,Input_type)
L_sysp = 37

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

hdlfir = dsp.HDLFIRFilter('Numerator',Numerator,'FilterStructure','Partly serial systolic',...
                          'SerializationOption','Maximum number of multipliers','NumberOfMultipliers',2);
L_syss = getLatency(hdlfir,Input_type)
L_syss = 37

Проверьте задержку полностью параллельной транспонированной архитектуры. Задержка для этой структуры фильтра всегда составляет 6 циклов.

hdlfir = dsp.HDLFIRFilter('Numerator',Numerator,'FilterStructure','Direct form transposed');
L_trans = getLatency(hdlfir,Input_type)
L_trans = 6

Совет

Сбросить поведение

  • По умолчанию dsp.HDLFIRFilter объект соединяет сгенерированный глобальный сброс HDL только с регистрами тракта управления. Два свойства ResetInputPort и HDLGlobalReset соединяют сигнал сброса с регистрами путей данных. Из-за дополнительной маршрутизации и нагрузки на сигнал сброса сброс регистров тракта данных может снизить производительность синтеза.

  • ResetInputPort активизирует свойство reset аргумент объекта. Сигнал сброса реализует локальный синхронный сброс регистров тракта данных. Для оптимального использования ресурсов FPGA эта опция не подключает сигнал сброса к регистрам, предназначенным для блоков DSP FPGA.

  • HDLGlobalReset свойство соединяет сгенерированный сигнал глобального сброса HDL с регистрами тракта данных. Это свойство не изменяет аргументы объекта и поведение моделирования в MATLAB. Сгенерированный глобальный сброс HDL может быть синхронным или асинхронным в зависимости от настроек генерации кода HDL. В зависимости от устройства использование глобального сброса может привести к перемещению регистров из блоков DSP и увеличению использования ресурсов.

  • При установке обоих параметров ResetInputPort и HDLGlobalReset свойства для true, сигналы глобального и локального сброса очищают регистры тракта управления и передачи данных.

Алгоритмы

Этот объект System реализует алгоритмы, описанные на странице ссылок на блоки, оптимизированные для дискретного FIR-фильтра HDL.

Вопросы совместимости

развернуть все

В R2019a изменилось поведение

Представлен в R2017a