В этом примере показано, как проверить аппаратную разработку Turbo Decoder с помощью потоковых данных от MATLAB ®.
Чтобы запустить этот пример, используйте скрипт VerifyLTEHDLTurboDecoderStreamingData.m.
Функции LTE Toolbox™ и 5G Toolbox™ моделируют операции на кадрах, с целочисленными данными с плавающей точкой и обеспечивают отличные поведенческие ссылки. Аппаратные проекты должны использовать потоковые логические данные или данные с фиксированной точкой. Этот пример преобразует системы координат в выборки в MATLAB и импортирует поток образцов в Simulink ® для проекта аппаратного алгоритма. Те же данные применяются как к аппаратному алгоритму в Simulink, так и к поведенческому алгоритму в MATLAB. Выходной поток выборок из симуляции Simulink экспортируется в MATLAB, а затем преобразуется обратно в кадрированные данные для сравнения.
Ключевыми функциями модели аппаратного нацеливания в Simulink ® являются:
Потоковая выборка интерфейса: LTE Toolbox и 5G Toolbox функции обрабатывают системы координат, в то время как блоки в Wireless HDL Toolbox используют потоковый пример интерфейса. Последовательная обработка эффективна для аппаратных проектов. Для получения дополнительной информации смотрите Потоковый пример интерфейса. Можно преобразовать системы координат в выборки в Simulink с помощью блока Frame To Samples или в MATLAB с помощью whdlFramesToSamples
функция. В этом примере мы преобразуем системы координат в выборки в MATLAB с помощью whdlFramesToSamples
функция.
Подсистема, предназначенная для генерации HDL-кода: разрабатывайте удобную для аппаратного обеспечения модель потоковой передачи сэмплирования путем выбора блоков из блоков. Часть проекта, предназначенная для генерации HDL-кода, должна находиться в отдельной подсистеме.
Преобразование выхода на основе сэмпла в системы координат: Для верификации можно экспортировать результат аппаратно совместимого проекта в рабочую область MATLAB ®. Затем можно сравнить этот результат с выходом поведенческого проекта MATLAB. В этом примере мы преобразуем выборки в системы координат в MATLAB с помощью whdlSamplesToFrames
функция.
Можно использовать скрипт VerifyLTEHDLTurboDecoderStreamingData.m MATLAB, чтобы запустить поведенческий код MATLAB, настроить, импортировать данные и запустить модель Simulink™, экспортировать данные и сравнить выходные выходы поведения и Simulink.
Скрипт MATLAB содержит шесть частей:
Поведенческая симуляция турбодекодера
Преобразование Входных кадров в образцы
Настройте модель Simulink для Оборудования Проекта
Запуск модели Simulink
Преобразование Выхода отсчетов в системы координат
Проверьте выходы модели Simulink
Для поведенческой симуляции проекта используйте lteTurboDecode
функция из LTE Toolbox. Вход в эту функцию, softBits, также является входом для целевого проекта. Поведенческий выход lteTurboDecode
функция, rxBits может использоваться для сравнения с выходами целевого проекта. И 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 Turbo Decoder в модели Simulink. Недопустимые выборки не вставляются между допустимыми выборками.
Блок LTE Turbo Decoder принимает систему координат данных, по одной выборке за раз, проходит указанное количество итераций и может затем принять другой входной кадр. Чтобы позволить времени вычислений блока запустить 6 итераций, мы включаем недопустимые выборки между системами координат. В этом примере мы устанавливаем количество недопустимых выборок между системами координат в 7 итераций (или 14 полуитерации, каждая из которых соответствует системе координат задержки). Чтобы вычислить точные циклы, необходимые для обработки системы координат, посмотрите на LTE Turbo Decoder.
Функция турбо- энкодера сначала возвращает систематические биты, затем первый набор битов четности и, наконец, второй набор битов четности. Однако турбодекодер LTE требует, чтобы каждый набор систематических и 2 бита четности посылались вместе. Чтобы соответственно перестроить входные данные в блок Turbo Decoder, мы выбираем опцию, чтобы составить выходные выборки из перемеженных входных выборок.
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 Turbo Decoder состоит из блока LTE Turbo Decoder. Этот блок запускает 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{:};
Сравните вывод HDL-симуляции с выходом поведенческого симуляции, чтобы найти количество битовых несоответствий между поведенческим кодом и аппаратно-целевой моделью.
Эта симуляция не приводит к битовым ошибкам. Увеличение количества шума, добавляемого к выборкам, или уменьшение количества итераций может привести к битовым ошибкам.
% 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);
Как только ваш проект работает в симуляции, вы можете использовать HDL- Coder™ для генерации HDL-кода для подсистемы LTE Turbo Decoder. Используйте HDL- Verifier™ для генерации DPI- Испытательного стенда SystemVerilog (HDL Coder) или запустите FPGA-в Цикл.
makehdl([modelname '/LTE Turbo Decoder']) % Generate HDL code makehdltb([modelname '/LTE Turbo Decoder']) % Generate HDL Test bench
whdlFramesToSamples
| whdlSamplesToFrames
| lteTurboDecode
(LTE Toolbox)