Реализация HDL цифрового понижающего преобразователя для LTE

В этом примере показано, как спроектировать цифровой понижающий преобразователь (DDC) для приложений радиосвязи, таких как LTE и сгенерировать HDL-код с HDL Coder™.

Введение

DDCs широко используются в приемниках цифровой связи, чтобы преобразовать Радиочастоту (RF) или сигналы Промежуточной частоты (IF) к основной полосе. Операция DDC переключает сигнал к более низкой частоте и уменьшает ее частоту дискретизации, чтобы упростить последующие этапы обработки. DDC, представленный здесь, выполняет комплексный перевод частоты, сопровождаемый преобразованием частоты дискретизации с помощью 4-этапной цепи фильтра. Пример запускается путем разработки DDC с функциями DSP System Toolbox™ в плавающей точке. Каждый этап затем преобразуется в фиксированную точку, и затем используется в модели Simulink®, которая генерирует синтезируемый HDL-код. Два тестовых сигнала используются, чтобы продемонстрировать и проверить операцию DDC:

  1. Синусоида модулируется на поставщика услуг IF на 32 МГц.

  2. Сигнал нисходящего канала LTE с пропускной способностью 1,4 МГц, модулируемых на поставщика услуг IF на 32 МГц.

Пример измеряет качество сигнала при выходе и фиксированной точки с плавающей точкой DDCs и сравнивает два. Наконец, результаты реализации FPGA представлены.

Примечание: Этот пример использует DDCTestUtils, класс помощника, содержащий функции для генерации стимула и анализа DDC выход. Смотрите DDCTestUtils.m файл для большего количества информации.

Структура DDC

DDC состоит из Генератора с программным управлением (NCO), микшера и цепи фильтра десятикратного уменьшения. Цепь фильтра состоит из CIC decimator, коррекции усиления CIC, компенсация CIC decimator (КИХ), полуполоса FIR decimator и итоговый КИХ decimator. Полный ответ цепи фильтра эквивалентен тому из одного децимирующего фильтра с той же спецификацией, однако, разделяя фильтр в несколько результатов этапов децимации в более эффективном проекте, который использует меньше аппаратных ресурсов. CIC decimator обеспечивает большой начальный фактор децимации, который позволяет последующим фильтрам работать на более низких уровнях. Компенсация CIC decimator улучшает спектральный ответ путем компенсации свисания CIC при десятикратном уменьшении на два. Полуполоса является промежуточным звеном decimator, в то время как финал decimator реализует точный Fpass и Fstop характеристики DDC. Из-за более низких частот дискретизации, фильтры ближе конец цепи может оптимизировать использование ресурса путем совместного использования множителей. Блок-схему DDC показывают ниже.

Вход к DDC производится в 122.88 членах Шотландского парламента, в то время как выходная частота дискретизации является 1.92 членами Шотландского парламента. Поэтому полный фактор децимации равняется 64. 1.92 Члены Шотландского парламента являются типичной частотой дискретизации, используемой приемниками LTE, чтобы выполнить поиск ячейки и MIB (Основной Блок информации) восстановление. Фильтры DDC были поэтому спроектированы, чтобы удовлетворить этому приложению. DDC оптимизирован, чтобы запуститься на тактовой частоте 122,88 МГц.

Проект DDC

Этот раздел объясняет, как спроектировать DDC с помощью операций с плавающей точкой и функций создания фильтра в MATLAB®.

Параметры DDC

Желаемый ответ DDC задан входной частотой дискретизации, несущей частотой и характеристиками фильтра. Изменение этого желаемого ответа фильтра может потребовать изменений в HDL Block Properties блоков фильтра в модели Simulink. HDL Block Properties обсуждена позже в примере.

FsIn  = 122.88e6;   % Sampling rate at input to DDC
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

Остальная часть этого раздела показывает, как спроектировать каждый фильтр в свою очередь.

Каскадная расческа интегратора (CIC) Decimator

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

