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

Преобразование данных HDL в MATLAB

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

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

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

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

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

В следующей таблице приведено описание преобразования поддерживаемого VHDL в программное обеспечение HDL Verifier.® типы данных для типов 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-to-MATLAB

Типы верилогов... Преобразует в...
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 functions, будьте осторожны, чтобы назначать и интерпретировать значения последовательно в обоих приложениях.

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

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

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

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

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

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

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

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

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

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

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

iport.bit = '1'; 

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

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

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

iport.bit = '1'; 

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

Примечание

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