В этом примере показано, как сконструировать цифровой повышающий преобразователь (DUC) для приложений радиосвязи, таких как LTE, и генерировать код HDL с помощью Coder™ HDL.
DUC широко используются в цифровых передатчиках связи для преобразования сигнала основной полосы частот в сигналы радиочастоты (RF) или промежуточной частоты (IF). Операция DUC увеличивает частоту дискретизации сигнала и сдвигает его на более высокую частоту для облегчения последующих этапов обработки. Представленный здесь DUC выполняет преобразование частоты дискретизации с использованием 4-ступенчатой цепочки фильтров с последующим преобразованием сложной частоты. Пример начинается с проектирования DUC с функциями Toolbox™ системы DSP в плавающей точке. Затем каждая ступень преобразуется в фиксированную точку, а затем используется в модели Simulink ®, которая генерирует синтезируемый код HDL. Для демонстрации и проверки работы DUC используются два тестовых сигнала:
Синусоида модулирована на 32 МГц IF несущей.
Сигнал LTE нисходящей линии связи с полосой пропускания 1,4 МГц, модулированный на несущую 32 МГц IF.
В примере измеряется качество сигнала путем преобразования с понижением частоты выходного сигнала DUC с плавающей и фиксированной точками и сравниваются эти два параметра. Наконец, представлены результаты внедрения FPGA.
Примечание.В этом примере используется DUCTestUtils, класс-помощник, содержащий функции для генерирования стимула и анализа выхода DUC. См. раздел DUCTestUtils.m для получения дополнительной информации.
DUC состоит из интерполяционной цепочки фильтров, осциллятора с числовым управлением (NCO) и смесителя. Цепь фильтров состоит из интерполятора нижних частот, полупериодического интерполятора, интерполятора компенсации CIC (FIR), интерполятора CIC и коррекции усиления.
Общий отклик цепочки фильтров эквивалентен отклику одного интерполяционного фильтра с той же спецификацией, однако разделение фильтра на несколько стадий интерполяции приводит к более эффективной конструкции, которая использует меньшее количество аппаратных ресурсов.
Первый интерполятор нижних частот реализует точное Fpass и Fstop характеристики DUC. Полуполосой является промежуточный интерполятор. Из-за более низких скоростей дискретизации фильтры вблизи начала цепочки могут оптимизировать использование ресурсов путем совместного использования множителей. Интерполятор компенсации CIC улучшает спектральную характеристику путем компенсации более позднего спада CIC при интерполяции на два. Интерполятор CIC обеспечивает большой коэффициент интерполяции, что заставляет цепочку фильтров достигать требований повышения дискретизации. Ниже показана блок-схема DUC.

Вход в DUC дискретизируется с частотой 1,92 мс, в то время как выходная частота дискретизации составляет 122,88 мс. Поэтому общий коэффициент интерполяции равен 64. 1,92 мсек - это типичная частота дискретизации, используемая приемниками LTE для выполнения поиска соты и восстановления MIB (главного информационного блока). Поэтому фильтры DUC были разработаны в соответствии с этим приложением. DUC оптимизирован для работы с тактовой частотой 122,88 МГц.
В этом разделе описывается проектирование DUC с использованием операций с плавающей запятой и функций проектирования фильтров в MATLAB ®. Объект DUC позволяет задать несколько характеристик, определяющих отклик каскада для четырех фильтров, включая частоту полосы пропускания и полосы останова, пульсацию полосы пропускания и затухание полосы останова.
Параметры DUC
Требуемый отклик DUC определяется входной частотой дискретизации, несущей частотой и характеристиками фильтра. Изменение этого требуемого отклика фильтра может потребовать изменения свойств блока HDL блоков фильтра в модели Simulink. Свойства блока HDL рассматриваются далее в примере.
FsIn = 1.92e6; % Sampling rate at input to DUC Fc = 32e6; % Carrier frequency Fpass = 540e3; % Passband frequency, equivalent to 36x15kHz LTE subcarriers Fstop = 700e3; % Stopband frequency Ap = 0.1; % Passband ripple Ast = 60; % Stopband attenuation
Первый интерполятор нижних частот
lowpassParams.FsIn = FsIn; lowpassParams.InterpolationFactor = 2; lowpassParams.FsOut = FsIn * lowpassParams.InterpolationFactor; lowpassSpec = fdesign.interpolator(lowpassParams.InterpolationFactor,'lowpass',... 'Fp,Fst,Ap,Ast',Fpass,Fstop,Ap,Ast,lowpassParams.FsOut); lowpassFilt = design(lowpassSpec,'SystemObject',true)
lowpassFilt =
dsp.FIRInterpolator with properties:
NumeratorSource: 'Property'
Numerator: [1x69 double]
InterpolationFactor: 2
Use get to show all properties
Использовать fvtool отображение амплитудной характеристики фильтра нижних частот без коррекции усиления.
ducPlots.lowpass = fvtool(lowpassFilt,'Fs',FsIn*2,'Legend','off'); DUCTestUtils.setPlotNameAndTitle('Lowpass Interpolator');

