exponenta event banner

Поддерживаемые типы данных

Преобразование данных HDL для отправки в MATLAB

Если приложению HDL необходимо отправить данные HDL в функцию MATLAB ®, может потребоваться сначала преобразовать данные в тип, поддерживаемый MATLAB и программным обеспечением HDL Verifier™.

Для программирования функции MATLAB для модели HDL необходимо понимать преобразования типов, требуемые приложением. Также может потребоваться обработка различий между соглашениями по индексированию массивов, используемыми используемым HDL, и MATLAB (см. следующий раздел).

Типы данных аргументов, передаваемых функции, определяют следующее:

  • Типы преобразований, необходимые для обработки данных

  • Типы преобразований, необходимые для возврата данных в имитатор ЛПВП

В следующей таблице показано, как программное обеспечение HDL Verifier преобразует поддерживаемые типы данных VHDL ® в типы MATLAB в зависимости от того, является ли тип скалярным или массивным.

Преобразования типов данных VHDL в MATLAB

Типы VHDL...При скалярном преобразовании в...При преобразовании массива в...
STD_LOGIC, STD_ULOGIC, и BITСимвол, соответствующий литералу символа для требуемого логического состояния.  
STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, BIT_VECTOR, SIGNED, и UNSIGNED  Вектор столбца символов (как определено в преобразованиях VHDL для имитатора HDL) с одним битом на символ.
Массивы STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, BIT_VECTOR, SIGNED, и UNSIGNED Массив символов (как определено выше) с размером, эквивалентным размеру порта VHDL.
INTEGER и NATURALНапечатать int32.Массивы типа int32 с размером, эквивалентным размеру порта VHDL.
REAL Напечатать double.Массивы типа double с размером, эквивалентным размеру порта VHDL.
TIMEНапечатать double для значений времени в секундах и введите int64 для значений, представляющих временные приращения симулятора (см. описание 'time' опция в hdldaemon).Массивы типа double или int64 с размером, эквивалентным размеру порта VHDL.
Перечислимые типы Вектор символов или строковый скаляр, содержащий представление MATLAB метки VHDL или литерала символов. Например, метка high преобразует в 'high' и литерал символа 'c' преобразует в '''c'''.Массив ячеек символьных векторов или строковый массив с каждым элементом, равным метке для определенного перечисляемого типа. Каждый элемент является представлением MATLAB метки VHDL или символьного литерала. Например, вектор (one, '2', three) преобразует в вектор столбца ['one'; '''2'''; 'three']. Определяемый пользователем перечисляемый тип, который содержит только символьные литералы, а затем преобразуется в вектор или массив символов, как указано для типов STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, BIT_VECTOR, SIGNED, и UNSIGNED.

В следующей таблице показано, как программное обеспечение HDL Verifier преобразует поддерживаемые типы данных Verilog ® в типы MATLAB. Программное обеспечение поддерживает только скалярные типы данных для Verilog.

Преобразования типов данных Verilog в MATLAB

Типы Verilog... Преобразует в...
wire, regСимвол или вектор столбца символов, соответствующий литералу символа для требуемых логических состояний (битов).

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

Преобразования типов данных SystemVerilog в MATLAB

Типы SystemVerilog... Преобразует в...
wire, reg, logicСимвол или вектор столбца символов, соответствующий литералу символа для требуемых логических состояний (битов).
integer 32-элементный вектор-столбец символов, соответствующий символьному литералу для требуемых логических состояний (битов).

Примечание

Многомерные массивы reg/wire/logic не поддерживаются.

Различия в индексировании битовых векторов между MATLAB и HDL

В HDL имеется возможность определения битового вектора с MSB-0 или LSB-0 нумерацией. В MATLAB битовые векторы всегда рассматриваются LSB-0 нумерации. Для предотвращения повреждения данных рекомендуется использовать индексирование LSB-0 для интерфейсов HDL.

Если логический вектор в ЛПВП определен как:

signal s1 : std_logic_vector(7 downto 0);

Он отображается в int8 в MATLAB с s1 [7] в качестве MSB. Также можно определить логический вектор как:

signal s1 : std_logic_vector(0 to 7);

Он отображается в int8 в MATLAB с s1 [0] в качестве MSB.

Различия в индексировании массивов между MATLAB и HDL

