主要内容

金宝app支持的数据类型

将HDL数据转换为发送给马铃薯

如果您的HDL应用程序需要将HDL数据发送到MATLAB®功能,您可能首先需要将数据转换为MATLAB和HDL Verifier™软件支持的类型。金宝app

要为一个HDL模型编写MATLAB函数,您必须理解应用程序所需的类型转换。您可能还需要处理您正在使用的HDL和MATLAB使用的数组索引约定之间的差异(请参见下一节)。

传递给该函数的参数的数据类型决定了以下内容:

  • 在操作数据之前所需的转换类型

  • 将数据返回到HDL模拟器所需的转换类型

下表总结了HDL验证程序软件如何转换支持的VHDL金宝app®将数据类型转换为MATLAB类型,取决于类型是标量还是数组。

vhdl-to-matlab数据类型转换

VHDL类型...... 标量转换为...... 随着阵列转换为...
STD_LOGICstd_ulogic.,少量 与所需逻辑状态匹配的字符文字匹配的字符。
std_logic_vector.STD_ULOGIC_VECTORbit_vector.,无符号 字符的列向量(如所定义的)VHDL模拟器的VHDL转换)每种角色一位。
阵列std_logic_vector.STD_ULOGIC_VECTORbit_vector.,无符号 具有相当于VHDL端口大小的大小的字符数组(如上定义)。
整数自然 类型INT32. 类型的数组INT32.尺寸相当于VHDL端口大小。
真正的 类型双倍的 类型的数组双倍的尺寸相当于VHDL端口大小。
时间 类型双倍的以秒为单位的时间值和类型INT64.有关表示模拟器时间增量的值(请参见'时间'选项hdldaemon.)。 类型的数组双倍的INT64.尺寸相当于VHDL端口大小。
枚举类型 包含VHDL标签或字符字面量的MATLAB表示的字符向量或字符串标量。例如,标签转换为'高的'和角色文字'C'转换为'''C''' 字符向量或字符串阵列的单元格数组,每个元素等于定义的枚举类型的标签。每个元素都是VHDL标签或角色文字的MATLAB表示。例如,向量(1 ' 2 ' 3)转换为列向量['一';''2'';'三'].用户定义的枚举类型,它只包含字符字面量,然后按照指定的类型转换为向量或字符数组std_logic_vector.STD_ULOGIC_VECTORbit_vector.,无符号

下表总结了HDL验证软件如何转换所支持的Verilog金宝app®数据类型到MATLAB类型。该软件仅支持Verilog金宝app的标量数据类型。

verilog.-to-matlab数据类型转换

Verilog类型…… 转换为...
金属丝reg 字符或列向量的字符与所需逻辑状态(位)的字符文字匹配。

下表总结了HDL验证程序软件如何将支持的SystemVerilog数据类型转换为Matlab类型。金宝app该软件仅支持SystemV金宝apperilog的标量数据类型。

systemverilog-to-matlab数据类型转换

SystemVerilog类型...... 转换为...
金属丝reg逻辑 字符或列向量的字符与所需逻辑状态(位)的字符文字匹配。
整数 一个32个元素的字符列向量,用于匹配所需逻辑状态(位)的字符字面量。

笔记

多维数组reg/金属丝/逻辑不受支持。金宝app

位矢量索引差异马铃薯和高密度脂蛋白

在HDL中,您可以灵活地定义具有MSB-0或LSB-0编号的位矢量。在MATLAB中,位向量总是被认为是LSB-0编号。为了防止数据损坏,建议您为HDL接口使用LSB-0索引。

如果您在HDL中定义逻辑向量,则为:

信号S1:std_logic_vector(7 downto 0);

它在MATLAB中映射到INT8,S1 [7]作为MSB。或者,如果您定义逻辑向量,则为:

信号S1:std_logic_vector(0到7);

它映射到MATLAB中的INT8,S1 [0]作为MSB。

数组索引之间的差异马铃薯和高密度脂蛋白

在多维数组中,相同的底层操作系统内存缓冲区映射到MATLAB和HDL模拟器中的不同元素(这种映射仅反映了不同语言为命名相同数组的元素提供的不同方式)。当你同时使用matlabtb.matlabcp.函数,小心在两个应用程序中一致地分配和解释值。

在HDL中,声明的多维数组:

型矩阵_2x3x4是std_logic_vector的阵列(0到1,4下降到2)(8 downto 5);

有一个如下内存布局:

Bit 01 02 03 04 05 06 07 08 09 10 11 12 13 13 14 15 16 18 19 20 21 22 21 22 23 22-  DIM1 0 0 0 0 0 0 0 0 0 0 0 0 0 11 1 1 11 11 11 11 11 11 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 22 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 13 14 15 16 18 19 20 21 22 21 22 23 22——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)b 20 h(1,3,5)= m(4,2,2)b21h(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模拟器接收到的数据,您可能需要对函数进行编码,以便在操作它之前将数据转换为不同的类型。下表列出了需要这种转换的情况。

需要数据转换

如果您需要函数... 然后……
以外类型接收的数值数据双倍的

使用双倍的将数据转换为类型的功能双倍的在执行计算之前。例如:

Data(Inc + 1)= Double(IDATA);

将标准逻辑或位向量转换为无符号整数或正十进制

使用mvl2dec将数据转换为无符号十进制值的功能。例如:

uval = mvl2dec(oport.val)

此示例假定标准逻辑或位矢量由字符文字组成'1''0'只要。这些是可以转换为整数等效的两个值。

mvl2dec函数将Matlab函数从实体接收的二进制数据转换osc_inMATLAB可以计算的无符号十进制值的端口。

mvl2dec有关此功能的更多信息。

将标准逻辑或位向量转换为负小数

的以下应用程序mvl2dec函数将数据转换为有符号的十进制值。例如:

suval = mvl2dec(oport.val,true);

此示例假定标准逻辑或位矢量由字符文字组成'1''0'只要。这些是可以转换为整数等效的两个值。

例子

以下代码摘录说明数据类型转换到回调的数据类型:

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

此示例测试VHDL类型的端口值STD_LOGICstd_logic_vector.通过使用所有函数如下:

所有(oport.val =='1'| oport.val =='0')

此示例返回真正的如果所有元素为'1''0'

转换数据以返回HDL模拟器

如果您的模拟MATLAB功能需要将数据返回到HDL模拟器,您可能首先需要将数据转换为HDL验证程序软件支持的类型。金宝app下表列出了VHDL和Verilog所需的这种转换的情况。

笔记

当数据值返回到HDL模拟器时,Char数组大小必须与HDL类型匹配,包括领先的零,如果适用。例如:

Oport.Signal = Dec2MVL(2)

只会工作信号是一种2位类型的HDL。如果高密度脂蛋白是其他类型,你必须指定第二个参数:

oport。信号= dec2mvl(2, N)

其中n是HDL数据类型中的位数。

VHDL.HDL模拟器的转换

将数据返回到类型的港口... 然后……
STD_LOGICstd_ulogic., 或者少量

将数据声明为与所需逻辑状态的字符文字匹配的字符。为了STD_LOGICstd_ulogic.,角色可以是'U''X''0''1''Z''W'“L”'H', 或者' - '.为了少量,角色可以是'0''1'.例如:

iport。s1 =“X”;% STD_LOGIC iport。位= ' 1 ';%一点

std_logic_vector.STD_ULOGIC_VECTORbit_vector., 或者无符号

将数据声明为列向量或行向量的字符(如上定义),每个字符一位。例如:

Iport.s1v ='x10zz';%std_logic_vector iport.bitv ='10100';%bit_vector iport.uns = dec2mvl(10,8);%无符号,8位

的数组std_logic_vector.STD_ULOGIC_VECTORbit_vector., 或者无符号 将数据声明为类型字符数组,其中大小相当于VHDL端口大小。看Matlab和HDL之间的数组索引差异
整数自然

将数据声明为类型数组INT32.大小相当于VHDL数组大小。或者,将数据转换为类型数组INT32.用MATLABINT32.返回之前的功能。请务必将数据限制为带有VHDL类型范围的值。如果你愿意,检查正确的剩下的字段portinfo结构体。例如:

IPort.Int = Int32(1:10)';

真正的

将数据声明为类型数组双倍的尺寸相当于VHDL端口大小。例如:

iport。双= 1 (2,2);

时间

声明一个硬件描述语言(VHDL)时间使用类型的类型以秒为单位值双倍的,或用作模拟器时间增量的整数,使用类型INT64..您可以互换使用两种格式以及您指定的内容不依赖于hdldaemon.'时间'选项(参见hdldaemon.),仅适用于港口。宣布一系列时间使用MATLAB阵列相同的大小和形状的值。给定端口的所有元素都仅限秒为单位(类型双倍的)或模拟器增量(类型INT64.),但否则您可以混合格式。例如:

iport.t1 = int64(1:10)';%模拟器时间%递增IPORT.T2 = 1E-9;%1 nsec.

枚举类型

将数据作为字符向量或字符串标量声明为标量标题或字符向量或字符串数​​组的单元数组,用于数组端口,每个元素等于定义的枚举类型的标签。这'标签'场面的领域portinfo结构列出所有有效标签(见获得访问和应用端口信息)。除字符文字外,标签不区分大小写。通常,您应该完全指定字符文字,包括单个引号,如这里所示的第一个示例中。。

IPort.Char = {''''',''B''};%字符%文字IPort.udef ='MyLabel';%用户定义的标签

标准逻辑或位表示的字符数组

使用DEC2MVL.函数要转换整数。例如:

oport。slva = dec2mvl([23 99] 8)”;
此示例将两个整数转换为由8位组成的标准逻辑向量的2元元阵列。

verilog.HDL模拟器的转换

将数据归还给输入类型的港口...... 然后……
reg金属丝

将数据作为字符或字符的列向量声明,该字符与所需逻辑状态的字符文字匹配。例如:

IPort.Bit ='1';

HDL模拟器的SystemVerilog转换

将数据归还给输入类型的港口...... 然后……
reg金属丝逻辑

将数据作为字符或字符的列向量声明,该字符与所需逻辑状态的字符文字匹配。例如:

IPort.Bit ='1';

整数 将数据声明为32元素列向量的字符(如上定义),每个字符一位。

笔记

多维数组reg/金属丝/逻辑不受支持。金宝app