Второй полупериодный интерполятор
hbParams.FsIn = lowpassParams.FsOut; hbParams.InterpolationFactor = 2; hbParams.FsOut = lowpassParams.FsOut * hbParams.InterpolationFactor; hbParams.TransitionWidth = hbParams.FsIn - 2 * Fstop; hbParams.StopbandAttenuation = Ast; hbSpec = fdesign.interpolator(hbParams.InterpolationFactor,'halfband',... 'TW,Ast',... hbParams.TransitionWidth,... hbParams.StopbandAttenuation,... hbParams.FsOut); hbFilt = design(hbSpec,'SystemObject',true)
hbFilt =
dsp.FIRInterpolator with properties:
NumeratorSource: 'Property'
Numerator: [1x11 double]
InterpolationFactor: 2
Use get to show all properties
Визуализируйте амплитудную характеристику полуполосной интерполяции.
ducFilterChain = dsp.FilterCascade(lowpassFilt,hbFilt); ducPlots.hbFilt = fvtool(lowpassFilt,hbFilt,ducFilterChain,... 'Fs',[FsIn*2,FsIn*4,FsIn*4]); legend(... 'Lowpass Interpolator', ... 'Halfband Interpolator', ... 'Lowpass+Halfband'); DUCTestUtils.setPlotNameAndTitle('Halfband Interpolator');

Компенсационный интерполятор CIC
Отклик на величину последнего фильтра CIC имеет значительный провал в пределах области полосы пропускания, поэтому фильтр компенсации провала на основе FIR используется для сглаживания отклика полосы пропускания. Компенсатор конфигурируется с теми же параметрами, что и интерполятор CIC. Этот фильтр также реализует интерполяцию в два раза, поэтому задаются его характеристики ограничения полосы пропускания. Укажите требования к фильтру, а затем используйте design функция для возврата объекта System фильтра с этими характеристиками.
compParams.FsIn = hbParams.FsOut; compParams.InterpolationFactor = 2; % CIC compensation interpolation factor compParams.FsOut = compParams.FsIn * compParams.InterpolationFactor; % New sampling rate compParams.Fpass = 1/2 * compParams.FsIn + Fpass; % CIC comp passband frequency compParams.Fstop = 1/2 * compParams.FsIn + 1/4 * compParams.FsIn; % CIC comp stopband frequency compParams.Ap = Ap; % Same Ap as overall filter compParams.Ast = Ast; % Same Ast as overall filter
Структура фильтра компенсации CIC также соответствует более поздней интерполяции CIC. Поэтому здесь указаны некоторые параметры интерполятора CIC.
cicParams.InterpolationFactor = 8; % CIC interpolation factor cicParams.DifferentialDelay = 1; % CIC interpolator differential delay cicParams.NumSections = 3; % CIC interpolator number of integrator and comb sections compSpec = fdesign.interpolator(compParams.InterpolationFactor,'ciccomp',... cicParams.DifferentialDelay,... cicParams.NumSections,... cicParams.InterpolationFactor,... 'Fp,Fst,Ap,Ast',... compParams.Fpass,compParams.Fstop,compParams.Ap,compParams.Ast,... compParams.FsOut); compFilt = design(compSpec,'SystemObject',true)
compFilt =
dsp.FIRInterpolator with properties:
NumeratorSource: 'Property'
Numerator: [1x36 double]
InterpolationFactor: 2
Use get to show all properties
Постройте график ответа компенсационного интерполятора CIC.
ducFilterChain = dsp.FilterCascade(lowpassFilt,hbFilt,compFilt); ducPlots.cicComp = fvtool(lowpassFilt,hbFilt,compFilt,ducFilterChain,... 'Fs',[FsIn*2,FsIn*4,FsIn*8,FsIn*8]); legend(... 'Lowpass Interpolator', ... 'Halfband Interpolator', ... 'CIC Comp Interpolator', ... 'Lowpass+Halfband+CIC Comp'); DUCTestUtils.setPlotNameAndTitle('CIC Comp Interpolator');

