В этом примере показано, как проверить аппаратную конструкцию турбодекодера с использованием потоковых данных из MATLAB ®.
Чтобы запустить этот пример, используйте сценарий VerifyLTEHDLTurboImentingStreamingData.m.
Функции LTE Toolbox™ и 5G Toolbox™ моделируют операции с кадрированными, плавающими и целыми данными и обеспечивают превосходные ссылки на поведение. Аппаратные решения должны использовать потоковые логические данные или данные с фиксированной точкой. В этом примере выполняется преобразование кадров в образцы в MATLAB и импорт потока образцов в Simulink ® для проектирования аппаратных алгоритмов. Одни и те же данные применяются как к аппаратному алгоритму в Simulink, так и к поведенческому алгоритму в MATLAB. Выходной поток выборки из моделирования Simulink экспортируется в MATLAB и затем преобразуется обратно в данные с кадрами для сравнения.

Основные характеристики модели аппаратного таргетинга в Simulink ®:
Потоковый интерфейс образцов: функции LTE Toolbox и 5G Toolbox обрабатывают кадры, в то время как блоки в Wireless HDL Toolbox используют потоковый интерфейс образцов. Последовательная обработка эффективна для аппаратных решений. Дополнительные сведения см. в разделе Потоковый пример интерфейса. Можно преобразовать кадры в образцы в Simulink с помощью блока «Кадр в образцы» или в MATLAB с помощью whdlFramesToSamples функция. В этом примере мы преобразуем кадры в выборки в MATLAB с помощью whdlFramesToSamples функция.
Подсистема, предназначенная для генерации кода HDL: Разработка удобной для аппаратного обеспечения модели потоковой передачи путем выбора блоков из списка блоков. Часть проекта, предназначенная для генерации кода HDL, должна быть в отдельной подсистеме.
Преобразование выходных данных на основе образцов в кадры: Для проверки можно экспортировать результат аппаратно совместимой конструкции в рабочую область MATLAB ®. Затем можно сравнить этот результат с выводом поведенческой конструкции MATLAB. В этом примере мы преобразуем выборки в кадры в MATLAB с помощью whdlSamplesToFrames функция.
Можно использовать сценарий VerifyLTEHDLTurboImentingStreamingData.m MATLAB для запуска поведенческого кода MATLAB, настройки, импорта данных и выполнения модели Simulink™, экспорта данных и сравнения поведенческих и симулинковых выходных данных.
Сценарий MATLAB содержит шесть частей:
Поведенческое моделирование турбодекодера
Преобразование входных кадров в образцы
Настройка модели Simulink для проектирования оборудования
Запустить модель Simulink
Преобразование выходных выборок в кадры
Проверка выходных данных модели Simulink
Для поведенческого моделирования конструкции используйте lteTurboDecode из LTE Toolbox. Вход в эту функцию, softBits, также является входом для целевого дизайна HDL. Поведенческие результаты lteTurboDecode функция, rxBits может использоваться для сравнения с выходом целевого дизайна HDL. Как softBits, так и rxBits являются кадрами данных с плавающей запятой.
% Turbo decoding of soft bits obtained from a noisy constellation turboFrameSize = 6144; txBits = randi([0 1],turboFrameSize,1); codedData = lteTurboEncode(txBits); txSymbols = lteSymbolModulate(codedData,'QPSK'); noise = 0.5*complex(randn(size(txSymbols)),randn(size(txSymbols))); rxSymbols = txSymbols + noise; scatter(real(rxSymbols),imag(rxSymbols),'co'); hold on; scatter(real(txSymbols),imag(txSymbols),'rx') legend('Rx constellation','Tx constellation') softBits = lteSymbolDemodulate(rxSymbols,'QPSK','Soft'); rxBits = lteTurboDecode(softBits);
Сначала преобразуйте входной кадр в кадр с фиксированной точкой.
inframes = fi(softBits, 1, 5, 2);
Затем преобразуйте кадрированные данные в поток выборок и управляющих сигналов, используя whdlFramesToSamples функция. Эта функция также добавляет недопустимые выборки в поток выборок для имитации потоковых аппаратных данных. Выходные данные этой функции являются входными данными для модели Simulink.
В этом примере whdlFramesToSamples функция сконфигурирована для обеспечения входов в блок турбодекодера LTE в модели Simulink. Недопустимые выборки не вставляются между допустимыми выборками.
Блок турбодекодера LTE принимает кадр данных, по одной выборке за раз, проходит через заданное количество итераций и затем может принять другой входной кадр. Чтобы разрешить время обработки блоков для выполнения 6 итераций, мы включаем недопустимые выборки между кадрами. В этом примере мы устанавливаем число недопустимых отсчетов между кадрами в 7 итераций (или 14 полуитераций, каждая из которых соответствует кадру задержки). Чтобы вычислить точные циклы, необходимые для обработки кадра, просмотрите турбодекодер LTE.
Функция турбокодера возвращает сначала систематические биты, за которыми следует первый набор битов четности и, наконец, второй набор битов четности. Однако турбодекодер LTE требует, чтобы каждый набор систематических и 2 битов четности передавался вместе. Чтобы соответствующим образом преобразовать входные данные в блок турбодекодера, мы выбираем опцию для составления выходных выборок из перемеженных входных выборок.
inframesize = 18444; % size of softBits
% No invalid cycles between samples
idlecyclesbetweensamples = 0;
% Additional delay in frames for Turbo Decoder output numTurboIterations = 6; % approximate latency from Turbo Decoder block per half-iteration tdlatency = (ceil(turboFrameSize/32)+4)*32; % approximate delay in frames for Turbo Decoder output algframedelay = (2*numTurboIterations + 2)*(ceil(tdlatency/turboFrameSize)); idlecyclesbetweenframes = (inframesize/insamplesize)*algframedelay;
% Output is composed of interleaved input samples % input: S_1 S_2 ... S_n P1_1 P1_2 ... P1_n P2_1 P2_2 ... P2_n % output: S_1 P1_1 P2_1 S2 P1_2 P2_2 ... Sn P1_n P2_n interleaveSamples = true;
[sampleIn, ctrlIn] = ... whdlFramesToSamples(inframes, ... idlecyclesbetweensamples, ... idlecyclesbetweenframes, ... insamplesize, ... interleaveSamples);
Модель импортирует данные и элемент управления на основе образцов, а также размер кадра из рабочего пространства MATLAB.
modelname = 'TurboDecoderStreamingDataHDLExample';

