首页 > 解决方案 > verilog 结构赋值模式中的冒号 (:) 表达式是什么?

问题描述

例如,

typedef struct packed {
  logic foo_1;
  logic foo_2;
} my_type

my_type foo_out;

assign foo_out = ‘{
  foo_1 : sig_1,
  foo_2 : sig_2
};

看起来是这样的,就像

assign foo_out = {sig_1, sig_2};

我在 LRM 中找不到任何使用冒号 (:) 的结构分配模式。任何人请在描述这种表达的地方发表评论。

标签: structuresystem-verilog

解决方案


这是一个 SystemVerilog 表达式,它不是普通 Verilog 的一部分,因此如果您在 Verilog LRM 中搜索,您将找不到它。

从 SystemVerilog LRM:

有时将结构成员设置为一个值很有用,而不必跟踪有多少成员或名称是什么。这可以使用默认关键字来完成:

initial s1 = {default:2}; // sets x and y to 2

也可以使用 {member:value} 或 {data_type: default_value} 语法:

ab abkey[1:0] = {{a:1, b:1.0}, {int:2, shortreal:2.0}};

推荐阅读