Интерполятор CIC
Последняя ступень фильтра реализована в виде интерполятора CIC благодаря своей способности эффективно реализовывать большой коэффициент прореживания. Отклик фильтра CIC аналогичен каскаду фильтров скользящего среднего, однако умножения или деления не используются. В результате фильтр CIC имеет большой коэффициент усиления постоянного тока.
cicParams.FsIn = compParams.FsOut; cicParams.FsOut = cicParams.FsIn * cicParams.InterpolationFactor; cicFilt = dsp.CICInterpolator(cicParams.InterpolationFactor,... cicParams.DifferentialDelay,cicParams.NumSections) %#ok<*NOPTS>
cicFilt =
dsp.CICInterpolator with properties:
InterpolationFactor: 8
DifferentialDelay: 1
NumSections: 3
FixedPointDataType: 'Full precision'
Визуализируйте амплитудную характеристику интерполяции CIC. Фильтры CIC всегда используют арифметику с фиксированной точкой внутри, поэтому fvtool строит график как квантованных, так и неквантованных откликов.
ducFilterChain = dsp.FilterCascade(lowpassFilt,hbFilt,compFilt,cicFilt); ducPlots.cicInter = fvtool(lowpassFilt,hbFilt,compFilt,cicFilt,ducFilterChain,... 'Fs',[FsIn*2,FsIn*4,FsIn*8,FsIn*64,FsIn*64]); legend(... 'First Halfband Interpolator', ... 'Second Halfband Interpolator', ... 'CIC Compensation Interpolator', ... 'CIC Interpolator: Quantized',... 'CIC Interpolator: Reference',... 'Overall Response: Quantized',... 'Overall Response: Reference'); DUCTestUtils.setPlotNameAndTitle('Lowpass + Halfband + CIC Comp + CIC Interpolator');

Для каждого интерполятора существует коэффициент усиления постоянного тока, определяемый его коэффициентом интерполяции. Для интерполятора CIC благодаря его реализации он имеет больший коэффициент усиления, чем другие фильтры. Использоватьgain чтобы получить коэффициент усиления интерполятора CIC. Суммарный коэффициент усиления составляет мощность два, поэтому его можно легко скорректировать аппаратно с помощью операции сдвига. Для целей анализа коррекция усиления представлена в MATLAB одним отводом dsp.FIRFilter Системный объект. Объединение цепочки фильтров и фильтра коррекции усиления в dsp.FilterCascade Системный объект.
cicGain = gain(cicFilt)
Gain = lowpassParams.InterpolationFactor * hbParams.InterpolationFactor * compParams.InterpolationFactor * cicParams.InterpolationFactor * cicGain;
GainCorr = dsp.FIRFilter('Numerator',1/Gain)
cicGain =
64
GainCorr =
dsp.FIRFilter with properties:
Structure: 'Direct form'
NumeratorSource: 'Property'
Numerator: 2.4414e-04
InitialConditions: 0
Use get to show all properties
Общая цепная реакция с коррекцией усиления и без нее.
ducPlots.overallResponse = fvtool(ducFilterChain,dsp.FilterCascade(ducFilterChain,GainCorr),... 'Fs',[FsIn*64,FsIn*64]); DUCTestUtils.setPlotNameAndTitle('Overall DUC Chain Response'); legend(... 'Overall Response: No Gain Correction (Quantized)',... 'Overall Response: No Gain Correction (Reference)',... 'Overall Response: Gain Correction (Quantized)',... 'Overall Response: Gain Correction (Reference)');

