在SystemVerilog中屏蔽一个封装结构中的字段



我正在寻找最好的方法来掩盖一个字段内的包装结构。

假设你有:

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个字段。

您可以在过程代码中这样做:首先分配整个信号,然后分配您想要屏蔽的单个字段。

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

另一种方法是为结构体使用'打包' vector。如果你知道结构体中的偏移量,你就可以构建一个遮罩。在你的例子中,下面的代码可以工作:

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

最新更新