【问题标题】:What is the colon (:) expression in verilog structure assignment pattern?verilog 结构赋值模式中的冒号 (:) 表达式是什么?
【发布时间】:2020-02-19 05:49:20
【问题描述】:

例如,

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 中找不到任何使用冒号 (:) 的结构分配模式。 任何人请在描述这种表达的地方发表评论。

【问题讨论】:

  • 这是 system verilog 中引入的语法。它在常规verilog中不存在。因此,请查看正确的 lrm。

标签: structure system-verilog


【解决方案1】:

这是一个 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}};

【讨论】:

    【解决方案2】:

    你写的最后一条语句不是赋值模式;这是一个串联。如果sig_1sig_2 不是单个位变量,则有问题。 {} 前面的 ' 很关键。

    第 10.9.2 节 IEEE 1800-2017 LRM 的结构分配模式解释了

    assign foo_out = '{sig_1, sig_2};
    

    是位置结构元素分配模式,其中第一个参数分配给第一个元素,第二个参数分配给第二个元素,依此类推。每个参数都被截断或填充太匹配每个元素。

    : 的另一种形式通过名称而不是位置匹配。

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

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 2016-11-04
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      相关资源
      最近更新 更多