hdlverifier.HDLCosimulation

Создайте системный объект для HDL-косимуляции с MATLAB

Описание

The hdlverifier.HDLCosimulation Системная object™ козимулирует MATLAB® и компонент оборудования. Системный объект записывает входные сигналы в и читает выход сигналы от HDL- модели под симуляцией в Симулятор HDL. Можно использовать этот системный объект для моделирования источника или приемника путем конфигурирования системного объекта только с выходными или входными портами, соответственно.

Чтобы создать системный объект для HDL-косимуляции с MATLAB:

  1. Настройте hdlverifier. Объект HDLCosimulation с использованием Cosimulation Wizard.

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

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

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

Создание

Как создать hdlverifier.HDLCosimulation Системный объект, используйте Cosimulation Wizard, чтобы настроить HDLCosimulation Системный объект. Выводом мастера Cosim является файл с именем hdlcosim_<reservedrangesplaceholder0 >.m, где toplevel - имя модуля HDL верхнего уровня. Затем можно создать системный объект путем присвоения его локальной переменной.

Описание

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) синтаксис.

Этот Cosimulation Wizard создает hdlverifier.HDLCosimulation Системный объект с использованием существующего HDL-кода и HDL- скрипта запуска. Используйте Cosimulation Wizard для более легкого запуска.

Свойства

расширить все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

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

Пример: 'data_in'

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

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

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

Пример: 'out1'

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

Tcl симуляции предварительная команда, выполняемая Симулятором HDL во время первого вызова Системного объекта, заданная как вектор символов. Эта команда Tcl presimulation также выполняется во время первого вызова системного объекта после его деблокирования.

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

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

Tcl post симуляции команда, выполняемая Симулятором HDL во время вызова для освобождения Системного объекта, заданная как вектор символов.

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

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

Задержка в Симулятор HDL перед началом косимуляции, заданная как массив ячеек с двумя элементами.

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

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

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

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

Параметры для соединения с Симулятором HDL, заданные как массив ячеек с одним, двумя или тремя элементами.

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

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

  • Третьим элементом является имя хоста сеанса. Это значение установлено в localhost если не задан.

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

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

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

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

Примечание

The FrameBasedProcessing свойство будет удалено в следующем релизе.

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

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

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

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

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

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

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

Описание

пример

hdloutputs = hdlc(hdlinputs) соединяется с Симулятором HDL, записывает hdlinputs на симулятор HDL и читает hdloutputs с симулятора HDL. Истекшее время симуляции между каждым вызовом Системного объекта определяется свойством SampleTime.

Входные параметры

расширить все

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

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

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

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

расширить все

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

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

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

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

Simulator = 'Incisive';

или если вы используете ModelSim/QuestaSim, установите переменную симулятора на 'ModelSime'

Simulator = 'ModelSim';

Следующий код устанавливает параметры симуляции и создает экземпляры системных объектов, которые представляют энкодер канала, модулятор BPSK, канал AWGN, демодулятор BPSK и калькулятор частоты ошибок. Эти объекты содержат систему вокруг декодера Viterbi и могут рассматриваться как тестовый слой для реализации Viterbi 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);

Создание экземпляра системного объекта косимуляции

Функция hdlcosim возвращает HDL- Системного объекта косимуляции, который представляет HDL- реализации декодера Viterbi в этой системе симуляции. Интерфейс объекта является общим для всех симуляторов. Для удобства, чтобы избежать записи некоторого кода HDL testbench, мы генерируем формы сигналов для часов и сбрасывает с помощью специфичного для симулятора кода 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

Запуск Симулятора HDL

Команда vsim и nclaunch запускает Симулятор HDL. Запущенный Симулятором HDL сеанс компилирует HDL- проекта и загружает HDL- симуляции. Вы готовы выполнить косимуляцию, когда симуляция 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 декодера Viterbi через системный объект косимуляции. Этот раздел кода вызывает цикл обработки, чтобы обработать кадр за кадром данных с 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

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

Для декодера Viterbi отображается вероятность битовой ошибки.

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

    'Bit Error Rate is 5.511269e-03
     '

Уничтожите Системный объект косимуляции, чтобы освободить Симулятор HDL

Симулятор HDL разблокируется, когда системный объект косимуляции HDL разрушается в MATLAB. Закройте Симулятор HDL сеанс вручную.

clear hDec;

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

Введенный в R2012b