cicParams.DecimationFactor  = 8;
cicParams.DifferentialDelay = 1;
cicParams.NumSections       = 3;
cicParams.FsOut             = FsIn/cicParams.DecimationFactor;

cicFilt = dsp.CICDecimator(cicParams.DecimationFactor,...
    cicParams.DifferentialDelay,cicParams.NumSections) %#ok<*NOPTS>

cicGain = gain(cicFilt)
cicFilt = 

  dsp.CICDecimator with properties:

      DecimationFactor: 8
     DifferentialDelay: 1
           NumSections: 3
    FixedPointDataType: 'Full precision'


cicGain =

   512

Усиление CIC является степенью двойки, поэтому оно может быть легко откорректировано для в оборудовании с операцией сдвига. В аналитических целях коррекция усиления представлена в MATLAB dsp.FIRFilter с одним касанием Системный объект.

cicGainCorr = dsp.FIRFilter('Numerator',1/cicGain)
cicGainCorr = 

  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: 0.0020
    InitialConditions: 0

  Use get to show all properties

Используйте fvtool отобразить ответ величины CIC-фильтра с и без коррекции усиления. Для анализа, комбинируют CIC-фильтр, и коррекция усиления фильтруют в dsp.FilterCascade Системный объект. CIC-фильтры всегда используют вычисления с фиксированной точкой внутренне, таким образом, fvtool графики и квантованные и неквантованные ответы.

ddcPlots.cicDecim = fvtool(...
    cicFilt,...
    dsp.FilterCascade(cicFilt,cicGainCorr), ...
    'Fs',[FsIn,FsIn]);

DDCTestUtils.setPlotNameAndTitle('CIC Decimator');

legend(...
    'CIC No Correction: Quantized', ...
    'CIC No Correction: Reference', ...
    'CIC With Gain Correction: Quantized', ...
    'CIC With gain correction: Reference');

Фильтр компенсации свисания CIC

Ответ величины CIC-фильтра имеет значительное свисание в области полосы пропускания, поэтому основанный на КИХ фильтр компенсации свисания используется, чтобы сгладить ответ полосы пропускания. Компенсатор свисания сконфигурирован теми же параметрами как CIC decimator. Этот фильтр также реализует децимацию на коэффициент два, поэтому ее bandlimiting характеристики заданы. Задайте требования фильтра и затем используйте design функционируйте, чтобы возвратить Системный объект фильтра с теми характеристиками.

compParams.R     = 2;                            % CIC compensation decimation factor
compParams.Fpass = Fstop;                        % CIC comp passband frequency
compParams.FsOut = cicParams.FsOut/compParams.R; % New sampling rate
compParams.Fstop = compParams.FsOut - Fstop;     % CIC comp stopband frequency
compParams.Ap    = Ap;                           % Same Ap as overall filter
compParams.Ast   = Ast;                          % Same Ast as overall filter

compSpec = fdesign.decimator(compParams.R,'ciccomp',...
    cicParams.DifferentialDelay,...
    cicParams.NumSections,...
    cicParams.DecimationFactor,...
    'Fp,Fst,Ap,Ast',...
    compParams.Fpass,compParams.Fstop,compParams.Ap,compParams.Ast,...
    cicParams.FsOut);


compFilt = design(compSpec,'SystemObject',true)
compFilt = 

  dsp.FIRDecimator with properties:

     NumeratorSource: 'Property'
           Numerator: [-0.0398 -0.0126 0.2901 0.5258 0.2901 -0.0126 -0.0398]
    DecimationFactor: 2
           Structure: 'Direct form'

  Use get to show all properties

Постройте объединенный ответ CIC-фильтра (с коррекцией усиления) и компенсация свисания.

ddcPlots.cicComp = fvtool(...
    dsp.FilterCascade(cicFilt,cicGainCorr,compFilt), ...
    'Fs',FsIn,'Legend','off');

DDCTestUtils.setPlotNameAndTitle('CIC Decim + Droop Comp');

Полуполоса Decimator

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

hbParams.FsOut               = compParams.FsOut/2;
hbParams.TransitionWidth     = hbParams.FsOut - 2*Fstop;
hbParams.StopbandAttenuation = Ast;

