我有一个向量data[255:0]
。另一个向量len[3:0]
(len
根据定义只能取最大值8)。我需要这样做(伪代码):
bits = len*32;
data_mod[255:0] = {data[255:(255-(bits-1))], (256-bits)'0}
ex : if len = 6, then
data_mod[255:0] = {data[255:64], 64'b0}
基本上,只从原始向量中获取上部“len * 32”位,并将其余部分归零。
我很难在可综合的SystemVerilog中尝试这样做。有什么想法吗?
答案 0 :(得分:0)
以下是一个可能适用于您的面具的示例:
module bb;
reg [255:0] data;
reg [255:0] data_mod;
reg [255:0] mask;
reg [3:0] len;
initial begin
len = 2;
mask = {256{1'b1}} << (len * 32);
data_mod = data & mask;
$display("%0x", data_mod);
end
endmodule // bb
,结果是
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0000000000000000