描述
此答复记录描述了Vivado Synthesis支持的各种SystemVerilog数据类型,并提供了它们的编码示例。这些编码示例附在此答复记录中。答案记录还包含与已知问题和良好编码实践相关的信息。
注意:每个编码示例都可用于直接创建Vivado项目。请参阅每个源文件中的标题,以了解每个示例中涵盖的SystemVerilog结构。
解
Vivado Synthesis支持的SystemVerilog数据类型。
以下是Vivado Synthesis支持的SystemVerilog数据类型。有关数据类型的编码示例,请参阅本答复记录末尾的表1-1。
1.整数数据类型
Vivado Synthesis支持以下Integer SystemVerilog数据类型。
- shortint:2态16位有符号整数
- int:2状态32位有符号整数
- longint:2态64位有符号整数
- byte:2状态8位有符号整数
- bit:2状态,用户定义的矢量大小
- 逻辑:4状态用户定义的矢量大小
- reg:4状态用户定义的矢量大小
- 整数:4态32位有符号整数
- time:4态64位无符号整数
逻辑类型与Verilog中的“reg”类型相同或相同,但不仅仅是“reg”。逻辑数据类型既可以由分配块驱动,也可以由端口输出驱动,并且存在于程序块内。因此逻辑可以用于Verilog中常用的reg和wire。
逻辑a,a1,a2;
分配a = b ^ c;
总是@(c或d)a1 = c + d;
mymodule模块(.out(a2),. in(xyz));
2.真实数字
Vivado Synthesis支持以下实际类型。
- 真实的:像C中的双倍
- shortreal:喜欢在C中漂浮
- 实时:与真实相同
但是,Vivado Synthesis仅支持常量实型数据。例如,以下代码导致错误,“[Synth 8-502]不支持非常量实值表达式”
输入实数;
输入int;
输出int;
always_comb
y = a + int’(r);
3.无效数据类型
Void类型表示没有存储空间。它可用于定义不返回值的函数。
4.用户定义的类型
Vivado Synthesis支持用户定义的类型,这些类型使用typedef关键字定义。
typedef data_type type_identifier {size};
要么
typedef [enum,struct,union] type_identifier;
5.枚举类型
Vivado Synthesis支持枚举类型。枚举数据类型允许将有意义的名称分配给数字量。实际值默认为从0开始然后增加的整数。您可以选择自己的枚举值。枚举类型是强类型的。枚举类型只能分配定义的常量名称或其他相同的枚举类型。
typedef enum {circle,ellipse,freeform} ClosedCurve;
ClosedCurve a,b,c,d;
参数int e = 2;
分配a = 2; //非法,必须指定标签名称
赋值b =椭圆; //法律
分配c = e; //非法,必须指定相同的枚举类型
assign d = ClosedCurve’(2); // legal,SystemVerilog要求在枚举中存储整数值时显式转换值。
6.常数
SystemVerilog和Vivado Synthesis支持以下精化时间常量:
- 参数:与原始Verilog标准相同,可以相同的方式使用。
- localparam:与参数类似,但不能被高级模块或defparam覆盖。
- const:是全局常量,在详细结束时解析。
const位TRUE = 1 - SystemVerilog有另一个名为“specparam”的常量类型,用于指定指定块中的延迟和定时值。 Vivado Synthesis不支持此值。
7.键入操作员
SystemVerilog允许参数化数据类型。这是根据模块中的参数定义数据类型,以便通过在实例化模块时更改参数值,可以将不同的数据类型用于模块。例如:
module my_mod#(参数类型my_param = int)
(//输入和输出);
my_param my_sig; //这声明了一个名为my_sig的信号,类型为int
……
endmoddule
这在上面的级别中很有用,my_mod可以实例化为:
my_mod#(。my_param(shortint))u0(<port names>);
8.铸造
在SystemVerilog中,将一种数据类型的值分配给不同的数据类型是非法的。转换用于将一种类型的数据类型转换为另一种类型的数据类型。
- <type>’(<expression>):将表达式转换为不同的数据类型
- <size>’(<expression>):将表达式强制转换为矢量大小
- <sign>’(<expression>):将表达式转换为有符号或无符号
每个示例中演示的编码示例和数据类型
表1-1
编码示例名称 | 数据类型 |
---|---|
data_types_example1.zip |
|
data_types_example2.zip |
|
data_types_example3.zip |
|
data_types_example4.zip |
|
附件
相关附件
名称 | 文件大小 | 文件类型 |
---|---|---|
data_types_example2.zip | 1 KB | 压缩 |
data_types_example3.zip | 1 KB | 压缩 |
data_types_example4.zip | 1 KB | 压缩 |
data_types_example1.zip | 2 KB | 压缩 |
没有回复内容