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

Преобразование данных о HDL, чтобы отправить в MATLAB

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

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

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

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

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

Следующая таблица подводит итог, как программное обеспечение 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.

Если вы задаете логический вектор в 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'.

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

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

Примечание

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

oport.signal = dec2mvl(2)

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

oport.signal = dec2mvl(2, N)

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

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

Возвратить данные в порт IN типа...Затем...
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 or NATURAL

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

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

REAL

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

iport.dbl = ones(2,2); 

TIME

Объявите VHDL значение TIME как время в секундах, с помощью типа double, или когда целое число времени средства моделирования постепенно увеличивается, с помощью типа int64. Можно использовать эти два формата взаимозаменяемо и что вы задаете, не зависит от опции 'time' hdldaemon (см. 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 не поддержаны.