【问题标题】:Mask a field on a packed struct in SystemVerilog在 SystemVerilog 中屏蔽打包结构上的字段
【发布时间】:2021-09-08 13:25:41
【问题描述】:

我正在寻找在打包结构中屏蔽字段的最佳方法。

想象一下你有:

typedef struct packed {
  logic [5:0] add;
  logic [3:0] data;
  logic [1:0] control;
} mytype;

我想为一个新信号分配一个数据屏蔽为零的信号。在我的例子中,结构有很多字段,所以我不想尽可能地一一分配它们,如下所示:

my_type new_signal;

assign new_signal.add     = old_signal.add;
assign new_signal.data    = '0;
assign new_signal.control = old_signal.control;

我需要它来比较旧信号和不同信号,除了 3 个字段。

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    您可以在程序代码中执行此操作,方法是先分配整个信号,然后分配要屏蔽的各个字段。

    always_comb begin
        new_signal = old_signal;
        new_signal.data    = '0;
    end
    

    【讨论】:

      【解决方案2】:

      另一种方法是对结构使用“打包”向量。如果您知道结构中的偏移量,则可以构建掩码。在您的情况下,以下将起作用:

      new_signal = old_signal & 12'b111111_0000_11;
      ------------------------------^^^^^^_----_^^
                                    add....data.control
      

      【讨论】:

        猜你喜欢
        • 2018-05-26
        • 2022-01-22
        • 1970-01-01
        • 2014-11-07
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多