hbSpec = fdesign.decimator(2,'halfband',...
    'Tw,Ast',...
    hbParams.TransitionWidth, ...
    hbParams.StopbandAttenuation,...
    compParams.FsOut);

hbFilt = design(hbSpec,'SystemObject',true)
hbFilt = 

  dsp.FIRDecimator with properties:

     NumeratorSource: 'Property'
           Numerator: [1x11 double]
    DecimationFactor: 2
           Structure: 'Direct form'

  Use get to show all properties

Постройте ответ DDC до полуленточного фильтра выход.

ddcPlots.halfbandFIR = fvtool(...
    dsp.FilterCascade(cicFilt,cicGainCorr,compFilt,hbFilt), ...
    'Fs',FsIn,'Legend','off');

DDCTestUtils.setPlotNameAndTitle('CIC Decim + Droop Comp + HB FIR');

Итоговый КИХ Decimator

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

% Add 3dB of headroom to the stopband attenuation so that the DDC still meets the
% spec after fixed-point quantization. This value was determined by trial and error
% with |fvtool|.
finalSpec = fdesign.decimator(2,'lowpass',...
    'Fp,Fst,Ap,Ast',Fpass,Fstop,Ap,Ast+3,hbParams.FsOut);

finalFilt = design(finalSpec,'equiripple','SystemObject',true)
finalFilt = 

  dsp.FIRDecimator with properties:

     NumeratorSource: 'Property'
           Numerator: [1x70 double]
    DecimationFactor: 2
           Structure: 'Direct form'

  Use get to show all properties

Визуализируйте полный ответ величины DDC.

ddcFilterChain           = dsp.FilterCascade(cicFilt,cicGainCorr,compFilt,hbFilt,finalFilt);
ddcPlots.overallResponse = fvtool(ddcFilterChain,'Fs',FsIn,'Legend','off');
DDCTestUtils.setPlotNameAndTitle('Overall DDC Filter Chain');

Преобразование фиксированной точки

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

Отфильтруйте квантование

Этот пример использует 16-битные коэффициенты, который достаточен, чтобы выполнить спецификации. Используя меньше чем 18 битов для коэффициентов минимизирует количество блоков DSP, требуемых для реализации FPGA. Вход к цепи фильтра DDC является 16-битными данными с 15 дробными битами. Выходные параметры фильтра являются 18-битными значениями, который обеспечивает дополнительную высоту и точность в промежуточных сигналах.

Для CIC decimator, выбор Minimum section word lengths опция типа данных с фиксированной точкой автоматически оптимизирует внутренний wordlengths на основе выхода wordlength и других параметров CIC.

cicFilt.FixedPointDataType = 'Minimum section word lengths';
cicFilt.OutputWordLength   = 18;

Сконфигурируйте параметры фиксированной точки коррекции усиления и основанных на КИХ Системных объектов. В то время как не показанный явным образом, объект использует RoundingMethod по умолчанию и OverflowAction настройки (Floor и Wrap соответственно).

% CIC Gain Correction
cicGainCorr.FullPrecisionOverride      = false;
cicGainCorr.CoefficientsDataType       = 'Custom';
cicGainCorr.CustomCoefficientsDataType = numerictype(fi(cicGainCorr.Numerator,1,16));
cicGainCorr.OutputDataType             = 'Custom';
cicGainCorr.CustomOutputDataType       = numerictype(1,18,16);

% CIC Droop Compensation
compFilt.FullPrecisionOverride      = false;
compFilt.CoefficientsDataType       = 'Custom';
compFilt.CustomCoefficientsDataType = numerictype([],16,15);
compFilt.ProductDataType            = 'Full precision';
compFilt.AccumulatorDataType        = 'Full precision';
compFilt.OutputDataType             = 'Custom';
compFilt.CustomOutputDataType       = numerictype([],18,16);

