hdlverifier. HDLCosimulation

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

Описание

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

Создать Системный объект для HDL cosimulation с MATLAB:

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Чтобы создать Системный объект hdlverifier.HDLCosimulation, используйте Cosimulation Wizard, чтобы настроить Системный объект HDLCosimulation. Вывод Мастера Cosim является файлом, названным hdlcosim_toplevel.m, где toplevel является именем модуля HDL верхнего уровня. Можно затем создать Системный объект путем присвоения его локальной переменной.

Синтаксис

hdlc = hdlverifier.HDLCosimulation
hdlc = hdlverifier.HDLCosimulation(Name,Value)
hdlc = hdlcosim
hdlc = hdlcosim(Name,Value)

Описание

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 Используя Системные объекты (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 - All выходные параметры имеет значение со знаком.

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

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

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

Пример: 10 — All выходные параметры имеет дробную длину 10 битов.

Пример: [16,8] — первый вывод имеет дробную длину 16 битов и второе (и финал), вывод имеет дробную длину 8 битов.

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

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

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

Tcl отправляют команду симуляции, выполняемую симулятором HDL во время вызова, чтобы выпустить Системный объект, заданный как вектор символов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

hdloutputs = hdlc(hdlinputs)

Описание

пример

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® и Наставника Graphics® ModelSim®/QuestaSim® или Cadence® Incisive®/Xcelium® к cosimulate Декодер Витерби, реализованный в VHDL.

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

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

Simulator = 'Incisive';

% or if you are using ModelSim/QuestaSim, set simulator variable to
% 'ModelSim'
Simulator = 'ModelSim';

% The following code sets up the simulation parameters and instantiates the
% system objects that represent the channel encoder, BPSK modulator, AWGN
% channel, BPSK demodulator, and error rate calculator. Those objects
% comprise the system around the Viterbi decoder and can be thought of as
% the test bed for the Viterbi HDL implementation.

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

% Convolution Encoder
hConEnc = comm.ConvolutionalEncoder;
% BPSK Modulator
hMod    = comm.BPSKModulator;
% AWGN channel
hChan   = comm.AWGNChannel('NoiseMethod', ...
                           'Signal to noise ratio (Es/No)',...
                           'SamplesPerSymbol',1,...
                           'EsNo',EsNo);
% BPSK demodulator
hDemod  = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio',...
                               'Variance',0.5*10^(-EsNo/10));
% Error Rate Calculator
hError  = comm.ErrorRate('ComputationDelay',100,'ReceiveDelay', 58);

Инстанцируйте системного объекта Cosimulation

hdlcosim функция возвращает HDL cosimulation Системный объект, который представляет реализацию HDL Декодера Витерби в этой системе симуляции.

switch Simulator
    case 'ModelSim'
        hDec    = hdlcosim('InputSignals', {'/viterbi_block/In1','/viterbi_block/In2'}, ...
                           'OutputSignals', {'/viterbi_block/Out1'}, ...
                           'OutputSigned', false, ...
                           'OutputFractionLengths', 0, ...
                           '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; ', ...
                           'TCLPostSimulationCommand', 'echo "done";', ...
                           'PreRunTime', {10,'ns'}, ...
                           'Connection', {'Shared'}, ...
                           'SampleTime', {10,'ns'});
    case 'Incisive'
        hDec    = hdlcosim('InputSignals', {'/viterbi_block/In1','/viterbi_block/In2'}, ...
                           'OutputSignals', {'/viterbi_block/Out1'}, ...
                           'OutputSigned', false, ...
                           'OutputFractionLengths', 0, ...
                           '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', ...
                           'TCLPostSimulationCommand', 'echo "done";', ...
                           'PreRunTime', {10,'ns'}, ...
                           'Connection', {'Shared'}, ...
                           'SampleTime', {10,'ns'});
end

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

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

disp('Waiting for HDL simulator to launch ...');
switch Simulator
    case 'ModelSim'
        vsim('tclstart',viterbi_tclcmds_modelsim('vsimmatlabsysobj'));
    case 'Incisive'
        nclaunch('tclstart',viterbi_tclcmds_incisive('hdlsimmatlabsysobj'));
end
Timeout=450;
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('Ready for cosimulation ...');

Запустите Cosimulation

Этот пример моделирует систему связи BPSK в MATLAB, включающем реализацию HDL Декодера Витерби через cosimulation Системный объект. Этот раздел кода вызывает цикл обработки, чтобы обработать данные, покадровые с 1 024 битами в каждом кадре данных.

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))

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

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

clear hDec;

% This concludes the "Verify Viterbi Decoder Using MATLAB System Object and
% HDL Simulator".

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