Vivado综合设计助手 - 帮助SystemVerilog支持 - 聚合数据类型

描述

本答复记录描述了Vivado Synthesis支持的SystemVerilog聚合数据类型,并提供了它们的编码示例。这些编码示例附在此答复记录中。 AR还包含与已知问题和良好编码实践相关的信息。
注意 :每个编码示例都可用于直接创建Vivado项目。请参阅每个源文件中的标题,以了解每个示例中涵盖的SystemVerilog结构。

SystemVerilog Vivado Synthesis支持的聚合数据类型。
有关聚合数据类型的编码示例,请参阅本AR末尾的表1-1。
1.结构。
Vivado Synthesis支持使用System Verilog中定义的struct数据类型。结构是一组数据,可以一次引用或通过访问结构的各个成员。这类似于记录的VHDL概念。这可以在Vivado Synthesis支持的typedef关键字的帮助下声明。
句法:
typedef struct {struct_member1; struct_member2; ... struct_memberx;} structure_name;
例:
typedef struct {
bit [7:0]操作码;
bit [23:0] addr;
指令; //命名结构类型
指令IR; //定义变量
....
IR.opcode = 1; //在IR中设置字段
联盟。
Vivado Synthesis支持使用System Verilog中定义的union数据类型。联合是包含多种数据类型的数据类型。一次只使用一种数据类型。
这在数据类型根据其使用方式发生变化的情况下非常有用。这可以在Vivado Synthesis支持的typedef关键字的帮助下声明。
句法:
typedef union(union_member1; union_member2; ... union_memberx;} union_name;
例:
typedef union {
int i;
shortreal f;
} num; //命名联合类型
数字; //定义变量
....
nf = 0.0; //以浮点格式设置n
3.阵列。
Vivado Synthesis支持SystemVerilog Packed和Unpacked Arrays。
3.1压缩阵列
打包数组是一种将矢量细分为子字段的机制,可以方便地将其作为数组元件进行访问。打包数组是指在对象名称之前声明的维度。打包的数组只能由单个位类型(位,逻辑,整数等)和递归的其他打包数组和打包结构组成。打包的阵列保证在内存中连续布局。
例:
逻辑[5:0] sig1; //压缩数组
具有预定宽度的数据类型不需要声明的打包尺寸。
例:
字节c2; //与bit [7:0] c2相同;
整数i1; //与逻辑签名相同[31:0] i1;
3.2未包装的阵列
解包数组可以是任何类型,与Packed Arrays不同。解包数组是指在对象名后声明的维。分配给解压缩的数组时,源和目标必须是具有相同数量的解压缩维度的数组,并且每个维度的长度必须相同。通过将源解包数组的每个元件分配给目标解包数组的对应元件来完成对解包数组的赋值。未打包的数组不会连续排列在内存中。
例:
logic sig2 [5:0]; //解包数组
聚合数据类型的编码示例
表1-1
编码示例名称构造使用
aggregate_data_types_example1.zip
  • 参数
  • 总是程序块
  • 块语句
  • 运营商:&&,一元
  • 解包数组
aggregate_data_types_example2.zip
  • 参数
  • 总是程序块
  • 块语句
  • 运营商:&&,一元
  • 打包数组
aggregate_data_types_example3.zip
  • 数据类型:逻辑
  • always_ff程序块
  • 结构
  • 运营商:+
data_types_example4.zip
  • 数据类型:逻辑
  • always_ff程序块
  • 联盟
  • 运营商:==

附件

相关附件

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 13:15:57 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它