% Halfband
hbFilt.FullPrecisionOverride      = false;
hbFilt.CoefficientsDataType       = 'Custom';
hbFilt.CustomCoefficientsDataType = numerictype([],16,15);
hbFilt.ProductDataType            = 'Full precision';
hbFilt.AccumulatorDataType        = 'Full precision';
hbFilt.OutputDataType             = 'Custom';
hbFilt.CustomOutputDataType       = numerictype([],18,16);

% FIR
finalFilt.FullPrecisionOverride      = false;
finalFilt.CoefficientsDataType       = 'Custom';
finalFilt.CustomCoefficientsDataType = numerictype([],16,15);
finalFilt.ProductDataType            = 'Full precision';
finalFilt.AccumulatorDataType        = 'Full precision';
finalFilt.OutputDataType             = 'Custom';
finalFilt.CustomOutputDataType       = numerictype([],18,16);

Анализ фиксированной точки

Смотрите эффекты квантования с fvtool. Фильтры могут анализироваться индивидуально, или в каскаде. fvtool показывает квантованные и неквантованные (ссылочные) ответы overlayed. Например, эффект квантования итогового КИХ-этапа фильтра показывают.

ddcPlots.quantizedFIR = fvtool(finalFilt,'Fs',hbParams.FsOut,'arithmetic','fixed');
DDCTestUtils.setPlotNameAndTitle('Quantized Final Filter');

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

ddcFilterChain = dsp.FilterCascade(cicFilt,cicGainCorr,compFilt,hbFilt,finalFilt);
ddcPlots.quantizedDDCResponse = fvtool(ddcFilterChain,'Fs',FsIn,'Arithmetic','fixed');
DDCTestUtils.setPlotNameAndTitle('Quantized DDC Filter Chain');
legend(...
    'DDC filter chain: Quantized', ...
    'DDC filter chain: Reference');

Оптимизированная HDL модель Simulink

Следующий шаг в процессе проектирования должен реализовать DDC в Simulink с помощью HDL Coder совместимые блоки.

Настройка модели

Модель использует переменные в рабочем пространстве MATLAB, чтобы сконфигурировать блоки и настройки. Это использует переменные цепи фильтра, уже заданные. Затем задайте параметры Генератора с программным управлением (NCO) и входной сигнал. Эти параметры используются, чтобы сконфигурировать блок NCO.

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

nco.Fd = 1;
nco.AccWL          = nextpow2(FsIn/nco.Fd) + 1;
nco.QuantAccWL     = 12;
nco.PhaseInc       = round((-Fc * 2^nco.AccWL)/FsIn);
nco.NumDitherBits  = nco.AccWL - nco.QuantAccWL;

Вход к DDC прибывает из ddcIn. На данный момент присвойте фиктивное значение для ddcIn так, чтобы модель могла вычислить свои типы данных. Во время тестирования, ddcIn предоставляет входные данные модели.

ddcIn = 0; %#ok<NASGU>

Структура модели

Верхний уровень модели DDC Simulink показывают. Модель импортирует ddcIn от рабочего пространства MATLAB с помощью блока Signal From Workspace, преобразует его в 16 битов и затем применяет его к DDC. HDL-код может быть сгенерирован от подсистемы HDL_DDC.

modelName = 'DDCHDLImplementation';
open_system(modelName);
set_param(modelName,'SimulationCommand','Update');
set_param(modelName, 'Open','on');

Реализация DDC в подсистеме HDL_DDC. Блок NCO HDL Optimized генерирует комплексный фазовращатель в несущей частоте. Этот сигнал переходит к микшеру, который умножает его с входным сигналом. Выход микшера затем питается цепь фильтра, где это подкошено 1.92 членам Шотландского парламента.

set_param([modelName '/HDL_DDC'],'Open','on');

Параметры блоков NCO

Блок NCO сконфигурирован параметрами, заданными в nco структура. Обе вкладки диалогового окна параметра блока показывают.

Децимация CIC и коррекция усиления

Первый этап фильтра является Каскадной расческой интегратора (CIC) Decimator, реализованный с блоком CIC Decimation HDL Optimized. Параметры блоков установлены в cicParams значения структуры. Коррекция усиления реализована путем выбора параметра коррекции Усиления.