В многомерных массивах один и тот же базовый буфер памяти ОС сопоставляется с разными элементами в MATLAB и имитаторе HDL (это отображение отражает только разные способы, предлагаемые различными языками для именования элементов одного и того же массива). При использовании обоих matlabtb и matlabcp будьте внимательны к назначению и интерпретации значений в обоих приложениях.

В HDL многомерный массив объявляется как:

type matrix_2x3x4 is array (0 to 1, 4 downto 2) of std_logic_vector(8 downto 5);

имеет следующий формат памяти:

bit   01 02 03 04  05 06 07 08  09 10 11 12  13 14 15 16  17 18 19 20  21 22 23 24
 -
 dim1 0  0  0  0   0  0  0  0   0  0  0  0   1  1  1  1   1  1  1  1   1  1  1  1
 dim2 4  4  4  4   3  3  3  3   2  2  2  2   4  4  4  4   3  3  3  3   2  2  2  2
 dim3 8  7  6  5   8  7  6  5   8  7  6  5   8  7  6  5   8  7  6  5   8  7  6  5

Эта же компоновка соответствует следующей матрице MATLAB 4x3x2:

 bit  01 02 03 04  05 06 07 08  09 10 11 12  13 14 15 16  17 18 19 20  21 22 23 24
 -
 dim1 1  2  3  4   1  2  3  4   1  2  3  4   1  2  3  4   1  2  3  4   1  2  3  4 
 dim2 1  1  1  1   2  2  2  2   3  3  3  3   1  1  1  1   2  2  2  2   3  3  3  3 
 dim3 1  1  1  1   1  1  1  1   1  1  1  1   2  2  2  2   2  2  2  2   2  2  2  2

Следовательно, если H - массив HDL, а M - матрица MATLAB, то следующие индексированные значения одинаковы:

 b1  H(0,4,8) = M(1,1,1)
 b2  H(0,4,7) = M(2,1,1)
 b3  H(0,4,6) = M(3,1,1)
 b4  H(0,4,5) = M(4,1,1)
 b5  H(0,3,8) = M(1,2,1)
 b6  H(0,3,7) = M(2,2,1)
 ...
 b19 H(1,3,6) = M(3,2,2)
 b20 H(1,3,5) = M(4,2,2)
 b21 H(1,2,8) = M(1,3,2)
 b22 H(1,2,7) = M(2,3,2)
 b23 H(1,2,6) = M(3,3,2)
 b24 H(1,2,5) = M(4,3,2)

Индексирование можно расширить на N-размеры. В общем случае размеры, пронумерованные слева направо, меняются местами. Самый правый размер в HDL соответствует самому левому размеру в MATLAB.

Преобразование данных для манипуляции

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

Необходимые преобразования данных

Если вам нужна функция, чтобы...Тогда...
Вычислить числовые данные, полученные как тип, отличный от double

Используйте double функция преобразования данных в тип double перед выполнением вычисления. Например:

datas(inc+1) = double(idata);

Преобразовать стандартный логический или битовый вектор в целое или положительное десятичное число без знака

Используйте mvl2dec для преобразования данных в десятичное значение без знака. Например:

uval = mvl2dec(oport.val)

В этом примере предполагается, что стандартный логический или битовый вектор состоит из символьных литералов. '1' и '0' только. Только эти два значения можно преобразовать в целочисленный эквивалент.

mvl2dec функция преобразует двоичные данные, которые функция MATLAB получает от объекта osc_in порт для неподписанных десятичных значений, которые MATLAB может вычислить.

Посмотрите mvl2dec для получения дополнительной информации об этой функции.

Преобразование стандартной логики или битового вектора в отрицательное десятичное число

Используйте следующее приложение mvl2dec для преобразования данных в десятичное значение со знаком. Например:

suval = mvl2dec(oport.val, true);

В этом примере предполагается, что стандартный логический или битовый вектор состоит из символьных литералов. '1' и '0' только. Только эти два значения можно преобразовать в целочисленный эквивалент.

Примеры

Следующий фрагмент кода иллюстрирует преобразование типа данных, переданных в обратный вызов:

InDelayLine(1) = InputScale * mvl2dec(iport.osc_in',true);

В этом примере проверяются значения портов типа VHDL STD_LOGIC и STD_LOGIC_VECTOR с помощью all выполнять следующие функции:

all(oport.val == '1' | oport.val 
== '0')

Этот пример возвращает True если все элементы '1' или '0'.

Преобразование данных для возврата в имитатор ЛПВП

Если функция моделирования MATLAB должна вернуть данные в имитатор HDL, может потребоваться сначала преобразовать данные в тип, поддерживаемый программным обеспечением HDL Verifier. В следующих таблицах перечислены обстоятельства, при которых такие преобразования требуются для VHDL и Verilog.

Примечание

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

oport.signal = dec2mvl(2)

будет работать только в том случае, если signal является 2-разрядным типом в HDL. Если тип HDL является чем-либо другим, необходимо указать второй аргумент:

oport.signal = dec2mvl(2, N)

где N - количество битов в типе данных HDL.

Преобразования VHDL для имитатора HDL

Возврат данных к входящему порту типа...Тогда...
STD_LOGIC, STD_ULOGIC, или BIT

Объявите данные как символ, соответствующий литералу символа для требуемого логического состояния. Для STD_LOGIC и STD_ULOGIC, символ может быть 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', или '-'. Для BIT, символ может быть '0' или '1'. Например:

iport.s1 = 'X'; %STD_LOGIC
iport.bit = '1'; %BIT

STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, BIT_VECTOR, SIGNED, или UNSIGNED

Объявите данные в виде вектора столбца или вектора строки символов (как определено выше) с одним битом на символ. Например:

iport.s1v = 'X10ZZ'; %STD_LOGIC_VECTOR
iport.bitv = '10100'; %BIT_VECTOR
iport.uns = dec2mvl(10,8); %UNSIGNED, 8 bits

Массив STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, BIT_VECTOR, SIGNED, или UNSIGNEDОбъявите данные как массив типа с размером, эквивалентным размеру порта VHDL. См. раздел Различия в индексировании массивов между MATLAB и HDL.
INTEGER или NATURAL

Объявить данные как массив типа int32 с размером, эквивалентным размеру массива VHDL. Также можно преобразовать данные в массив типа int32 с MATLAB int32 функция перед возвратом. Обязательно ограничьте данные значениями в диапазоне типа VHDL. Если вы хотите, проверьте right и left поля portinfo структура. Например:

iport.int = int32(1:10)';

REAL

Объявить данные как массив типа double с размером, эквивалентным размеру порта VHDL. Например:

iport.dbl = ones(2,2); 

TIME

Объявление VHDL TIME значение как время в секундах, с использованием типа doubleили в виде целого числа временных приращений симулятора, используя тип int64. Вы можете использовать два формата взаимозаменяемо, и то, что вы указываете, не зависит от hdldaemon 'time' вариант (см. hdldaemon), которая применяется только к портам IN. Объявление массива TIME с использованием массива MATLAB одинакового размера и формы. Все элементы данного порта ограничены временем в секундах (тип double) или приращения тренажера (тип int64), но в противном случае можно смешать форматы. Например:

iport.t1 = int64(1:10)'; %Simulator time
                         %increments
iport.t2 = 1e-9; %1 nsec

Перечислимые типы

Объявите данные в виде вектора символов или скаляра строки для скалярных портов или массива ячеек из векторов символов или массива строк для портов массива с каждым элементом, равным метке для определенного перечисляемого типа. 'label' области portinfo структура перечисляет все допустимые метки (см. Получение доступа и применение информации о портах). За исключением символьных литералов, метки не чувствительны к регистру. В общем случае следует указать литералы символов полностью, включая одинарные кавычки, как в первом примере, показанном здесь..

iport.char = {'''A''', '''B'''}; %Character
                                 %literal
iport.udef = 'mylabel'; %User-defined label

Символьный массив для стандартного логического или битового представления

Используйте dec2mvl функция для преобразования целого числа. Например:

oport.slva =dec2mvl([23 99],8)';
В этом примере два целых числа преобразуются в 2-элементный массив стандартных логических векторов, состоящий из 8 битов.

Преобразования Verilog для имитатора HDL

Возврат данных в input Порт типа...Тогда...
reg, wire

Объявите данные как символ или вектор столбца символов, соответствующий литералу символа для требуемого логического состояния. Например:

iport.bit = '1'; 

Преобразования SystemVerilog для имитатора HDL

Возврат данных в input Порт типа...Тогда...
reg, wire, logic

Объявите данные как символ или вектор столбца символов, соответствующий литералу символа для требуемого логического состояния. Например:

iport.bit = '1'; 

integerОбъявите данные как 32-элементный вектор столбцов символов (как определено выше) с одним битом на символ.

Примечание

Многомерные массивы reg/wire/logic не поддерживаются.