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

Основные характеристики модели аппаратного таргетинга в Simulink ®:
Потоковый интерфейс образцов: функции LTE Toolbox и 5G Toolbox обрабатывают кадры, в то время как блоки в Wireless HDL Toolbox используют потоковый интерфейс образцов. Последовательная обработка эффективна для аппаратных решений. Дополнительные сведения см. в разделе Потоковый пример интерфейса. Можно преобразовать кадры в образцы в Simulink с помощью блока «Кадр в образцы» или в MATLAB с помощью whdlFramesToSamples функция. В этом примере мы преобразуем кадры в поток выборок в Simulink с помощью блока Frame To Samples.
Подсистема, предназначенная для генерации кода HDL: Разработка удобной для аппаратного обеспечения модели потоковой передачи путем выбора блоков из списка блоков. Часть проекта, предназначенная для генерации кода HDL, должна быть в отдельной подсистеме.
Преобразование выходных данных на основе образцов в кадры: Для проверки можно экспортировать результат аппаратно совместимой конструкции в рабочую область MATLAB ®. Затем можно сравнить этот результат с выводом поведенческой конструкции MATLAB. В этом примере мы преобразуем выборки в кадры в Simulink с помощью блока «Образцы в кадр».
Сценарий VerifyLTEHDLTourboFramedData.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);
Модель импортирует данные на основе фреймов из рабочей области MATLAB. В этом случае переменные inframes и blockStartIn являются входами в модель.

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

Модель Simulink импортирует кадры данных из MATLAB и преобразует их в поток выборок в модели Simulink.
Блок Frame To Samples преобразует кадрированные данные в поток выборок и управляющих сигналов. Этот блок также добавляет недопустимые выборки в поток выборок для имитации потоковых аппаратных данных. Этот блок обеспечивает вход в подсистему, предназначенную для генерации кода HDL, но сам не поддерживает генерацию кода HDL.
В этом примере блок Frame To Samples сконфигурирован для обеспечения входа в блок турбодекодера LTE. Недопустимые выборки не вставляются между допустимыми выборками.
Модель Simulink также импортирует параметр размера кадра из рабочей области и передает его в порт blockSize блока LTE Turbo Decoder. В этом примере используется один размер блока, поэтому этот порт остается постоянным значением, заданным параметром turboFrameSize.
Блок турбодекодера LTE принимает один кадр данных, выполняет указанное количество итераций и затем может принять другой входной кадр. Чтобы разрешить время обработки блоков для выполнения 6 итераций, мы отправляем недопустимые выборки между кадрами. В этом примере мы устанавливаем число недопустимых отсчетов между кадрами в 7 итераций (или 14 полуитераций, каждая из которых соответствует кадру задержки). Чтобы вычислить точные циклы, необходимые для обработки кадра, просмотрите турбодекодер LTE.
Функция турбокодера посылает сначала все систематические биты, за которыми следует первый набор битов четности и, наконец, второй набор битов четности. Однако турбодекодер LTE требует, чтобы каждый набор систематических и 2 битов четности передавался вместе. Чтобы соответствующим образом преобразовать входные данные в блок турбодекодера LTE, мы выбираем опцию для составления выходных выборок из перемеженных входных выборок.
% Open the model modelname = 'TurboDecoderFramedDataHDLExample'; open_system(modelname);
% Settings for Frame Input From Workspace block
inframesize = length(softBits);
% Setting for LTE Turbo Decoder block
numTurboIterations = 6;
% Settings for Frame To Samples block idlecyclesbetweensamples = 0; % approximate latency from LTE Turbo Decoder block per half-iteration tdlatency = (ceil(turboFrameSize/32)+4)*32; % approximate delay in frames for LTE Turbo Decoder output algframedelay = (2*numTurboIterations + 2)*(ceil(tdlatency/turboFrameSize)); % Rate 1/3 code: Systematic + 2 Parity insamplesize = 3; idlecyclesbetweenframes = (inframesize/insamplesize)*algframedelay; % Select the option to compose output from interleaved input samples set_param([modelname '/Frame To Samples'],... 'InterleaveSamples','on');
% Settings for Samples To Frame block % Exact setting, includes idle cycles introduced totalframesize = ((inframesize/insamplesize)*... (idlecyclesbetweensamples+1))+idlecyclesbetweenframes; % Alternative setting, same size as LTE Turbo Decoder output frame % totalframesize = outframesize; outsamplesize = 1;
Код MATLAB также преобразует входные данные в фиксированную точку для использования в аппаратно-целевой модели и вычисляет требуемое время моделирования.
% Simulation time numFrames = 1; % number of frames to run simTime = numFrames;
% Input frame data for model % use same data as lteTurboDecode, converted to fixed point inframes = fi(softBits, 1, 5, 2);
Модель можно запустить, нажав кнопку Воспроизведение (Play) или вызвав команду sim в командной строке MATLAB.
sim(modelname);
Выполнение модели приводит к кадрам данных, записанных из блока «Вывод кадра в рабочую область» в outframes_logdata переменных. Сравните данные с выходными данными поведенческого моделирования, чтобы найти количество битовых несоответствий между поведенческим кодом и аппаратно ориентированной моделью.
Это моделирование не приводит к битовым ошибкам. Увеличение количества шума, добавляемого к выборкам, или уменьшение числа итераций может привести к ошибкам в битах.
% Process output of HDL model and compare to behavioral simulation output % Gather all the logged data into one array rxBits_hdl = outframes_logdata(:);
% 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
lteTurboDecode(Панель инструментов LTE)