基于不同的向量屏蔽向量中的一些位

时间:2017-07-30 01:21:18

标签: verilog system-verilog

我有一个向量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中尝试这样做。有什么想法吗?

1 个答案:

答案 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