Частотная характеристика цепочки фильтров DUC с плавающей запятой теперь соответствует спецификации. Затем квантуйте каждый каскад фильтра для использования типов с фиксированной точкой и анализируйте их, чтобы подтвердить, что цепочка фильтров по-прежнему соответствует спецификации.
Квантование фильтра
В этом примере используются 16-битовые коэффициенты, что достаточно для соответствия спецификации. Использование менее 18 битов для коэффициентов минимизирует количество блоков DSP, необходимых для реализации FPGA. Вход в цепочку фильтров DUC представляет собой 16-битовые данные с 15 дробными битами. Выходы фильтра являются 18-битными значениями, что обеспечивает дополнительный запас и точность в промежуточных сигналах.
% First Lowpass Interpolator lowpassFilt.FullPrecisionOverride = false; lowpassFilt.CoefficientsDataType = 'Custom'; lowpassFilt.CustomCoefficientsDataType = numerictype([],16,15); lowpassFilt.ProductDataType = 'Full precision'; lowpassFilt.AccumulatorDataType = 'Full precision'; lowpassFilt.OutputDataType = 'Custom'; lowpassFilt.CustomOutputDataType = numerictype([],18,14); % Halfband hbFilt.FullPrecisionOverride = false; hbFilt.CoefficientsDataType = 'Custom'; hbFilt.CustomCoefficientsDataType = numerictype([],16,14); hbFilt.ProductDataType = 'Full precision'; hbFilt.AccumulatorDataType = 'Full precision'; hbFilt.OutputDataType = 'Custom'; hbFilt.CustomOutputDataType = numerictype([],18,14); % CIC Compensation Interpolator compFilt.FullPrecisionOverride = false; compFilt.CoefficientsDataType = 'Custom'; compFilt.CustomCoefficientsDataType = numerictype([],16,14); compFilt.ProductDataType = 'Full precision'; compFilt.AccumulatorDataType = 'Full precision'; compFilt.OutputDataType = 'Custom'; compFilt.CustomOutputDataType = numerictype([],18,14);
Для интерполятора CIC выберите Minimum section word lengths параметр типа данных с фиксированной точкой автоматически оптимизирует внутренние значения длины слова на основе выходной длины слова и других параметров CIC.
cicFilt.FixedPointDataType = 'Minimum section word lengths';
cicFilt.OutputWordLength = 18;
Сконфигурируйте параметры с фиксированной точкой для системных объектов коррекции усиления и на основе FIR. Объект, не показанный явным образом, использует значение по умолчанию RoundingMethod и OverflowAction настройкиFloor и Wrap соответственно).
% CIC Gain Correction GainCorr.FullPrecisionOverride = false; GainCorr.CoefficientsDataType = 'Custom'; GainCorr.CustomCoefficientsDataType = numerictype(fi(GainCorr.Numerator,1,16)); GainCorr.OutputDataType = 'Custom'; GainCorr.CustomOutputDataType = numerictype(1,18,14);
Анализ с фиксированной точкой
Проверка эффектов квантования с помощью fvtool. Фильтры могут анализироваться по отдельности или в каскаде. fvtool показывает квантованные и неквантованные (опорные) ответы, наложенные поверх. Например, показан эффект квантования первой ступени КИХ-фильтра.
ducPlots.quantizedFIR = fvtool(lowpassFilt,'Fs',lowpassParams.FsIn*2,'arithmetic','fixed'); DUCTestUtils.setPlotNameAndTitle('Quantized Lowpass Interpolator'); legend(... 'Lowpass Interpolator: Quantized', ... 'Lowpass Interpolator: Reference');

Переопределить ducFilterChain каскадный объект для включения свойств отдельных фильтров с фиксированной точкой. Затем использовать fvtool для анализа всей цепочки фильтров и подтверждения того, что квантованный DUC по-прежнему соответствует спецификации.
ducFilterChain = dsp.FilterCascade(lowpassFilt,hbFilt,compFilt,cicFilt,GainCorr); ducPlots.quantizedDUCResponse = fvtool(ducFilterChain,'Fs',FsIn*64,'Arithmetic','fixed'); DUCTestUtils.setPlotNameAndTitle('Quantized DUC Filter Chain'); legend(... 'DUC filter chain: Quantized', ... 'DUC filter chain: Reference');

Следующим шагом в процессе проектирования является внедрение DUC в Simulink с использованием блоков, совместимых с HDL Coder.
Конфигурация модели
Для настройки блоков и параметров модель использует переменные в рабочем пространстве MATLAB. Он использует уже определенные переменные цепочки фильтров. Затем определите параметры осциллятора с числовым управлением (NCO) и входной сигнал.
Вход в DUC поступает от ducIn. На данный момент присвойте фиктивное значение ducIn чтобы модель могла вычислять свои типы данных. Во время испытаний, ducIn обеспечивает входные данные для модели.
ducIn = 0; %#ok<NASGU>
Структура модели
Отображается верхний уровень модели DUC Simulink. Импорт модели ducIn из рабочей области MATLAB с помощью блока «Сигнал из рабочей области» преобразует его в 16 бит и затем применяет к DUC. Код HDL может быть сгенерирован из подсистемы HDL_DUC.
modelName = 'DUCforLTEHDL'; open_system(modelName); set_param(modelName, 'Open','on');

