exponenta event banner

hdlverifier. HDLCosimulation

Создание системного объекта для косимуляции HDL с помощью MATLAB

Описание

hdlverifier.HDLCosimulation Система object™ косимулирует MATLAB ® и аппаратный компонент. Объект System записывает входные сигналы в имитатор HDL и считывает выходные сигналы из модели HDL при моделировании. Этот объект System можно использовать для моделирования исходного или приемного устройства путем настройки объекта System только с портами вывода или ввода соответственно.

Для создания системного объекта для косимуляции HDL с помощью MATLAB:

  1. Настройте средство hdlverifier. Объект HDLCosimulation с помощью мастера Cosimulation.

  2. Создайте объект в конструкции и задайте его свойства.

  3. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Создание hdlverifier.HDLCosimulation Системный объект, используйте Мастер косимуляции для настройки HDLCosimulation Системный объект. Результатом работы мастера Cosim является файл с именем hdlcosim_toplevel.m, где toplevel - имя модуля HDL верхнего уровня. Затем можно создать объект System, присвоив его локальной переменной.

Описание

hdlc = hdlverifier.HDLCosimulation создает hdlverifier.HDLCosimulation Системный объект со значениями свойств по умолчанию. Этот системный объект обеспечивает интерфейс для моделирования HDL в рабочей области MATLAB.

hdlc = hdlverifier.HDLCosimulation(Name,Value) задает свойства одним или несколькими Name,Value пар. Заключите каждое имя свойства в отдельные кавычки. Например,

hdlc = hdlverifier.HDLCosimulation('InputSignals','/top/in1', ... , 'OutputFractionLangths',10);

hdlc = hdlcosim создает hdlverifier.HDLCosimulation Системный объект со значениями свойств по умолчанию. Этот синтаксис эквивалентен hdlverifier.HDLCosimulation синтаксис.

hdlc = hdlcosim(Name,Value) эквивалентно hdlverifier.HDLCosimulation(Name,Value) синтаксис.

Мастер косимуляции создает hdlverifier.HDLCosimulation Системный объект с использованием существующего кода HDL и сценария запуска HDL. Для упрощения запуска используйте мастер косимуляции.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Входные пути в коде HDL, определяемые как символьный вектор или массив ячеек символьных векторов. Пути указываются относительно верхнего уровня иерархии HDL.

Пример: 'data_in'

Пример: {'/top/in1','/top/in2'}

Типы данных: char | cell

Пути вывода в коде HDL, определяемые как символьный вектор или массив ячеек символьных векторов. Пути указываются относительно верхнего уровня иерархии HDL.

Пример: 'out1'

Пример: {'out1','out2'}

Типы данных: char | cell

Типы данных выходных сигналов, заданные как массив ячеек символьных векторов. Допустимые типы данных: 'fixedpoint','double', или 'single'.

Если указан только один тип данных, каждый вывод имеет один и тот же тип данных. Чтобы назначить каждому выходу различные типы данных, укажите массив ячеек того же размера, что и количество выходов. Каждый элемент в OutputDataTypes массив ячеек определяет тип данных соответствующего элемента в выводе объекта System (hdloutputs).

Пример: {'fixedpoint'} - Все типы выходных данных: fixedpoint.

Пример: {'double','single'} - Тип данных первого вывода: double и второй - single.

Примечание

Когда OutputDataTypes является {'fixedpoint'}, битовая ширина соответствует размеру встроенного типа данных (8,16,32, или 64), и OutputFractionLengths имеет значение 0тип данных выходного сигнала возвращается как встроенный тип данных.

Типы данных: cell

Признак выходов, указанный как false (без подписи), true (со знаком), или логический вектор.

Если вы предоставляете только true или falseкаждый выход имеет соответствующий знак. Чтобы применить различные знаки к каждому выходу, укажите логический вектор того же размера, что и количество выходов. Каждый элемент в OutputSigned вектор задает знак соответствующего элемента в выводе объекта System (hdloutputs).

Пример: true - Все выходные данные имеют подписанное значение.

Пример: [true,true,false] - Первый выход - это подписанное значение, второй выход - подписанное значение, а третий (и конечный) выход - неподписанное значение.

Выходные длины дробей в битах, заданные как целое число или вектор целых чисел.

Если указан только скаляр, каждый выход имеет одинаковую длину дроби. Для применения различных длин дробей к каждому выходу укажите вектор того же размера, что и число выходов. Каждый элемент в OutputFractionLengths вектор задает длину дроби соответствующего элемента в выводе объекта System (hdloutputs).

Пример: 10 - Все выходы имеют длину дроби 10 бит.

Пример: [16,8] - Первый выход имеет длину дроби 16 бит, а второй (и конечный) выход имеет длину дроби 8 бит.

Команда tcl pre simulation, выполняемая имитатором ЛПВП во время первого вызова объекта System, заданного как символьный вектор. Эта команда Tcl presmulation также выполняется во время первого вызова объекта System после его освобождения.