Отфильтруйте параметры блоков

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

Компенсация CIC, Децимация Полуполосы и Итоговые Децимирующие фильтры каждый реализованы блоком MATLAB function и двумя Дискретными КИХ-HDL Фильтра Оптимизированные блоки в многофазном разложении. Многофазное разложение реализует функцию преобразования$H(z) = H_{0}(z) + z^{-1}H_{1}(z)$, где$H(z) = a_{0} + a_{1}z^{-1} + a_{2}z^{-2} + a_{3}z^{-3} + ...$,$H_{0}(z) = a_{0} + a_{2}z^{-2} + ...$ и$H_{1}(z) = a_{1} + a_{3}z^{-3} + ...$. Многофазное разложение является эффективным с точки зрения ресурсов способом реализовать децимирующие фильтры. Блок MATLAB function содержит два входа, производит каждые два цикла и передает их одновременно параллельной паре Дискретного КИХ-HDL Фильтра Оптимизированные блоки$H_{0}(z)$ и$H_{1}(z)$. Более низкий подфильтр$H_{1}(z)$ и верхний подфильтр$H_{0}(z)$ каждый содержит половину коэффициентов фильтра и процесса половина входных данных.

Например, подсистема Децимации Компенсации CIC реализует 7- содействующий фильтр. Верхний подфильтр$H_{0}(z)$, имеет 4 коэффициенты и более низкий подфильтр$H_{1}(z)$, имеет 3 коэффициенты. Каждый фильтр получает выборку и генерирует выход каждый 16 циклы. Поскольку каждый фильтр обрабатывает одну выборку каждые 16 циклов, блоки подфильтра могут совместно использовать аппаратные ресурсы вовремя. Чтобы оптимизировать аппаратные ресурсы таким образом, оба из подфильтров имеют набор параметров структуры Фильтра к Partly serial systolic.

Схема показывает подсистему Децимации Компенсации CIC. Децимация Полуполосы и Итоговые подсистемы Децимации используют ту же структуру.

Все блоки фильтра сконфигурированы параметрами, заданными в их соответствующих структурах. Например, изображение показывает параметры блоков для блока CIC Compensation Decimation. Количество параметра циклов является минимальным количеством циклов между входными выборками. Вход с блоком CIC Compensation Decimation производится в cicParams.DecimationFactor*compParams.R, который является 16 циклы для обоих подфильтров.

Последовательная реализация фильтра снова использует множители вовремя по количеству тактов, которые вы задаете. Без этой оптимизации Децимирующий фильтр Компенсации CIC с комплексными входными данными использовал бы 14 множителей. После оптимизации, каждого из$H_{0}(z)$ и$H_{1}(z)$ использования 2 множители в общей сложности для 4. Точно так же Децимация Полуполосы и Итоговые подсистемы Децимации используют 4 множители каждый.

Синусоида на тесте поставщика услуг и верификации

Чтобы протестировать DDC, модулируйте синусоиду на 40 кГц на несущую частоту и передайте его через DDC. Затем измерьте Свободный от паразитных составляющих динамический диапазон (SFDR) получившегося тона и SFDR NCO выход.

% Initialize random seed before executing any simulations.
rng(0);

% Generate a 40kHz test tone, modulated onto the carrier.
ddcIn = DDCTestUtils.GenerateTestTone(40e3,Fc);

% Demodulate the test signal with the floating point DDC.
ddcOut = DDCTestUtils.DownConvert(ddcIn,FsIn,Fc,ddcFilterChain);
release(ddcFilterChain);

% Demodulate the test signal by executing the modified Simulink model with the sim function.
out = sim(modelName);

% Measure the SFDR of the NCO, floating point DDC and the fixed-point DDC outputs.
results.sfdrNCO      = sfdr(real(out.ncoOut),FsIn/64);
results.sfdrFloatDDC = sfdr(real(ddcOut),FsIn/64);
results.sfdrFixedDDC = sfdr(real(out.ddcOut),FsIn/64);

