Vivado综合设计助手 –  SystemVerilog数据类型支持-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Vivado综合设计助手 – SystemVerilog数据类型支持

描述

此答复记录描述了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

  • 简短,实时,真实的类型
  • const类型
  • int,longint类型
  • 铸件

data_types_example3.zip

  • 逻辑类型
  • localparam
  • 枚举类型
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 压缩
请登录后发表评论

    没有回复内容