dsp. HDLFIRFilter

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

Описание

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

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

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

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

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

Отфильтровать входные данные с оптимизированным HDL КИХ-фильтром:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

firFilt = dsp.HDLFIRFilter
firFilt = dsp.HDLFIRFilter(num)
firFilt = dsp.HDLFIRFilter(___,Name,Value)

Описание

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 Используя Системные объекты (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

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

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

Зависимости

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

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

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

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

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

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

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

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

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

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

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

Управляйте аргументами

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

Для более факторов сброса смотрите Советы.

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

Для более факторов сброса смотрите Советы.

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

Синтаксис

[dataOut,validOut] = firFilt(dataIn,validIn)
[dataOut,validOut,ready] = firFilt(dataIn,validIn)
[dataOut,validOut] = firFilt(dataIn,validIn,coeff)
[dataOut,validOut] = firFilt(dataIn,validIn,reset)

Описание

[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).

Типы данных: логический

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

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

Зависимости

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

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

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

Зависимости

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

Типы данных: логический

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

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

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

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

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

Типы данных: логический

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

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

Зависимости

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

Типы данных: логический

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

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

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

Вызовите Системный объект фильтра на входных сигналах и просмотрите результаты в Logic Analyzer. Конвейерные регистры 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™ и запросите задержку. Архитектура по умолчанию полностью параллельна систолический. Типом данных по умолчанию для коэффициентов является '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 = 25

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

Алгоритмы

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

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

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

Поведение изменяется в R2019a

Введенный в R2017a