Пример: 'force /top/rst 1 0, 0 2 ns; force /top/clk 0 0, 1 1 ns -repeat 2 ns'

Типы данных: char

Команда Tcl post simulation, выполняемая имитатором ЛПВП во время вызова для освобождения объекта System, заданного как символьный вектор.

Пример: 'echo "done"'

Типы данных: char

Задержка в имитаторе ЛПВП перед началом косимуляции, определяемая как массив ячеек с двумя элементами.

  • Первым элементом является задержка предоплаты ЛПВП, заданная как неотрицательное целое число.

  • Второй элемент представляет собой единицу времени, заданную как один из следующих векторов символов: 'fs','ps','ns','us','ms', или 's'.

Пример: {10,'fs'}

Типы данных: cell

Параметры подключения к имитатору ЛПВП, задаваемые как массив ячеек с одним, двумя или тремя элементами.

  • Первым элементом является тип соединения, указанный как 'SharedMemory' or 'Socket'. Если указывается общая память, то номер порта и имя хоста (второй и третий элементы в этом массиве ячеек) неприменимы.

  • Второй элемент - номер порта, который должен быть положительным целым числом. Это значение равно 4449 если не указано.

  • Третий элемент - имя хоста сеанса HDL. Это значение равно localhost если не указано.

Пример: {'SharedMemory'}

Пример: {'Socket',1234}

Пример: {'Socket',1234,'hostname'}

Типы данных: cell

Примечание

FrameBasedProcessing свойство будет удалено в следующем выпуске.

Режим выборки или режим кадра автоматически определяется на основе размера входных данных во время выполнения объекта System.

Время, прошедшее в имитаторе ЛПВП между каждым вызовом системного объекта, заданного как массив ячеек с двумя элементами.

  • Первый элемент - это время между двумя вызовами объекта System, указанное как положительное целое число.

  • Второй элемент представляет собой единицу времени, заданную как символьный вектор: 'fs','ps','ns','us','ms','s'.

Пример: {10,'ns'}

Типы данных: cell

Использование

Синтаксис

Описание

пример

hdloutputs = hdlc(hdlinputs) подключается к имитатору ЛПВП, записывает hdlinputs на имитатор ЛПВП и считывает hdloutputs от имитатора ЛПВП. Истекшее время моделирования между каждым вызовом объекта System определяется свойством SampleTime.

Входные аргументы

развернуть все

Входы в имитатор ЛПВП, указанный как разделенный запятыми список значений, которые передаются на входные порты ЛПВП. Входные порты HDL задаются свойством InputSignals. Количество элементов в этой паре, разделенной запятыми, должно быть равно количеству входных портов HDL. Каждое входное значение аргумента передается на соответствующий ему входной порт HDL.

Например, если InputSignals устанавливается как {'in1','in2'}, указать out = hdlc(input1,input2) для управления значением input1 кому in1 и input2 кому in2.

Пример: [RealFft, ImagFft] = hdlc(3,12); значения 3 и 12 вводятся в качестве входных сигналов в имитатор ЛПВП, который имеет два входных порта.

Выходные аргументы

развернуть все

Выходные данные имитатора ЛПВП, возвращаемые в виде скаляра или вектора. Каждый возвращаемый элемент является выходом соответствующего порта вывода HDL. Выходные порты HDL задаются в свойстве OutputSignals. Количество возвращаемых элементов совпадает с количеством указанных выходных портов HDL. Например, если OutputSignals устанавливается как {'out1','out2'}, указать [o1, o2] = hdlc(i1,i2) для назначения значения из out1 кому o1 и out2 кому o2.

Пример: out1 = hdlc(3,12); назначает выходное значение из имитатора ЛПВП с одним портом вывода.

Пример: [RealFft, ImagFft] = hdlc(3,12); присваивает выходные значения из имитатора ЛПВП с двумя выходными портами. В этом примере: RealFft - выходной сигнал первого порта и ImagFft - выходной сигнал второго порта.

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

В этом примере показано, как использовать системные объекты MATLAB ® и Mentor Graphics ® ModelSim ®/QuestaSim ® или Cadence ® Incisive ®/Xcelium ® для косимуляции декодера Витерби, реализованного в VHDL.

Установка параметров моделирования и создание экземпляров объектов системы связи

Если вы используете Incisive/Xcelium, установите переменную симулятора в 'Incisive'

Simulator = 'Incisive';

или если используется ModelSim/QuestaSim, задайте переменной симулятора значение ModelSime

Simulator = 'ModelSim';

Следующий код устанавливает параметры моделирования и создает экземпляры системных объектов, которые представляют канальный кодер, модулятор BPSK, канал AWGN, демодулятор BPSK и калькулятор частоты ошибок. Эти объекты включают систему вокруг декодера Витерби и могут рассматриваться как тестовый стенд для реализации HDL Витерби.

