dsp.HDLFIRFilter

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

Описание

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

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

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

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

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

Для фильтрации входных данных с помощью HDL-оптимизированного конечная импульсная характеристика:

  1. Создайте dsp.HDLFIRFilter Объекту и установите его свойства.

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

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

Создание

Описание

firFilt = dsp.HDLFIRFilter создает HDL-оптимизированный дискретный фильтр конечной импульсной характеристики Системного объекта, 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. Для получения дополнительной информации об архитектуре и эффективности см. раздел «Полностью параллельная Systolic архитектура».

  • 'Direct form transposed' - Эта архитектура является полностью параллельной реализацией, которая подходит для приложений FPGA и ASIC. Для получения дополнительной информации об архитектуре и эффективности смотрите Fully Parallel Transposed Architecture.

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

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

Задайте правило, которое объект использует для сериализации фильтра как одно из:

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

  • 'Maximum number of multipliers' - Задайте требование для использования ресурса при помощи NumberOfMultipliers свойство.

Для фильтра с L коэффициентами объект осуществляет последовательный фильтр с не больше, чем M множители и требует выборок входа, которые являются, по крайней мере N циклами обособленно, такой что L = <reservedrangesplaceholder3> × <reservedrangesplaceholder2>. Объект применяет оптимизацию коэффициентов после сериализации, поэтому 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'.

Требование сериализации для использования ресурса, заданное как положительное целое число. Это свойство представляет M, максимальное количество умножителей в реализации фильтра. В этом случае объект вычисляет 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' или a numerictype (Fixed-Point Designer) объект. Как задать numerictype объект, вызов numerictype(s,w,f), где:

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

  • w - размер слова в битах.

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

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

Зависимости

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

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

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

  • w - размер слова в битах.

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

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

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

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

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

Управляющие аргументы

Опция для включения сброса входного параметра, заданная как 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
Поддержка комплексного числа: Да

Валидность входных данных, заданная как логический скаляр. The 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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

Создайте 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-контактный lowpass.

Спроектируйте коэффициенты фильтра. Затем создайте 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');

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

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

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

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

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™ и запрашивает задержку. Архитектура по умолчанию полностью параллельна systolic. Тип данных по умолчанию для коэффициентов '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

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

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

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

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

Алгоритмы

Этот Системный объект реализует алгоритмы, описанные на Discrete FIR Filter HDL Optimized блочных страниц с описанием.

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

расширить все

Поведение изменено в R2019a

См. также

Блоки

Объекты

Введенный в R2017a