Реализация DUC выполняется в подсистеме HDL_DUC.
set_param([modelName '/HDL_DUC'],'Open','on');

Параметры блока фильтра
Все фильтры сконфигурированы для наследования свойств соответствующих системных объектов. Каждый блок также имеет набор свойств HDL, которые используются для оптимизации результирующего кода HDL. В частности, блоки компенсации нижних частот, полуполосы и CIC работают со скоростями дискретизации, которые ниже, чем тактовая частота (Fclk), на коэффициенты 32, 16 и 8 соответственно. Эти блоки используют методы сериализации (совместного использования ресурсов) для минимизации использования аппаратных ресурсов. Например, вход блока интерполяции нижних частот дискретизируется при Fclk/32, поэтому для обработки каждой входной выборки доступно 32 тактовых цикла. Когда код HDL генерируется для DUC, кодер HDL перечисляет все SerialPartition опции, доступные для блоков фильтров, на основе их коэффициентов. Наибольшее значение в SerialPartition вектор представляет коэффициент разделения фильтра. В этом примере кодер HDL перечисляет минимальное использование множителя, достигаемое при SerialPartition блока интерполяции нижних частот имеет значение 17, так что он использует 17 доступных ему тактов. Дополнительные сведения см. в разделах Кодер HDL и Фильтры HDL.

Коррекция усиления
Коррекция усиления делит выходной сигнал на 4096, что эквивалентно сдвигу вправо на 12 битов. Количество битов как на входе, так и на выходе коррекции усиления равно 18 битам, поэтому этот сдвиг реализуется простым переосмыслением типа данных, как показано.
set_param([modelName '/HDL_DUC/Gain Correction'],'Open','on');

Параметры блока NCO
Блок NCO HDL Optimized генерирует сложный фазор на несущей частоте. Этот сигнал поступает в смеситель, который умножает его на выходной сигнал. Выходной сигнал смесителя отбирается с частотой 122,88 мс. Укажите требуемое разрешение по частоте. Вычисляют количество битов-накопителей, необходимое для достижения требуемого разрешения, и определяют количество квантованных битов-накопителей. Квантованный выходной сигнал накопителя используется для обращения к таблице синусоидального поиска внутри NCO. Также вычислите приращение фазы, необходимое для генерации заданной несущей частоты. Фазовое сглаживание применяется к тем битам накопителя, которые удаляются во время квантования. Эти параметры используются для конфигурирования блока NCO.
nco.Fd = 1; nco.AccWL = nextpow2(FsIn*64/nco.Fd) + 1; nco.QuantAccWL = 12; nco.PhaseInc = round((Fc * 2^nco.AccWL)/(FsIn*64)); nco.NumDitherBits = nco.AccWL - nco.QuantAccWL;
Блок NCO конфигурируется с параметрами, определенными в nco структура. Отображаются обе вкладки диалогового окна параметров блока.

