如果您的HDL应用程序需要将HDL数据发送到MATLAB®功能,您可能首先需要将数据转换为MATLAB和HDL Verifier™软件支持的类型。金宝app
要为一个HDL模型编写MATLAB函数,您必须理解应用程序所需的类型转换。您可能还需要处理您正在使用的HDL和MATLAB使用的数组索引约定之间的差异(请参见下一节)。
传递给该函数的参数的数据类型决定了以下内容:
在操作数据之前所需的转换类型
将数据返回到HDL模拟器所需的转换类型
下表总结了HDL验证程序软件如何转换支持的VHDL金宝app®将数据类型转换为MATLAB类型,取决于类型是标量还是数组。
vhdl-to-matlab数据类型转换
VHDL类型...... | 标量转换为...... | 随着阵列转换为... |
---|---|---|
STD_LOGIC 那std_ulogic. ,少量 |
与所需逻辑状态匹配的字符文字匹配的字符。 | |
std_logic_vector. 那STD_ULOGIC_VECTOR 那bit_vector. 那签 ,无符号 |
字符的列向量(如所定义的)VHDL模拟器的VHDL转换)每种角色一位。 | |
阵列std_logic_vector. 那STD_ULOGIC_VECTOR 那bit_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_VECTOR 那bit_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); |
将标准逻辑或位向量转换为无符号整数或正十进制 | 使用 uval = mvl2dec(oport.val) 此示例假定标准逻辑或位矢量由字符文字组成 这 看 |
将标准逻辑或位向量转换为负小数 | 的以下应用程序 suval = mvl2dec(oport.val,true); 此示例假定标准逻辑或位矢量由字符文字组成 |
以下代码摘录说明数据类型转换到回调的数据类型:
InDelayLine(1) = InputScale * mvl2dec(iport.osc_in',true);
此示例测试VHDL类型的端口值STD_LOGIC
和std_logic_vector.
通过使用所有
函数如下:
所有(oport.val =='1'| oport.val =='0')
此示例返回真正的
如果所有元素为'1'
或'0'
.
如果您的模拟MATLAB功能需要将数据返回到HDL模拟器,您可能首先需要将数据转换为HDL验证程序软件支持的类型。金宝app下表列出了VHDL和Verilog所需的这种转换的情况。
笔记
当数据值返回到HDL模拟器时,Char数组大小必须与HDL类型匹配,包括领先的零,如果适用。例如:
Oport.Signal = Dec2MVL(2)
只会工作信号
是一种2位类型的HDL。如果高密度脂蛋白是其他类型,你必须指定第二个参数:
oport。信号= dec2mvl(2, N)
其中n是HDL数据类型中的位数。
VHDL.HDL模拟器的转换
将数据返回到类型的港口... | 然后…… |
---|---|
STD_LOGIC 那std_ulogic. , 或者少量 |
将数据声明为与所需逻辑状态的字符文字匹配的字符。为了 iport。s1 =“X”;% STD_LOGIC iport。位= ' 1 ';%一点 |
std_logic_vector. 那STD_ULOGIC_VECTOR 那bit_vector. 那签 , 或者无符号 |
将数据声明为列向量或行向量的字符(如上定义),每个字符一位。例如: Iport.s1v ='x10zz';%std_logic_vector iport.bitv ='10100';%bit_vector iport.uns = dec2mvl(10,8);%无符号,8位 |
的数组std_logic_vector. 那STD_ULOGIC_VECTOR 那bit_vector. 那签 , 或者无符号 |
将数据声明为类型字符数组,其中大小相当于VHDL端口大小。看Matlab和HDL之间的数组索引差异. |
整数 或自然 |
将数据声明为类型数组 IPort.Int = Int32(1:10)'; |
真正的 |
将数据声明为类型数组 iport。双= 1 (2,2); |
时间 |
声明一个硬件描述语言(VHDL) iport.t1 = int64(1:10)';%模拟器时间%递增IPORT.T2 = 1E-9;%1 nsec. |
枚举类型 | 将数据作为字符向量或字符串标量声明为标量标题或字符向量或字符串数组的单元数组,用于数组端口,每个元素等于定义的枚举类型的标签。这 IPort.Char = {''''',''B''};%字符%文字IPort.udef ='MyLabel';%用户定义的标签 |
标准逻辑或位表示的字符数组 | 使用 oport。slva = dec2mvl([23 99] 8)”; |
verilog.HDL模拟器的转换
将数据归还给输入 类型的港口...... |
然后…… |
---|---|
reg 那金属丝 |
将数据作为字符或字符的列向量声明,该字符与所需逻辑状态的字符文字匹配。例如: IPort.Bit ='1'; |
HDL模拟器的SystemVerilog转换
将数据归还给输入 类型的港口...... |
然后…… |
---|---|
reg 那金属丝 那逻辑 |
将数据作为字符或字符的列向量声明,该字符与所需逻辑状态的字符文字匹配。例如: IPort.Bit ='1'; |
整数 |
将数据声明为32元素列向量的字符(如上定义),每个字符一位。 |
笔记
多维数组reg
/金属丝
/逻辑
不受支持。金宝app