2017-07-30 84 views
0

我有一個矢量數據[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」從原始向量位和零出其餘部分。

我被困在可綜合系統verilog中這樣做?有任何想法嗎?

+0

首先你範圍應爲[511:0],因爲len爲4位寬。對於其餘部分,右移512-len * 32來獲取高位。您可以向左移動相同的數量以清除較低的位。或者你可以玩面具。 – Serge

+0

256位就足夠了,因爲在設計中Len的最大值是8.我確實想到了右移然後左移,但我認爲必須有更優雅的方式 –

回答

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 
+0

這是有道理的。謝謝! –