Для проверки DUC 40kHz синусоида проходит через DUC и модулируется на несущей частоте. Затем модулированный сигнал демодулируют и повторно дискретизируют на конце приемника. Затем измерьте паразитный свободный динамический диапазон (SFDR) результирующего тонального сигнала и SFDR выхода NCO.
% Initialize random seed before executing any simulations. rng(0); % Generate a 40kHz test tone ducIn = DUCTestUtils.GenerateTestTone(40e3); % Up convert the test signal with the floating point DUC. ducTx = DUCTestUtils.UpConvert(ducIn,FsIn*64,Fc,ducFilterChain); release(ducFilterChain); % Down convert the output of DUC. ducRx = DUCTestUtils.DownConvert(ducTx,FsIn*64,Fc); % Up convert the test signal by executing the fixed-point Simulink model with the sim function. simOut = sim(modelName); % Downconvert the output of DUC. simTx = simOut.ducOut; simRx = DUCTestUtils.DownConvert(simTx,FsIn*64,Fc); % Measure the SFDR of the NCO, floating point DUC and the fixed-point DUC outputs. results.sfdrNCO = sfdr(real(simOut.ncoOut),FsIn); results.sfdrFloatDUC = sfdr(real(ducRx),FsIn); results.sfdrFixedDUC = sfdr(real(simRx),FsIn); disp('Spurious Free Dynamic Range (SFDR) Measurements'); disp([' Floating point DUC SFDR: ',num2str(results.sfdrFloatDUC) ' dB']); disp([' Fixed-point NCO SFDR: ',num2str(results.sfdrNCO) ' dB']); disp([' Fixed-point DUC SFDR: ',num2str(results.sfdrFixedDUC) ' dB']); fprintf(newline); % Plot the SFDR of the NCO and fixed-point DUC outputs. ducPlots.ncoOutSDFR = figure; sfdr(real(simOut.ncoOut),FsIn); DUCTestUtils.setPlotNameAndTitle(['NCO Out ' get(gca,'Title').String]); ducPlots.ducOutSDFR = figure; sfdr(real(simRx),FsIn); DUCTestUtils.setPlotNameAndTitle(['Fixed-Point DUC Out ' get(gca,'Title').String]);
Spurious Free Dynamic Range (SFDR) Measurements Floating point DUC SFDR: 287.7185 dB Fixed-point NCO SFDR: 86.0718 dB Fixed-point DUC SFDR: 92.8885 dB


Тестовый сигнал LTE используется для выполнения более строгого тестирования DUC. LTE Toolbox™ используется для генерации стандартного совместимого сигнала LTE. Сигнал преобразуется с повышением частоты с помощью DUC и затем модулируется на несущей. Панель инструментов LTE используется для измерения величины вектора ошибок (EVM) результирующих сигналов.
% Only execute this test if an LTE Toolbox license is present. if license('test','LTE_Toolbox') % Generate a LTE test signal with LTE Toolbox [ducIn, sigInfo] = DUCTestUtils.GenerateLTETestSignal(); % Upconvert with a MATLAB Floating Point Model and modulate onto carrier ducTx = DUCTestUtils.UpConvert(ducIn,FsIn*64,Fc,ducFilterChain); release(ducFilterChain); % Add noise to transmit signal ducTxAddNoise = DUCTestUtils.AddNoise(ducTx); % Downconvert received signal ducRx = DUCTestUtils.DownConvert(ducTxAddNoise,FsIn*64,Fc); % Upconvert using Simulink model simOut = sim(modelName); % Add noise to transmit signal simTx = simOut.ducOut; simTxAddNoise = DUCTestUtils.AddNoise(simTx); % Downconvert received signal simRx = DUCTestUtils.DownConvert(simTxAddNoise,FsIn*64,Fc); results.evmFloat = DUCTestUtils.MeasureEVM(sigInfo,ducRx); results.evmFixed = DUCTestUtils.MeasureEVM(sigInfo,simRx); disp('LTE Error Vector Magnitude (EVM) Measurements'); disp([' Floating point DUC RMS EVM: ' num2str(results.evmFloat.RMS*100,3) '%']); disp([' Floating point DUC Peak EVM: ' num2str(results.evmFloat.Peak*100,3) '%']); disp([' Fixed-point DUC RMS EVM: ' num2str(results.evmFixed.RMS*100,3) '%']); disp([' Fixed-point DUC Peak EVM: ' num2str(results.evmFixed.Peak*100,3) '%']); fprintf(newline); end
LTE Error Vector Magnitude (EVM) Measurements Floating point DUC RMS EVM: 0.782% Floating point DUC Peak EVM: 2.42% Fixed-point DUC RMS EVM: 0.755% Fixed-point DUC Peak EVM: 2.76%
Для создания кода HDL в этом примере необходимо иметь лицензию HDL Coder™. Используйте makehdl и makehdltb команды для генерации кода HDL и средства тестирования HDL для подсистемы HDL_DUC. DUC синтезировали на оценочной плате Xilinx ® Zynq ® -7000 ZC706. Результаты использования ресурсов post place и route показаны в таблице. Конструкция отвечала таймингу с тактовой частотой 158 МГц.
T = table(... categorical({'LUT'; 'LUTRAM'; 'FF'; 'BRAM'; 'DSP'}),... categorical({'3497'; '370'; '4871'; '0.5'; '10'}),... 'VariableNames',{'Resource','Usage'})
T =
5x2 table
Resource Usage
________ _____
LUT 3497
LUTRAM 370
FF 4871
BRAM 0.5
DSP 10