В этом примере показано, как спроектировать цифровой преобразователь частоты (DUC) для приложений радиосвязи, таких как LTE, и сгенерировать HDL-код с HDL- Coder™.
DUC широко используются в цифровых передатчиках связи для преобразования сгенерированного модулированного сигнала в сигналы радиочастоты (RF) или средней частоты (IF). Операция DUC увеличивает частоту дискретизации сигнала и смещает его на более высокую частоту, чтобы облегчить последующие этапы обработки. Представленный здесь DUC выполняет преобразование частоты дискретизации с помощью 4-ступенчатого фильтра цепи с последующим комплексным преобразованием частоты. Пример начинается с разработки DUC с функциями DSP System Toolbox™ в плавающей точке. Затем каждый этап преобразуется в фиксированную точку, а затем используется в модели Simulink ®, которая генерирует синтезируемый HDL-код. Два тестовых сигнала используются, чтобы продемонстрировать и проверить операцию DUC:
Синусоида, модулированная на несущей IF на 32 МГц.
Сигнал нисходящего канала LTE с шириной полосы 1,4 МГц, модулируемый на несущей IF на 32 МГц.
Пример измеряет качество сигнала путем преобразования вниз выходных данных DUC с плавающей и фиксированной точками и сравнивает эти два. Наконец, представлены результаты реализации ПЛИС.
Примечание: Этот пример использует DUCTestUtils
, класс helper, содержащий функции для генерации стимула и анализа выхода DUC. Смотрите DUCTestUtils.m
файл для получения дополнительной информации.
DUC состоит из интерполирующей цепи фильтров, Численно Управляемого Генератора (NCO) и смесителя. Фильтрующая цепь состоит из lowpass интерполятора, полуполосы интерполятора, CIC компенсационного интерполятора ( конечной импульсной характеристики), CIC интерполятора и коррекции усиления.
Общая реакция цепи фильтров эквивалентна реакции одного интерполяционного фильтра с той же спецификацией, однако разделение фильтра на несколько этапов интерполяции приводит к более эффективному проекту, которая использует меньше аппаратных ресурсов.
Первый интерполятор lowpass реализует точное Fpass
и Fstop
характеристики DUC. Полуполоса является промежуточным интерполятором. Из-за более низких частот дискретизации фильтры около начала цепи могут оптимизировать использование ресурсов путем совместного использования множителей. Интерполятор компенсации CIC улучшает спектральный ответ путем компенсации более позднего падения CIC при интерполяции на два. Интерполятор CIC обеспечивает большой коэффициент интерполяции, что заставляет цепь фильтров достигать требований к повышенной дискретизации. Ниже приведен блок схема DUC.
Вход DUC дискретизируется на уровне 1,92 Msps, в то время как выходная частота выборки составляет 122,88 Msps. Поэтому общий коэффициент интерполяции равен 64. 1.92 Msps является типовой частотой дискретизации, используемой приемниками LTE для выполнения поиска камеры и восстановления MIB (Master Information Block). Поэтому фильтры DUC были разработаны, чтобы соответствовать этому приложению. DUC оптимизирован для работы с тактовой частотой 122,88 МГц.
В этом разделе объясняется, как спроектировать DUC с использованием операций с плавающей точкой и функций создания фильтра в MATLAB ®. Объект DUC позволяет вам задать несколько характеристик, которые задают ответ каскада для четырех фильтров, включая частоты полосы пропускания и полосы остановки, неравномерность в полосе пропускания и затухание в полосе задерживания.
Параметры DUC
Желаемая характеристика DUC определяется частотой дискретизации на входе, частотой несущей и характеристиками фильтра. Изменение этой желательной характеристики фильтра может потребовать изменений в свойствах HDL-блоков блоков фильтра в модели Simulink. Свойства блоков обсуждаются ниже в этом примере.
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
Первый Lowpass интерполятор
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
отображение амплитудной характеристики lowpass без коррекции усиления.
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
Визуализируйте величину ответ полуполосы Interpolation.
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-фильтра имеет значительное падение в пределах области полосы пропускания, поэтому для выравнивания полосы пропускания используется фильтр компенсации падения на основе КИХ. Компенсатор сконфигурирован с теми же параметрами, что и интерполятор CIC. Этот фильтр также реализует интерполяцию в два раза, поэтому заданы его полосно-ограничительные характеристики. Задайте требования к фильтру и используйте design
функция для возврата Системного объекта фильтра с этими характеристиками.
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;
Сконфигурируйте параметры с фиксированной точкой объектов системы с коррекцией усиления и КИХ-базой. Хотя объект не показан явным образом, он использует значение по умолчанию 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 с помощью блока Signal From Workspace преобразует его в 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-кода. В частности, блоки lowpass, Halfband и CIC Composition работают со частотами дискретизации, которые ниже тактовой частоты (Fclk) на коэффициенты 32, 16 и 8 соответственно. Эти блоки используют методы сериализации (совместного использования ресурсов), чтобы минимизировать использование аппаратных ресурсов. Для примера вход блока Lowpass Interpolation дискретизируется на Fclk/32, поэтому для обработки каждой входной выборки доступны 32 тактовых импульса. Когда для DUC генерируется HDL-код, HDL Coder перечисляет все SerialPartition
опции, доступные для блоков фильтра, основанные на их коэффициентах. Самое большое значение в SerialPartition
вектор представляет коэффициент совместного использования фильтра. В этом примере HDL Coder приводит минимальное использование множителя, когда SerialPartition
блока Lowpass Interpolation установлено в 17
, так что он использует 17 тактов, доступных ему. Для получения дополнительной информации см. SerialPartition и HDL Filter Architectures.
Коррекция усиления
Коррекция усиления делит выход на 4096, что эквивалентно перемене вправо на 12 бит. Количество бит как на входе, так и на выходе коррекции усиления составляет 18 битов, поэтому этот сдвиг реализован простым переосмыслением типа данных, как показано.
set_param([modelName '/HDL_DUC/Gain Correction'],'Open','on');
Параметры блоков NCO
Блок NCO HDL Optimized генерирует комплексный фазор на несущей частоте. Этот сигнал поступает на смеситель, который умножает его на выход сигнал. Выходные выходы смесителя отбираются при 122,88 Msps. Задайте желаемое разрешение частоты. Вычислите количество двоичных разрядов аккумулятора, необходимых для достижения желаемого разрешения, и определите количество квантованных двоичных разрядов аккумулятора. Квантованный выход аккумулятора используется для обращения к интерполяционной таблице синуса внутри NCO. Также вычислите шаг фазы, необходимый для генерации заданной несущей частоты. Фаза dither применяется к тем двоичным разрядам аккумулятора, которые удаляются во время квантования. Эти параметры используются для настройки блока 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 Toolbox используется для измерения величины вектора ошибок (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 был синтезирован на доске оценки ZC706 Xilinx ® Zynq ® -7000. Результаты использования ресурсов по месту и маршруту показаны в таблице. Тайминг проекта встретил с тактовой частотой 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