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 создает 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 – Все выходные параметры имеют значение со знаком.

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

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

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

Пример: 10 — Все выходные параметры имеют дробную длину 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

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

Описание

пример

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