EsNo = 0;	% Energy per symbol to noise power spectrum density ratio in dB
FrameSize = 1024;  % Number of bits in each frame

Кодер свертки

hConEnc = comm.ConvolutionalEncoder;

Модулятор BPSK

hMod    = comm.BPSKModulator;

Канал AWGN

hChan   = comm.AWGNChannel('NoiseMethod', ...
                           'Signal to noise ratio (Es/No)',...
                           'SamplesPerSymbol',1,...
                           'EsNo',EsNo);

Демодулятор BPSK

hDemod  = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio',...
                               'Variance',0.5*10^(-EsNo/10));

Калькулятор частоты ошибок

hError  = comm.ErrorRate('ComputationDelay',100,'ReceiveDelay', 58);

Создание экземпляра объекта системы Cosimulation

Функция hdlcosim возвращает объект системы косимуляции HDL, который представляет реализацию HDL декодера Витерби в этой системе моделирования. Интерфейс объекта является общим для всех симуляторов. Для того чтобы избежать записи некоторого кода тестового инструментария HDL, мы генерируем формы сигналов для часов и сбрасываем их с помощью кода Tcl, специфичного для симулятора.

hDec = hdlcosim('InputSignals', {'/viterbi_block/In1','/viterbi_block/In2'}, ...
                'OutputSignals', {'/viterbi_block/Out1'}, ...
                'OutputSigned', false, ...
                'OutputFractionLengths', 0, ...
                'TCLPostSimulationCommand', 'echo "done";', ...
                'PreRunTime', {10,'ns'}, ...
                'Connection', {'Shared'}, ...
                'SampleTime', {10,'ns'});
switch Simulator
    case 'ModelSim'
        hDec.TCLPreSimulationCommand = ...
            'force /viterbi_block/clk_enable 1 0; force /viterbi_block/clk 0 0 ns, 1 5 ns -repeat 10 ns; force /viterbi_block/reset 1 0 ns, 0 8 ns; ';
    case 'Incisive'
        hDec.TCLPreSimulationCommand = ...
            'force :clk B"0" -after 0ns B"1" -after 5ns -repeat 10ns; force reset B"1" -after 0ns B"0" -after 8ns; force :clk_enable B"1" -after 0ns';
end

Запуск имитатора ЛПВП

Команда vsim и nclaunch запускает имитатор HDL. Запущенный сеанс имитатора ЛПВП компилирует дизайн ЛПВП и загружает имитацию ЛПВП. После полной загрузки моделирования ЛПВП в симулятор можно выполнить косимуляцию.

disp('Launching HDL simulator...');
switch Simulator
    case 'ModelSim'
        vsim('tclstart',viterbi_cosimulation_tclcmds('vsimmatlabsysobj'));
    case 'Incisive'
        nclaunch('tclstart',viterbi_cosimulation_tclcmds('hdlsimmatlabsysobj'));
end
Timeout=30;
processid = pingHdlSim(Timeout);
% Check if HDL simulator is ready for Cosimulation.
assert(ischar(processid),['Timeout: HDL simulator took more than ', num2str(Timeout),' seconds to setup,please increase the timeout in ''pingHdlSim''']);
disp('...Simulator is ready for cosimulation.');
Launching HDL simulator...
...Simulator is ready for cosimulation.

Запустить косимуляцию

В этом примере моделируется система связи BPSK в MATLAB, включающая реализацию HDL декодера Витерби через объект системы косимуляции. Этот раздел кода вызывает цикл обработки для обработки кадра данных за кадром с 1024 битами в каждом кадре данных.

for counter = 1:20480/FrameSize
    data            = randi([0 1],FrameSize,1);
    encodedData     = step(hConEnc, data);
    modSignal       = step(hMod, encodedData);
    receivedSignal  = step(hChan, modSignal);
    demodSignalSD   = step(hDemod, receivedSignal);
    quantizedValue  = fi(4-demodSignalSD,0,3,0);
    input1          = quantizedValue(1:2:2*FrameSize);
    input2          = quantizedValue(2:2:2*FrameSize);
    receivedBits    = step(hDec,input1, input2);
    errors          = step(hError, data, double(receivedBits));
end

Отображение частоты битовых ошибок

Коэффициент битовых ошибок отображается для декодера Витерби.

sprintf('Bit Error Rate is %d\n',errors(1))
ans =

    'Bit Error Rate is 5.511269e-03
     '

Уничтожить объект системы косимуляции для выпуска имитатора ЛПВП

Имитатор ЛПВП разблокируется при уничтожении объекта системы косимуляции ЛПВП в MATLAB. Закройте сеанс имитатора ЛПВП вручную.

clear hDec;

На этом завершается «Проверка декодера Витерби с использованием системного объекта MATLAB и имитатора HDL».

Представлен в R2012b