disp('Spurious Free Dynamic Range (SFDR) Measurements');
disp(['   Floating point DDC SFDR: ',num2str(results.sfdrFloatDDC) ' dB']);
disp(['   Fixed-point NCO SFDR: ',num2str(results.sfdrNCO) ' dB']);
disp(['   Optimized Fixed-point DDC SFDR: ',num2str(results.sfdrFixedDDC) ' dB']);
fprintf(newline);

% Plot the SFDR of the NCO and fixed-point DDC outputs.
ddcPlots.ncoOutSDFR = figure;
sfdr(real(out.ncoOut),FsIn/64);
DDCTestUtils.setPlotNameAndTitle(['NCO Out ' get(gca,'Title').String]);

ddcPlots.OptddcOutSFDR = figure;
sfdr(real(out.ddcOut),FsIn/64);
DDCTestUtils.setPlotNameAndTitle(['Optimized Fixed-Point DDC Out ' get(gca,'Title').String]);
Spurious Free Dynamic Range (SFDR) Measurements
   Floating point DDC SFDR: 291.3483 dB
   Fixed-point NCO SFDR: 83.0249 dB
   Optimized Fixed-point DDC SFDR: 108.8419 dB

Тест сигнала LTE

rng(0);

if license('test','LTE_Toolbox')

    % Generate a modulated LTE test signal with LTE Toolbox
    [ddcIn, sigInfo] = DDCTestUtils.GenerateLTETestSignal(Fc);

    % Downconvert with a MATLAB Floating Point Model
    ddcOut = DDCTestUtils.DownConvert(ddcIn,FsIn,Fc,ddcFilterChain);
    release(ddcFilterChain);

    % Downconvert using Simulink model
    ddcIn=[ddcIn;zeros(320,1)]; % Adding zeros to make up propagation latency to output complete result
    out = sim(modelName);


    results.evmFloat = DDCTestUtils.MeasureEVM(sigInfo,ddcOut);
    results.evmFixed = DDCTestUtils.MeasureEVM(sigInfo,out.ddcOut);


    disp('LTE Error Vector Magnitude (EVM) Measurements');
    disp(['   Floating point DDC RMS EVM: '  num2str(results.evmFloat.RMS*100,3) '%']);
    disp(['   Floating point DDC Peak EVM: ' num2str(results.evmFloat.Peak*100,3) '%']);
    disp(['   Fixed-point HDL Optimized DDC RMS EVM: '     num2str(results.evmFixed.RMS*100,3) '%']);
    disp(['   Fixed-point HDL Optimized DDC Peak EVM: '    num2str(results.evmFixed.Peak*100,3) '%']);
    fprintf(newline);

end
LTE Error Vector Magnitude (EVM) Measurements
   Floating point DDC RMS EVM: 0.633%
   Floating point DDC Peak EVM: 2.44%
   Fixed-point HDL Optimized DDC RMS EVM: 0.731%
   Fixed-point HDL Optimized DDC Peak EVM: 2.69%

Генерация HDL-кода и реализация FPGA

Чтобы сгенерировать HDL-код для этого примера, у вас должен быть продукт HDL Coder™. Используйте makehdl и makehdltb команды, чтобы сгенерировать HDL-код и испытательный стенд HDL для подсистемы HDL_DDC. DDC синтезировался на оценочной плате Xilinx® Zynq®-7000 ZC706. Результаты использования ресурса места-и-маршрута сообщения показывают в таблице. Проект соответствовал синхронизации с тактовой частотой 313 МГц.

T = table(...
    categorical({'LUT'; 'LUTRAM'; 'FF'; 'BRAM'; 'DSP'}),...
    categorical({'2660'; '318'; '5951'; '1.0'; '18'}),...
    'VariableNames',{'Resource','Usage'})
T =

  5x2 table

    Resource    Usage
    ________    _____

     LUT        2660 
     LUTRAM     318  
     FF         5951 
     BRAM       1.0  
     DSP        18