#verilog #system-verilog
Вопрос:
Я ищу лучший способ замаскировать поле внутри упакованной структуры.
Представьте, что у вас есть:
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 полей.
Ответ №1:
Вы можете сделать это в процедурном коде, сначала назначив весь сигнал, а затем назначив отдельные поля, которые вы хотите замаскировать.
always_comb begin
new_signal = old_signal;
new_signal.data = '0;
end
Ответ №2:
Другой способ-использовать «упакованный» вектор для структуры. Если вы знаете свои смещения в структуре, вы можете создать маску. В вашем случае будет работать следующее:
new_signal = old_signal amp; 12'b111111_0000_11;
------------------------------^^^^^^_----_^^
add....data.control