2020-10-30

Unpacking a vector into an array of a certain bit width

Suppose I have a vector of bits. I'd like to convert it into an array of n bit values, where n is a variable (not a parameter). Can I achieve this using the streaming operators? I tried this (right now I'm just trying a value of 3, but eventually '3' should be variable):

module tb;
  bit [51:0] vector = 'b111_110_101_100_011_010_001_000;
  byte vector_byte[];
  
  initial begin
    $displayb(vector);
    vector_byte = {<<3{vector}};
    foreach(vector_byte[i])
      $display("%0d = %0b", i, vector_byte[i]);
  end
endmodule

What I was expecting was:

vector_byte = '{'b000, 'b001, 'b010 ... 'b111};

However, the output I got was:

# vsim -voptargs=+acc=npr
# run -all
# 00000000000000000000000000000000111110101100011010001000
# 0 = 101
# 1 = 111001
# 2 = 1110111
# 3 = 0
# 4 = 0
# 5 = 0
# 6 = 0
# exit

Am I just using the streaming operators wrong?



from Recent Questions - Stack Overflow https://ift.tt/31UHHTI
https://ift.tt/eA8V8J

No comments:

Post a Comment