Подсистема турбодекодера LTE состоит из блока турбодекодера LTE. Этот блок настроен на выполнение 6 итераций декодирования.

Код MATLAB определяет настройки для размера ввода, времени выборки для модели Simulink и вычисляет требуемое время моделирования.
% Settings for Signal From Workspace block samplesizeIn = 3; % encode rate is 1/3
sampletime = 1;
simTime = size(ctrl,1);
Модель можно запустить, нажав кнопку Воспроизведение (Play) или вызвав команду sim в командной строке MATLAB.
sim(modelname);
Выполнение модели приводит к потоковым выборкам и управляющим сигналам, записанным из модели в переменной sampleOut_ts и ctrlOut_ts. Выборка и контрольные данные преобразуются в кадры с помощью whdlSamplesToFrames функция.
% Reformat the logged data to form the sample and control output sampleOut = squeeze(sampleOut_ts.Data); ctrlOut = [squeeze(ctrlOut_ts.start.Data) ... squeeze(ctrlOut_ts.end.Data) ... squeeze(ctrlOut_ts.valid.Data)]; % Form frames from output sample and control data outframes = whdlSamplesToFrames(sampleOut, ctrlOut); % Gather all the bits - expecting only one frame rxBits_hdl = outframes{:};
Сравните выходные данные моделирования ЛПВП с выходными данными моделирования поведения, чтобы найти количество битовых несоответствий между поведенческим кодом и аппаратно-целевой моделью.
Это моделирование не приводит к битовым ошибкам. Увеличение количества шума, добавляемого к выборкам, или уменьшение числа итераций может привести к ошибкам в битах.
% Check number of bit mismatches numBitsDiff = sum(rxBits_hdl ~= rxBits); fprintf(['\nLTE Turbo Decoder: Behavioral and ' ... 'HDL simulation differ by %d bits\n\n'], numBitsDiff);

После выполнения моделирования можно использовать Coder™ HDL для создания кода HDL для подсистемы турбодекодера LTE. Используйте Verifier™ HDL, чтобы создать тестовый стенд SystemVerilog DPI (кодер HDL) или запустить FPGA-in-the-Loop.
makehdl([modelname '/LTE Turbo Decoder']) % Generate HDL code makehdltb([modelname '/LTE Turbo Decoder']) % Generate HDL Test bench
whdlFramesToSamples | whdlSamplesToFrames | lteTurboDecode (панель инструментов LTE)