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

Преобразование данных о 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'ZWLH, или '-'. Для 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. Можно использовать эти два формата взаимозаменяемо и что вы задаете, не зависит от 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 не поддержаны.